From 66462a1b7d91327f4dd3e0ac9ba0da62ccb3103c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Sep 2023 17:53:23 +0000 Subject: [PATCH] deploy: f0d5e17be72cb5853da24c530d98a5e7bc0072e8 --- .nojekyll | 0 404.html | 25 + assets/css/styles.8480cb83.css | 1 + ...ht]-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2 | Bin 0 -> 125596 bytes ...ht]-9e9649b60ff61727d1aa4e9a1a10a93c.woff2 | Bin 0 -> 114020 bytes ..._dark-f7a3a78eaf9de049469b4c64e0712867.png | Bin 0 -> 26144 bytes ...light-6e21a942bccd92bcce6840da7c3cb056.png | Bin 0 -> 24964 bytes ..._dark-c2da6c052b067785e877b4654a13f328.png | Bin 0 -> 27139 bytes ...light-799673ba333298d16327abe67c90507e.png | Bin 0 -> 25963 bytes ..._dark-34f32262c6e4ffc14983b3ebf9a2f5a9.png | Bin 0 -> 16932 bytes ...light-61d6723c3c587d565b6280b8b8eca211.png | Bin 0 -> 15674 bytes ..._dark-127aa5b00988d4569669a92f5d841dbf.png | Bin 0 -> 18530 bytes ...light-93df97e1f9f1883467248532809374d0.png | Bin 0 -> 17546 bytes ..._dark-e8c35bc37b250271cf480f71904c15a7.png | Bin 0 -> 11797 bytes ...light-5e6a1d53e559a30e5fb86ee019229bbd.png | Bin 0 -> 10884 bytes ..._dark-a2b8248c182059b67c703f75f58f3784.png | Bin 0 -> 17194 bytes ...light-7be3bbcb08f8b7182a1c719693a47615.png | Bin 0 -> 16030 bytes ..._dark-eddf4c315becc51f89b0967320f132d8.png | Bin 0 -> 19412 bytes ...light-d72dfa633794ec97eddce8e3a4b02660.png | Bin 0 -> 17974 bytes ..._dark-e24da2d7a3fb2ee63ac8e1ea9c2d45a8.png | Bin 0 -> 19823 bytes ...light-efb3568bf4aadb19a9dcc57e748f89d8.png | Bin 0 -> 18300 bytes ..._dark-160fd071a93e279a5339c7976745f8b1.png | Bin 0 -> 28436 bytes ...light-b090675f7b30b574af44d667b083e9b7.png | Bin 0 -> 26112 bytes ..._dark-35ede8f297484f4305ea7fd23cbddc49.png | Bin 0 -> 31255 bytes ...light-018e13c41ce1fc6257c4c65748aaae27.png | Bin 0 -> 28524 bytes ..._dark-b0f871ab182d06edb5c29bb490ad70bc.png | Bin 0 -> 34025 bytes ...light-81ac4c8a3988bd43c66f563cd4799d61.png | Bin 0 -> 31346 bytes ...endar-f891b624f3e0efb34bba582100a7d8df.png | Bin 0 -> 797509 bytes ..._dark-fcb91acb746c787329bf9bd3cb54c5b7.png | Bin 0 -> 21738 bytes ...light-dda6c5aa625d6e6c14c01589117281c2.png | Bin 0 -> 20499 bytes ..._dark-bbd8d4c1796b145025fed5b6dff03b84.png | Bin 0 -> 27612 bytes ...light-bc4770146072f748be4a5aa11abf3a0c.png | Bin 0 -> 25572 bytes ..._dark-9b8b3be328ffad83233de4536c120016.png | Bin 0 -> 33063 bytes ...light-e787e568e9a1528dcac5bf55ef29fdaa.png | Bin 0 -> 30168 bytes .../maze-a374d908bc9445061e15faeddc71641e.png | Bin 0 -> 25402 bytes ..._dark-c025d61dee7913262c86277087751328.png | Bin 0 -> 45636 bytes ..._dark-75a70ddff74e5e1aff7e9986221b5687.png | Bin 0 -> 57425 bytes ...light-36fa69317ced094d7bb7b0fdf32cb3fe.png | Bin 0 -> 53848 bytes ...light-f53bee3b32ddb2e7a4249828bc03b1a4.png | Bin 0 -> 42611 bytes ..._dark-e8c35bc37b250271cf480f71904c15a7.png | Bin 0 -> 11797 bytes ...light-5e6a1d53e559a30e5fb86ee019229bbd.png | Bin 0 -> 10884 bytes ..._dark-4e8b2ca938738395e438b7fc2fc5dfe4.png | Bin 0 -> 16982 bytes ...light-51521ba414ff3a3530ed0109cfab799d.png | Bin 0 -> 15545 bytes ..._dark-3cc1c8d4b39707d2a51b51f4f1b29dc8.png | Bin 0 -> 19127 bytes ...light-631a0b3947be21a12b3a489f0cd0c3c4.png | Bin 0 -> 17489 bytes ..._dark-9028cc10e78c05cb669d5d438dcbf93f.png | Bin 0 -> 19533 bytes ...light-6b8f80047906eb1f58472d231eb9b12a.png | Bin 0 -> 17837 bytes ..._dark-160fd071a93e279a5339c7976745f8b1.png | Bin 0 -> 28436 bytes ...light-b090675f7b30b574af44d667b083e9b7.png | Bin 0 -> 26112 bytes ..._dark-35ede8f297484f4305ea7fd23cbddc49.png | Bin 0 -> 31255 bytes ...light-018e13c41ce1fc6257c4c65748aaae27.png | Bin 0 -> 28524 bytes ..._dark-b0f871ab182d06edb5c29bb490ad70bc.png | Bin 0 -> 34025 bytes ...light-81ac4c8a3988bd43c66f563cd4799d61.png | Bin 0 -> 31346 bytes ...tairs-5ee5d03905645aeb13eeaa7774451a64.png | Bin 0 -> 43984 bytes ...cycle-327ad9ee0ed8318ed11e19a28e02b2cc.png | Bin 0 -> 240673 bytes .../tree-c9e37f87f9095c00fad33ea034485ce6.png | Bin 0 -> 58553 bytes assets/js/01a85c17.02ca9acb.js | 1 + assets/js/0220f5fc.5b1b8f6e.js | 1 + assets/js/0608d96f.ee46e047.js | 1 + assets/js/09bc59e7.64a221ae.js | 1 + assets/js/0bfe45d5.58ce388b.js | 1 + assets/js/0fcbc6ca.e8ea4c91.js | 1 + assets/js/1426.d90fc9fa.js | 1 + assets/js/146d9b84.996dfbcb.js | 1 + assets/js/14eb3368.9c4e865a.js | 1 + assets/js/17896441.a160e7e2.js | 1 + assets/js/18f481e4.35406774.js | 1 + assets/js/19d7c045.18dfd0ba.js | 1 + assets/js/1a4e3797.48f1640b.js | 2 + assets/js/1a4e3797.48f1640b.js.LICENSE.txt | 1 + assets/js/1be78505.65bfdbb1.js | 1 + assets/js/1bebd4ed.a838562f.js | 1 + assets/js/1e2009d3.7e268ae7.js | 1 + assets/js/1e298f0c.caf61e40.js | 1 + assets/js/22a175ec.a5706cf0.js | 1 + assets/js/2523321d.50613303.js | 1 + assets/js/27470891.d509d6e4.js | 1 + assets/js/280c26e1.27c7a6b1.js | 1 + assets/js/29694455.a2e2c1d7.js | 1 + assets/js/2a09abcd.15946a52.js | 1 + assets/js/3011a4c0.573f9325.js | 1 + assets/js/316.d513d091.js | 1354 + assets/js/337bc122.a2fd825d.js | 1 + assets/js/3593220c.04c28473.js | 1 + assets/js/3720c009.996e811f.js | 1 + assets/js/377f3aa1.4c98e03e.js | 1 + assets/js/37cf4872.0b06d100.js | 1 + assets/js/3aef4518.ae37468c.js | 1 + assets/js/3da4b779.a33bbff3.js | 1 + assets/js/3de247b5.66851c3c.js | 1 + assets/js/4200b1a9.e4798bae.js | 1 + assets/js/4621632b.f101cb78.js | 1 + assets/js/4688cd57.4f084bfb.js | 1 + assets/js/470a9204.f961c4a3.js | 1 + assets/js/487.7b135b0c.js | 7370 +++ assets/js/4c4e9f30.f247e2b4.js | 1 + assets/js/4e286f4e.b0df1295.js | 1 + assets/js/4edd2021.47ff14e6.js | 1 + assets/js/4ee12fa2.74d68d7b.js | 1 + assets/js/51624505.ab30cae6.js | 1 + assets/js/52bff962.6e8cadd8.js | 1 + assets/js/52f2a5bf.f6c9442b.js | 1 + assets/js/58dd4fbd.f45f89fa.js | 1 + assets/js/5af27364.400470ed.js | 1 + assets/js/6048.83823b1f.js | 1 + assets/js/62d847b3.06e10519.js | 1 + assets/js/6316.0ca4149a.js | 1 + assets/js/66d5ef6c.fc107ca5.js | 1 + assets/js/6875c492.2d487359.js | 1 + assets/js/6945.04a6ca6a.js | 1 + assets/js/713b7838.e5a05e06.js | 1 + assets/js/724.d7e60c08.js | 41606 ++++++++++++++++ assets/js/73d5f13d.2c8e245a.js | 1 + assets/js/74c2e0e9.fc48acce.js | 1 + assets/js/7515.45da5915.js | 1 + assets/js/75316eff.a7b24a88.js | 1 + assets/js/75cccf44.5b6f1b34.js | 1 + assets/js/765ea78b.eff9c6dc.js | 1 + assets/js/7724.0fff5da7.js | 2 + assets/js/7724.0fff5da7.js.LICENSE.txt | 9 + assets/js/788cc978.4f78c34d.js | 1 + assets/js/7cf94373.f790d5a8.js | 1 + assets/js/7d580cdb.71718a61.js | 1 + assets/js/82b3b723.fdccb1de.js | 1 + assets/js/834ed470.690ec9f0.js | 1 + assets/js/83bf91d3.21975b05.js | 1 + assets/js/8418981c.3eb99a51.js | 1 + assets/js/86cd1460.733128af.js | 1 + assets/js/8894.de4803df.js | 1 + assets/js/8954.296edd99.js | 2 + assets/js/8954.296edd99.js.LICENSE.txt | 9 + assets/js/8b1802c5.6f267f4c.js | 1 + assets/js/8c0e532b.9cbc1be0.js | 1 + assets/js/8e1fadd0.b5230023.js | 1 + assets/js/90425ffc.955d8c56.js | 1 + assets/js/9287eafd.8885dd15.js | 1 + assets/js/94036ea2.8be2e014.js | 1 + assets/js/9487.b3a824a3.js | 1 + assets/js/95b96bb9.aefbf3b7.js | 1 + assets/js/95be84b6.0463fc28.js | 1 + assets/js/95f41f0b.79e14732.js | 1 + assets/js/9e4087bc.dadc79bc.js | 1 + assets/js/9eb50c57.bc586b34.js | 1 + assets/js/a082abd3.1797976b.js | 1 + assets/js/a2be6ffb.f8d1346f.js | 1 + assets/js/a6a48ea2.d5faeb42.js | 1 + assets/js/a6aa9e1f.c08b78c4.js | 1 + assets/js/a7098721.ef506174.js | 1 + assets/js/a7d8226e.dabdb919.js | 1 + assets/js/a80747a0.4dc03a81.js | 1 + assets/js/ab2721d4.e0b371f9.js | 1 + assets/js/af8b72a7.1e28998e.js | 1 + assets/js/b0067e0a.68fd3778.js | 1 + assets/js/b0291f37.5b91d377.js | 1 + assets/js/b25fbc58.c6b468d1.js | 1 + assets/js/b2c263ce.01869630.js | 1 + assets/js/b45dccf0.5fcb5182.js | 1 + assets/js/b5a32f14.3c491fc9.js | 1 + assets/js/b9b1ccdc.859f8a18.js | 1 + assets/js/bb882650.671a659f.js | 1 + assets/js/be4da062.4dfd3eed.js | 1 + assets/js/c4f5d8e4.05fc7105.js | 1 + assets/js/c8cbffbd.a55be3a0.js | 1 + assets/js/ccc49370.6c86d4f9.js | 1 + assets/js/cfa2b263.c19c407b.js | 1 + assets/js/d02d148d.0cb68506.js | 1 + assets/js/d5ca4423.c7f8ab3b.js | 1 + assets/js/d661cf04.70911e61.js | 1 + assets/js/d675395f.567b4609.js | 1 + assets/js/d74d369f.ab677fcf.js | 1 + assets/js/d79dd549.ee10504b.js | 1 + assets/js/d7f7fb17.fd985da7.js | 1 + assets/js/d9adc206.4d3c59b2.js | 1 + assets/js/dadfcff0.3cd22a72.js | 1 + assets/js/df203c0f.1c48be56.js | 1 + assets/js/dff2ebad.0c0a899d.js | 1 + assets/js/e25b3183.1c50e16b.js | 1 + assets/js/e89da83e.a63c019a.js | 1 + assets/js/eb7cc117.55f4bd7d.js | 1 + assets/js/edfd2a45.1bede75c.js | 1 + assets/js/f48be158.eaa96907.js | 1 + assets/js/f533ef4a.13c50ab8.js | 1 + assets/js/f60c832f.d6dc7ae0.js | 1 + assets/js/fcc91f97.acb581ec.js | 1 + assets/js/fd0b1e16.7f8a8c44.js | 1 + assets/js/ff472cd9.4ff57c91.js | 1 + assets/js/main.9283b308.js | 2 + assets/js/main.9283b308.js.LICENSE.txt | 63 + assets/js/runtime~main.be793c46.js | 1 + blog/2023/08/02/copr/index.html | 67 + blog/aoc-2022/1st-week/index.html | 111 + blog/aoc-2022/2nd-week/index.html | 172 + blog/aoc-2022/3rd-week/index.html | 112 + blog/aoc-2022/4th-week/index.html | 136 + blog/aoc-2022/intro/index.html | 91 + blog/archive/index.html | 25 + blog/atom.xml | 751 + blog/feed.json | 129 + blog/index.html | 27 + blog/leetcode/sort-diagonally/index.html | 113 + blog/rss.xml | 725 + blog/tags/admin/index.html | 26 + blog/tags/advent-of-code-2022/index.html | 25 + blog/tags/advent-of-code/index.html | 25 + blog/tags/copr/index.html | 26 + blog/tags/cpp/index.html | 26 + blog/tags/index.html | 25 + blog/tags/iterators/index.html | 26 + blog/tags/leetcode/index.html | 26 + blog/tags/red-hat/index.html | 26 + blog/tags/rust/index.html | 25 + blog/tags/vps/index.html | 26 + blog/tags/🏭/index.html | 26 + contributions/index.html | 25 + .../leetcode/sort-matrix-diagonally/makefile | 16 + .../sort-matrix-diagonally/matrix-sort.cpp | 229 + .../postcondition-ambiguity/test_sort.py | 139 + files/ib002/graphs/bfs-tree/bfs_graph.dot | 17 + .../ib002/graphs/bfs-tree/bfs_graph_dark.png | Bin 0 -> 26144 bytes .../ib002/graphs/bfs-tree/bfs_graph_light.png | Bin 0 -> 24964 bytes .../bfs_graph_with_additional_edge.dot | 18 + .../bfs_graph_with_additional_edge_dark.png | Bin 0 -> 27139 bytes .../bfs_graph_with_additional_edge_light.png | Bin 0 -> 25963 bytes files/ib002/graphs/bfs-tree/bfs_tree.dot | 13 + files/ib002/graphs/bfs-tree/bfs_tree_dark.png | Bin 0 -> 16932 bytes .../ib002/graphs/bfs-tree/bfs_tree_light.png | Bin 0 -> 15674 bytes .../bfs_tree_with_additional_edge.dot | 12 + .../bfs_tree_with_additional_edge_dark.png | Bin 0 -> 18530 bytes .../bfs_tree_with_additional_edge_light.png | Bin 0 -> 17546 bytes .../graphs/iterative-and-iterators/.archive | 0 .../iterative-and-iterators/.editorconfig | 206 + .../graphs/iterative-and-iterators/.gitignore | 448 + .../iterative-and-iterators/graphs.csproj | 10 + .../graphs/iterative-and-iterators/src/BFS.cs | 66 + .../graphs/iterative-and-iterators/src/DFS.cs | 68 + .../iterative-and-iterators/src/Graph.cs | 44 + .../iterative-and-iterators/src/Program.cs | 45 + files/ib002/rb-trees/rules/rb.dot | 47 + files/ib002/rb-trees/rules/rb_dark.png | Bin 0 -> 45636 bytes files/ib002/rb-trees/rules/rb_height.dot | 47 + files/ib002/rb-trees/rules/rb_height_dark.png | Bin 0 -> 57425 bytes .../ib002/rb-trees/rules/rb_height_light.png | Bin 0 -> 53848 bytes files/ib002/rb-trees/rules/rb_light.png | Bin 0 -> 42611 bytes .../rules/red-node-black-children/correct.dot | 34 + .../red-node-black-children/correct_dark.png | Bin 0 -> 27612 bytes .../red-node-black-children/correct_light.png | Bin 0 -> 25572 bytes .../red-node-black-children/incorrect.dot | 40 + .../incorrect_dark.png | Bin 0 -> 33063 bytes .../incorrect_light.png | Bin 0 -> 30168 bytes files/ib002/rb-trees/rules/red-root/br_0.dot | 7 + .../rb-trees/rules/red-root/br_0_dark.png | Bin 0 -> 5162 bytes .../rb-trees/rules/red-root/br_0_light.png | Bin 0 -> 4781 bytes files/ib002/rb-trees/rules/red-root/br_1.dot | 11 + .../rb-trees/rules/red-root/br_1_dark.png | Bin 0 -> 9728 bytes .../rb-trees/rules/red-root/br_1_light.png | Bin 0 -> 8851 bytes files/ib002/rb-trees/rules/red-root/br_2.dot | 15 + .../rb-trees/rules/red-root/br_2_dark.png | Bin 0 -> 11797 bytes .../rb-trees/rules/red-root/br_2_light.png | Bin 0 -> 10884 bytes files/ib002/rb-trees/rules/red-root/br_3.dot | 19 + .../rb-trees/rules/red-root/br_3_dark.png | Bin 0 -> 17194 bytes .../rb-trees/rules/red-root/br_3_light.png | Bin 0 -> 16030 bytes files/ib002/rb-trees/rules/red-root/br_4.dot | 23 + .../rb-trees/rules/red-root/br_4_dark.png | Bin 0 -> 19412 bytes .../rb-trees/rules/red-root/br_4_light.png | Bin 0 -> 17974 bytes files/ib002/rb-trees/rules/red-root/br_5.dot | 27 + .../rb-trees/rules/red-root/br_5_dark.png | Bin 0 -> 19823 bytes .../rb-trees/rules/red-root/br_5_light.png | Bin 0 -> 18300 bytes files/ib002/rb-trees/rules/red-root/br_6.dot | 31 + .../rb-trees/rules/red-root/br_6_dark.png | Bin 0 -> 28436 bytes .../rb-trees/rules/red-root/br_6_light.png | Bin 0 -> 26112 bytes files/ib002/rb-trees/rules/red-root/br_7.dot | 35 + .../rb-trees/rules/red-root/br_7_dark.png | Bin 0 -> 31255 bytes .../rb-trees/rules/red-root/br_7_light.png | Bin 0 -> 28524 bytes files/ib002/rb-trees/rules/red-root/br_8.dot | 39 + .../rb-trees/rules/red-root/br_8_dark.png | Bin 0 -> 34025 bytes .../rb-trees/rules/red-root/br_8_light.png | Bin 0 -> 31346 bytes files/ib002/rb-trees/rules/red-root/rr_0.dot | 7 + .../rb-trees/rules/red-root/rr_0_dark.png | Bin 0 -> 4968 bytes .../rb-trees/rules/red-root/rr_0_light.png | Bin 0 -> 4438 bytes files/ib002/rb-trees/rules/red-root/rr_1.dot | 11 + .../rb-trees/rules/red-root/rr_1_dark.png | Bin 0 -> 9728 bytes .../rb-trees/rules/red-root/rr_1_light.png | Bin 0 -> 8851 bytes files/ib002/rb-trees/rules/red-root/rr_2.dot | 15 + .../rb-trees/rules/red-root/rr_2_dark.png | Bin 0 -> 11797 bytes .../rb-trees/rules/red-root/rr_2_light.png | Bin 0 -> 10884 bytes files/ib002/rb-trees/rules/red-root/rr_3.dot | 19 + .../rb-trees/rules/red-root/rr_3_dark.png | Bin 0 -> 16982 bytes .../rb-trees/rules/red-root/rr_3_light.png | Bin 0 -> 15545 bytes files/ib002/rb-trees/rules/red-root/rr_4.dot | 23 + .../rb-trees/rules/red-root/rr_4_dark.png | Bin 0 -> 19127 bytes .../rb-trees/rules/red-root/rr_4_light.png | Bin 0 -> 17489 bytes files/ib002/rb-trees/rules/red-root/rr_5.dot | 27 + .../rb-trees/rules/red-root/rr_5_dark.png | Bin 0 -> 19533 bytes .../rb-trees/rules/red-root/rr_5_light.png | Bin 0 -> 17837 bytes files/ib002/rb-trees/rules/red-root/rr_6.dot | 31 + .../rb-trees/rules/red-root/rr_6_dark.png | Bin 0 -> 28436 bytes .../rb-trees/rules/red-root/rr_6_light.png | Bin 0 -> 26112 bytes files/ib002/rb-trees/rules/red-root/rr_7.dot | 35 + .../rb-trees/rules/red-root/rr_7_dark.png | Bin 0 -> 31255 bytes .../rb-trees/rules/red-root/rr_7_light.png | Bin 0 -> 28524 bytes files/ib002/rb-trees/rules/red-root/rr_8.dot | 39 + .../rb-trees/rules/red-root/rr_8_dark.png | Bin 0 -> 34025 bytes .../rb-trees/rules/red-root/rr_8_light.png | Bin 0 -> 31346 bytes files/ib002/recursion/karel-1/.archive | 0 .../ib002/recursion/karel-1/generate_mazes.py | 21 + files/ib002/recursion/karel-1/karel_tk.py | 791 + files/ib002/recursion/karel-1/maze007.kw | 34 + files/ib002/recursion/karel-1/maze008.kw | 34 + files/ib002/recursion/karel-1/maze009.kw | 34 + files/ib002/recursion/karel-1/maze010.kw | 34 + files/ib002/recursion/karel-1/maze011.kw | 34 + files/ib002/recursion/karel-1/maze012.kw | 34 + files/ib002/recursion/karel-1/maze013.kw | 34 + files/ib002/recursion/karel-1/maze014.kw | 34 + files/ib002/recursion/karel-1/maze015.kw | 34 + files/ib002/recursion/karel-1/maze016.kw | 34 + files/ib002/recursion/karel-1/maze017.kw | 34 + files/ib002/recursion/karel-1/maze018.kw | 34 + files/ib002/recursion/karel-1/maze019.kw | 34 + files/ib002/recursion/karel-1/maze020.kw | 34 + files/ib002/recursion/karel-1/maze021.kw | 34 + files/ib002/recursion/karel-1/maze022.kw | 34 + files/ib002/recursion/karel-1/maze023.kw | 34 + files/ib002/recursion/karel-1/maze024.kw | 34 + files/ib002/recursion/karel-1/maze025.kw | 34 + files/ib002/recursion/karel-1/maze026.kw | 34 + files/ib002/recursion/karel-1/maze027.kw | 34 + files/ib002/recursion/karel-1/maze028.kw | 34 + files/ib002/recursion/karel-1/maze029.kw | 34 + files/ib002/recursion/karel-1/maze030.kw | 34 + files/ib002/recursion/karel-1/maze031.kw | 34 + files/ib002/recursion/karel-1/maze032.kw | 34 + files/ib002/recursion/karel-1/maze033.kw | 34 + files/ib002/recursion/karel-1/maze034.kw | 34 + files/ib002/recursion/karel-1/maze035.kw | 34 + files/ib002/recursion/karel-1/maze036.kw | 34 + files/ib002/recursion/karel-1/maze037.kw | 34 + files/ib002/recursion/karel-1/maze038.kw | 34 + files/ib002/recursion/karel-1/maze039.kw | 34 + files/ib002/recursion/karel-1/maze040.kw | 34 + files/ib002/recursion/karel-1/maze041.kw | 34 + files/ib002/recursion/karel-1/maze042.kw | 34 + files/ib002/recursion/karel-1/maze069.kw | 32 + files/ib002/recursion/karel-1/maze666.kw | 30 + files/ib002/recursion/karel-1/maze_skel.kw | 34 + files/ib002/recursion/karel-1/skeleton.py | 28 + files/ib002/recursion/karel-1/stairs.kw | 17 + files/ib002/recursion/karel-1/stairs2.kw | 20 + .../recursion/pyramid-slide-down/.archive | 0 .../pyramid-slide-down/BottomUp.java | 55 + .../recursion/pyramid-slide-down/Greedy.java | 47 + .../recursion/pyramid-slide-down/Naive.java | 48 + .../recursion/pyramid-slide-down/TopDown.java | 76 + files/ib002/time-complexity/extend/.archive | 0 .../time-complexity/extend/construction.dot | 25 + .../extend/construction_dark.png | Bin 0 -> 21738 bytes .../extend/construction_light.png | Bin 0 -> 20499 bytes files/ib002/time-complexity/extend/dynlist.c | 142 + files/ib002/time-complexity/extend/dynlist.h | 76 + files/ib015/.gitkeep | 0 files/ib110/.gitkeep | 0 files/ib111/.gitkeep | 0 files/pb071/bonuses/03.tar.bz2 | Bin 0 -> 2648 bytes files/pb071/bonuses/03.tar.gz | Bin 0 -> 2338 bytes files/pb071/bonuses/03/.archive | 0 files/pb071/bonuses/03/main.c | 264 + files/pb071/bonuses/03/main_light.c | 141 + files/pb071/bonuses/03/makefile | 12 + files/pb071/bonuses/04.tar.bz2 | Bin 0 -> 2531 bytes files/pb071/bonuses/04.tar.gz | Bin 0 -> 2500 bytes files/pb071/bonuses/04/.archive | 0 files/pb071/bonuses/04/CMakeLists.txt | 25 + files/pb071/bonuses/04/main.c | 8 + files/pb071/bonuses/04/maze.c | 84 + files/pb071/bonuses/04/maze.h | 33 + files/pb071/bonuses/04/test_maze.c | 246 + files/pb071/bonuses/05-06.tar.bz2 | Bin 0 -> 3635 bytes files/pb071/bonuses/05-06.tar.gz | Bin 0 -> 3486 bytes files/pb071/bonuses/05-06/.archive | 0 files/pb071/bonuses/05-06/CMakeLists.txt | 25 + files/pb071/bonuses/05-06/bmp.c | 153 + files/pb071/bonuses/05-06/bmp.h | 98 + files/pb071/bonuses/05-06/main.c | 8 + files/pb071/bonuses/05-06/test_bmp.c | 251 + files/pb071/bonuses/08.tar.bz2 | Bin 0 -> 76279 bytes files/pb071/bonuses/08.tar.gz | Bin 0 -> 106553 bytes files/pb071/bonuses/08/.archive | 0 files/pb071/bonuses/08/CMakeLists.txt | 24 + files/pb071/bonuses/08/Makefile | 10 + files/pb071/bonuses/08/counting.c | 60 + files/pb071/bonuses/08/counting.json | 4 + files/pb071/bonuses/08/test-bonus.py | 156 + files/pb071/bonuses/08/test-counting/basic.in | 1 + .../pb071/bonuses/08/test-counting/basic.out | 1 + .../08/test-counting/biiiiiiig_ananas.in | 1 + .../08/test-counting/biiiiiiig_ananas.out | 1 + .../08/test-counting/biiiiiiig_nothing.in | 1 + .../08/test-counting/biiiiiiig_nothing.out | 1 + files/pb071/bonuses/08/test-counting/empty.in | 0 .../pb071/bonuses/08/test-counting/empty.out | 1 + files/pb071/bonuses/08/test-counting/fgetc.in | 65 + .../pb071/bonuses/08/test-counting/fgetc.json | 4 + .../pb071/bonuses/08/test-counting/fgetc.out | 1 + .../bonuses/08/test-counting/going_bananas.in | 1 + .../08/test-counting/going_bananas.json | 4 + .../08/test-counting/going_bananas.out | 1 + .../bonuses/08/test-counting/lorem_empty.in | 31 + .../bonuses/08/test-counting/lorem_empty.out | 1 + .../bonuses/08/test-counting/lorem_some.in | 31 + .../bonuses/08/test-counting/lorem_some.out | 1 + files/pb071/bonuses/08/test-counting/mmap.in | 264 + .../pb071/bonuses/08/test-counting/mmap.json | 4 + files/pb071/bonuses/08/test-counting/mmap.out | 1 + .../08/test-counting/never_enough_random.in | 1 + .../08/test-counting/never_enough_random.out | 1 + .../08/test-counting/nothing_to_see.in | 1 + .../08/test-counting/nothing_to_see.out | 1 + .../pb071/bonuses/08/test-counting/random.in | 1 + .../pb071/bonuses/08/test-counting/random.out | 1 + .../bonuses/08/test-counting/random_again.in | 1 + .../bonuses/08/test-counting/random_again.out | 1 + .../bonuses/08/test-counting/stream.json | 4 + .../pb071/bonuses/08/test-counting/stream.out | 1 + files/pb071/bonuses/08/test-counting/tough.in | 1 + .../pb071/bonuses/08/test-counting/tough.out | 1 + .../pb071/bonuses/08/test-counting/tricky.in | 1 + .../pb071/bonuses/08/test-counting/tricky.out | 1 + files/pb071/bonuses/08/test-trees/aligned.in | 9 + .../test-trees/close_call_but_not_exactly.in | 15 + .../08/test-trees/could_be_coloured.in | 11 + files/pb071/bonuses/08/test-trees/example.in | 15 + ...n_a_sense_but_not_brother_to_the_others.in | 11 + files/pb071/bonuses/08/test-trees/no_tree.in | 0 .../bonuses/08/test-trees/no_tree_again.in | 1 + .../pb071/bonuses/08/test-trees/only_root.in | 1 + .../bonuses/08/test-trees/pretty_tree.in | 3 + .../pb071/bonuses/08/test-trees/two_nodes.in | 3 + .../08/test-trees/two_nodes_other_way.in | 3 + .../pb071/bonuses/08/test-trees/whats_this.in | 7 + files/pb071/bonuses/08/tree.png | Bin 0 -> 58553 bytes files/pb071/bonuses/08/trees.c | 85 + files/pb071/bonuses/10.tar.bz2 | Bin 0 -> 234785 bytes files/pb071/bonuses/10.tar.gz | Bin 0 -> 230109 bytes files/pb071/bonuses/10/.archive | 0 files/pb071/bonuses/10/CMakeLists.txt | 24 + files/pb071/bonuses/10/Makefile | 11 + files/pb071/bonuses/10/hangman.c | 233 + files/pb071/bonuses/10/hangman.h | 55 + files/pb071/bonuses/10/hangman.json | 5 + files/pb071/bonuses/10/main.c | 23 + files/pb071/bonuses/10/tdd_lifecycle.png | Bin 0 -> 240673 bytes files/pb071/bonuses/10/test-bonus.py | 156 + .../pb071/bonuses/10/test-hangman/.gitignore | 1 + .../bonuses/10/test-hangman/at-once-bad.in | 2 + .../bonuses/10/test-hangman/at-once-bad.out | 10 + .../bonuses/10/test-hangman/at-once-bad.words | 3 + .../pb071/bonuses/10/test-hangman/at-once.in | 2 + .../pb071/bonuses/10/test-hangman/at-once.out | 10 + .../bonuses/10/test-hangman/at-once.words | 3 + files/pb071/bonuses/10/test-hangman/basic.in | 16 + files/pb071/bonuses/10/test-hangman/basic.out | 40 + .../pb071/bonuses/10/test-hangman/basic.words | 3 + .../pb071/bonuses/10/test-hangman/hangman.in | 11 + .../pb071/bonuses/10/test-hangman/hangman.out | 26 + .../bonuses/10/test-hangman/hangman.words | 3 + .../bonuses/10/test-hangman/no-more-tries.in | 11 + .../bonuses/10/test-hangman/no-more-tries.out | 40 + .../10/test-hangman/no-more-tries.words | 3 + .../pb071/bonuses/10/test-hangman/smoke.json | 4 + files/pb071/bonuses/10/test-hangman/smoke.out | 1 + files/pb071/bonuses/10/test_hangman.c | 64 + files/pb071/test-bonus.py | 156 + files/pb161/environment/gitignore | 22 + fonts/CascadiaCodePL.woff2 | Bin 0 -> 213368 bytes fonts/CascadiaCodePLItalic.woff2 | Bin 0 -> 155568 bytes fonts/JetBrainsMono-Italic[wght].woff2 | Bin 0 -> 125596 bytes fonts/JetBrainsMono[wght].woff2 | Bin 0 -> 114020 bytes .../postcondition-ambiguity/index.html | 30 + .../algorithms-and-correctness/index.html | 33 + .../index.html | 30 + ib002/category/graphs/index.html | 32 + ib002/category/recursion/index.html | 32 + ib002/category/red-black-trees/index.html | 32 + ib002/graphs/bfs-tree/index.html | 31 + .../graphs/iterative-and-iterators/index.html | 27 + ib002/index.html | 28 + ib002/rb-trees/applications/index.html | 29 + ib002/rb-trees/rules/index.html | 107 + ib002/recursion/karel-1/index.html | 52 + ib002/recursion/pyramid-slide-down/index.html | 142 + ib002/tags/applications/index.html | 26 + ib002/tags/backtracking/index.html | 26 + ib002/tags/balanced-trees/index.html | 27 + ib002/tags/bfs/index.html | 26 + ib002/tags/bottom-up-dp/index.html | 26 + ib002/tags/c/index.html | 26 + ib002/tags/csharp/index.html | 26 + ib002/tags/dynamic-array/index.html | 26 + ib002/tags/dynamic-programming/index.html | 26 + ib002/tags/exponential/index.html | 26 + ib002/tags/graphs/index.html | 27 + ib002/tags/greedy/index.html | 26 + ib002/tags/index.html | 25 + ib002/tags/iterative/index.html | 26 + ib002/tags/iterators/index.html | 26 + ib002/tags/java/index.html | 26 + ib002/tags/karel/index.html | 26 + ib002/tags/postconditions/index.html | 26 + ib002/tags/python/index.html | 28 + ib002/tags/recursion/index.html | 28 + ib002/tags/red-black-trees/index.html | 27 + ib002/tags/sorting/index.html | 26 + ib002/tags/testing/index.html | 26 + ib002/tags/time-complexity/index.html | 26 + ib002/tags/top-down-dp/index.html | 26 + ib002/time-complexity/extend/index.html | 31 + img/blog/aoc-2022/04-week-4/calendar.png | Bin 0 -> 797509 bytes img/favicon.ico | Bin 0 -> 3626 bytes img/ib002/karel-1/maze.png | Bin 0 -> 25402 bytes img/ib002/karel-1/stairs.png | Bin 0 -> 43984 bytes index.html | 25 + opensearch.xml | 11 + pb071/bonuses/seminar-03/index.html | 41 + pb071/bonuses/seminar-04/index.html | 46 + pb071/bonuses/seminar-05-06/index.html | 46 + pb071/bonuses/seminar-08/index.html | 50 + pb071/bonuses/seminar-10/index.html | 53 + pb071/category/bonuses/index.html | 38 + pb071/category/practice-exams/index.html | 32 + pb071/index.html | 25 + pb071/mr/index.html | 49 + pb071/pexam/cams/index.html | 56 + pb071/pexam/garbage_collect/index.html | 49 + pb161/environment/index.html | 62 + pb161/index.html | 25 + search/index.html | 25 + sitemap.xml | 1 + talks/index.html | 25 + 538 files changed, 63027 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/css/styles.8480cb83.css create mode 100644 assets/fonts/JetBrainsMono-Italic[wght]-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2 create mode 100644 assets/fonts/JetBrainsMono[wght]-9e9649b60ff61727d1aa4e9a1a10a93c.woff2 create mode 100644 assets/images/bfs_graph_dark-f7a3a78eaf9de049469b4c64e0712867.png create mode 100644 assets/images/bfs_graph_light-6e21a942bccd92bcce6840da7c3cb056.png create mode 100644 assets/images/bfs_graph_with_additional_edge_dark-c2da6c052b067785e877b4654a13f328.png create mode 100644 assets/images/bfs_graph_with_additional_edge_light-799673ba333298d16327abe67c90507e.png create mode 100644 assets/images/bfs_tree_dark-34f32262c6e4ffc14983b3ebf9a2f5a9.png create mode 100644 assets/images/bfs_tree_light-61d6723c3c587d565b6280b8b8eca211.png create mode 100644 assets/images/bfs_tree_with_additional_edge_dark-127aa5b00988d4569669a92f5d841dbf.png create mode 100644 assets/images/bfs_tree_with_additional_edge_light-93df97e1f9f1883467248532809374d0.png create mode 100644 assets/images/br_2_dark-e8c35bc37b250271cf480f71904c15a7.png create mode 100644 assets/images/br_2_light-5e6a1d53e559a30e5fb86ee019229bbd.png create mode 100644 assets/images/br_3_dark-a2b8248c182059b67c703f75f58f3784.png create mode 100644 assets/images/br_3_light-7be3bbcb08f8b7182a1c719693a47615.png create mode 100644 assets/images/br_4_dark-eddf4c315becc51f89b0967320f132d8.png create mode 100644 assets/images/br_4_light-d72dfa633794ec97eddce8e3a4b02660.png create mode 100644 assets/images/br_5_dark-e24da2d7a3fb2ee63ac8e1ea9c2d45a8.png create mode 100644 assets/images/br_5_light-efb3568bf4aadb19a9dcc57e748f89d8.png create mode 100644 assets/images/br_6_dark-160fd071a93e279a5339c7976745f8b1.png create mode 100644 assets/images/br_6_light-b090675f7b30b574af44d667b083e9b7.png create mode 100644 assets/images/br_7_dark-35ede8f297484f4305ea7fd23cbddc49.png create mode 100644 assets/images/br_7_light-018e13c41ce1fc6257c4c65748aaae27.png create mode 100644 assets/images/br_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png create mode 100644 assets/images/br_8_light-81ac4c8a3988bd43c66f563cd4799d61.png create mode 100644 assets/images/calendar-f891b624f3e0efb34bba582100a7d8df.png create mode 100644 assets/images/construction_dark-fcb91acb746c787329bf9bd3cb54c5b7.png create mode 100644 assets/images/construction_light-dda6c5aa625d6e6c14c01589117281c2.png create mode 100644 assets/images/correct_dark-bbd8d4c1796b145025fed5b6dff03b84.png create mode 100644 assets/images/correct_light-bc4770146072f748be4a5aa11abf3a0c.png create mode 100644 assets/images/incorrect_dark-9b8b3be328ffad83233de4536c120016.png create mode 100644 assets/images/incorrect_light-e787e568e9a1528dcac5bf55ef29fdaa.png create mode 100644 assets/images/maze-a374d908bc9445061e15faeddc71641e.png create mode 100644 assets/images/rb_dark-c025d61dee7913262c86277087751328.png create mode 100644 assets/images/rb_height_dark-75a70ddff74e5e1aff7e9986221b5687.png create mode 100644 assets/images/rb_height_light-36fa69317ced094d7bb7b0fdf32cb3fe.png create mode 100644 assets/images/rb_light-f53bee3b32ddb2e7a4249828bc03b1a4.png create mode 100644 assets/images/rr_2_dark-e8c35bc37b250271cf480f71904c15a7.png create mode 100644 assets/images/rr_2_light-5e6a1d53e559a30e5fb86ee019229bbd.png create mode 100644 assets/images/rr_3_dark-4e8b2ca938738395e438b7fc2fc5dfe4.png create mode 100644 assets/images/rr_3_light-51521ba414ff3a3530ed0109cfab799d.png create mode 100644 assets/images/rr_4_dark-3cc1c8d4b39707d2a51b51f4f1b29dc8.png create mode 100644 assets/images/rr_4_light-631a0b3947be21a12b3a489f0cd0c3c4.png create mode 100644 assets/images/rr_5_dark-9028cc10e78c05cb669d5d438dcbf93f.png create mode 100644 assets/images/rr_5_light-6b8f80047906eb1f58472d231eb9b12a.png create mode 100644 assets/images/rr_6_dark-160fd071a93e279a5339c7976745f8b1.png create mode 100644 assets/images/rr_6_light-b090675f7b30b574af44d667b083e9b7.png create mode 100644 assets/images/rr_7_dark-35ede8f297484f4305ea7fd23cbddc49.png create mode 100644 assets/images/rr_7_light-018e13c41ce1fc6257c4c65748aaae27.png create mode 100644 assets/images/rr_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png create mode 100644 assets/images/rr_8_light-81ac4c8a3988bd43c66f563cd4799d61.png create mode 100644 assets/images/stairs-5ee5d03905645aeb13eeaa7774451a64.png create mode 100644 assets/images/tdd_lifecycle-327ad9ee0ed8318ed11e19a28e02b2cc.png create mode 100644 assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png create mode 100644 assets/js/01a85c17.02ca9acb.js create mode 100644 assets/js/0220f5fc.5b1b8f6e.js create mode 100644 assets/js/0608d96f.ee46e047.js create mode 100644 assets/js/09bc59e7.64a221ae.js create mode 100644 assets/js/0bfe45d5.58ce388b.js create mode 100644 assets/js/0fcbc6ca.e8ea4c91.js create mode 100644 assets/js/1426.d90fc9fa.js create mode 100644 assets/js/146d9b84.996dfbcb.js create mode 100644 assets/js/14eb3368.9c4e865a.js create mode 100644 assets/js/17896441.a160e7e2.js create mode 100644 assets/js/18f481e4.35406774.js create mode 100644 assets/js/19d7c045.18dfd0ba.js create mode 100644 assets/js/1a4e3797.48f1640b.js create mode 100644 assets/js/1a4e3797.48f1640b.js.LICENSE.txt create mode 100644 assets/js/1be78505.65bfdbb1.js create mode 100644 assets/js/1bebd4ed.a838562f.js create mode 100644 assets/js/1e2009d3.7e268ae7.js create mode 100644 assets/js/1e298f0c.caf61e40.js create mode 100644 assets/js/22a175ec.a5706cf0.js create mode 100644 assets/js/2523321d.50613303.js create mode 100644 assets/js/27470891.d509d6e4.js create mode 100644 assets/js/280c26e1.27c7a6b1.js create mode 100644 assets/js/29694455.a2e2c1d7.js create mode 100644 assets/js/2a09abcd.15946a52.js create mode 100644 assets/js/3011a4c0.573f9325.js create mode 100644 assets/js/316.d513d091.js create mode 100644 assets/js/337bc122.a2fd825d.js create mode 100644 assets/js/3593220c.04c28473.js create mode 100644 assets/js/3720c009.996e811f.js create mode 100644 assets/js/377f3aa1.4c98e03e.js create mode 100644 assets/js/37cf4872.0b06d100.js create mode 100644 assets/js/3aef4518.ae37468c.js create mode 100644 assets/js/3da4b779.a33bbff3.js create mode 100644 assets/js/3de247b5.66851c3c.js create mode 100644 assets/js/4200b1a9.e4798bae.js create mode 100644 assets/js/4621632b.f101cb78.js create mode 100644 assets/js/4688cd57.4f084bfb.js create mode 100644 assets/js/470a9204.f961c4a3.js create mode 100644 assets/js/487.7b135b0c.js create mode 100644 assets/js/4c4e9f30.f247e2b4.js create mode 100644 assets/js/4e286f4e.b0df1295.js create mode 100644 assets/js/4edd2021.47ff14e6.js create mode 100644 assets/js/4ee12fa2.74d68d7b.js create mode 100644 assets/js/51624505.ab30cae6.js create mode 100644 assets/js/52bff962.6e8cadd8.js create mode 100644 assets/js/52f2a5bf.f6c9442b.js create mode 100644 assets/js/58dd4fbd.f45f89fa.js create mode 100644 assets/js/5af27364.400470ed.js create mode 100644 assets/js/6048.83823b1f.js create mode 100644 assets/js/62d847b3.06e10519.js create mode 100644 assets/js/6316.0ca4149a.js create mode 100644 assets/js/66d5ef6c.fc107ca5.js create mode 100644 assets/js/6875c492.2d487359.js create mode 100644 assets/js/6945.04a6ca6a.js create mode 100644 assets/js/713b7838.e5a05e06.js create mode 100644 assets/js/724.d7e60c08.js create mode 100644 assets/js/73d5f13d.2c8e245a.js create mode 100644 assets/js/74c2e0e9.fc48acce.js create mode 100644 assets/js/7515.45da5915.js create mode 100644 assets/js/75316eff.a7b24a88.js create mode 100644 assets/js/75cccf44.5b6f1b34.js create mode 100644 assets/js/765ea78b.eff9c6dc.js create mode 100644 assets/js/7724.0fff5da7.js create mode 100644 assets/js/7724.0fff5da7.js.LICENSE.txt create mode 100644 assets/js/788cc978.4f78c34d.js create mode 100644 assets/js/7cf94373.f790d5a8.js create mode 100644 assets/js/7d580cdb.71718a61.js create mode 100644 assets/js/82b3b723.fdccb1de.js create mode 100644 assets/js/834ed470.690ec9f0.js create mode 100644 assets/js/83bf91d3.21975b05.js create mode 100644 assets/js/8418981c.3eb99a51.js create mode 100644 assets/js/86cd1460.733128af.js create mode 100644 assets/js/8894.de4803df.js create mode 100644 assets/js/8954.296edd99.js create mode 100644 assets/js/8954.296edd99.js.LICENSE.txt create mode 100644 assets/js/8b1802c5.6f267f4c.js create mode 100644 assets/js/8c0e532b.9cbc1be0.js create mode 100644 assets/js/8e1fadd0.b5230023.js create mode 100644 assets/js/90425ffc.955d8c56.js create mode 100644 assets/js/9287eafd.8885dd15.js create mode 100644 assets/js/94036ea2.8be2e014.js create mode 100644 assets/js/9487.b3a824a3.js create mode 100644 assets/js/95b96bb9.aefbf3b7.js create mode 100644 assets/js/95be84b6.0463fc28.js create mode 100644 assets/js/95f41f0b.79e14732.js create mode 100644 assets/js/9e4087bc.dadc79bc.js create mode 100644 assets/js/9eb50c57.bc586b34.js create mode 100644 assets/js/a082abd3.1797976b.js create mode 100644 assets/js/a2be6ffb.f8d1346f.js create mode 100644 assets/js/a6a48ea2.d5faeb42.js create mode 100644 assets/js/a6aa9e1f.c08b78c4.js create mode 100644 assets/js/a7098721.ef506174.js create mode 100644 assets/js/a7d8226e.dabdb919.js create mode 100644 assets/js/a80747a0.4dc03a81.js create mode 100644 assets/js/ab2721d4.e0b371f9.js create mode 100644 assets/js/af8b72a7.1e28998e.js create mode 100644 assets/js/b0067e0a.68fd3778.js create mode 100644 assets/js/b0291f37.5b91d377.js create mode 100644 assets/js/b25fbc58.c6b468d1.js create mode 100644 assets/js/b2c263ce.01869630.js create mode 100644 assets/js/b45dccf0.5fcb5182.js create mode 100644 assets/js/b5a32f14.3c491fc9.js create mode 100644 assets/js/b9b1ccdc.859f8a18.js create mode 100644 assets/js/bb882650.671a659f.js create mode 100644 assets/js/be4da062.4dfd3eed.js create mode 100644 assets/js/c4f5d8e4.05fc7105.js create mode 100644 assets/js/c8cbffbd.a55be3a0.js create mode 100644 assets/js/ccc49370.6c86d4f9.js create mode 100644 assets/js/cfa2b263.c19c407b.js create mode 100644 assets/js/d02d148d.0cb68506.js create mode 100644 assets/js/d5ca4423.c7f8ab3b.js create mode 100644 assets/js/d661cf04.70911e61.js create mode 100644 assets/js/d675395f.567b4609.js create mode 100644 assets/js/d74d369f.ab677fcf.js create mode 100644 assets/js/d79dd549.ee10504b.js create mode 100644 assets/js/d7f7fb17.fd985da7.js create mode 100644 assets/js/d9adc206.4d3c59b2.js create mode 100644 assets/js/dadfcff0.3cd22a72.js create mode 100644 assets/js/df203c0f.1c48be56.js create mode 100644 assets/js/dff2ebad.0c0a899d.js create mode 100644 assets/js/e25b3183.1c50e16b.js create mode 100644 assets/js/e89da83e.a63c019a.js create mode 100644 assets/js/eb7cc117.55f4bd7d.js create mode 100644 assets/js/edfd2a45.1bede75c.js create mode 100644 assets/js/f48be158.eaa96907.js create mode 100644 assets/js/f533ef4a.13c50ab8.js create mode 100644 assets/js/f60c832f.d6dc7ae0.js create mode 100644 assets/js/fcc91f97.acb581ec.js create mode 100644 assets/js/fd0b1e16.7f8a8c44.js create mode 100644 assets/js/ff472cd9.4ff57c91.js create mode 100644 assets/js/main.9283b308.js create mode 100644 assets/js/main.9283b308.js.LICENSE.txt create mode 100644 assets/js/runtime~main.be793c46.js create mode 100644 blog/2023/08/02/copr/index.html create mode 100644 blog/aoc-2022/1st-week/index.html create mode 100644 blog/aoc-2022/2nd-week/index.html create mode 100644 blog/aoc-2022/3rd-week/index.html create mode 100644 blog/aoc-2022/4th-week/index.html create mode 100644 blog/aoc-2022/intro/index.html create mode 100644 blog/archive/index.html create mode 100644 blog/atom.xml create mode 100644 blog/feed.json create mode 100644 blog/index.html create mode 100644 blog/leetcode/sort-diagonally/index.html create mode 100644 blog/rss.xml create mode 100644 blog/tags/admin/index.html create mode 100644 blog/tags/advent-of-code-2022/index.html create mode 100644 blog/tags/advent-of-code/index.html create mode 100644 blog/tags/copr/index.html create mode 100644 blog/tags/cpp/index.html create mode 100644 blog/tags/index.html create mode 100644 blog/tags/iterators/index.html create mode 100644 blog/tags/leetcode/index.html create mode 100644 blog/tags/red-hat/index.html create mode 100644 blog/tags/rust/index.html create mode 100644 blog/tags/vps/index.html create mode 100644 blog/tags/🏭/index.html create mode 100644 contributions/index.html create mode 100644 files/blog/leetcode/sort-matrix-diagonally/makefile create mode 100644 files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp create mode 100644 files/ib002/algorithms-correctness/postcondition-ambiguity/test_sort.py create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph.dot create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph_dark.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph_light.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph_with_additional_edge.dot create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph_with_additional_edge_dark.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_graph_with_additional_edge_light.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree.dot create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree_dark.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree_light.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge.dot create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_dark.png create mode 100644 files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_light.png create mode 100644 files/ib002/graphs/iterative-and-iterators/.archive create mode 100644 files/ib002/graphs/iterative-and-iterators/.editorconfig create mode 100644 files/ib002/graphs/iterative-and-iterators/.gitignore create mode 100644 files/ib002/graphs/iterative-and-iterators/graphs.csproj create mode 100644 files/ib002/graphs/iterative-and-iterators/src/BFS.cs create mode 100644 files/ib002/graphs/iterative-and-iterators/src/DFS.cs create mode 100644 files/ib002/graphs/iterative-and-iterators/src/Graph.cs create mode 100644 files/ib002/graphs/iterative-and-iterators/src/Program.cs create mode 100644 files/ib002/rb-trees/rules/rb.dot create mode 100644 files/ib002/rb-trees/rules/rb_dark.png create mode 100644 files/ib002/rb-trees/rules/rb_height.dot create mode 100644 files/ib002/rb-trees/rules/rb_height_dark.png create mode 100644 files/ib002/rb-trees/rules/rb_height_light.png create mode 100644 files/ib002/rb-trees/rules/rb_light.png create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/correct.dot create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/correct_dark.png create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/correct_light.png create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/incorrect.dot create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/incorrect_dark.png create mode 100644 files/ib002/rb-trees/rules/red-node-black-children/incorrect_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_0.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_0_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_0_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_1.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_1_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_1_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_2.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_2_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_2_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_3.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_3_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_3_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_4.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_4_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_4_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_5.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_5_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_5_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_6.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_6_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_6_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_7.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_7_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_7_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_8.dot create mode 100644 files/ib002/rb-trees/rules/red-root/br_8_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/br_8_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_0.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_0_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_0_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_1.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_1_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_1_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_2.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_2_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_2_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_3.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_3_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_3_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_4.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_4_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_4_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_5.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_5_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_5_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_6.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_6_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_6_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_7.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_7_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_7_light.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_8.dot create mode 100644 files/ib002/rb-trees/rules/red-root/rr_8_dark.png create mode 100644 files/ib002/rb-trees/rules/red-root/rr_8_light.png create mode 100644 files/ib002/recursion/karel-1/.archive create mode 100644 files/ib002/recursion/karel-1/generate_mazes.py create mode 100644 files/ib002/recursion/karel-1/karel_tk.py create mode 100644 files/ib002/recursion/karel-1/maze007.kw create mode 100644 files/ib002/recursion/karel-1/maze008.kw create mode 100644 files/ib002/recursion/karel-1/maze009.kw create mode 100644 files/ib002/recursion/karel-1/maze010.kw create mode 100644 files/ib002/recursion/karel-1/maze011.kw create mode 100644 files/ib002/recursion/karel-1/maze012.kw create mode 100644 files/ib002/recursion/karel-1/maze013.kw create mode 100644 files/ib002/recursion/karel-1/maze014.kw create mode 100644 files/ib002/recursion/karel-1/maze015.kw create mode 100644 files/ib002/recursion/karel-1/maze016.kw create mode 100644 files/ib002/recursion/karel-1/maze017.kw create mode 100644 files/ib002/recursion/karel-1/maze018.kw create mode 100644 files/ib002/recursion/karel-1/maze019.kw create mode 100644 files/ib002/recursion/karel-1/maze020.kw create mode 100644 files/ib002/recursion/karel-1/maze021.kw create mode 100644 files/ib002/recursion/karel-1/maze022.kw create mode 100644 files/ib002/recursion/karel-1/maze023.kw create mode 100644 files/ib002/recursion/karel-1/maze024.kw create mode 100644 files/ib002/recursion/karel-1/maze025.kw create mode 100644 files/ib002/recursion/karel-1/maze026.kw create mode 100644 files/ib002/recursion/karel-1/maze027.kw create mode 100644 files/ib002/recursion/karel-1/maze028.kw create mode 100644 files/ib002/recursion/karel-1/maze029.kw create mode 100644 files/ib002/recursion/karel-1/maze030.kw create mode 100644 files/ib002/recursion/karel-1/maze031.kw create mode 100644 files/ib002/recursion/karel-1/maze032.kw create mode 100644 files/ib002/recursion/karel-1/maze033.kw create mode 100644 files/ib002/recursion/karel-1/maze034.kw create mode 100644 files/ib002/recursion/karel-1/maze035.kw create mode 100644 files/ib002/recursion/karel-1/maze036.kw create mode 100644 files/ib002/recursion/karel-1/maze037.kw create mode 100644 files/ib002/recursion/karel-1/maze038.kw create mode 100644 files/ib002/recursion/karel-1/maze039.kw create mode 100644 files/ib002/recursion/karel-1/maze040.kw create mode 100644 files/ib002/recursion/karel-1/maze041.kw create mode 100644 files/ib002/recursion/karel-1/maze042.kw create mode 100644 files/ib002/recursion/karel-1/maze069.kw create mode 100644 files/ib002/recursion/karel-1/maze666.kw create mode 100644 files/ib002/recursion/karel-1/maze_skel.kw create mode 100644 files/ib002/recursion/karel-1/skeleton.py create mode 100644 files/ib002/recursion/karel-1/stairs.kw create mode 100644 files/ib002/recursion/karel-1/stairs2.kw create mode 100644 files/ib002/recursion/pyramid-slide-down/.archive create mode 100644 files/ib002/recursion/pyramid-slide-down/BottomUp.java create mode 100644 files/ib002/recursion/pyramid-slide-down/Greedy.java create mode 100644 files/ib002/recursion/pyramid-slide-down/Naive.java create mode 100644 files/ib002/recursion/pyramid-slide-down/TopDown.java create mode 100644 files/ib002/time-complexity/extend/.archive create mode 100644 files/ib002/time-complexity/extend/construction.dot create mode 100644 files/ib002/time-complexity/extend/construction_dark.png create mode 100644 files/ib002/time-complexity/extend/construction_light.png create mode 100644 files/ib002/time-complexity/extend/dynlist.c create mode 100644 files/ib002/time-complexity/extend/dynlist.h create mode 100644 files/ib015/.gitkeep create mode 100644 files/ib110/.gitkeep create mode 100644 files/ib111/.gitkeep create mode 100644 files/pb071/bonuses/03.tar.bz2 create mode 100644 files/pb071/bonuses/03.tar.gz create mode 100644 files/pb071/bonuses/03/.archive create mode 100644 files/pb071/bonuses/03/main.c create mode 100644 files/pb071/bonuses/03/main_light.c create mode 100644 files/pb071/bonuses/03/makefile create mode 100644 files/pb071/bonuses/04.tar.bz2 create mode 100644 files/pb071/bonuses/04.tar.gz create mode 100644 files/pb071/bonuses/04/.archive create mode 100644 files/pb071/bonuses/04/CMakeLists.txt create mode 100644 files/pb071/bonuses/04/main.c create mode 100644 files/pb071/bonuses/04/maze.c create mode 100644 files/pb071/bonuses/04/maze.h create mode 100644 files/pb071/bonuses/04/test_maze.c create mode 100644 files/pb071/bonuses/05-06.tar.bz2 create mode 100644 files/pb071/bonuses/05-06.tar.gz create mode 100644 files/pb071/bonuses/05-06/.archive create mode 100644 files/pb071/bonuses/05-06/CMakeLists.txt create mode 100644 files/pb071/bonuses/05-06/bmp.c create mode 100644 files/pb071/bonuses/05-06/bmp.h create mode 100644 files/pb071/bonuses/05-06/main.c create mode 100644 files/pb071/bonuses/05-06/test_bmp.c create mode 100644 files/pb071/bonuses/08.tar.bz2 create mode 100644 files/pb071/bonuses/08.tar.gz create mode 100644 files/pb071/bonuses/08/.archive create mode 100644 files/pb071/bonuses/08/CMakeLists.txt create mode 100644 files/pb071/bonuses/08/Makefile create mode 100644 files/pb071/bonuses/08/counting.c create mode 100644 files/pb071/bonuses/08/counting.json create mode 100644 files/pb071/bonuses/08/test-bonus.py create mode 100644 files/pb071/bonuses/08/test-counting/basic.in create mode 100644 files/pb071/bonuses/08/test-counting/basic.out create mode 100644 files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.in create mode 100644 files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.out create mode 100644 files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.in create mode 100644 files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.out create mode 100644 files/pb071/bonuses/08/test-counting/empty.in create mode 100644 files/pb071/bonuses/08/test-counting/empty.out create mode 100644 files/pb071/bonuses/08/test-counting/fgetc.in create mode 100644 files/pb071/bonuses/08/test-counting/fgetc.json create mode 100644 files/pb071/bonuses/08/test-counting/fgetc.out create mode 100644 files/pb071/bonuses/08/test-counting/going_bananas.in create mode 100644 files/pb071/bonuses/08/test-counting/going_bananas.json create mode 100644 files/pb071/bonuses/08/test-counting/going_bananas.out create mode 100644 files/pb071/bonuses/08/test-counting/lorem_empty.in create mode 100644 files/pb071/bonuses/08/test-counting/lorem_empty.out create mode 100644 files/pb071/bonuses/08/test-counting/lorem_some.in create mode 100644 files/pb071/bonuses/08/test-counting/lorem_some.out create mode 100644 files/pb071/bonuses/08/test-counting/mmap.in create mode 100644 files/pb071/bonuses/08/test-counting/mmap.json create mode 100644 files/pb071/bonuses/08/test-counting/mmap.out create mode 100644 files/pb071/bonuses/08/test-counting/never_enough_random.in create mode 100644 files/pb071/bonuses/08/test-counting/never_enough_random.out create mode 100644 files/pb071/bonuses/08/test-counting/nothing_to_see.in create mode 100644 files/pb071/bonuses/08/test-counting/nothing_to_see.out create mode 100644 files/pb071/bonuses/08/test-counting/random.in create mode 100644 files/pb071/bonuses/08/test-counting/random.out create mode 100644 files/pb071/bonuses/08/test-counting/random_again.in create mode 100644 files/pb071/bonuses/08/test-counting/random_again.out create mode 100644 files/pb071/bonuses/08/test-counting/stream.json create mode 100644 files/pb071/bonuses/08/test-counting/stream.out create mode 100644 files/pb071/bonuses/08/test-counting/tough.in create mode 100644 files/pb071/bonuses/08/test-counting/tough.out create mode 100644 files/pb071/bonuses/08/test-counting/tricky.in create mode 100644 files/pb071/bonuses/08/test-counting/tricky.out create mode 100644 files/pb071/bonuses/08/test-trees/aligned.in create mode 100644 files/pb071/bonuses/08/test-trees/close_call_but_not_exactly.in create mode 100644 files/pb071/bonuses/08/test-trees/could_be_coloured.in create mode 100644 files/pb071/bonuses/08/test-trees/example.in create mode 100644 files/pb071/bonuses/08/test-trees/is_coloured_in_a_sense_but_not_brother_to_the_others.in create mode 100644 files/pb071/bonuses/08/test-trees/no_tree.in create mode 100644 files/pb071/bonuses/08/test-trees/no_tree_again.in create mode 100644 files/pb071/bonuses/08/test-trees/only_root.in create mode 100644 files/pb071/bonuses/08/test-trees/pretty_tree.in create mode 100644 files/pb071/bonuses/08/test-trees/two_nodes.in create mode 100644 files/pb071/bonuses/08/test-trees/two_nodes_other_way.in create mode 100644 files/pb071/bonuses/08/test-trees/whats_this.in create mode 100644 files/pb071/bonuses/08/tree.png create mode 100644 files/pb071/bonuses/08/trees.c create mode 100644 files/pb071/bonuses/10.tar.bz2 create mode 100644 files/pb071/bonuses/10.tar.gz create mode 100644 files/pb071/bonuses/10/.archive create mode 100644 files/pb071/bonuses/10/CMakeLists.txt create mode 100644 files/pb071/bonuses/10/Makefile create mode 100644 files/pb071/bonuses/10/hangman.c create mode 100644 files/pb071/bonuses/10/hangman.h create mode 100644 files/pb071/bonuses/10/hangman.json create mode 100644 files/pb071/bonuses/10/main.c create mode 100644 files/pb071/bonuses/10/tdd_lifecycle.png create mode 100644 files/pb071/bonuses/10/test-bonus.py create mode 100644 files/pb071/bonuses/10/test-hangman/.gitignore create mode 100644 files/pb071/bonuses/10/test-hangman/at-once-bad.in create mode 100644 files/pb071/bonuses/10/test-hangman/at-once-bad.out create mode 100644 files/pb071/bonuses/10/test-hangman/at-once-bad.words create mode 100644 files/pb071/bonuses/10/test-hangman/at-once.in create mode 100644 files/pb071/bonuses/10/test-hangman/at-once.out create mode 100644 files/pb071/bonuses/10/test-hangman/at-once.words create mode 100644 files/pb071/bonuses/10/test-hangman/basic.in create mode 100644 files/pb071/bonuses/10/test-hangman/basic.out create mode 100644 files/pb071/bonuses/10/test-hangman/basic.words create mode 100644 files/pb071/bonuses/10/test-hangman/hangman.in create mode 100644 files/pb071/bonuses/10/test-hangman/hangman.out create mode 100644 files/pb071/bonuses/10/test-hangman/hangman.words create mode 100644 files/pb071/bonuses/10/test-hangman/no-more-tries.in create mode 100644 files/pb071/bonuses/10/test-hangman/no-more-tries.out create mode 100644 files/pb071/bonuses/10/test-hangman/no-more-tries.words create mode 100644 files/pb071/bonuses/10/test-hangman/smoke.json create mode 100644 files/pb071/bonuses/10/test-hangman/smoke.out create mode 100644 files/pb071/bonuses/10/test_hangman.c create mode 100644 files/pb071/test-bonus.py create mode 100644 files/pb161/environment/gitignore create mode 100644 fonts/CascadiaCodePL.woff2 create mode 100644 fonts/CascadiaCodePLItalic.woff2 create mode 100644 fonts/JetBrainsMono-Italic[wght].woff2 create mode 100644 fonts/JetBrainsMono[wght].woff2 create mode 100644 ib002/algorithms-correctness/postcondition-ambiguity/index.html create mode 100644 ib002/category/algorithms-and-correctness/index.html create mode 100644 ib002/category/asymptotic-notation-and-time-complexity/index.html create mode 100644 ib002/category/graphs/index.html create mode 100644 ib002/category/recursion/index.html create mode 100644 ib002/category/red-black-trees/index.html create mode 100644 ib002/graphs/bfs-tree/index.html create mode 100644 ib002/graphs/iterative-and-iterators/index.html create mode 100644 ib002/index.html create mode 100644 ib002/rb-trees/applications/index.html create mode 100644 ib002/rb-trees/rules/index.html create mode 100644 ib002/recursion/karel-1/index.html create mode 100644 ib002/recursion/pyramid-slide-down/index.html create mode 100644 ib002/tags/applications/index.html create mode 100644 ib002/tags/backtracking/index.html create mode 100644 ib002/tags/balanced-trees/index.html create mode 100644 ib002/tags/bfs/index.html create mode 100644 ib002/tags/bottom-up-dp/index.html create mode 100644 ib002/tags/c/index.html create mode 100644 ib002/tags/csharp/index.html create mode 100644 ib002/tags/dynamic-array/index.html create mode 100644 ib002/tags/dynamic-programming/index.html create mode 100644 ib002/tags/exponential/index.html create mode 100644 ib002/tags/graphs/index.html create mode 100644 ib002/tags/greedy/index.html create mode 100644 ib002/tags/index.html create mode 100644 ib002/tags/iterative/index.html create mode 100644 ib002/tags/iterators/index.html create mode 100644 ib002/tags/java/index.html create mode 100644 ib002/tags/karel/index.html create mode 100644 ib002/tags/postconditions/index.html create mode 100644 ib002/tags/python/index.html create mode 100644 ib002/tags/recursion/index.html create mode 100644 ib002/tags/red-black-trees/index.html create mode 100644 ib002/tags/sorting/index.html create mode 100644 ib002/tags/testing/index.html create mode 100644 ib002/tags/time-complexity/index.html create mode 100644 ib002/tags/top-down-dp/index.html create mode 100644 ib002/time-complexity/extend/index.html create mode 100644 img/blog/aoc-2022/04-week-4/calendar.png create mode 100644 img/favicon.ico create mode 100644 img/ib002/karel-1/maze.png create mode 100644 img/ib002/karel-1/stairs.png create mode 100644 index.html create mode 100644 opensearch.xml create mode 100644 pb071/bonuses/seminar-03/index.html create mode 100644 pb071/bonuses/seminar-04/index.html create mode 100644 pb071/bonuses/seminar-05-06/index.html create mode 100644 pb071/bonuses/seminar-08/index.html create mode 100644 pb071/bonuses/seminar-10/index.html create mode 100644 pb071/category/bonuses/index.html create mode 100644 pb071/category/practice-exams/index.html create mode 100644 pb071/index.html create mode 100644 pb071/mr/index.html create mode 100644 pb071/pexam/cams/index.html create mode 100644 pb071/pexam/garbage_collect/index.html create mode 100644 pb161/environment/index.html create mode 100644 pb161/index.html create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 talks/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..10f54f9 --- /dev/null +++ b/404.html @@ -0,0 +1,25 @@ + + + + + +Page Not Found | mf + + + + + + + + + + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/assets/css/styles.8480cb83.css b/assets/css/styles.8480cb83.css new file mode 100644 index 0000000..d9292af --- /dev/null +++ b/assets/css/styles.8480cb83.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.button--outline.button--active,.button--outline.button--primary:focus,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.DocSearch-Hit[aria-selected=true] mark,.content_knG7 a{text-decoration:underline}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}:root,[data-theme=dark]{--ifm-color-primary:#1d9bf0;--ifm-color-primary-dark:#0f8ee3;--ifm-color-primary-darker:#0e86d6;--ifm-color-primary-darkest:#0c6eb1;--ifm-color-primary-light:#36a6f2;--ifm-color-primary-lighter:#43acf3;--ifm-color-primary-lightest:#69bcf5}code,kbd,pre,text,tt,var{font-family:Cascadia Code PL,JetBrains Mono,Iosevka,Fira Code,Hack,monospace}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .light-mode-only,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=dark] img[src$="#gh-light-mode-only"],[data-theme=light] .dark-mode-only,[data-theme=light] .darkToggleIcon_wfgR,[data-theme=light] img[src$="#gh-dark-mode-only"],html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.button--outline:focus{--ifm-button-background-color:var(--ifm-button-border-color)}.button__icon{fill:var(--ifm-button-color);display:inline-block;height:18px;margin-right:.5rem;position:relative;top:3px;width:18px}.button--secondary .button__icon{fill:var(--ifm-color-gray-900)}.algoliaLogoPathFill_WdUC,[data-theme=dark] .button--secondary .button__icon,[data-theme=dark] .icon_PlDd,[data-theme=dark] .icon_R7DV{fill:var(--ifm-font-color-base)}[data-theme=dark] .button--outline.button--active .button__icon,[data-theme=dark] .button--outline:active .button__icon,[data-theme=dark] .button--outline:focus .button__icon,[data-theme=dark] .button--outline:hover .button__icon{fill:var(--ifm-font-color-base-inverse)}@font-face{font-family:JetBrains Mono;src:url(/assets/fonts/JetBrainsMono[wght]-9e9649b60ff61727d1aa4e9a1a10a93c.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:italic;src:url(/assets/fonts/JetBrainsMono-Italic[wght]-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2) format("woff2")}[data-theme=dark] code,[data-theme=dark] kbd,[data-theme=dark] pre,[data-theme=dark] text,[data-theme=dark] tt,[data-theme=dark] var{font-weight:350}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.card_h7vX,.card_n_Wj{border:1px solid var(--ifm-color-emphasis-300);box-shadow:none;margin-bottom:calc(var(--ifm-spacing-horizontal)*2)}.contributionsContainer_vdAK,.eventDetailsContainer_ujlS{border-left:1px solid var(--ifm-color-emphasis-300)}.list_B4_2,.list_DjY4{list-style-type:none;padding-left:0}.buttons_UAd1 a+a,.buttons_jSVm a+a{margin-left:.5em}.icon_PlDd,.icon_R7DV{display:inline-block;height:22px;margin-right:.3rem;position:relative;top:4px;width:22px}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.buttons_AeoN,.features_t9lD{align-items:center;display:flex}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.features_t9lD{padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_AeoN{justify-content:center}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon,.tocCollapsibleContent_vkbj a{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.containsTaskList_mC6p{list-style:none}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.buttons_UAd1 a+a,.buttons_jSVm a+a,.col{margin-left:0}.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width)}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.contributionsContainer_vdAK,.eventDetailsContainer_ujlS{border-left:0;border-top:1px solid var(--ifm-color-emphasis-300);padding-top:var(--ifm-spacing-vertical)}.buttons_UAd1>a,.buttons_jSVm>a{margin-top:calc(var(--ifm-spacing-vertical)/2);width:100%}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/fonts/JetBrainsMono-Italic[wght]-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2 b/assets/fonts/JetBrainsMono-Italic[wght]-3b3bdc43604f6a6a23ccdf1b46ad815c.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ceb955205000121cae501e695ec51bebd90a043b GIT binary patch literal 125596 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�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

F= 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 Jf7&dc004nU7o-3H literal 0 HcmV?d00001 diff --git a/assets/fonts/JetBrainsMono[wght]-9e9649b60ff61727d1aa4e9a1a10a93c.woff2 b/assets/fonts/JetBrainsMono[wght]-9e9649b60ff61727d1aa4e9a1a10a93c.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..12a10899a1650e6f51aa404277945666b53e243a GIT binary patch literal 114020 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�nQPNyntepskX|YW7 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%0DfCd%ni6)_W&J((bxN%t?os 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 literal 0 HcmV?d00001 diff --git a/assets/images/bfs_graph_dark-f7a3a78eaf9de049469b4c64e0712867.png b/assets/images/bfs_graph_dark-f7a3a78eaf9de049469b4c64e0712867.png new file mode 100644 index 0000000000000000000000000000000000000000..2b064339c052ddaa82908aac2faac3149edd325a GIT binary patch literal 26144 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

fsAnAoP7XZUv;2Dl9Sy) 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 literal 0 HcmV?d00001 diff --git a/assets/images/bfs_graph_light-6e21a942bccd92bcce6840da7c3cb056.png b/assets/images/bfs_graph_light-6e21a942bccd92bcce6840da7c3cb056.png new file mode 100644 index 0000000000000000000000000000000000000000..3a47c3412cec3a2893f63cdfde54fcf433a2fc03 GIT binary patch literal 24964 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 literal 0 HcmV?d00001 diff --git a/assets/images/bfs_graph_with_additional_edge_light-799673ba333298d16327abe67c90507e.png b/assets/images/bfs_graph_with_additional_edge_light-799673ba333298d16327abe67c90507e.png new file mode 100644 index 0000000000000000000000000000000000000000..63d9ee2d67b20473abe99ca9c923e5b5906db26d GIT binary patch literal 25963 zcmcG$c{tZ=`!4*|C=yDD3?ZZfBpE_7 zCS=GwXV~Yx*0c9-|BiR>Ki=bb-{a|7t;P5I8Sde_&g(qS>-N)7Q=+3`qoGhJbSISM zPvh@J3S|{L^*a1pt<$6<{#s{xQc0e&LjL!pF!>>c!c93Le^lEgdbr(H=TUFR`mxbH z!+&}HK7Dd)-%risM;Qe*gV}dkJx;xm)MtI5CQKsDtS~t!Ot&&edgQ#&gJ*q3+;?yC zv}j(b3gqxH@Nr`8n_aH+ul)4L++rlMds+Wnb6!x1gIAtqk@S#s@Qu6F+bf-Dk2O&p z3ToJH=n^!f=+b@oB|BsGrV@Lvq}<%Cr&F2mM_gRo>e3}|RsP$@;%}s;?g|J9Fg7(^ zWov7DNJ^@#sVU6q!i!4UTG8f~mb(D~8};+9uKoV~`^T!P_c2n=8fVY?G&MC{6RB)z zVZD6$^4R$JO?jT1#l>>#=-AfC$;nZ#StY)_F8_E*aJ|FhByA!4?$Wi}4_{qlSsSaM zsJQNNRFsLW?cXOUva+&Qu3hu-_ov;?!GRyq#%oa1($d~7Hx&~Tdy<#8?bNALDbJrD zv$q#jQBl#*(70jS{BnnY!20G4BVT=CrC?5(eWo9%rI)4}@RWCaeb*1|GWKDKZHSoc zuQh9aX>jOD7v-M6fA^n1fn#G=?s$9e*t18qS3z5lX>PthF66<3Tfcr?;1du?c>S9B z_Ii3nM@KP>+E_Xk7M9SU)IS)x+~;X&Wix+%jQ@Gl`E&4F8Z|Zb5qyYWJvLx@>94Jr zzrJu~~;OC9T^cp!T8En^x4OQ83WL#OIJ2-G%+zJm!1DfBpI;Ur|vZ z<}|1+={mtTq(d(zA))2&F0CLhfBy*glN&cE_kx235>Ho2KGqvAbrAa2+Nv_t^nzDP zO6pZk&NK7sFimswokKdop^=d%LPA3L7^tm2-rwOk{!^hTq!F*J75VwID$T}?e5+Tl zcAKn`$SwL^93C2~(B0k5$3!!b7;gAD5l|c%ZF6}K^S-!qz-MUvn z&rZwV`IdIB=f#_j(#847EQ=bpyYf6uS^0O2tSg;9{rT}`e5ygctfFF_wYBvXCns}` z6TNFzQ89}cZWIv_`5Ym-8uw}`ye{#(>?> zC;ohik@78Gp3aDn^^iPxxh*9-d~o9SHGN+!E92potbJl)AG*tY-zj{jGX8LvvE_{& z*R|o6o4wWH*+C7~1!MZYdvsr|nV+9ObZwY*_|G5R%DNQ$o(hwi$KrEyJ;C-f!@5oO zlHPXp4u7uw{<=f@?{GG`#?yoZ-AWUS!Nyc&b@fWTrqg9wUzS)~mOTAU*cEHmt~KfZ z5|iGu?~H)~9TykZhl&bQOhI~&BX#Gq{#Nt$d?!I+;fmxq&rgyx4hIh&bXi%NB}4S9 zw>K-OVMoDO+m>CSD(QxWY_u%Gciz2|8akwB^8VJ^D_5?RwC39CDh)6gx{Ua##YlQD zF1mk?k_dKUdSPN^b@%PtLl--XIQH({o8FVdE+RcEe|={7=#?w`+&w%Z1H1<6cYcnM zV)6Jp;~f&hh!++$DP6<2bEjxk1HZ8FCUbN1&kl}jz3_dp=@M7xDm6idcbiFo>0ft)s>rPZf* zaoKTE}$#%3`D-=9OMp6e(WZ?BwL6^Y+S)mqx`wK0fQd zW;ol_-%D%zTvMZIWK=7u_zoK~*xbx)byss*wa(k?v%>N`j96e^@0*)v-*d$xMm9D! z?yH*0{PamBCO?~=yuqcY39MGtirKNTBeu4?&%V&}e*BoNt=Nl8Zh4M3=~UD@Y*hY8 z&a;MwUoJW)A8_f;s~l`drVj`Vw4a|a=kKYFlAu2p&oEjrx#{A?i^i8O1^R6f;E|Tz zzG>4Y)%`MicJDsfGuu2$gGtXq1mAb1>xhMf!^TaUD&mj(GO)5zA2@IT@!V{nK2fLG zQ|6&GJulC*T25f_;{T{H}N4sy@bq6 zh7B7wxQv&xki}SZqBi%WiV96>Y3Y^4Ir{)kna57s`+olXc?CPD?XCT4MMcGb7i9Bg z1T-?N!Up+k%*@Q1>?2O7t1BrhQ@^(B4BB?UBJ-d1um5f<6O(bt4XTL44*X>Jvx3Ux z4GcI)-a&lWF5{-%fB9U^Y1HFd(T>9O9;@insq(6-8xf8X+L9d1 z*U$M{zTNZ~AwpRH?Tv^CR>TmqUmru#d96S1&M3HrmEHBhZ_5=&#|s?E4q|iLrPS1O zUcauV6)8Bv%*^cA_jy~BeWO~ccKw5$Czbg&Ynqz!3>`8krLA?kr!Sm5(2)EPyXj9y zVU*MMT1_oeA(YC5`dXNH`U9rSJ2>_~eV-c1zANHs=s z>$Yv%#%5xAUGXV? ze*Rzm{YocJoWS$06_HN9x_0earY&2Jn`TA0ySrOehwW`_Y56GG#M|57-%y`;l3Z&0 z_U%^FgWueo_xv;|7>jOg%XjiOH8ZRF`t|G+%BRP><` zY_h|L57+g_d8tiLPp2oOaunx;X-TDO->Zp|Fe~$+d+R*Pi5SMn!4Y`kA-_pi$xXKT zfI?ONujHnmUaklX_`g+dQ`ElZORe)u4d zDEt1?Cz>5Qc2IBF@czls+uR|_T|a-;C)zX7ti9Zx?>#(x5xb|SEzjYt`~3b#Dm!o8 zzKww6osuFrHT+#myf|W0w|9R;)t4`dSFi3refsqM$B*y*{Ao(L@#4kag_%FJ0s;bW z-@Pk)|DNjX*|Yoh@4xjg^5TA2^+ZDu|I|2t-v8FERmzE{F}gkBMxHnIg?)AQC>DDz zF)%axeEq6%$H!-IWM`HT7MXS6>)N*B@d|cso=0I}Pg7E;f$MT}bFD64R`l?Y`E~U$ zqL+!WF$M84Cnx8LU1!nnZ)q%TZEamcL$qFAUUT#F1C5s7#BTyHv1Jr32&qLMy2&na zIp^;~E5z5nzP^^X_PiEfqEq|scGS+zRep{PM*}%)QrD%VZk34vcOU&C}Yo_J^2OcuLa&tEX`G7Ye&3w9N6r+ zJZ~9#@yqHPX=%H$#OE!RwqTf4FLo4c1M~&-I{ke=24kLWc>`IFwihpch?Tj%&#pr{ zR5mWqNNeQ+_DO{YP{94F3ohN>EZX_{p3j!6$cKLvxE|o)sfuT3g2e!bLSFL zQj`;`zX{+=itX>5>8q-$grsz4Gl5iBQ;e$R)?uS+B79@nuC55!mM~%dqqVj4`}ate zWl?fTY=@R252?P-k*l+GWa2)DDf2BVFPY(y*&K#jM46bGd4z@4E}4z-P6wknu>Rav z6UE5JcCVxGdfKIc*AC+#BpmwJ_T zXUOwi{PCI&X!veW(Al9wMMXsn)N9___xSwpzpj;Akybr*>YHRxV&cx|m>AdY6##?e zYb?V0C84{|HC`QA(nPSiGTC=3Fd)$uZ;<;V$9fB<2tY%8e{4pEh*8Sh6CEamZbbHpmNjERFf~=A4zy%`CtwX3KW zrUuHI$AYmOQ@xMHm!OnjWMNq!qWo-peE#M;C9IUjp8(T>yLKH#ZhAQG+RYV+oBN-N zI@ld)8GG~18;OVG9v&X{vm*u{d$02M*zU#)^*%ejD`@-Sr&+s)ILq#^dj`h{umj>z|$YydMbah#=EM%|a()llEn@Tn{@WwaN)j9zql!8yoBLUg4N- zv%EX>`b(T#@KAFGDV)+1N}8L);~xLz09Mkrne3}UIaNmHFD*N|UOMKlcE&kgbpLKRg<*QPSAR1gx=7RP<(U zt~k~bDK;sGkYzr7`V`@z(Pxi^bU!-!v!qW`m-na-)(h~+&E4l-a!X0EBL%&6=--5o z;_9sT)sC@69z9}0Wz2i{@HPZwR%w@g zC~ris&s==__HByeXMxm=3}0{WwVrd`>*W;{Z5%JYkdHPDsk)GJ?T_9dzy=j5X!VNR z4;$oNRp`-0%|C#3F6OoD{_4#efh-->hXU$JD3-0nd>=mC;sM0S#-Vk7ymV+oq^hEk z=lo8LdPr85=&2aVP_0&lX|Z&ZaZ`K?5m(@oyf>Yrfu6!0B-qg+;)sb#87+4 zB`YgS%;Ga^ZczO0oS|pCns?~x>LN6k4rLSvp>AqJAm#E}9KYRQ-fHvp$x%|X>_2e8 z#Kz{{lPBDJ^xra|kg?fT`{PGc=X~D^UVxjY6yS-GiD}K2EnD=9+_%Mf%tSV^EX}Ul zwEgY@%P+=1USFE)_T?H2FJ4?Lw>0(eQ|0)~j3Q8(lixwGg+eeWQTp$o@@xH$FY<>g-^BQIx`44IJ} zU+CrD1B%+K|Mor;jkikJ`7>t}D8ErD3+cuR_e4!e{zOP(J$R87tF6AiUTo&K`Kis+ zYjg@+L^p5VOe!zzWDXkdr`6TDSy?v&1L?@^ZavBmWHDU-=+Prm`(3fOKZ;#|u&1kZ zIt@6i8`nQ{^%pfD7v=Q(T$94Mjdhh?L!Xuj6PAFgwuHl~0d)t*~Q_&HZ|)E?G#n1-9_DzwCMwrM9U~Lrw8--?GMeF6Z+OWcdBq@>=hH)20v zu@PXTjPG1jk;mVkAcbNUzT<%iC5K|ZeS|0JpgUcLxsZ?$rAtDg;aNd}G>RCrxv}og z`=x{aE$XGFvo9t0zn_Ds5}qj{RLb#>Nl+q!X6(2S-Jy6pj5q&zISLX__Sh)sw~C(E=ROsKA|jtsE7crjp? zR??GKuQn4>3-!fFXL0bodo^U;0#C{Vpf1u3f!m{Ps1yB=tDieFqO# zfL7`r9j)anV=;2S3F4*;yVlEvZBN>5ze}%Pz4}`0wW79C5FX9~5-z<|KHoc|J2wE8 zBf>>WSk&Ry;ec!V_wOGYc{f^$T#v^`f{@qNW||pkuinGLxI;#!@MQ9y>(hhY*Jnpk z_k~{W4t`vJY_xbqmO$gSHhn^|+2@d=q_nKeetPhXGT#HWy}Y8Lj9B?885yHt>lNqO z3~7;C;!#HksK;L5P)NJjnzP~N&6_d8Qe#8>GK@|OTF&`FEQYioW_E~)F{Pc$us~8L zsBp&)Dv_c&)9|pK-rltol<_ZxOb5U|@0|t})Qvjxkp0g!pa;6KXM7V9c!BnTy213e zeE;tBW61@d+zK2Ca>I1|XStP)jVXt3>eQ4YsJhiFbCq(&7cMmR_Ts)kH?5Yap9xKN z-mb7*lI8%2n+Tcf2YGmS#ug`Q(=J37x=sI#nu?yW|1SdIfDA{)z5l)XUw8A!lLx)m z`o*P-#}uniA;JMv9svL&+}G7#%1t3+eWB+J--qxjUHSQ8!y!q@=NI#E;lbD8%@g7U zn{;w*wkD}Y-U21!?9YCPfw9AV^3>wr&XtOh_IGENw=EhLx*g?zXx(eMwvhx%YVTtg zzrR}BQyE;@l4X`p!wf)xX~IK8nysT%g+DWvWS_brl)VV3c7rKoX*~@ zr|HFcG4oGMn`yi+n3)~-XWsi1wRuyPGI$FxUsgXq`0;J_1L*OSU0HN^o{?c0W)0@` zg0b-t8t+@W>zL=*41=LET(Gbxt*xc^`un4k)P3M^riPm70g=lRPlk)Vt`d1zb!DvU zD0te^s;Uh@gs2uuFvB6?;l4Xhh5=P-^XhVzg8~Dy3X04$?B-g})f;8(QIZ5~KfF08 zD2S~5;o;#Yz<$e%uEU+hTz-CjAFHcxhlXxFcI+6#=FPW`-d=ZI)pkS!Vn)T~>g@kBOc>eyLoowT&yH#-SUhnMe17Big{4+E6HQ9^# zuo%)4D2Vw5abBKfR=GU&@+G+vNIj(I(^^`ZKzo$T++2muA`cXfYY-L>9XeD3(u06w zadE=_f*u3ifq&ZA+G=WOP!Qt*W)~-_MebMkGWeJO#=L{iW59j|9}#M}IZZ`=4JZb} zN!|7LH{(z;bLnraCUJ}MOY z6rmn@Hzh6Y_{o#B|6wf<9dz{cO22*Es-~uP#lhh=3b4hcrSAUzX5P|5(I5xVj@5VIkNVuaNrjKS_!IUGOlx|A z)kbWfL+*3?h>nC9f`r1s;6Gn;FaPV-G}>%mS)ZuOx2$xdvbZc*6USJLNh?rJX@@p<+tZ& z=6-Z8`yh)=zOp@18!MxE_H5IoFXfY^wjo=0pEU-#JonRIB=h3;{Z01yYt_|jFHg@| zA*5%SmeUmc9eFo5n3j=gRfiOmABea}b>z)1X}S2cwX$~h~u+ZmRLrff6zHFnF$0k!UYd0x1V*E zJY756y^WivVB*tm!gr%QaQ(h*NR6cv08s~_3CuI0p@x6Fp~p^2=XJW?ZcSG!F(94- zVH9;hOR<;SCJxCvnhA z1R$co0{JpBFqBAco@H(CZQS1Jd+s(cVE~&r4KhXuePac>x_9s1 z6`(*wx2BM{*Z#fU84w*Cp$pzuNmN!*IR;fnN9kv46$VC7=A!cSrS!S1zZ`ScT8K^hH{Jt*^fY1!R3(R-dDi^I?`++D-)s zXsn{9Ywl8m;kyY6Y)DyOpaqOmef6;)i)3)=h~9^QET`0+y7 zE0we>tcV0WaY(s*f5!-bTSVU(Gu-};1uGu$xoly2Xb028u0gdqwj%a< zV9I?CeX4u(a;Q7qC+Q%y4k<_b4E!yZC>UF@1Hn!rP}m;bTM&l>oVEus($mv_ys#f+ zV|LI}=7KTG|1)%yi8fvnHZ+nL${n=Q#-;;Rg+DenHiVjqR9)wNj7m#O3$XkBhYxFD zBY*?oY?ae++SwPS2*@O$n}9?Un%nExoY1!dtW5Egv5gO!Z$1c0gW|b&@dnju)?`f? zes4f>?3Z;f_495a{X<{xg6=E0d-rkJ7~X}OUA(waLPCP@U&yYVom{uq(cOxRGkP~u zd@fz*rgNtU@c8&z=Dm82p++Z?9W9mxR3pZGy@m!CZF%v8P=kj4coy8atK5DY8Cd`A z6)L5m?PT{6Y6yG`ma?o%!vD9l&BS}7Kfbx4OKBNJrTG8zkzK|r?EOYjbez(x(4#(p z3D8y2lsTOM=%EL_GVkqM2Fk?DOcL@zJ&LnkA|mR&J-InK8W-f;Dk+aRAIG_AqN&*1;}8Rpx|Anjky}S-RA!%H^j5&%$?@{7kcMaP|{}izT}O`#bZ8H(o;-6=-@wihejv9846bZU`o{ zE1FMgDz5Vs*}dBz1=0yYruvg2h4KiWND1=Nk~)9~H2RaQ+S=gg@%XQ@;q!J z*oF{SzFeLk_pFZdIykuk!s`J(SW$WAjR5m9yeK^E?ChUvYQD*HzLFHR5ad^+w1P&aKQEY^#;haPpYK7P&>+l*Hk^AeddfNsC+Bn6*l&V-xe(| zTwtIiy%R02G+lPMdX<{8)GxPE*Anq~EZMn0_swMv7>CBOUu?P#TyL!bXFv*SSQQeo zYEMkguZS>Dj*g6Mq6i8Ke*Nh3c;aK}?*C=Ya3Ax}u5WC-lWkeMzlK7gW!`fGHGI=c zgS45f9P8y=Z~lHR3bHsAz~a=cyX6sLNV&4*g$D8dEeMe|b6$#8>yu+3s0V z(sQTnmm*f;yq33tA9(9J$^ZEAW6s4D=*$+8V&W^8@)f#w3khB6|H6T+m;G@y1*O~W z-^~Z8p=p|i^=JZS`sCz@^W$lMtn$=|4YM@Kc-fMXx`50V^%fdabaanj%J*&Xr~7J9qAILphYV z+-4khvVC%8A1WCT5w{w>;?4!S{$k^#pym?eRAd1#h=29!^rhIXBez8t>!gCKNlHpWjrMJ{ zbatR&JwO5xoBgF*u$b(=yhla@B|k5*l9YP;VDN*`P;YGQv`h2p{lzuUPCU#sEx)&Z z{T~9YVZw8t`EIEyG4M@hrMUT8mzvRH{1^&7LIw~+7qe>)8zGMjUL=3cF<)N4k@d#h zoC}!DzekfW)$&S82dba>&9BH5O0le@s5kC8|2hEban4BW<@6Yt>tU3yusD5_+!VK> z)X=yncd@(Fn+c3V)_CKekaMm7#U(Wk8*%M@1KbS<*fDSwPTOTyf|F9`y&{TUbaUyt zfaQd&Z3=6^<1Y!hG_C_Sm&ACto=0*NdM8rqTgI5LrsmJoj=w=+pceXBF zJe;Sm2K+0)%gftZc>N86|F^a_)dLovxq&zN*ZVDRjPtr?=-RuLP1gO;5UWsKd~)S$ z+ys~l;r1&rdR)!ZH^__lSW}Z|Qsxr^9X3YVl_V%UUd6qwyFZqd-FDg-`g?4$+wbnd zORe%278XoQO!9B+I?p=s^8=75VZZzu9aRSpk=`TC9OqTD0L-bphk2+x@k@-5G-DlD zaVtnv7fel$ad}LIREXTw2*qI5-`TK*nnEB3N+%s98y4A>#||iCRy|<}9vE@#_VaAd zfGu@rWK@(EbX;oyXUWNPnd#{P#7VPXR1~zjoCUrAFb%#K5*2ll0>&iJ>5=fz>FytR zMh&oie&wbUHQKC0_)eW*DG|({W3~BIe$(B!^jhI7u6&@ zP5VQcifTY^3m!Ze2EM)uWjPS!v#o#4uI5Ffc9aLtz!#z{57J@^7E>)aF@~&!kk389 z)LR3?q?Wjf)D}FYEL7Y^Mn-O6a~)1zIv{{J(d1g6zyu(`p_eOYQWP@?0Ao?a{OXkXe%F}=CYwDj~3 zh&Uk+AKnHOOUTJ#f&~y6g;b}=`H0s$!mCX#U)}^4@xS=J?El0bIRz)xTl|S!$DE0ZJYcG$_p(;}CZq(Z_-zUNDRT`}p{H#KB9C z4P`E;9>AIy2RE6Jn!15hYCVpvymt19FQ)!1n?{dZad!3v>3rhE23+W=gSX|p{(+Z& z>%%M62K2kx+1LPCKwvl59FmeczK0of$^%rOl=hX~)dQR%%4;kwEn~b!2eiAV&9m<{ zoLacD@kBC>orT3Z#HJ#yTG8&lzNE?8$cEI?)y0>ah8B!;)g;EnrB^TP8;HJK?>oyW zB3+sL5GGNgTer1+mQ+a|xX?W>D_wajDvJH?@AsArjv;Eyh8dhAl>-~kojXVQIxsZg z^l}VkmX)>jO>H4_4(}n0=;&xj(5~I$sekmPJJb8cPVsGiUstD@tX_lHFfcIK!9+8E zQz~c!u2AID%!kl|Nt}SqWvui-iF%EFI{BNnHVZmGsn20$`{&UclD(Z?je&s9`Z+jw z4-iLNTRStTewXBV7wGqS`d`S<{9Y)Rzz-5nr)EF=G9YZ|vTiPL-=VXgKYxZ9@|Aa6 zkYhJ=xuC5EG9XB5?PH##;rc~m?p(2EH#54oL2~=&SzrJYWTI)(l$1}V9qsPE31SH7 zH7lsp>A=gEFJatQu(pN_$?>$oyC1Zlj`h1a#pZ)UPWfY(&ixp#aZ_smFT%}0?b0n? z1?K}|I`I*0V`D3Y?E+6UhxyuSP%sD2c#q@>7R;o3_q>+Xp|kLkv&V=?!&jaD`zM>> zXUQX$;s*~th42Z3fw#9e@k4_erVz>)!yFbCmYJP>8~%M&RaI7jzA1$>XSTwrZw%KN zBG-0s6?AlTAdSiPQs%n_{uM_5?%%(uLzF*APOR25!d%~j&_il>M8db8OOg|llbQww zOHrfjupOF(!wb3^oCCaS@h}lV^sM|Ee;ijx`7#$B#KWTxlP~o8kFeY!q+RYP@O%1{ z2S$mdzU!o#Pp)S4lP7ixlr!)J5o^$@Rm2#J%Q~&Fd2w^|)X${^!{Zx_n(Sv|susv{ z(2)`tysz1o>T`ep9tU{!5BMR%7P;Tqr$X2=bok01y8 z{!2y>fGU5-b7_HyWeJLbrA8|Y=OQ8_MPsS{Z2k`~UERTNL&O9SH{GZZ4>^x)ht7$T zg?#TlI15m`x3PthJGy`VT!k?u-jk0Xseuu(M~}k#3KR|78h5A)$o&AA4cow+0ookL zaNy_UQag_OaKkeUQK$@KhdQBgS;|JCJL>V{`v6)H-n&uwgWPA8bQC;x{5T_=h7e`S zP?#i|fuA9gtn!Hygvb&$ETG2z4%l{J9dv62G(y02tSy-&Tt8dNvURHoj17cBCH4qp zAIK8KSAw@+y>8)8iHql$kzp9rL-t#&JMT~AKeHWygw)> z&P-U`9^s>PA*%69X#d#~S8g^1GRtnW?@gyLzBE@mPf@&|KlH#iz81CwIK3 z(i#RRK4$+aEc(9MICZp(B$5o;pLeyFX0K6EG}Zz&g^qRK4b<35`y*9*%|u;yj<)3; zNB0PEs9?^gW`5Xdf#3BP4Awq<`q;{1zg#LzhJ-nR&EK)7g03km;_I8zIKU$42pcFM zY9g94jMTC2)6HbAz*+xT&Px`)lMpD?9b0E;-6JBB4A$m>GT&27b{)(- zV4=@EWR#ST*Z2w|CNDGm{(Y{Q{o(O#Rltf(I&z4-Q^zIf8-wH8`jOeXeov=}PRe_$L^zhuF19=43SC zp?MXQ$e3?9hxQP?Ok=7I-pAY)29int$T>~TqbI}m>;PRs2o-Y+i)+@dHeNd+d03a; z*?{34K%Rcm+N$S7pL!4$XoQ**GAf^B-O(83*AED z`8bM{iGGn!Y8h7=7gS>9ykfB$KtVqQqx$XeBSjc5gUAr`s)HrTs}<_Hy- zjQLd~j=&8AZ}gr2B4d_d2v3A7ZIj6HOBukEJcK_%)=ot^5bv#6zp(QR8o~O{tP-+M`JI`*4kvu!U8;_t2@Yr#EROXC` zo^2t7Try@|?{9++ihjvtn5ummNE8cX;M+(~55jz%mb#2WM@NS?u+Pgl&4JyKv9W3> z1Ig{r2%i=B3`mS{`x_`7mw5D&X}NH=gBROU62W;$kPTKRMQrLs$cma~W<6Vqjm$HC zp*aaQ41X}uX?K+YYjm6_c>B&hla`w)!d z5_)BVmt;c=9*~lYf%-S-AdT{$`KtU687cRIf|}-9fL8@jH9>vX3Ob7~yn1Eoy7q+1CN9}%5Oim<1VfE=U3i`{@+xXrSqVPOI&&(D z)(Z|v2+~hcPrM3xx)rP!DW*W!OeS|W^q$v89Y%~EbMVK#%NHyhuM&vkMj(RqJw4%f zE^I|mVAsOvXvU$i+r`bzba`=}=vq*2x#ndIgco6Utpgc~E*>W*O*dXXzBOP)Tj0VS z5_C&LKMRKJ11K`&z7olxCelm-rPvqaCOa`?Amk1v9EK_e7MAAFa>o<8y4%3nnAq9T zL-G0mx+W_tL^t*zK3xIt%gU6<-e$t&DWZJ_W{HSCqJ;Zw;-G=5i4;OI3g*i+jJQ^j zJIX<3&;GXi{YkbAGTjD>0cw}s{sTF{4Me7=nyc}Gec2?RUVW-Fk3_%hjnALF_&c^T zDYtSQ=3CVRX#bg|AC;jXutjo~c%l|T_~{QZ8mecL-Mg0#c6FGihd!A~ULvM@r0I2F z3r>a$$3vDvDA&sx1%C2^lG23@YRaJ?l9-&FHhWe>o#^MpNCFF31#wfXEPFsaARQU| z4jd@6%_yw6ICL4Nt-0QCBMn{MdEX4D)G;_cez(7qxO42_n>TVGnr|5S%ejmhlQ%~q z121(Ltt?yo2FJgDBWt5qq+G~(6WrUVGa7FpA?h1pWzM-?H0>*#O$7~I!y0|RTgIH}`LK-$s}WP&iYP*a=? zGndK~oO)+en~yC7Okc09tX$6%LX98LH;ojp*dg?*zQTV|QQ#_H8Os&kig>|^cxa$2 zAD$y~$pY3l!Wy9@3V~h?GsFJssmzIqtA;M(CQBVr5KQ&XpC?UT#Jq$HSwTs`&=f6B zoJ5nPXf@slsg=CZ!2uZ5?ZF~9e*5;mt*v0U|KKB{JtIlu4ik1WJ#p7Z4*%-wvyrYX z12jaR#9FitiTM^G3|3+_Mh40u!2{f^kCL!cl$Za&RrFbW50VYdX1$ zE&Bj@Et20OwB3L7=#Fl-#rvivW{7Tg0|U#Ojl633YRgEUPE*raG>Qc{F%^p8JI@jm zMLl@FpqDDsta1}*B#4WfiLV(q$Kvw&_3MH~9Tcs?naF;~9lBdgoXY zoDDta&B+cKVl_y5!O{Uf!JG0Gucw1PCs;a2NaJ!Jd(T_k(YxihsHkX5t}P3ktR#Na zf!`f1`WrN`vvT1jpebS1Rtic-iBt$p6rQ9R-r|=JN}HRSWZyE}TurQ43kzGI?z#QbX;nu9Wy0j@~JOUqba8Ll7G->2|;;xq3hhugDkOk ztw582{F>_9bUfzU*RMxBJw2y}vukB%{%X&tz>X6O8)%HIhu#_g#>2olJHcdtiiaDF z1bM)TieN5vtTjh$W3*`LBFO2UKi`1O&H2|u$YWPIs2j zYMd$EvNYRAypDguoK-t8h|p(1Xn6gceLfYM{_-WipFC7_Pi7neHu`~br6J!W&-zEVtDPNzl9J}AAs#eYiC+}afY5@ z75Ys8$yufc8hp{bkPx&Zrxbk8NBDc8e@jidix@mT=`FA@%^eH<2VWb?dSlzI7 z-^Ze6ioTxexrGmqZp09?V0QNUSu^fb2Mq&_K|uhC(+l0~`Db088c8_p-LprKkM9oX z8o--f;F%CocOoB>*YbUH0kG)Ph5dvFB0nn_Unedmmf~uz2PO z3$41mBaD5ho_J9us3i3W*a;=2^_BU_Ul!YoBK=$1|~D)zi!W21uY z^YV*6Q=*2T6)J~cfBu|8TODD|oaf)(sW7U-deOvulC=^L&^T!6n*8h;xdlKwhvXwP zA(cr!s2Dg-sK8kRIP!oS?qezm#?rf9sC@kR>PxLTe(1m;ZE5g+q-17l?5wt!QQ?$z zkGOT~7B%Gr-)247@6LdFxHowO$#!YTXobg%NS-j*JHi|QcwZM@`X)6kErCejU_-Ea zG@&pOaHD50zk;$g2j-SnSy?+U|3E}%=D&0GWn94f7Xm*(k5t6nVNd)WWmgmrco=9N z*ZNide|iC61xtXBMH2!X*ho}Pyx<}LPj6K0x7zKo+dT>uOY1vl5gFM20HHp@I{`rO z8=V+@539r;ptk`^Z^dn28wy&dL>2&UQqeoL*No;aYsdayJN8Fzg#D@lJT3?OKnxGa#wW1hB8$MK^8wI3URy{Lc54d!@;(}ZcVHca?9NqyeyYpF1}@KY zG{dkElm(~MWf*gO=(#q*ypBXPCE>-8PwOGPh&z+Fhmr9oTm^2wWCFKVcIC!OUg7`-V(nU4s? zYH_lG$hm{s+29^M^QoYT~>*iXS zTMt(ei~B^Cz#)j7xD*a=2;a1H@rSJIj|07qbRzCjr(nW6|N7$l;qTcdmX^L)OW8pm zoJwJo8iy$Tvs$DW26kS_#YqrJXhWN;Hd=n_<2YDJ+ew9P4S6RgaYL^qC%8R$!1+7z zyr2ib~zM%Q37Ob<0DV63+As~*7`1tc$#WS$iumK@U54fSYoa=lp2Z7gAX z`z$q<*o zMjOj^Nk{NAn}}T!W*+#`j)PU+2M+<@BC+cj7#dnw@I%C0i|n)YnHk2wAN|YrXd8qM zsTzHVk#MWL_7r$aN#lE#P5`3+Ca8hc)t^6osvoFvy}@F*6D`755T^*+j?TMY_4;qC z?24BT65I#%-O#-G;X}&BJiIdHNyGYK*e^q|u`4m3 zSte!c+^6c4@cG>cq(BNjaGlEj9X=2$ECrVyh;kIszAE8q){D{wZ15tP!ZD)*0)3h28!SNoRjJd#K4@_u3!EBC#< zDjaJv0yR=j1Sqaq6)OHs)p{UZTr&G}>e)wiYypvGR>hJ_exH)U zTBbF5Ro@(>`=v*@M*Z!y_^JO!TgH`*W;ZQL$kfi}^hsTx9Parpf?Xe2_{0N^XJ(|mHA(+tkHLKTgX%^pnAv|E1Z!+5w8N+mkoZ-Zg|P+56Aqj@su!e&QF4kTlF87c{eqYNYN8l~I6 znjKaHvLJyRw?uN-v2&-lGhfvYG{?l)z1lW3w72h7*-I{i?!&~s1wzcPu~EAKW~_o9 z<;Oel;6ACvWh4E+X==X%S)c?BI%nv*7EC1E#=kgDT;1rj>N0nGdpqe{-x_;&2xYS( zSe}@&gAgGKcu)B3z+*pq`m{8id6*(paG_vn<_B?b;5ql9%kB2?1_^N=Sv+v!=?(Dt zNY8cMR*Y%BpE9=j0V+i(e&t(~;k9aUAi#_Q2G{0i7v=X*^Yb>C|^oc<9^W4DR~ zV?vIDwhz}-ySwfD%7(YdaVHjKbM*p2lxCmLT>blSL6r+~Pe@pp50E%oBaKlQ7x4Q1 zOcv-WS{U4&5PgGP859Hj?x(y3+{-_Fcv4u%;RV}s_waB4NT;zNv5Tm%#1`joTQ zQ9g$INJ>gRX&AVIh)F2{+8|gE&w_JC*a-cTojv)aGOQGD&#;CnSZ0QGlyx1iSzrD+ zhc(aB)8)Y&k~1NIuVB(clL$Qs6aX%HXjnM)34rT1u=j7r{G+v&W@fiHY~e2f4TC-v zFkxkAD#R%Ye~qqxwZp*>uxuSos3QWgK7DzczgqHbG&zCA-Z}g0$R2H%16qK+P(u(n zNShtyN%N3BOv`v5a%uzailKxHwn$4GhXMs~NHIh5_>bxX=Nc7=Ry0&k&CDEoah7zx zSlQa5(pZfiWujXFl|BUqki&^Gm_T&W-Nw_9LxFVA_WJtb_glai@EJMCF*%5!GDg~1 zhbA|IUpnkJ-nu+c^BJTlneBAFTpGaGuLF)mO~VaHgA=k;PdSSb87qDq5Aoan&+zbw zek51~S~0#f$+2$taE1uGOto>r zOsnlh#GL{&R;H~Ts^l_g^oVeEaoLCKqgk*V=+LDy|M-iu**K5qwad6E|HCRB zraDWB%i|FoI`^FUk{Sjg3JYa^fMOgKT&LhIVFE@32cL+7V3~morBd`;PJnt<6a=5_ z%uHj_6liN_*B_RcpZ}Q3SSa+~`E_Pb0wwtGiu%Cm_&HXF9m=dmsy1RU{m4+>TP7H! zo`O^)z1g4(L}AR{F6SA2k{PiYu4$M=geTc)w|0EUdGm&x>C=MK4mw=>InYJZ?o{5U z4W|;YOc%H|R0T?yvhda7LZLL^C?EXzA#%`dkL58if&{B0|81ALM#><>stOb&pqEIU z1yo8Jj$p)Oz2u*En9FZzSAJ>KU9@44gB(!dlt9+`{Cs!`j1*R)FU}hqMi)L>0S|tP za@%Hh$YVilYpn8dSm`{`RAmalk6!hVU%L*7zR<~91(uovp*agJ;7Hq{ z5hto!U8O|;>PS=hJuOt)E>$Y0PAOpX5W%NI^DT^}r4SCtNpq0MG%JhHQ-CuBQpWCZ z6&ePEoh*RDGB!2!i$iHM{Gqf^o=7e8G-x;VDnwzF=-h*EPb+wbKPmI2PXO62QZTk^ zRPaH(h9CnpWSsIrT5_KT;^Q!Q?)=NlNs^lt3_C!Mn`T)=vGvW!)aB-uKiZ|0iNhIQ zy27`?rv7DtQ03eI4j zjv;{MCLluTDrKwTRWz8rXT6Q%IGVQyOHWWQ&%7xnrL`KPY_k9pK~jp9$r_ z`bRq$($Vop1( z*T(CyypmVWE<+-XeyH4lLRo$ub?U!91-v~X_gX}r6m6jnO}-NhYcz{!c&S%mYmg*% zOsL_gcQ`9-0@&48uSX_460N|&iTs~h1MLlab&3&yHWE{_t6W+HJ{mNY?Be zXtG1|R&oA5XF!|;i}^hCndIc=n!sCG#%cTPPv(%)IhPHfPAegE;XuR^se8}d!2wg# z&}{Cl5xd2$(d{Ru8Y{gG3mak7jv4HYORn0F*(`w{Q(bYjbe z?G4IEKZnBRgLWMoF`Al1KbCRuU%*dY=krjm;2awVzg*JV z>ekY;;nodwu12>QJ!W+Ky1Gh01|c{cDm1Kx zJYS2wrF-^lSc+MHZ?7mNJugqU(f-uh_WCFa78*o_Za;xoQWjxzq4IcdCB}xxO5{Q~ z6N&Lrp2LV?4Jm7}S{a@6wT^mAFhV420aHf|mEezh)V&rSrieH^A{&2?P9}x)*O2D2 z-@mQu`dO=JuTi#kJOlYgFf%%S))S{U@FnV!v7nt~#;|UFB6b||Ts(v`!Y+1S}t;=CM1$8PJo zFL$iP*uow?`TzpyJM1pHFcdV{*!n-bR5;WmP3eF`G zo6|=Wl30y)`aQzJK{%qTucxPs$nw}*qdLxKP@#3W4ehl+rxyH9I-nyOti%)}|DxmD z67`kDr+>cB3!&H8wkh2NZMZn+B^z@e1Nmt@s2td(x~j?qohhF|aU!Q@(#tL0pPrgx z6|Y2_gO0rX9nJnnY(fRw@}WLnpKW*k4!bie1*TK685s8?(RslBC#*O-`=Pm|Wi}4( z=o=pXjJa+1$adOvpIad(>AHe5{yv~JW{b4a z!4C<-qk`bP(a~U18ryQdIO~u0{U}5K-py_3%?jMr7 zNG&NPh5p(*I8qeE@2&HjI#R}Xm4PeKQlJT_1h3K4_;@Nx7h1o-)Va905Q`DmJi@Pl zI{;0!9)SZ02j$CCY>Akd7_{jtA+my%8;e_6Tn~q>56&JX`;;6D_CH!X*RZI|G>qdR zFtiX*7*5JbFjAB;l^hH?Nv1+5E3T);gd|N8^)zvZ~0;g>)$Z@7lO8%1c?Tr8W{G)~=xXsMG>7yJ9og5&0EY^AxB$}zu{JSNq$cGY*GkNW*M%3kgW`XtAUGctB^9y9x2m&WmBPWO9s z^CXTPEGs*p_)IoBd4zs{PqxN5*#9{A1$1aXefoaIh#Sj$C-KYEun~$tI&^N2u6x zKs0qC$S=z3YqfFkFmdfrCv9zQx20S91D(c?YunQLwC&blkMxxXRE8kn#+)LqZ%=M# zm7I@uF*8`Naw({bM35Sg&~N4D<&n#EJi(|zKUW;`b6$SFdQo2X^oQPDzTrqSvw@5n zw4-y$3sc^XHDZXn=BnxtmpSYmmox|F0*K%}evP&E87{nqxVWv?1kInpM=fbtm=!q6 zWQ~#Quk3C(rL8cJ@9ymUfhHrlXU;Mf`#0aDTHI@oGY(F2wYpZ(csTiwG?moliz%z_&{Cz$rI1?4HskwPP4;k(zUU%)Zd?jn4RyD^I zwxLEahP>mrMXWcB;z{T^U?k~J6Nxs8cWKvn=Es}6ZM?YMS)=zwB(<>CiscHEP-R6xf9&4o=4Ex&UXVR# z8)qe)=EPc{p)E>FOX0gSBUc#58Gt^}Dejz-eez(1xjX(K*cSI+C#hJR9UUe#D0S6u zOyzKMQAAM%0k%#Tl*N@%a`A7}I7C6OUx>A?mH^~(I|pS}m`9O~gFFRR!*GAl)MG`2 za&GPEiTT8NssZ2c#uFA!V?=_9lQs0?$SlY@ai1sc_D^tKLeJ*p>8WhEeD_aoBZcc| zP=1n`DPA5i5uwp!g zPd08mxZtSJU(f|Iha12QmP&AzeFBwiGQm`)pcI;r@)A{dp}c$`CY@ne5bi!L_=^pT zcrQGNxU>HW>4hefgJoHU@WwF$W732WVJ0!#6t1pwPP^<05Q9XLOpW?7cl|qJS%*T? z#B?+#Z|Up)%5#0|FrlNhvf2(jztGkwpKSe#7`9P98P;TKwS%bRBDfasGagN&dDi${IZht^Wjnpob9N%(w7zdY*&-XHXk}| zzvfVOwiL3mwXN+O^}Y)2it6n5A}O1PSVc2 zU+RS4FTWi30}{~7cpyV1ZE=_r{C=gmvK{^XTSv`=D`z@ucKE`o;7_X?@F4(QA#)O znYgziV(K~S-r*s{DIYZyis&3iJU{XeKRhq{v9LBsCUqv6tV)DNQCxVK@+XhF!0ACQ zY0F_3)4fzuAgO3cHepdpxj6Uulnn{4y?F#0)3u1~59DBpn9QMD*9uq%PrIOCSu*a_ z^m_}IE-H5FJ#_rIB`*$J7#VoA+s4WaNbxff<`McqNTUjwE+wSp{HK2=MS+e3QL_E`GpH}qG`WJS-3*jahj%Iy0?uJHm{Z0LO3kaa2ilzc6g>{)s#Hc4q54exE)wGOjh#$wH>44J|m zL|rbc&g8yMzxLygaUO>37|q}M9d$P_82m*19|0lE2^wv}@|U#Ot*FiIyn8^vTm!re zpid#!eYWl;&%Uax>@9=-$2!G>+0T*eAD<8~)_@*{Ps|4k&nms1XdK*rxPQTB&s$Mb zSF-a?JnXFy$1W);p>7WP{GBth9nLSu$shLWO^ik!Xi7u&iAbfUBSPaSPr^o;q<6ab znC@xNB06cpUfcDR8ugXBx&gQQ>n)USL=iH4A?)m&?1H#95y}^R|Hfoycx!8-$);!Q zYV>@1*1Gp4gR)0=h9aTNxSDh1aA)`o#$q!GdET=$3PM=Xb9tjmb&wE!W*H<`B-MTU z71f)5LQsi8+)U`Y2BLj@8x!e*TRg6q$NS1@si3qJeL4oS1@c7 z@0%E@rfpn0`R0{0pYDeb{oxD+Tq`);w^w1S{hR(bk`?^I!YpI%--uWjVbpeU(%rZ6 z7)FYy4@|reQ$=V*7+JImf`p_$#!@Zq?K+vRR`PUpOx4|AHcab5hb4vUU9fQBIhm%M zM&z%ACVjxJKu8#GnuVK}m09x4N?zp}Fv9h)_dY$t?@>i8?Cffot2P2YJ3K3ACb;^+ zRPu`I)91LX5b`bSWVOOMgdoNQVe)=++O%)P)*J2bvoj|A9D8Enn#L(2YYR9oBDWEG zD9@S&FuD=ZIAj^YLfV4iTkU3z5S>1=d7-eNAEWGR5Jy2wcWWj)@0su(G{Q>yI5dvO_U0yDoAexkEd*ZIeTC zU&6O2#Q4W@auOA9#B1}utGbP)vy+bc4h^EvEqVYf#YFeaj*&x#4Wq|7R6Yqn)&edT z5sZlX%7QNpBCJRwe@q2>=q2QsEI12T3=={^3j7KC8}y_#M$g zz>HSz4Lo}74kV};)UqZ)PV|Kg2SgZ-K$C)#^fQ_6tTUP9AbPd`7l2&b_e90xV5lIv zP9a3$p%X?mM=|@@+mu`>8%;Fn<_L9vLS-)GzPJUnnb&Ba$?HiAPoXaH;PE(fOJTQL<9Z+&~Oy`E<~Gyk~nUtGWIx^8`+DM((yC&NE=>eLl!DKVu} zr%n^Y|1>XMfIrzwF|B}qTzD-jDRv5r`|qck%&=3Z?wpbqd#e04es#=AEqr$xv$;<| z&`#s??%tyttBdUZb$0=q!Od!l#h7c zov(L3-+OSW^}z||p5X0=J{;RI@4J^PyLM~H{Qm4=ddGfj{Mf#?vPvF7D;>JyN)w(! zEETFO*vcM4C(SY&EftzZ@-gMCRA}X`Teo!Hya@~p0q9G9QPaJ;Vt_3gam6Fo5r3(JQWocxRmnI z@r|1|t#_ARD!u3q3lA4lQX*nhh@Ty;unmvun2>$UUY^2wnvX>1O$%ruS+p-aYZZ-=7+_^v;~r@>l+!pP*IU^cNa=ePrpS@uBWdr_C=%g zvu63jD`Z1Tb?$B}D=Sturl_zm;?6i8$#f;_?Roj>nHfIUgG*J8>vw5sMeWWX-4THY zFCHBonOR+xPZFvrEG?buO_!w*a`jA=46@lVjvv9&^Kf#e8FWOxefxE0YU*hViYhuL z#(KI5&tWZq;gJnfOiYZapdlAci&!s9Mn(n!CBG-To%t?U%hf;=ixD0AFnxg(NZ6aIjhl`auJrlvf3u6lN29)sXOYZ@(E^TZJ}7#>#|f``g}g)>N=)2OcKU*D zkdX9NIU}Ql}IWAAjGNqTSq2lAow`8>(?3UHx50!ym~8Pxqy$px_RjKJC+| z?_IarGGUeCXJ_?$3bS*otK;ANF6&8^WDN}s^$7^5@3zcdP!qWo9j95%%I~SnF*H1U zor+50+s7*#o3}erlmgh2X0akDS8`%_7YvK{A_U{+hYz#K%K zP;&BJeM7@XZ#RCL^3fql$*V3SCVJjF*EY9Mvp!9J=7UPRxn+P#d*0mK3^zD^BYWYdK~@Z$8ySyalhAP z($@C&*9{*IDFn$Rot-Neq+;zfYJY@qW~k;TA`^nSqjq*;4|OYogXNo=nu=b3e+1DW z-qLfAk0Dgzv+{#+B$EAixg{e%zlI$}@`n%eul4nte#CHyN&e$20pvU+nwpxhb7FQk zrfh6%)XL1y6EiB*H#EGmqX-PqqsdB8%F^GOm4^76ZI56|nOX1*4!%}YRCJ5SB7Wf> z8EuQ0QdORIm5!yQqOtMkg?s#|X=$D;nvJ*l?e2a2*uTB=5T0e^$}P5co}TBFl$5+E zuyav}`R#7unfmu`T3>_PeTjWfHojfpw_l>8>vo%(no`r$?5QXoqKJiDQ4(<6zbe8? zb%V0T0|I`d@iOZtrL2OIk~B#|#l}XF#epwz1zL-Xx3#L@UgzQA(Y?(n4Y{hayVRd5 z9mYUMM?o5Smz_Q2-MiuHEkAM;O5SOao|HksHLR%U5rabf9cI${LOs0dEt%aDed}G< zO$NM~Nu3~(q4SQkhezYhlCofNZXdfYyJ|{+4<#x;+85t?UVeID`Lz@**X#M6C zK0dw|1+q7d2MQ)V?_1ijs=8)>R{p8UpSLc0H}hNHEIB!;ijI!@v?y)w>N@?& zLi_UF7R%AEc>8N(Gd24pVWFWix>HH10~zw<3A_noy+szK=z>&8*e`2!)mf_DGOe2& zj~=nHvFWsjw?)Ury~tFcblzKO;F)m!LOgi0u&9V=kLXz+?iK8(8qfRr`5E_TM+DD! zf3(QR%?&u*{$qW#BMtTG`^PKGd^WR})Ya8R9-+0NYVg`hRPAGXNMLt0ZjzGPLX7B= zswhZF>6{$+Lgld8U(?P*)OEqFIz}tj@!Pf?@x9Kds;UwZ5kdG}a>}_Zy?W;CA2!zm zw#Se8t=Go|d#vp~dV60C37H~%D5Txls;MotRBj;4dxebili6TiO6o%R^Hhn@=x8-c z?{m0JydotlOZ)I4sx6Gs7nQ<6#%(Tz#h@=;8Dr-6YldFMIbGac`$@B0b#Y+zWzTav z5uHg2i_umZ8X6_L8@T8;5!2G5aM@cifGYO+WlrP*uSi8@i@5ct^n;B6X?s1Wj=;lp&ew0L8PM<7USX`VeWH;0qM(9Clbm*EZ z#xL(h$f$fd!k3hkbaj&qOG2tbx`#UMgmE%GSdttmHESs{kgc#^Cb>vRMMNoW1|?GT zv7q4Q=H^`Ul}*MUCb1APCZiXrU0b^n1k{TSOE+>7Ogu!Ab$U{~4vvo4+>QvQr>Dgw zd+~9P84(e2{o2M=VeHA}yLTH1D0rXP(FH!wQg+?#w}D`<&s9I&)Vzkf(X0zYs7g3| zot)giqJqz#gr#X{D4JFhrKF<5z#lup%R5x8`^|ZDl%LIdI&NjWM$?Y&O=$VWh>}bw zk8a0%w$P-{oH<$S`4;xgJ196TjFx}Ic6p+Xx}ib%nTAH=LXY0TYWakiWG}aq%QNZY z#>TRrb=c)!dD?MF$Z?N4EOS6WfLKd*XmcQWA>66C?Li zCRKO_LM|t&$}PsG ze_PhkLi(ORe_o_`@fz>47C=&$iowL zaDXMErtXGl=X2rqg$w=RM?oKAt)BELF6PL~%llg8SpWU|`E(^|kw)v+uV4H4`c7@l z*_EDDWZ#EJ!&o^uWavo}GAJg>)i_7~%6f6}-O7r2SCViyEZkS;U3_(Qo(fyWsOf1M zs89DFK5YE)gW&Ahvv4am4vueKU02D;%~n=dO-4%YKZx+_?N!3ReA(CEpOJ>kJGG z(5AMwx9_vC(6h1zRaZZTX0kVUphZtlA2B;i7aG=GXfuZ&%Vj2!|H>`9AJ1On4m3;F z995)bUxqx_9_#T$%Ti{N!)Nrds@@h^K`6#}tnwxV=v<$oaNkhzM}QCRC!3N`Y98AK zyv(LhEcP;;H z2!yxU7&b~WTaAVuWj;>PoU6{UyC>>1!T^_W0+fSWpl{xUX1iY@id)*-@ev5>FI1|C zHuexZ4T!LfjSZc}-gFJ&z1`(OJiK9C`)1?j9yr?E4TM0+?2O@vL%1J`57{f%9huU@ zfx^bkEi5i3rj*RYeMbc5 zg=ir+GIE}eR&(t)d#n?U0qo{!cg(Jq8~LG9Z~%Z`cl2wanuf;K?%;$EYD*b{7fP;- z1d8J6OmiSKk=xM2r{v`1Hnz9*#wvHa-G1Z0!6PL614G2YaW@gAxDnjS(`CEUH#+*( zHhO=;AEjghU0(0IU;eE}`fRMVLvnT$2@v{3*$N5#)w=^XU=Ku92IS#++V)nTr)4Cz zOiUo`Zv6EfQ|QLH&XfO&mcN|?<`^mn5&E+is-HrTiML!=K>5-IczK-pKzB{ zP(Us4zAUme;xy`t*WEKeToHqB{McFSyT`&}01up!s;uth#D{R*q<1^oNd_REGINO@ zo~E(A-LFuuWdmM3I4X*fzsq*G#)YsBi*X4=IzXBby`KMZ`^JqM8{Y^UQc^#E|C5CD z&CFz6TcZ?{yeFrJk{=6TG z#uI`s=LC(ea9|1Z@wwFVoO606NO&qjRcmp)rfT7y1}@5DNngEvpDgOV@tqX$Oi76b z+B(3PtqxY~-Fx@0d5J)zt3Xoz%G3S!vHHYj89%6QTj3OhmiYt~{hf$C*ON`g64N;m z7}ltqN9*g~B?`J+l1X>Mp*OSNWh^in>2$`foAjidKc%3cKmdriTNwKRif98K*D_=^ z08FAAH++<`#IlsPn#uEvVcS&lF;tKcJ=eJ!pV^(tIS5n;* zEXI<}{p1`3?{^rq+d4ZV^k}3b`qQL|;W|5$`5o=;Lxp;biHU+SJeEQU{Pweh2xPE+AN)vC2~O-(?X+MK%`*ZZ&;=E_AZlLQRNvBYmjV)YJ1^PU=b+Oe+!4Qyd(w zRM;&ldF4k$M%uvq4LIWfy)TAatkZa0GvhTbxf;7%j%%Y+@UJi*?}Z>Ipn5|ZD;aQF zj9yAtI{e8Ic05vIBC0lI7#bFKo5PT~qN3sqk*R`+$Qh3dS2Dye8`02|J%jR$kL>>L zPik!!4sdiaYYnTqpVTb}q(o~ZOB|mA^ZTCEme8am);kIF^o)!g=0lg32J;o+vbnib zwXBC(r^@{kHDFpZ9W4cYz4CF8uaK}SayorJ`A!4&gCS(%P4c|JWOV|rEa z76-?RGK;`82t&eJhs|mFfWW{kL|tvY=U+RMBRt_+b1<2Ik>IUIsoCJQ+Z7Qp920qa zjJab`iHYya_piyw$_|yiS@xKi99_@gulS7Mcadu**rJKxQjmO{J5C|4}nl;ok7 zn3Ge*g0Tn?FdU}gtWgis3k^C9HOkDTH8eCz9}kKpDzFOb=;*vFE#-o421C4#&Znkd zzX(J{&jR+i_wZpxK|yeQynt4ndjfzpd~CIc$645{N!;|98iWa2ukA}BH#3p3uy|No zo2p)J!7??aJ6dVK9MUb9SdQ$OjsEon79az-rV{f*qOPtkUOv95g`smyOgTnJ*EFEm zLy*&R?LL;4mew~gNLI>vdpH;6v|h8XUiS)_&!2DMxIS+1Bf8KPy(?2)U44&y1s)3`QUO+$y!m~BmX@}txEOnMSML9w zm4Z@ni;OHZDyrrE*^9jYnUxYj*I*%?HrtuNi@ll|8HZ z|HxS(TV37U*m!vUKq9<-`}SvH>P16CLjXn}5(H9x14grXco$56?Mw6wI;iVazqRP%Zlsi%>q{q0`g{U^SSjU~v(iKrLN>aC4d(DJLK zw_&KE%TWV}IyuRJ@+}1wVtbzD4j-SoUG9VD_ins(aVa+LIRm4047=Wi78Jb?YFDfX zE9n<(RKIi^@V|%%H~g-ZG0C<4XY#k*y^FU${XNwcM1PEYeAd?1f4`qxvG<06fI#E7 zZ^lCfr-g)4bNau>T*k-u@$;Kr8>{+}B)pz4`*^J{i^s?St7xZz@=dg|v(x`wCIx`~ zHn;h?tgNgQS`#rC6S@)wWnnDFWv01#u7c~6XM0#>8@ZjQ=%ZavyprZm0d7D`uMQC`w&9wwzE`zz8j+70|*BW z%ke6RPZR~;13K@Ox?Xe#dyhS}`@v}oi`CnY-?GKT3<5yPzD)WsI3nWvhx6Nf&YY;7 z9lI|^!D!V=Y~NNnAAjy&bk{YmzoWZKoy~`_#k;I6Vvym4AUBM~Dwn~N@|yx! z8yXoY(r;r-Nxc*m7WS>kfGL{S`png7N2Km_FU@I-PkGRMOz%YTtCg^^X*yxpg2*16Gm|$;eX}R2S z-fBhdOg^w{&9!w47?}IMe|}C|@ph9&uQ>q528~`=T}TdVKCG6JH z4u5k)0~OH3hug0cUk_%#^v9r&aR?pi$o?c*dPPM6K*7D$-;8vFZhyLyS~|bf{B;j+ zg4<{6!|%V~11##%f;=+02-O{MbmQ^AX1OI%Z*JY4ada_?K=|-JB8LSifq+R6z+ZegA zQQ%$6aFp`oi)Q)skK3JNSV=ol@6;9`27@abD7dX87HG83PuZe_5GD@y}i9Y z{{DI}2?22!@bLGx;Qz&5GFq?}m!eX<`aRD>* z;rwM#hYY3~523c`nVPn5&B^k;-MI7o`Ew1yvK8#`U(c@#cv4?qpACs|ReJG4TBdj6 z_cIkQpxXPh^Py5V4LWi{xRpA)4r4iXks66588bNU3bu?{vn(8DW9yB{yFDQ#fP{pa z`uYImBY@Z>3VphVIK<3x5DOL{v8RDFkpXtBB?#L**AWFA;XTMT(3@@xyHmKk_YIX> z*8O~3gq7K4wQNi$Z13p6=}3@CKN84W0n~E2=Xu=&ng@RS2#U}N+Gx3{v%vrx0SyoF zchuohlYCA8cNoR4kPpnv54`s!p3n!_kU}eX=NS0_nrqtMQHKk&lKn|9alGwS%=_M6 zB8ecXZXu#4*<-e2??SQbaQi+*kO4lCMF;- z)yvH9f6`g{Ws-}igWD_h^gIyXLo}EiW=)xXf}g+y3832ta7LkN|Dc#STI%`pkOkwL zpf<7VHok2}QHnl&dKz%T>u(>acMQd-#P< z?(P&Xlt}=8R);o~8kpRpl#kF+()f+XPsAG=xotsYb9HNZytgz3p=P(T@V=@_fRg{K zu9?~8Ck_tWQ0M;~?UHNNID6&h#*J2l$y!@qKY!i}@=Vvz@ZJ(GwiPe^!p(^qR^AdOXz*~j0`*aI(RMnOTAgLaWs%#=iT znAI=kL?PT`I^#rfD(lWdA=zyrX=f66%4aYzdwP3^1Y5=POvKCSCRay%rc0zC76duD zp*gT&<#%}!e2^B#C?VZDIJ)%jUI4Bz_)c$)i=&9hhvBMyqYTBQ*!Nvq?FQIkLMSn%g19IVbu>;io4ZoUA-1~LzPXSYPNz<{3CAv;d&jG zbs$%ri62ELNDNn+#spXIj~_#7f*dLBYzSX{0$|m!EB>jD&NV0tVl5$Q4`6@|21Nuk z92}*;Ud`d{<0I7*LYLJ(8+|F|*}a2FkNw*M4$P-duNS=e%?+O{R zs6FG(9YI4wYJYtKEAa?=su1>sS1^hlMJOR4be-Xhft8bf zowO;CPTv50fvCd;W`^&Bjsz`1)THnmPH-Dsh>4Cauo%+-3K-y2?O#$noit8v6$NQ= zxImW@SQMj$pHuOCwi0%9(!C)0lId7jfB?r9NXGTL$>%v8J-sgqegpUEWM*c*bmd9| zgn5I9w+%>r@T$^Gv(cYJN=t9X@pvm`qWHdj44ec$68EM9t?bWY1B2ZcKfX zmaSsu52Z7SpdjWdC@$9Pi0s6XyKgtH0mIFJ`y`?I!isGX;9#29m($btZ*iM@QV?Y| zhw5!nka5}Ep`nQfavunWb|C!3Va;@Bqm`c*8+IP-*OiAPBy_fh2*LC&3-3ZCQ){Gj zzB8^)3W$=22nC}b(d>X2d{Jp6Wo2a$3~R|PKRTD6X=%yX?R0rl2|KP)6dN9zal9(c zT!-<(N#fzdhn^ol28V{Wf3==z>&T%JJrf)gz#tjf`7rkQ$S zw8H;nxBS9_HTL?JV3>?Eum_Mk;Z03q(8DxYywB+z@7=?pw{nYop{->gj%E)wXDatR zwB9V(LS4eVHZb@uN$uvNq+Un_GWUN@e%<7Eo+H-4H=`(Jb$)(&f3sEvpvTe9V&~qf zFus%u$3L#{$bLyPfLa(uFN>kZ_nK~)p`xNXcM)5kU$-{X$;0>@M;xU)h>45$R5@DW zG->B*7^Og0F3@XH{1Dnta5Mtd3*)K+g;5O@qgz6*x2Rn=SOK}gTQUL#RpWv*Yz~MC zkBsy~W#1G=mz;&U4m9M=pEI}@nrsjS%8LG;dgrHnSo*2%I4@EXlIe9}a^bqgfZH5U zGgOKlR!!mB(OeyM%>;P$fHQfmCQqHch*{5aNZ>cD-WxH4C&ZJ3mome0xyv!Lut2&J zAdu)Qhlhtyn;(J7>AbrnZEE_U*zo+X&vz>gSS)QXl7U z>P`RQi2(4;Z9(9)G1QgN^CJ;`l|`dOXCSxydfV&a|}UM7M5<0fvI9;#&AKTm}N2nY(w%D{C(W@~$yfFK-56kTKE zCje2tfBz0XoX{{^Z=5|UAwhdiuLfiUASNzd9Y2_42V4Rz&?jj^8G7R3Ix-00jTpe* z9F%Zkmy0qMd1C$Hp*FuQOp<`QQ_3*uemgbDyGfl{+Et*Il_VQy*KySQR0nI+Rtq)q^Gr~Vt=K-I?`0o`w&W3mOnRup>c|u*bd&-PX;9Q} z-M$S)1g(nKmX?uWgFdo<#KBQvP3sT(W_x=(^yAEuk{fz@dO!w)&`)B&JdpnMtR|4L zK?wiXE5kXje&K7jPc;eW;)|4c70i()bP9Ci!O802mR zWo6xmT<`$DmueMLyRae_6kyzQ14zjFf{o4ixRXE3Zf$E81V|00)aHSKNPv*m2OHNx z+Gy`dwKm0yl97?YY%Kfu@#yBp#wQSFL1*Q)o<1kwC_xOgErc+TCO8yGLP9cH;}Ug+ z++7EKbOpv&%`Z-3FI2G~KYomGp2>fNHZn96TBnw^{8fPI7iRcBxyur~ogVcVq-AAOP5LslYU8`0l`}9i2Y_n+WxkhAdmZ^N)-x8augKj%UwC&g3g|Qk zEP|z^*r@vzY=0B5ll_~kNpUjiuQzloNm$*3Aozm;4iy=63|DYeYE;(_dSi}v76SqK z!mv8OGF%KofyiDyy~YCeum#xDN6saz@88?9aVi&DjPZkbm1?`rc@|uIFJM;8QF-_; zv|Y&fxUyE#QC&U|c16hdoWHQ!fzp6y4i0AML5nUh?9@=n(@O87$Gm`_GQT>ZT3cH) zAGy&UN>9DKv)GQMJ0_Lg!v<#u`idljm+S$EPe8e|S&p9p%0Gup1cs&euz8TopFV$% z1`Pmcjt>iJivReX)b(yx{u+?ba4-sD7B>o>J73cQT{*|bD#035FR+=IOwT7Z?ISYuS6cRfq_8^P*mr`(84e0n$y7ehV!{GG5Jq@lUzdgRc1ma(t~xzaXdyo zRU*(6$t?*|`e4R`J?suUJ2y82bn#C*vr^PG&gDl=kOfvSBF%TYkftlOfe*`THW=N3 z5&tZLRiqC47voy2z24g2a(VD|r)Er&t63De#{_7<7Q_08I4Y zQlSC12-%aEj%`8t%A`-D_eqQ0jvZ1`Q~Rm5tY5hw8ua${MGFc%F>7&+{q(5<^4?^3 zD=_5(+w9r?Bx7ava% z$)efNOJ(7E}xM->oKGICAjN>tm=uVZvOt=3y?Glq;?!% zfupi(js%YO*BO~#I6Ge;WqsAu*(sme(&L4(4_QIvX6_<%<(B$$BtcS_lDg&+1Zc;3 z8x-B2c?nD)_0B*M1{kgO)#|QH`d0xv3W3Oaru^!Z!u9;i=!@rmG&dx(U%eU#%n(WB z%yUx_?9|kC!XqRWjl}ENyr;NS*H{+;)atz(_+3e)$3%Ys1i2n98Ubz)2l}Y?#O6Mz zwdv1kFTQduj49B92{04>572YkiwM;=%y(d(ZZVBTm}vL*7n)jz0FaU=|i%@3pxW`MVEi#%f%mTZ7X7{F(R;uuN|PL48CD zIXDn@l+VU6Jj{3M*B7(oVP(asrIEZwz10!)p_;_UJ>gXAq;v!AK=&b8)uX|eMaaU$ zUq~w<={=eCmA!R&u+h6| z7^Z+WaB|*z@F3-7jtUv!9v!f2(cGOuz^4W_HBCfw{GkN$w-!i0{#J_JIGXpqU)m7keeYv|=lM%^F$Y0`TO zbZsciCUj{+R`&LD6WH-~u*aEC)M}fxM4+({B`P4eY^^?BU0E3_HX;R=IV{%qSn2E; z0MfpJfeb7xfgtai?hf`AA&2XXyMJQCED2-(s|&C?$@C?-x&GA!n9~x4tDnwL5Z!b9 z)6(c*K#LaO@d3)WxA$QVSHZ*MI_$9z&-mK}JYt5>cvl6f3&V9Qh;XBoIvdBG-*wni zov~c>cj}X7T97kab4%Kv|KSOQVc@E8oe6LS2xCyfRuFO7Lr7=Wrz;h@9x4GJgsQ`uCw%2AT|qDpBh!^J&2tdNfV^=!9n9;{5awG$Qu(c4 znAn3E&FI_5-LDn)I@3)&;PxnAkRoiwd=JHSnwE1Itp&)(e{}~gG-cIx=OD4}Fq%9u zF~I}Rypz>k25p+ZTCkX6t>D6pr`MZgBz6!7CWW!p7a^yhw7;Cw#2W+`9k;n!x8sCc z2bj7S2iNUG!|ac>U54u*KqOri8e!q2 z*48hcA1z2QCH=sWfgU%tyzHO(#|*|>e_%FIlaqnqh`H36p#a%v`WCxH8FmcX+imvO z=Y)iWz=Gft94~V|+SuZk6YyvNVUkk?`L`9LpkkHiF_yGiYVj`kO7`}n@>Unzs z_b~lGF5mL;TY`xH!7XY##$n z4rsa|_N)M0M!|GNY!} zr=tTZT9|L3+swY*siTD>E;#mW1wgsR|3 z2lXe7OY(cHFQ0pM)fg4Ix!kZ{`jreeYwE*Y7>#j*>Y+#O-6CXGww;Aso>oO8IPAgu zSI{_U+Mg{Bhf{`Y(UPazOrfMHzvSm(I0fPez#sA#FZ#Tx*86i985kH=hBm`K!A!n_ z$i`2g2upGwc@N$ms9|pxHgPur{R5|Xgy$Ltqh((vhw0fs4Y*3d3o|{|C0jcabvwUi zj|?t+Caj+T9_4|Zjof56&l$nLVGZ_J1(^~k!$4hmp``Qyk_^a+tFvHLn+MbNhrfQm zsJ^%o4McFE<9au|3RqZiblyFr|0igvi|V)kaSEkrX0%GxFDZ%o6l=||P^ef@ID1!? z>DA%79Rh{r6%OKeV8kPIa&p4Wif}(r!S3-Z1=7Fe5HmKw;oiSL zRYl#X4=PoKJDML3G2vhv@bu6hpop;i_~T~h-A#{;2^^AdsOz-njV zIf^PUXNNE*IaxP-{D9+sJYUs)+|o;4gp~IG_5XYb9z~@Y9{~LVau;N?{#o%sHt5eDhm1Z=?U(@!^f+XdF8^br{?D7z-t#sCFl%#hM2zo zIk>cVi!<|ZU0P1!VlkhCg98B4o&w#ouC5ZrdM#a$%d~a>MrUMSge1n5PS2R1`Y-44;5Son#Pnj?iLntg+YH#kXwLIn*Yxm3?@32O~#Qd&`Q=6JoX|EN%WhgGnu1=aS|S`Q~9w}mQ} z#7HvE&CV8>598wu&K@2$DyaL%SnBIguh&3#_!pB(8OLJUKhI}1gJmdRDh}%7b}Reh zNa){+Jcn~zDBJ288uuA=pZKlV@1UA-@ zmV*wF-r%|+A|a6hjqQ~2=vVfRC{}ttz8EkG;kAV)CN|)ll(x2d6SZhE0hl*{T9FqM zI|o9*!DJzr0$zUgt++I@gvgG?@BZh!%KMO}`>g0k0z;t2z|VjJGOEyinH!23oZj%9 z=LZv}>MJL4nEmXq;FQA2kP1mc@^$WLYa7#s0$p0La|Z@L#-=S|(zA2e82*q0&rE_n*tK0aOZ}f?Y7g4Qx%L7GQ(BmVnR7th&Oyy^J(%(q**Xc! zIF8EBYm8RY7&to#Ru&DyZO1zF-mxgs4JH-ntw7LTlG(|G!(+leXDv?=B4+4A(HzanW>lclT<6u@Nk0XL?T*-7(s7a-2NI zxT&+(4i^69t+169ic?Dir9Yi-x#^gwtEN(y5sx9Ao%w+_EHUk0N^a5C{*BkRtr)w8 z$gafKv%xOf*Ep+a5T+9ThrtAU*qwh0xUCj&Hh=K-#RGYPS?lXFsYK+z-vqdxXUfXT zQ+0B^NjR}8h9kBL8?b=kvAjAnT5$u8h~DMqhC>*|ViF&>A;yK#)B|Va_gPs7FLf+5+6Zdi8-IV50O+IsO)y)9;F2*luG?Qqt1OjnHeyU?s({y~QrmTsox8 zYCd1Suv{kX8dRZ5_}^_MP|O2ZEbDaT3dB6Cx=jAL&MYR%9C^PfwRkgiI`eg z@X22{-r8O_-93QG10G~{=LM_!&6~Tl(D(I*i_&ou3Y=;)p^a8JSV$$@+}Qz#R}?u< zk*9tzuDWGc%Z&9{!Z~D4vw`q;r;sRWY#=1D+1*%P&??0JNglbM@PgM1ukKpV3gXoz zX+q_-y-(0ipmmahEor{%%Ix%a|NcEk^xqguLa9EV1a^QC+$S*b`{-yqT<^8H`46BQ zbNc1eDJfP!_7t?Rpp53-ly_JkXW{QX3*E2fr8@vStjHS3hzH;?mLQZ@Vz=ld_;zw=PLvI#bd7&ZhvD@&KMRG`z!MYAQs z35#dXp4GQU}jf9?hM}$SsCMh*_>HeoT@Ye=3;Qn3!TFW{?V$1cXvw!~J zB!r(oI~$YAa5_Vc3lDgGH+NhE!4$Iz2lK8|REGdLl05tim=3(OarTPt=H}Szv=Wmu zGorwBN&!F2&mTK9q#e(1FT*sr04KmwUu2@*Iyv=#cNX{xUb_XhyLa!djFiTOh7tuD zT@!~3eTrePP|Q-Eo*$qBiTr49)!)NI5d1GqEm%0e_7UyWSTl3xy3<(!t&o^F$YI*R--n_Ug!AT^q8EA0 z-@G~9+SN4=Xah{*977G`PqM3JaUZ#}mO5 zo}!cmBmmT3FOV`I86~x};vZi*hC}wD7fc-CR=vHU{}<=h2(d3gB9>NApy4}=Kk+%@ zfZ@cH&H;wXY;KxtyWUt(>V@GH$v^)Vg(sd1*FxzQYf`b)glvi7&tRh39o;-BR5^hgqkpQNsI^o(o#@9%DUXXZ+2 zC&qV61n+*E?7x0bvLY$hOnXwhvgDCS@9kL5b02IUo!FYW_px?l^rL|n=d)BU#TsPS z+J4w|w(pA4DZxNPHmN|aRm$v+t5~d}W9BH~nFrPj_B1Xe+?tz~lfTK?xcq8b>{a~L zfyRRy1O+8(zXWxpvL$%!ZIhUgFb&pU%fwn6t^7op_ClkMrU>hX4I56KI^}g^Zmh~e zGNqt^P30lWiCC#yDi3ezW-8}fHhp+{cGr-zY)kl7HeQj&fqPL=LWd9Y48Bh|rlLY4 zxo@B2?8sR*cJ^uu$<{?TZf@?LpFh_rC@8F5w@yGpf>}U7VEy{_UWzHtdv{q!vn^j? zj69Uz5!_dI*L-g5yNt)Y#K%vcQrdr|d>T%qUxn`#*tTv+OiZ-y$P;#!<+-OJ9G{So zqMJE6@#EOgth=21%=+tNokxw0d9Qqb;oI41WK`m?DkdhT#C1}To@R|ff%PrmE06vTWHB;P1a)Nl8g>nXk0P z`gKRXRd__i?f!m?ZK9$NA3a+8{l&E!e-*T;ENQ&X8aIQ&+vp;3!{ zLu0pUugIFTw6p@d4#}yB34U5yTCV-JY&|O8 zb=a}H@*CG> z9eaI-)SSX92V*2mPbSHSBp$xen{d7BsGZ$z&&6R;kHz8iJn}o~ZQIsjM(Q$7r+;{) z&N?&N!RqMfh%qM)Su0LTm_`T*?lve`fB429AKlD1G5f5ZyH1*QFomaI`~7vZA0tn7 z1!Y!zc~F5`mE$?P%Y(WymugN|Q{$sPGWPxDe3QMWcj?u^UUBlmMn*pQ;L6G)Ex98n zQchjyEOC?}Q{-;nzRk?Sa_dbHM^LEn+N6ToZIN+tK}Wr5QZV}&85!#t7&h}Xn8hBj z4^239T~J=0cf5R#ml%JRUhe9h_cffQ8nCM)N}PUfSp4&QUyW|X>Tb*_o7y0E_%N3JBR_3}IKx(H z`lUa=YcTl9HbeVcTn!mUa+=X+4|~ird($x7E-ydq^82f=Wm9ZG=(Ygtve?7NJdxz)=TM>6$t&DP1U%$(+y_t10Z&g}a% z9Md}5S;~6MkMYd|F+&Nn*XvsxeYRj9eEj&)fwH`Cr|e>FQj=+$sRSo8GqV@5e7|xk z*m+c+yu3bM-Q3Kyckf=k0_*T0nYQY7uZwNDwyit+fByV2-K@aDqb!4&XpB3+v`aVZ zh>J_nkc=)CML)j7PQ}ARuD7?h=l5?h+0fl(vu%bB*RR*Ty}wIYHJ1wk-pj}<=N})> ztr;V!?9A5jytr5uJEkqi^42XDd#E?5fS0j@3vc7n%&pexB9ByMn12L?CrVcs#pn?FAJNSUwCHfWV|Nk z`R%S8wfG_GwUN(s4^{8hiY9po?)JVvu}aTUzu3OJwl(t{3p=~W?qk;0+uO1Y{o)ST zBb-(vd(`~-{VnCp&RnxM8%#?{$>(y6Wn4z1KhU>T<5kbNxJdi2_w@9vmdr9NW?Y&Z zSG~)7II;7q+0cg+39gV5x9P{vjVhZBMcQ*rIAW^|xavg1qAjj;zhWRcT)oPgNAcar z@!_E=lbq{B^4IYo`T602fjhmuW+_{;e2X=smG4JItsxZ{WQWa0i5cEOO5oqKhmk|v z_%-stQ6+vs{rH|;?Dl1oG^3-V zJ{F5*sj+vUDbDZOueKkHv%f+{xSlje#>WTO*Vl`3Bwe{M|7gFZTW)SH zrdfoMTZUgYFe^(xpC%7#T9~`UwO{Jylo${p3zGe22rg< zA8&8(A(`q&X=y3f$Gh|@JP+3fZxNCWEku%NBT~zr^Dl_pqxZ_AbVx=KYfD0fnwXrd zLVP7I1Psu4F;zM4xH(wgWaFw>?Tve^^$=ja*!tp5(cq+*n*zw|sf#la_yAVD%I2hZ44* zx8oWi35iqAy9Kb31&rN?h4G0wG8(cK3ljdsY`aN~g=9de?k=QcVyG;foc@>Ep9$>P zK}YPg=erskR__(jyK-gEiFldt&$jy)78Y8*7GBCID>HJ=vi;fL{{fq+zM&zY^ZWN5 z^74uFG~PpcsC6|y4Jx|2>~CJb4nw9Mc9xBmzbSjs!oojPna2B;%UGwnwzl>oos9aL z8t(_Y^%XB(yqNm1L49@7$!3f6Rm29&0oXHQo-0g}A1(jgVTbSh(3@*Y*C=KXH zU0wZ4(dDhURRGd(@6RZcT0{GC-;`s1)m>d(BU|j~$C?1t+g`4a`nPWtfuxA6-(SxXfAA^|wwkG_sefpw zinFs6UfU{$qfG*}xJXDyXiY;y!~8gvV$a6G(MMTXB9RhK`XTjJ)zqxP01(@%pB|q` zX|X1%xwRD6y$27ft))^ia$#ZN`lcr3qeoYvI5{j#UF4*vdD3cYU1;Fr=V#vgIsn0F z&z4?gxSomC(h$Iog_}E=*p=AQM5!jA-p{w2`v(X6u+g_~-+n}0oep5-?c28(BshEe z`_~>ibV%mVp_(^u)}j91@$;iCD=X_6AHR#Lzjp1~3!`6hOPq%{dCvc!-F|=B(uxN$ zS# z#LY6#VRyEhi!)VN?+=KphPIXOowWy@qhhG$5 z`F=YmN1R>Ez^Ay|)9_>AWoDC8u?^o|-CPPo!n`ZLs5Vt-SZM28+~vM;Bm3@3)DK~k z?zV{sbdiO~O4UtG3@=@NZ_4x3)@A`}o&4d)*Zci?_vVNy72=v4oWi!^vI zwWO}|oO{`A`lH%+yO`MK2Q}=(CBlO4PSa1R3rSR#*tC)oPGnwJ;3x^J_uMJ^7Qv`y za+i^N0bXnT_&m4EZUDHPNLN^)JN{sI)%TazmFvRAkY!u|J>@C$=4F$$TZcZT1r5oN zycAZ3wNPdJ@7@LIASzeK!dwM41c|P}EVDoN@rgLIfyNm8TGiAvWk@FPb)9B(R%8iV7tnNj=YPhef4zqF%k>&Bbhm2 zQBk75icNU9xhE(~=fa`-*K}Mf^~M?0?G0D0r^xhL-ca z!Mx()I$AytFEV91sl?@XEMBC_P()M4&?8Fe{kSY$HGU`q63*GaYgbKU%syq+jQ#gD zd=Fk7xKMM4VSciX4^z0VOVU*Fdj**f(?7p5PQI%pzo6tCFS|EJb3G%YO4Oe76XRs6 zp)+?2Mi8)>kB-#q9D95~ANi>Bsx8`oL2qQ@`DQZ38|BPDREQ0eBf#}_ zbEA?8%SjsI$+;J*R?EoB_Fk`8N*LPCzL!k#80{+Gsv648!lTTImx#FG(K-io)XPMk z$4J zc_mxhr$gIy`r;h++MGy~+X6OW`+RQV{$gUiBtVI}=&oHGSFKv5mv6}+q8ZIE8`?_G zE60gapr)nerxkKi-fO=0QN;V(>oz(JG;TrC zc=)kTB$BS%b16IdOj{lBPGh{B-ZV08#qH$ zm{~TlvO4xut{QTFp>lO^3d%7m1uGGVX~(0EC}AWdFO=#HC#`spklw7!_uYN+>{_6n%y)nw#yL{aj{NA=aRBd^A-JVEnm^RWWn_`u0-DwHatfIWUyr(zI0HcX{ z@t9^_i{>u zeZQ64a_-83F4tqJXWG(rGKiR}X=uo(tvIKxed}G6`0;xh1lUks0X}##9R125TctVi zu;WC}QK`#c&s1Bqaj>)BDJYPVy3{rrGp@&??Oom|MBIM=jNGnc_6~-d zfe=6rh+GJ$(@IGI_~oK~mfdSwy?X=$Yo!S3APa?t)`AlN0`v37I4>_RJ1oyTg1GB` z^EJ+?Ls440Eq@PEed;sga)Y02P5@czks_ujn9a+VzkevW{Egkl#%5x6Hv7;11Fx?; z6F~fh$ATn1O-*FZeGOq`vpW^kmGO{Xi$W7H_amtB05m%p*zRkz@^`n`7*WS1Gnal= zDf=qk($BXv{rUEO$nYBb`_NAi0|MK&^*0=`c`_I)HOi#^oCtiPjG`hVjAzOnH&NR+moo?bdr%0U^K%6IQJf*7se zut711UF?DsSIVjF6YUk0!lUOSCY2A$%9?e*y6L(y+n#%K$t7OSZIg+|q_6T46Ft3> zn%er+t5^Hj(M{2=aIN}JLe4Vt;=)48*-YJunHePzWQaS-XLkM=9i=Zc2=Qa$Q_N}a z!=Ov94l+(nO*#B(6YC!s=&knMh@mQ3T8ad#2pJg}eW)OlXMTUn=#giFHvS8{ox1q$+R3ZdDzjEcB`|=wnT!uXOq&4GM{iGrfBC%0D<5 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

?;r{ zvwH5sa0UKtx8oxw3W}O&^voR%dY)4k95Qr%li<3TaBnIrA9bZS=2q=6bai!Y?*_Mq zktou|wGSrlGUoMb1{^wOUGjP2B=Kc+w7%w+PeEJ6$a90UTN1WX&pvtPi$sb@9!MOQjjjT# zp(p)xJ1~$v$?;)CL`0A*uY~~vD;rzckGt%O$D+vJ5zy;J{tiW38{ef%m)7OOXriJY z`N<79Nem7(Bz<+r1L^g>7(K+u_XG7HR@2?vy9Jhnv5AS#4*NUft`uGeAw~rF4h|0^ zBU$QsQ;P#u?sdOve%-gM#{}t(Ym;s;p51C~vn}uI`-8u;vjg?m@YXGgCfHDrbovxr zuP(Arvb>Diocqc+Ix3pm-#9X!m?KD@nVBgV`!H9KIYAw6NaqYaG>ipLx#(mU_CnRIv8o?~cfG z3b0erQ$+zUICymwMnoXIacDKUhdZM&NS;G=)`L4-lQ8eSvnDC`w~$94X_WKv|Nh-g l>+7pD%B0-h_G_;Gr`tK=+M^=jj|Smssp+bgC|f`Le*nxI1ZDsL literal 0 HcmV?d00001 diff --git a/assets/images/bfs_tree_with_additional_edge_light-93df97e1f9f1883467248532809374d0.png b/assets/images/bfs_tree_with_additional_edge_light-93df97e1f9f1883467248532809374d0.png new file mode 100644 index 0000000000000000000000000000000000000000..fe546931ba38bdf68653f61177498fbb20f48596 GIT binary patch literal 17546 zcmdVCc|4YD+cta^36Y^PODIY*ltN^lQVC6p2o*9!=Ao2XWLPDX5>k}0Qph|PC1px7 zq>v$V$#lKj(Yn`jKkxUv_xt^R-+!NF{njeibzbLr9LK)z+rDkvE>vGno0*Y^kwT#` z@72*Tq)?VQ<6mQXI{b~Oro$`zht6W3wg!bt{<&BD@H&OEfwEUa^{_|6=x1+}a8Ii8 zcpKmD{VQFfG}`skbDkLd&|974n$eyoUvr}4vp0+0aMzjGJlpdRUl!kS7&&n>Z?p2Y z=tD00Ta!E2hH2y_vm2y8i2uE?G~QCIQP<#;74NAmz!Ev%)ckg!WjM>d&BU2sBV3wJ zjb5-&T&qE0nP5QFG409(R<&sgv$Gm~6OCclGI|5fRKw6OUo6&ga;6j&@#&_ruUofH zfAdHuWd+UyQFrcKOGw}| zDfU{oY11Zsu^7n(#Rm@_SbuuH&BVl{r?+>RySuxGmsiD`H_SrOI{w|u1cyYEQ;vtc zOFt}@py2X!v5GghWetpsLRN7~Y!DS)$th_XU?QPie{);!z(8=x z#d(X_@m}k;EdDV@de6IDJpCFu@87@AvH!GdAlNXqHcQHjrN7FMh zzCXvIcGo{ho-OG0YhAm}d^YOBfbwu~zxP;i@G=^@@d&z}-c#LAtyp&1wO>xrj!d>~ z%Zigdzh3JakLG+^DC;{ZQ6DT|hFR%)e6se*ll)3^gTg*@-yixZz2CTF#~Q4MhKUJZ zQBhHj*UUK&PtS=6O(xzu%XDX7H8cdgcp85#ZMNl?ds}^dUd+)_3Mf!XX5SFH1ouYP>l)&9%)vYhR~y5`}>p6cbDWmc~TL&M)ci-1H4_) z&3YTz&1=HB9WPu^^YD<<-M26I;=G$q>a?wvOr+aW)@v_4r$p$Od1zOzTzUWg{lRY= zsE?zCwZFVeQV)rYtbJzlL1kq)oBcg=J(;0$|CRKsR|nj{@X@*=hoqE0r&53#0&4H zTn`GVsj99vuL@zqHB^m^xW?oi{M(oNBcfRDrK_>lVZk!ZN0|T~_`5y{h2Ki616brwna?iDh zeH|E>icp_ki=A{6i(xb{FbD|`4@gN79+UHvvhR>-|M=1T&8?k9DXe=mD-+UAs;Mn! zWMq_b9Xi})KwH_~&c(*YMvnW?(2z&1pjSwcyunL;1-G)=+Lc*ZSthN@7w2Ri?2lh= zWn~o?7gyHW%Ap>-TGPTpC{{5NC+*(-`vKmoag)sY$!>QP+_kV7FZv!Qx?Xh3H42}d z^n`uq3qQ{m;+)q%!ANEUtL zy_JKXU&{U~v#|+lsU+$5;9{K@ma)8O$Tll|yOXBrpv#I4$wyzD@1~=)x3@bUr&a{6 zBJUF0x;1gmv+KN4M|=CdjErzwy5vOb`h>J2uC6;NDk9gNj#KByO100N*(4+^>@@L3 zQ_*9b5-u%OL+kW2H860+qeqWCYB&5@yRG=5urzvo6_k`@VGpIICaxGT8uCI3*>)JE&=>^OA(#2ij z;ouSwQ&dCzK4 z8WKX^neRlS9l_Vjuc^Pwp_5)xQj+JZhOl+qnmp$V7yL>~m6MZ`J+#@vkxtgUbQ`UB zIaX4yz}R%?+3i4U4P9Nv<;#~l4!#p);**PV=ldZfBouYyMu76tERBeWNKqf_qPjbe z(5)RlvyNZCee0e6{sAlSjX(JI^t8+D+?)kU13e4N0DthHC?3<9an-7(VsH0wUfI>y zfUo?)VMxfNUcGw7uyQq@NB=s022V|#!6rU!ZS9PcFF76`%dSD~@vLpy9itnFG=tk+ zPEsH9g=7Plq;1ItB99aKilb=>Ypr&wKq@lvEIC{crEo zFLrzxx|x_5NvdLZ$;I|kUuFIRwPz$l^Wb2t+j_L8R=~FkVb(h~7Kz84j7a6c2B<}@ z-{Xjbwy-om#wB%%f{!R8A0g{Gc^Y5$3JZB~aH^9v!}N`f>lKb(H+kvCTp7e%IoOmU z?KN$U*OZZTFK%%en=Dc2^4$+7T-+p|bziJRU~uqClF&BC=yo-k>e$$9!L6d^TX<)uiO>A#i`khrGjntED-3HydOo{%e=GTv zoRzgYcr|}T5Hl~UfI#HUZN?U@8OKS2jF0DTvkO=d*nKCF{-BeS^rgA)q6_1dETsIH zoIJ_K!4ZUVk*poL{zQS6m!{?l_BCsAy?;3%t@r-;{Bp1@Tj0Tg+d)V)W$o=oecbe( z3@BBOsNVNeQ_X+<_#ATWn&zcTO1EUsuQoF?!x^pk@L|pR_3HsOJW^fPGOoxnDexN^ zvAh59Vc+aT9}2IZZmM5oB#WB5IvWqq)z$pF(*}5jH5Rc(pQC}tzJ5KuFlz)`R0?oQOJ6fN|_nb{^UFF)9t$@~0#cf``-d>^Vz-K$rs4h|9y zp9=$dWgYJ2=X3oU>(;in--fieA+{bXzD!tH*yzNGe8=L*0Arhl;j=cso1f|^|6w+cI`_uk=4fMi&K9Nh-#?+dEof? zP}wdIn%vx6E@_K^npSRHLN8H?pi-Sw7juK;HRNT|E`$1=g|4f(xw(0Ycg@CZJ=W9T zAA}NO0Z_+d9L%~i*<8;>9Wd1E*NKi_ASCKn3G&JAkJ3D`nj>|HnVqQN# zKmC&@uQfLx&di8SOk_d5%P=kGIrLDk<@K$AqUDIzS;Iqz2mrOLjYt9>Ibr+@aHtlm z@9s6` z3NC}Je_g*m(Q?ep=He*Hz#Y$QjEX#@0f+C+%rJOzKRcsG`{vUp-d($Pk+_bX*|%?B zQ?8}9&+l)saXW1}VwnPpC`dOIdG2GT3AB`5nCuU5Mo z{JbG_gLF;L_wNjdqJ>iGFKYhTEnBzxU%$Qvq2(`GGV5mx=z0aOlN#;FTQ%_ZPGzjw zrB@1!c6N5--ybGg{GR-l4`?zb7ofNfAXyGA#VQW*vQOtrui-RKMbJ=Yr#~DN+)@DE5IIdX)+cM-jW5In+ognFG>lM-M#eynC{y1u_Lu~9*nroX>GZim%sAjQDs zWT7r6dQT?%_%-DOPr15QmtCRBb@;ry%jxc;2M_27ECB{9p)Pro7Y5)d9Z9UC(O{qM z^+jV7r{FF@@P0)FkRE-ywsF4(tBXz8F-}ueR)2N;iK{j1WZ07@+Z*C{1iRlD*uHC5 z%|N1WMB=4622W2<)TiZ_aaGFT7Xu+RrJ*3Mjo6ii#rbZk){!IY&c01}rSN*yb)Ai~ zU&17FT!)V?Ow~_zGn&_ygWLsd+MB%1xuWr}P5U;)=uR|g3rs}3KP?nZkG`S`Xd?)xeIi1gi3>|9 zF+I9ksc0-jgK0hfq{Ja<%H-_qTtr=(FG@+P25@3SLhY-KoQhCmT8md?db_mEW5arI zGYVsJ=hgs&q#wQ-5J1~y5Yn5p%{lpE7{@j>6tsyh@3D!9kf(uu7R+26yjZ5gzh|0)_fL1AGUq395I zJ_|1EM0tZ!0!pmjCfJP6VoiI#ehnBOcU+zR%xdCGHR*_OX#sDO^uwgUCK$3^M8BQ( zIsMSXo^Rg*Q2~08Bq^7XnMT@kY0P{VccP^o2)NafX)GHM5OAui$WuT4Fup?~B7z=2 z-iidDbXd$&d!ttf8kIcb=XTsm)CFe>%L^@(8`4p(UAL~cl)5NcWwF>DMA9!#gOp_r zQ&nwk-8s+Phy}iAZtaCnE zAwE979G~A8ObT5X!liMFC}k~=kI6q2p8Es%3C?nLb)6AtYiYS69R!?R*3z;LyW93D z>F%vtjHqC=D^~O(L@49!4(rkn>sBUM(;{uU9m_KD9O}b+0bkn-oJCPPbImL1wuye= z0|i0KV`C$W=)t?Rl+A0e(wT{Jghk)J{dm-)ih`Xycf{D(xKwjaJW_&p{^zIjwp(KQ z_ikiwxTCy5Viym+&9})w$xc}fmMNJKzmX_AR z#ajyt3tH43w)bmMzE6DX?^kjS39YsW2nr%iGXa@V`@PYSIZl4v3+h5KFAPLQXOZW1 z_3g=xC_#CJXvF;wwO3n6iyXWgKKki}va{`x?q}z_*Q41(BI`R;YPCB#FpU?hbu?De zEXYJ6n`$J^VTp#OJ;&T%H9>s(*w3Fob@uJ^4-T%iq&X=R{f=#$#wgS9i!kd>v+ho` z({X#ecLBIq=5QuFdH!4r-IwB?J;N(^^V{mlsFq6prTQml0LEMm3o|e^U5%x`dX;hW zTE@8e`0}bM+U@a7Xbn_`TQkAMeC{cg6cc+y^*~o1C-3~=c`0+bO;?dTiNz%KV4LaA`XEIdNAGc-?|)H9Z%&ypaBnYscXJtzwVdbV#xH$+(Ln#e zlg+KI6&)Rgm+15J^Y6J1w*oz>pdrM;X3jNYLODd4CCyk~US3*ydO0$^{^7#`q~rqe za7vh{=;^J#aNz=w(7TM|JD9knC>Q5{R-;*L$~vjgwa#&-ZE4M#HBMiu7!VVAzkJc# z)qT70%16!+56{+Dq8T}ZX+S6@1Qj{Y}lYOTKZLaVVnkC zn_#p~6dEJIw9Zmrfj!lrVVv< zAs`?2jjMm%8y_DpE+rL(;M#R@&c*H5kCR=|ri?QOX#;`^Bn;CJ+r9d06M6mb`T3{7 z#a+?2_NN-=W*WcP?(OZ}T5{3*=FOWm3h$i_s2b=vhHojj|H!#QvvNDI=X00uhQ%KT zj-NR3I*5t80ugTvv^6HzsIj=_O0s#@J}@3}FJCG+ySOyhFD8h^T+KAf^+TrN;O2gX zO&HUOOj-)Ptoeca-fkgTSx%ghz?hhIdI@q@(4Bz|azl;Wakk+y@KQx(rNN04S4p5x zX|Z(R6OzF9xRil}=p7zjg@nep+l3y{hEA?8LO?kJRFP#vob)V8e!<6!nRx_S-da#Km(RWGyu-H1Vm<3<&E&cv^(6oI;hn0lm zhldBPjvhTaGB-0^l;TKGjtEECal*&Ur2CdEUgzXE@bWmVxP-)NVXbhL{rj0JDk?l` zd(YyUItLHd{+=4hD-83W^9?yh{hInN@Ogl)L~JE!T=0Lh-(t=1(jfpkM<=K9`+KkF zU|};e_AXLcB9~t63rkX9W@yH7FhGormCQ%Dul#s0$4qzBu6fY|>UbeCxxT*sWmMG3 z2qCVTnwpT1kTNuDAc7t?<)u-Bo_$od;o<3D{>-v=_3Z2{ic^en5DKNwL^Y?QyL<3{ z5q0D?=?h;y49O_@BLod`=LpblU77o zSs+{*`OxurDZnjSc|SxaQl`L5?Qi!~{iUqmZICEf@8ssDb>hUWn!AbaR3M%elo8nyp*OKJ8>>5h#CseoDs{w~Bg zs0Mr)n6dqqjg2p48A%Aby3xG@ui&M65bZ4;t)GRJyY-OB+=2&camz?$o}TYyO7mRbYh4Pdf{o zSCTsS_HE6tZr@1A23W)<7wY}**0Nz`EkEc{0`cj)^jp+zv?I{H`{J=aTLUVy%~Rj^ zGS6;n-ZL~bWQF7cg4n#L>`GCeBPRk8q&R7Ju&+(CUd`0LXP=clZCoA-3i2xX$W2a8 zI?heo#NE0z8Buuvq@&Npi@9g&IRb)%ZS7AEQ3XwrOVlb&>i%CCy~{cq-*ig4c$$=;3EJGPD2Xn zx#FYcX&yPH9j5CoK;NP2>1?Cz^k>t#p2tN4=1wEQ(Wi~0E z{z7Y<--gc41W#}8ry#)4D+!5+1RXzqTpFk1=AAol6!cQke1%kG8eCg|B8(6T@%u$A zNq_PWj9jBk0@)I3dE|AH1#IzdTB89ian@Ct8&d(rcW}qvyLwenxq(2@p zqo%8?+isP3u?AE-8bV9(C`H1>GDC^<^vuo|^^J_`(7D&41Uox9nWJa7Ku{G~?m42W zy6iSk?9-f_Q#kSBVq&@jzxEuWYEba#*Fn%RHf%se=kVnYh9a-?tm%FK@Q%3ONIeBoC~Lt=#fYo z!pO8ctlokvj6eFsdLO9v98{9EYuBCvM)Mn?KF%)jGZL>s**bOl^!*rd4TZrDaj!4$ zQ}+#amnxsgI~NFmREbUlx{QsDO?$Dotc9f|$*bT(D%;vPOG-+{r>Ak&SE4;LwXugv ziIv!(pukInqDu>MPo6xvXPDm8*XRH4oj!V!WQ5kx@3XD}`tt`59H@>GRPO;F1)i3B zTC-}J{-pIj0m7rw&@riC=^dfYS#|B%gXIq-owYw zZ*FB3Ol}B$0v3?uU(lUEMOYU{>e9uv9308u{8p@3k?-?+JGg1=Em=Zj$l3Y%O2Qq| zP*(}g_#%!`Ea;29W-3s`KrcQ!zQRBmC-n!E944Wu{prCtJ4STgQweDr7#L{4GI zy9EUW`L4qp4xRZ|pji|2OyGP*h6dU{adB}hE-jG0jBP8EeaEvaxap4P_N$H^JC+aL z=*^pJS+0xh9={U77y=Fgp3#6~_YVvVq$@Q}HYZ1U*CphH`MuHc@M?J$><_HrKM2tTCE=aQxSB1Iw-BR&}D( zPP|nZI|al;WT7gHxzccJQ#4Sfrt?+adOLkP;rg8VYI?69R4Vsf zni42f*xe)sTAJv>U0v%*-vxdaOL*;`xr9Dxnrb2iA`zYzL>=y9r8#rv3<;Q&1Gjep zCaD9V;L_Z<71#!brO-1p+}*=V6m`#9LAoqNu#S$-<=eM;=YEYvqD7jB(75Xd1e0Nu zyBu=7QNE)f^93O;5QXh8&I{lYLFn2DNs0%g1x9&t`V~95B8mc$unDtS)6l>KIxY~0 z0Mc;)w56`-I$&5unblTv{CS?ZXrH@&`vf{Oi@}kgzay6%`8h8FE#X0{d@e znT8domKJ``E=)B}^hGLv`I`<4ka-QMwW+Cz!~r3pp#D!rXsA>sY^~u^TAV)Q^Xs$w zAFu%Vr7N1=Q!tXw3zmZ*7J&$?$yCJY@xjAtdR&&Xvwe}dZlfoNK7s-OAt@>r4vZYs zd!3E!#EL*ZMB0LO%!n>5NPZpmtSN)hReFiiFuFby1d%W}7mD(tFY66=rI40aZB+g;3RiA(%x#D^ckp4v>Z=Axh(J z-|mCTqltRJ@9=n&OvBC*v{K|~BOxR8sd{*OPeo{i)Li`e(F&9qSvl}--!>HM!}7IE_5X~ok5el>+ykJo!sv{XdSfJq^oU03wg%(T{s4@r z%Sd~)`$jcdVMRqg+%Tv*Z7c-plKQV_M}%>CLlcv5l2RT$Vnj0X00m4|&avy#ygf)E zbKp-RIKOb$ap$p}~Mx{$~DlHVdoYizu{VMqf_D#vJe`m=k`rqVMp1;FP6a7g?= zSdAubB)1xD7O4hBQ*RaUseSx=A2vyyPX^{FM`c8TBGH|hxou1*V2}^slTXf(LXH4} z;@r7&9@_7Z3)OJ-@vF7{Q}CekIrfw-LuLwh-`4{13NI3xw3jHh?_dlj{uCJ$u zQeYARdYvw@{_WdKBYnVj)?06uOMPAH_UL2glfOVqvvM`Dw;*S)#A)uzbzvMm>&XBJ zK}6Qh&Q4UF>|_25(GV$B#OxQ&7wK$-fhGSYJ2!{=k8Ws$3=9nUj=jtM{QZ%cu;hA4 z=1YErHM@6j1CD7gv<6KFHe)Yw1|b_@o`v~o#4Y(4N-l; zg9Ib&)HkvVN=dOUTegfy#~|szHInQDeSAD(3q750f+rMPtgpezlZ)+r*e&D_^|NOm zsG8DS169Y#*u1wK6XfFNPP%`emheV#4O05l$d?c&yKtspic@qODm^TwiQq>^BL84b z09WO0!-Gc8?LHnlD10`&7p?1T|LyZ~_rIJ6%PqBi`y;B6Sd2wolpvkFj>o+v>O&*} z*nHA5GwmIjIe{{9NZ+-}Gc8!(M5ml#QZO0M`P)3)yxeaE^vB$r*C(uOY(f$LEi7x1 zz7ft&dS~R)sKEpnBW^*t^~JY2MC+y+<(#_W=FbqN$})AP{^p)v=j_9!2`K}W@4cZ| zFN9yai^^c1Npcv_2&#TJpPiLe1Kb*Q>sH6$*!PsoDIjcX={w_GBT}Uo=XV{=GWj?d z)3LsIS!$!Gjf@B&5ULdAa!!s^u~La?2ve~y?qAiPt{hGz_R#xHzp}9J5CyZVT`Gjr z)MZeT2nmkt2i67R;^D)GVFfBfWrsEnO2WD+dBuqr4$QW;!y?&v7S&g+mhxhCQ(=xA zpPZ~9q8^@mrzii($!AO6Gedzy>;<|&Hqtky-WMFAI)R5IdLeqXD=_U(RZNh-)E91eJ1Yle=ua4`Gtk8A`1a}8XYbpGA?Uab}EY z5(x<{xKnS%3XlOk5TT&7T7P`93GxZ41xx};d=QSk#T&7LOYKV+(hoC6>jWS@5->E_ zS@871)}}|tzIS(a@@+kuQ3gv&#`7g+=9%nE>FMdSfaXLa&`Et?>lS+#{9A6ObJ80D z=Fp}=?t6HF`1b98$;-(}Q8KU{c0iJuu!pwu zo-ZmVW;qi3Zu39wMXtXZYD}|*%we2!YT3(+^Uph`#vf!YnN5$haenWP(x={vjftry zr;JThsi}}niwA!hi3y&3u-N$3-Uz&H4j@(JX)O{J9nM|Ry+%9 zl|kEw(kEc#o;&qvwI*w>!ebf%%pZ4gnYQF?d4Hzxov(|F3@^$I6r&6fMa`ug+`3eB z+xx|0p1@DSb%L6$)DWY)$@rz)wx_wd#208e)&Is4$a{$Xp&K9(q1+LWIlYy^JD>@8 z%?zb}IA;1Gbx9y;>G$@4B`|fK+TJ3}Gt_gH3jj+E_4Q#eU*y91!LSrO`=3buM$Q?0 zQ{x^mJ0pSL6hB@8*H0XHEK)^dSRt*7J%=oQ_Wb$Aju+<}VdnMF_L3M%lqBEObkj?5 z-389U%2B1w3)PPS>%D#OQuR%k5d~De})7;!PdmIM=R~0ujf!$`-K=azzI{_ned5dtE(GS;f4T{cF=p}iK%!*g;oz#8 zn(guXYrrUOic?@Rp!)pzZk(~GEJ{lYK``f<7JGf~yuI;2%wK<1z+Kz^_0{!)(iAvy~Z+C?EPyywg^mI>T}0J z>*h3r3|PZX_=ajPDr+oGX)aF9_$?}X$F;S#K8fI0c!DnPk@895?c29=QL-dQ@45`U zUA*rTog9|EC+7W z9O|G|SD_^Wp1>^dfDfC7cMUDa;b?$U5G|tGrAsA8TkkJXgXadq<_3lX=Y2auj)}#< zY3F7KZv58oLm%h`9pZQVbljJOzdP}9ckjnieVkUc&h1tWj&q!kI0vcUjr#$Hh-nGv zV&~LDt(Dxoyuw04%Yoo*rc08BR2F6b^`t_J%C2!^kl&S*lwbg9u`V0<_|jbxj01QG z;&{YXUU;+Szv}{BiwD8@2t}tYnSmRPcoa%{`<1*CD zfCR>KQk#BpRkYxY8Ke^cxdb_<<^tNT2wY5*JO7%^`;(=ZZMV+TZ!XcFb`VAe$#P{d2 z%I{`rJj2v<<9^C1$evC5jeVn|pL=rQs-U5umw3ki@GcY#LiPV#P{WIvQmNX?!;z#a zK??#A^!3J|p!%Pyl$J{YK+sVD)!#huS^@F#QwJ!@v`3HLw@(eLQPDe6@n`1sNP(xq zoph#@gWi|w?`-w;H+ML5W(5TvrmVAv_Go)~dHL7s-Bo1h>E&HkbR#CF9EsJkQS!!8 z;MG4z_HphKFVmE^6YUe=zVblWUmB4Zpw|#RoWXg5u)g#v(ObxYwOt?Kkx2IEDUX#O#5e)MwWh2HxDR1#`AF-)^X9EzQl=XZ8SdAx#IprIEaNh^|YR^~|h&|1A;9DmAQv2nJNN*NUufzq*vz}u1_Tw6>yB~K=BXlOA`jL#3!EtMLdGez+}5V zwOLsb_a*s}Iu$H$8Gdo{m1sj%Rluf=8;iWu_}L*X?>}(hI9mHQbW$^oG&7BD`+ia_ zDpBo7GTshO(+!THWBbx*{-=Df<4@%aENYjs3YSJBg``;t^L9J>%G);$SHc(Z1Rf=@ z-x)KqK0NAw^1bGwa$6XSbItmtzyxVaI@~*S1SLzDIlleH*a`FYailh*r)S@^L!I)d zwYmJ~q=(I&Z?0#a(uQlh4s=F5oHg}t-q^oBM6U<+7?TDTKYsiWS5Ua^o}l%o{-FvU zYmdg?bi&Nl!thUF8Uqs`1LLpw|^M4Q(O0e^3RJvPA4cy-O0=8i38!9UNT!)%N z?LQYDVdbp#WW%J?QjS~5^x!Or@E&*E&>LDWZ<)$ zB}ckIp%Of7L_`EMcy&}Xa|?^*J9g}VaTPw%<&1&L zF(a1mOI1S5lJ?2ZZ@Ec{4>!i04Aa-1EOb!?&$+O;NL=J_UD^zPTBGz~i*E%dj_sCz<>2 z#Fbjz4m{=z6eEzM(bunk=yCq|@nhsg#j_1u_SHhf5&TAN{SI(AI;q#F*EmBpFd5Ni zD5O>wh6$$ipxgd8;;0H9!Uxrd1EL0!@YBA*!4TACb@5AckwF?laD%bo`1X$YwTMnUvS{igBv#dvc52XVp%FLIE) z=OZu*SEPToTVlKih4Jf+5Z3pY;`^Ge6~V_KESxeInQFKN-IpIM3Xc0V={-5f55>1_ zleTNmnY)s8SWMcXQ|@g#yzzj0r2)Dvz#wmyl&mFFN!;9_fWDb$1vMI*q}n*i zoMpa~@Y3%_-&U44zq-6xpj-CvGnZACmsmBf$5tR z@)i~{e=bWSc*=l@(NILi!~}xwVz?BdoQ_+Ra~t8hwDj9*0W^jO>fi+I_frv?A$oY9 zC6V?(nOVXGOlS`H8fnp%cIDmzurkNc6v>(RBEAV+67!rPZLn2Q*F)P- z0UQkXjEyKOo+vNUwwDNL&XOJ z8wPkGR-Ev^eVSE`C)r%Wk(jW-L!p2Y*51EBJ|Hnsz{0|U*x5lrVQ5Q@HWKpNn*{ka z(2C_e#y8m6+hd;Uk!-im8uWw}7$y26lC2i>(-LK7Fv9eiRyfxcB1;7ZPDE6`!DLbN z-MbM$rMwMW*QlAY-;vpP81)A(`z_FQS4h{P!vu7eI@i28GrJfzW56H_c(hNL-DW+h zT4{2RxbzVnL`;J@&I*De{BD*lkB-zeHexu8RTWR7@_(O_6w-l$w^>kd86F~Tx2xFL zW^?qO0i!ddN+CJC#u^C&3h)&;x-poct4l^U$zT|$5ZKpLFgh43?z`^4 zI?l-mwUC~7>8{INAj?AXcRv0SBUVI1^_Z|&w1l%#3n7K!yOw`gaMzszz$oYP2iq4r z!@?&=>FL!U`}kB8sRc7sAs7d8el@ib(=M+3VrRH>H{NxEcpe3fID?t9kpH0NT5De`K!V_Bs zDI*s)_L0tl>+XD+htdzn$vFwZ{xLq)sQh7r=zTVqJQkdFyfoKaD?T; zQ^Ul)ofe`g>iEhr9UkG>dQ#tsrxZ+2d0n)yC+=1hzG5~M-}dMByh^h@G>9QfR6{R! z%RXp5)1#j_;rpnB8RC20IyKYfxVR85j_SDp;n%3xYbU@fVO6?vn=MdNkZe{GEfq>N z|DU=O%6bQq_DV7vhOaafdb}#vx=9F0W-_8>BmPv0Dkg>5M>5Kd*8r~$@Q1P9L6B*? z;uPYqi0j~{#7QFiE}+kc#9EY690jJ5%ru~n0^y?$uWoC$*+F+Bq5GjIW>Qd7hz|k3 z8C7)sxer}PZ9#^{g}tWBltxK^3MGvi6g65fO~fWUxZ^g8KD)Tmja)Y4n{x7 z2tJt>%E`$o18N)p@p9}!x4i*IsfisAgPR0%fHjxKMj%mutqix_r8Z4_=WTW*1e1vm z2bFtCRzYDQsvq>0a6WnVJzmrAUhjOrRZNWdSpTK-yN`8gf}SMP<>6e?%fZp`G^&Iw zOES-D1TrMQiGd7C*3<}rO@b{tI6GSswmt%euq+s&D0;se-3BH{RN?VJxH%ysBIZ?7 z4a+eGmXwqP^-U9UZu8VN07i|<&M49X0gr6ivPI{>0Wt?qDeLIqfq5q9#fxCfx{r*E zkWmn{GXD~K(tw?jazLb$-!p)4AoSP0dz8NiFoL0`VR#5NmjY!OE~XDQvjNsCnVr?) ztp2~dk{&(sGm!{Jq5*+@3L+WidXqr%<36;3uX=}u7*XBx3ksU@Y8ZO)s~`je2A37m zO5i_`!vk28S7K&FEo6Pv@{nGBKUTH6t$V4|5NWQ~_X1xy@XJLgdo}emveZub{V#X! BT?POE literal 0 HcmV?d00001 diff --git a/assets/images/br_2_dark-e8c35bc37b250271cf480f71904c15a7.png b/assets/images/br_2_dark-e8c35bc37b250271cf480f71904c15a7.png new file mode 100644 index 0000000000000000000000000000000000000000..e31c48266cacc0fd056f5c737f3dd3d4421bd97e GIT binary patch literal 11797 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 literal 0 HcmV?d00001 diff --git a/assets/images/br_3_light-7be3bbcb08f8b7182a1c719693a47615.png b/assets/images/br_3_light-7be3bbcb08f8b7182a1c719693a47615.png new file mode 100644 index 0000000000000000000000000000000000000000..a6470aa7a0175a8933aae7cb9aa0066a442bceeb GIT binary patch literal 16030 zcmdtJXH->N)-AdL$side!v-Zt21%0HWCTS-az+r5EIA1%ISUAqBzr&s5d|e9Nf6v9 zf+9HxisYR38|zfvcH8^&-S^(lSJkRj)nTo**PL^N-uvh)_L{yXB^fgr3WcK7*1{N~ zP zu3{lt&zW&XjQ^#faEx6JIl3{5{7%l@35zYKANTp)-Lky;C9_`tT-PZpYT&|;Eow+B zs^IKH(+Z%)MZH7Aax101``je9^0Nb43X%&H(Fckx6IYVgWY+?cb<%i9F&NA&rc#}k z6OFcGqM=Fk5adRqY4y3~P^r(BeB|iq=?e=BQPS>{QTpX-+S;T7moClB&z}hj3X+kN zD+=8CU19!K*uv6MUGriQ&W0)VJO8CiYA!AU`UQ%KbxuQQ1qHS&Vatx4KcmmSEaxBW zd3t!Xc@HT>U%Z;rHadDvQBiSyZ%^|}+0|!;&lC1}Ig6%lcuKSJ=UG+vq;hLgv#`WR z5>ufsUuIZXSn#-iKja$vYL2AJ#Jl@5Gcyl<)ZgtK8DVg#XTDi!{7|E~ed4{}bt|i+ zpuN?ZQR^^uH#gzU&CQhb^vHs+Q>NwRWf{L!*4Ji2KPM)zWmj2VyHBwz1a2!w5>a9d z@KQ_TZ!@LZUEt-NJ6db)d2??(<>^y$5fPCygoMv5-}^d`zRYXaEqe8eme(Nv!!xz$ zl$4b4sHihPTS8c>n>NWhIy=RjKXdx~`=9sGL*uuJqe~mTf1UmI(lXw$KXYavTVj1{ zOU>V3rlX_dbCsz?`faRBy^O~+%FfQN=Kde!pG^UD@cuo$soXTQw06US7{(+=%tw!3 zgKSk6jkK_WgGj2Ay~!Xdwky8$Y?R>^dgE{Ib#5;7*M{LjCGUQtxKXa(W$xbGb)<_4 zW9yIkF#Km{|L{+>*u5W;Mn*={kyMIpW3~1S&0mCsgeWC$547$69jBqD4)2OT$IZ#9 z>?4Tw?xs7hmHYa&Tg6?;^2a`KW1P9j6+AszwI zG_r#`JL>O!|BAX#%42I|2F`K>UP$lj>r;Uc^EleQ$HU8O{xu{s=ki^55MJ!!Kdm@%e!!!cth%MDUH}?Iz?XSVS3ajRKOIjC^ki%$d+C%U@5wm}^B!h|T z5l0s@D}~Cxv}%rndx~#=$|;(A^7W~EODt@c?YAmZ8UOV{)q{Q{0I|93mY=`*`@yc6<)k~K6moSvSxc_qIm1iPAk@oLAx)-P<0ty+4rL5YV2Q|ip} zP9R2I-FCh=^`a0OWzys?_UhHE>9w_F`<|p{uV2&i>gOs~8o%)P{gq$Py5(m{z$%Mk zu#C&dKMybHW|A-!Xe~oLzUh)P9&kAhZC{VDfB-&9(&g*Y zvubJAG3vp=K`mWfy4{~c)9sO-Cx`bx^z@L!Z}%a;9UB|lVWsGYs~L$uC!)B$v$Ep) zv(cN_(b17lP>`O6l9EO018h`GNeK_v9NoXa^}9QfrNL*J7N3CNVFCv|{TbAGg+NLD zeEHZ{uf%iZ?vv5b(A2zrOU&8YYw&o~Du^-842P zLV5W3&}TkVi6k<4>o%cgeMv+FDZ1C*``&xzIKQ%zFg$E%3(I4;rQvYxvddQ#%C?+M zzVDS||20EHw5xqrh`PG^?L7^1^bM%|Dif{pye>V=C<-zz)Qe3+AGI;(^LGUK2*&A1W zPHb3dY3Vc5y4$J})ciEaOYH9MI%A6nLl2jEZJ8iDB3CEgBOL(Bzd95{8a6he<7U+~ z9>q*be#f7J$q9WtHND&+oqTa)0NX!0M z=aDp0?B4rQ!pk$Tsb4pKX%QP9j$)+2+SerXPRlDOVBg#`hscgiDmveKyh;AX^?L;L zfw&~q60IgZO%2bb&s?wXj-K`O^j!M-Jbg)~gOXkTJQT7IkRcqbx)=-M_T338uC9W+E8iobrN$?zl{iBlV}(p= zQ0~n;jL@*EW`)Yrcx*eONKIOTWu;ul!lmy0h)Kef_zQB2%hj7DLZ%kq9euepTuLtG z_LEO84eMNQMsZ#g70)Qt0T0DOrNpMj4B$hL==k=HaViX_ppnd;2n*KBmuG^cEwX1a z^7WNM>M}Gq8>pKc~_zVe6Rs-d6b+?g+wU?RBY0oiL9*b6UjTY z5J*g4$3JzF=V*a?+)2J#Ow({}0evksAQ z!op`EYBb@X0KbUYcAQCIm8FGZs9Hy3O2STz`FP{nwQ$G;+pai<2CoIOrsifEcJ`!v zg&-&+j28nm4FSKwTh{{EaGh#lgN6(F*9{GjhMAcRx~k& za`h;;s3>)F;ErmwRrC7s))31gl?J92%GH+V?usc756`qU?(ke(T%5%F0X3 z(ryWI_kS0Lo*Y)(tYoyXu&{A=r{d-19UC7nE-5*ak&(g2&)@!c{B0^^MMMO?MROp- zIbn-%<4S;i4*+TWcylklw^!@+z46SRed=tY{+I#Xz(Bd<$UisLUys3EM)!$0}&wSx9YmRfrR+}zQ2Qmg9nRr>IQTY`KYLC~Ww2vP-6SL=R4K;VOtpkuWRn&Vp|Y~FdUC~2xI2N#ez-QaN>7rbgi}2}K3+{# z75{W2IqXUB%Del2?Dp4Zo+t!Ktxh)I-Q0++BE6+i;*8+Ir%zdYSAX(5977)Y2L#Nd z8z{C%kcp{!(r*2fskWMhJ}&!9$Bf z1<8PApu7sw_Q%j`mVdE5++JQ9e=CwB?Jg{L7G<+CR(q{-1YjdA+rwTolmpLi)z--g z2^8v8ajV{*p6&Y^b2JPL5C4o-LydIs^dE|$S1R9C~I70^5ExB3w8GbUm#TTed)EX z-^J(W=VRc##2UoW>Z0Wg(Xv(3F#{B^Zxp&&!s@VBK)QJ3K5_us=mdyY<1!*((GqOx z!-|e?%b+23N_zkGanqmVUJ6e~%xnliEIuKjE?Bd=X25Mg&--vbwQdt~xk_PHa8F$i z+;bl?7yz@~_7e7qtasUxOjw+Ld1OHW2kdDQG#g}}2H|~bi;9X0NB@ZVu9#r2pGra- z)+q&O5rZS|EJdK`vtR=i3Wdc=jb&I3V3c ztgI|zAbLPBhyfk9EXfej0f0-?hzvQ}jZIQ@aDx?m zc?ul_3h%~b&{}Mg-8E=8{JU#Y$&i28>p(>So)~`r{@wX!gBYWTRf28jqu3;S4=ygQ zhM+y+wDfd!O)ha>EOg7~ep4amh|jVrYiJMwY{m45H9*?GcKuEZZv_mf4py-k;fN{o z-k4RFy!V41P|=4%l}NZS2l^bBk`f1WsB6!SkUb%olt6bLEo51H9Pe*vwkU=i`uvB# zs45G5$%ZUM7#K&`@y4_2KR$90;A+GAOJpeS`^OE{rWz>dcnJh^WV z=8`6AaLYXNJUBSu5)?#8pgxaTe&Y(w^dT*kvEs8+8a#kNI92l(M7a z0{2w8ab;?D_MPAU|5CR|0TGd~8nl1fQMD!1k?L4Orh>#o%8Lg16i!aR%0sQy)d__y z8f=P;FpH6n7^3^YMCI=pBxn??0R5?PpHggSXm}!;y+KGsguZZr5HM8OY?6w0+J25# zQ4a#C75>sbhO4!-NOo5zj-oG-crVP&MFQ(+Xl!i%_HDOzDm^dn9xXw$LEdYxfsXHU+H-`w_vA9mm2iSN4zf?1+R8KqD)Oo!xs^$?m5kFEKXXoMXrSwr(8LrxZem@$Ix)s1Rr=+ z`j73r{r&ZMBmjo}!$UW9f!tFqXBv#pou`v@?d4FoiR6Y@r=*r4JkyN!%ehVRk0Xr%G{ZS9mO$NaE zpPQAcP|$$Lz=b`{L3`_es$0?0(&vD=_xAO*4=Ldiwzqvs%FByEdO~nXPZArpB_s$+ zE&(O8B((ye>WS~^+}xb!{<R^$*4bf-dqGq4gs=^m$jx$6sonS!#iObF^m^c%=f z=)hcjd?fH9YM`i4oO0FMb&(+&6r7)ymXTs!hajy>K~~dVYu?K@s=IwvyBMowYim0Ucr_tk{jpPCShJM~{K`;; zX_e<`pX1xAXri0of0Nf)sX~(E1nIj9B8P{_ofo1ow zqo+RGOV_cfr%t(H=tvu;>^jiAbfI9Ty?F6L62Ny?7|E%XnOP1fq&&|@T<&~`p)vII ztX%BOT>U!^9DQvoq(@;JG+j3ah=$}$(o7(q(e@$hUa^(ZT zF+OQKS_X$9>Jb;0ZaqD${0ab|@7p)yoGX4WyDYXu1O*?z^ZhGuN0Rx@>Q6um@-*-h zeDD+Vzeg(5KqWJ34GoEJ8mxv#6OuC`DL4$eTq(pcHkG~OfLA={ll+5rJ)jpw(9$Zd z7ZaW3P)q>zHa5w@1M(ASdSrPyFGxn$OiW@x-H_i>fz?0ywgbq@tUjOs|_P-4GTZPf+Ia2+B7>#6tqll0UF zpf93#zX?JL-r=*$T#ZIBea|xGel_79LX1i&6SiOLgB?`O!q-n zY);rK0jvcR|6}9IE@0ar!PpK{b+AagDVG{5>_%5m75#4sOzQiSvK$=z&1T_a#?p`a zO8|vIl&%5trrA;rvei`Z7G*?aBqF7O{0&Odzv35glEh3ZY6+af!w;*A#k{d`acQh< zY^9aAs&jmP0@NjKvkyb+ykx(-kVV5aFAt9t5Onm!^Pex`5~U~o9rFGD{@Cf=`;>F} zPb|*TDscJ2GQ_dQr#rt7cq{9&FL4uskc)_!aHQAapt+a;Tykj-t0_UV<>w(sQE(`- z*1L>!K!r_E%;f(yH8H`a_K2b#GC>rW4{vBeU7ZBnLv!w2bZ#yyA|oKjc&nNn;i@7n z`yCasS7mVyr5`f66!a}Da?dCOzsT+DX=xRYOGuDB7z>-{!0ksHfiR?9Il_FO_4<|) zqzdoLg#7vUYc1(0EzmS2?8LL5FBVkM-qO%{4cgopBBGA*adRJfbtZX#(U;b(NdT3K zlkD}kZ~*F1;o823*)FGja==c5Crd=eT=oBJ5X=gP#46 zlBq~$YKMc9lUf>&?jmlqN)8LntT^HAs;{078g@1ZTy|Ga3R!OT*YW6B`O;6XgwRJsL|khQyub3Jo*ZcZMV9fgErW0IjwPa? zOQKMq__b@Ze|zPq3%$#tHPq7itdo<|MMZA~N1IMw7^=6oR~cHw^wLrc0r6Rq19#gM$iS|1 z8GHjL{c50-17*+b>%jpizgB51a6u79L%LjXZ=guAHZ&lf__cw-c+sj`#a!>qlK9Rzf@8tJ?fcA!m zs8FgZDtLg#!lCLZc)1l;S66FqG6$XZ1wsIJPfoIfn%!ogbi(6sEYf;R3y38OXbdP3 zAaLhC>a29m|FXUax%p2`!ec>RUgA$rrF%eEuJM>r#d=0Hz*Ot_%UdG zvV)RB#~3PkEbEaE+4=OtyhlI@6V7@kd0PbDjfm? zAPG0T_FB++4#3b5pnS=|fF9P90y>e|Ki7*N&Ckto=P3jk`{b6-9@8=XyuDf`p#}w6 z1?Hk3KYm1pe*-y}$pNqw*`FA!wkkrKoJ7cz;f)(JaIf6A8=j}J3Cccf!#MrQ5gqSe zgBiJbd8Oy9gRg@OmuF;Z$}jg#qA~R3-8NQ}Lpv!c$q-cEQiO`8o=OfXrM9n&=Uo8w zm$pk{edkn&9Z5Eo{}q z*Sz!1Jk9Jyrpwm~u8{qi=(vW{>JgVxD1W+u$+BEsT}vR;w6=Z?Wr296t|?Ig2d=Z$ zw3P&Pleh8RI{~lL@rsdQKYjh-*2Tg4h6CQZH`zUSrYVpcFqtTZtwXpc9FQl_BLAQu z7-_L81npuVRrNNL@&V}qPp}8>Kh_d*1qN0$tgHz$ozdKqlJvg5z8XWEI*`!DFU%e? zTr%c!J1qwRurOdNd@%39&L2E;^I|8iKqC34gNC4v6{$y?{)d<$PCS;9A?g)d^&T zy|M?v!3c#x#%GBd=qWO0M!_G{0fk*JH(3~%N1@m?5ifu~+t+Gq4ruKWAix3~`S0W% zGN}+=?ZSl%4IxKTUS3|;K==i`G28Kw9EN|NohAL3OS3+|w7ddxDC52HHw$9ot_vJknQ_)UV|c_`3PqQKyV#?&*{`J9^~1@0Vd!b+!7LW zAOkgR ze~Xu-0QXw5@CI+&=((|40uNuQNsi1VnDZ?P!YmqYiKwm?@m(3ibK(wu;yT&H1Td8l z=Y)QQ{e_#?ZcNFM#Iv)1ptO<2geI81#4|7g5-K$@ki`)mp0;Ao<8+X0Rd8FPTt39v+} zEpsR)g-Zb^@3GG5@$2m8mu%|=6QP*0HgR#fD}JjO6O;2WKdAxT%vmy6TZ9P&-Ayv> z(zG=$%l8-MXiP~nQ<=tIIg-Ogq8`)Aj5JKvd2%3KY%Wv0FekY6G6vo++_A(1(aI2z zf~ZHR=EVrIDt)JSJvrPtFKUBQJYH7|-Wj=t zh(+9~m!IF%ZHYE2Kl`~w!DFKcmeUTn388%ytTNO z#P_-)y3~gNTt36tPt@)MiC(S@4R{e6mt-9NT3CdK9EF!%eQ=g7{7X6PIQa*0!zaK% zY+&|_%uwQE9vAB{930CjDIKs6V~dez*)s9>f{Z8XIg3H2#K7c0$Wj>SBLx8qTnLIA zS1zdgpkHwcazA_`;dJ(N4R=aq9eQv9Sq#Xj>_b?Zu@=ivJ}Dl|)%=0ppvyWdb2%U=rMQZD4u$pB&yG`bL<1}!bTY^rUA zQQJA|-bqPb;cOni9IorcfD!%oOOe2E@W zq>{%z^;%-8P0#}crwI5N7z;R&fgg;bufnx+*|IlUq9uL!u9=aodlCi`337A42jvpN z(gTR_%49POX!x{jvAz3>hgw$rCnsy0WU*9UUpQ=-n6BTs!>_8QhRiykf^#BX5+3xI zY)Nf+qFe5(eUx2M4i97>B^Qp8l*AjpR)7*l64^ zT}?v5G=OR($ABo+fVl;PrMM&v&tMGA=9{&d&V_=ylqE3}4I*O;iv(a$1W=ujS_(or z5A2b@TJ*>AP)!Z|jEuJ90|>c}ngog^Xf!0Gr0p=2rsm+F0<{;;=`lB26<*P!u&Ljz zk5>89oS1gExOfW8mwZ;nXkhpplbqZ`F46?YpSrpI_fmCA;9jQRcOmm`RW!t1By?C6 zz=VaM3IZAamri3!EGFI)n7_rJnb{;;9(P{|(s3Bszm?Xy1XSI5szpJPnG$AjrWnl7 z>?i35PtG3zvf2#cdF3Kl+{y{C7Ut3wX7vIfr9?r6fn_@=%J~ubt`YgJo|z0~si>gN zi#cP*bdoGCE{-&!@BbD%q21cWocxL5=sRYA>OPD)l*G#D9_wwn<+40GG7Y}g{x zonwwGL`@q+>u+28_R?9|Ak)9ZEn0ReEyLsiM%{EUw5av|r4KOarVmf##`-!8=F|fN z54l@?A;zLZCjsW&=z7I$tbnU-AzPUs_xXLsXBmHGjH}@Es&Qo2@@W*9j*v|UElu6k zwMv}<8v?ehh(#)2DG+49rS^m`^?vQ|gS|cC-M<8(r>4RsX|&kb-Y64|p(UX9aJDMS z$|&EzKM0-3Pt3=mR8r>Y?|rbo_1wsRA>-CQYeuTc$#LtkxW^K;$ALICE5-3)CDcH) zU@;C%9Uq`v!GMC}pdQ*h;1gto2{Sv7*VBK#!yH2s2F=exJ0fF1S^+IACH96X)u0l} z-F>j{PM6?&$pJjg&4MrW2%=)`0$%a9#|*b>d4Zc*Ufrg6Z zVn4LCx927#CXP>X+K|DursfH0TUn)T59_A+{LSI9Y!%i{WYGm-i|3AH+E*ArL^+&) z+9-}M8g?3Nboz_b0{}d*ErbG-kdv#yR2SOWJEf-QuG;@K5wvx8FQ!_v$aoZnBTK-s zP%`&k;>jR`uJogx;H5<>N6L$;#~e8ezkAUpC*B&sYb(IA0AQH?@SRR+1Td}P;o*G$ zlgTtl(6ay|2i5jI1F%4hIY!l1mNw#l+757e2^0ZGd(A;q9Bd`n-n|Sv`z}XrwU{?8 z2H&T$VGyB4#WcyQO^bLBfyo&u3v2}Lu8^9Wj}t46I!l74Q+Yp>nhYM4IBaOMZd2HF zjFngsxU@jW+8`$$WNeAN7kDjZB6WRQ;W;2@_WApi50^e1;M^~8U%U;Zo?)H{_q@76oTw%Cg2&0r~CHM=Cb)Rytdb-aP7xn zn}o!lqR;Jp2l1GdfoJ(1Ut8NiY2@hi_tL)S7f0^Mx*y_*uZL0CVt-86XK$kQfh(4Z zNl_hKZr4h67*NXo{tfC%)}C;}VCjqV$We{*|vf+hU;t&g}+WdZJ=n-BWZ7lgjyHvrW844nY0Xk^-*isWV~O_e;qjpjt6Rc;CFHx-jOZ}jypo(p86VTv_grA-k58|s`Abn9E`@tlHsR(RQI#+Nwu znd!J&Mb{Uv2HcePDmg9`KFPeVux(~!6a_^v7=AkUQ}4Bm`gjwb=@-Mmvt%cdpW_etC3XUwf3N-PAiSiGVlsrh5JL^2fN?hn2lcZH0Awc#sq$u z+L#zYbu;GA|709n6}Lw&=-#ip-S?F0u^A@3Y0hn2DnPR^J^k3}ysTkMf>T%3KM66t z_*%50elL%?R+spc&PlrGTc|FUsFNS$55JwlS32fwUDz!zz?9QIa>QU3iyKT@s3h+H z(^P*nt#WX{?psOlTG@+A;_+f zPQGiCCu3_uFpUD3KK<(#G02FBaTJ7aEdv8-GeuO}=E7z`P@NNtA8UJ+{Zk^E?5tAV zh4eSL1B2qT5;kop@Wh_X>}jV(Aw3Uf-Tv$K;3Wiqf(>X+2=WA%WFp-w4a$RtV(s*B zZ1ICfl!+2aHWo}YsjrrHHn*g>HSu@;u-xbK^Yf!%5ov*p)6vIA);j$x^!4352)aA^k+{Q*6FJ%b?nGr9&gs8G za(x8sxB&iqvy*kr#goV^&=Bq(Q%4f_S8F6EOP`wH*CfPfnbOiR>}@teN1g?s+XJ#Z zK+a^afg&3KV>{IPbb-c5&9md-wi2GXIv_k{#b|A|;wNuhCK+?;T8!-{XRo=Z-Xmpx9-wcX|&UV1K)PM zX=Wk2rGY6C{8EN@_gk;|lY6e1^6N=aXE^z^LNlVOtCu7nb!R}x3{1DT)!%Ic%`ly> z|6_)-a`**C8Wfl{(WM*PXMViNFj&3#U8EId{sv_rYx?tNEu3e-?ZGpa%-!*9 zZ5fX;zeGc^wZ*RqZVVn)eJWK%mwl!`Cg$o1U{azw~t{W%o?rTNH6B zm-^to)u-5R76&ti?jEgPQ7)&;Tlr4U z_%Vw)BzT@UXm0L7b*u4D7PqUhNQ>zE#`r{rM#k@~|H=J>@SA``KCA`pVakJ=a#?ML zc@DU~jZ{APUiToKci~IJ3swU-;Qo|s(%@aDnox!56$A4y6i z{5i4kVjK#bzP?=@KXEbv8clxV8mh|dLaWg3M~1d>780tgx7u%=ZFBs1G9LG4O@dta z#+^7W9+WMceGg7a`kFe4P@*kx9-_%hM+y4+ytqDm=ru35w3t`ZG=G~p6uh-VC@+8d zLk1{tSA5&|y3J>0v9SQ;HuoPqP_DMxO#W3M-OJIh3Q^aqldC`u6{8uXf=_XA>!&Zw zH%BckA9N=^kh?#>weB*KrrSSh)sk@AU8LFv&~n&hi_p{&KOgF)71&!)ug#1ATQ4ld zJcB`nq`2W^pc`S&{&^AzgepxiT>jUBxxM^ZCG??R;Je^fekJSBPFIx&7BUM9%6Faz z3q;h_HQ5%q+=R3&v{Gnn$`8_Sp;($Dkh~Z7_Ha)Vj8gh}a)k9cN1dl<;0#TZ!47B9 z;L+~vxN+_K&a(ab)Kmnr61kGn(ite@>OiqTk4Ti#$DN*du8fI+im6sS6Hk**gS?g6 z|8`qeB<#Btf^uC1_|c@%>jDuav%_moK?=A`&>G}=@S(?omBVNC=l7*KN@zqI8yheW z3uk-lsYH&vN=r%#HCT+f`1$*I<{X`zieZR=eDMI%;O#WAPprs;%nc1`e}H8Ire}qq zYhGmW`&w~*tkIhn#!)Ch;^~QZ%OEElzQcg85bKN#%hQvd{@0TRAJc$6TWopkHeU|Q zOl+?m%<7LLVDQq#zY9wEGPN$8Dycnn3JJ~0Oe2TYgk z0P(^=rUW1WG=`Xjgb#pMFg@3q!4rq>M=aLJkP8MQbZiSWH~%qehqtbA#-c&;h)XJ# zLAF303)&YZti(7@MR;J37f5gyOKdu38S!}g1Z{T~dMUGS+*%s`Ips^N{zmr5#NFGO$c z!gQ|))&grj$F`6S++lhyS*aWPs|QT+;H!lP$df^_tKMg24q)#)2h2G_s?Mjxb5}@bl{lT5IM7-)6|+a`{+mm=dUG@R$hX zF)aVH;Zm&L8L9aHO6LEw;j#?DiCZ53N5kb4vNc%WE5u$P6MDSQZ4H(%Ilv5HEaBqJ zSpL`2ub8h_ zg7Ce}hYufY029Ixsy-(R3xmn_&Q1cD?IER?M?1o*nivJ%3T+R$IRw!afdd#AD+5(1 z;+)h@^8n)+4Djry+a55QgYion`I<#lRTUiVR46LT%rDL`Fh!$pH2i;cTV4dOCb|p! zasSWUmStePM|UBPiTpR^I>p#RP;U?|0>*rLPX_jZdm!UH&|{T6dkT598IN+jAWrzZ zzX+><#R{CF$X;-Z_h%Zn^ zMutS|wjAKbcKC{FdS+&0tP$Q>)50H9Uc`{*@WS|L`WJlO%B_(AoU8xEtnKL3KR3$Hf}eQi&!3}fTu>!U z=9A?999HXM;&%VT%!755K7qg)4uLatXr zAuKG6B$rj#$$e)@X6O1Jyo<g9uV1fkh*>T%FPmm@kTj9>b8C9vR;vmdMeUmhj;k zkS1Qaw07jRX~1-WIH$o)Fmtjub&gHb6HLy?Xau~;)3E17bLWw!NIwJrd+hZcIuM9N z6S)7I;A^Rx?7~BrKJR=n`t;?LK*oMnUMe{!{hfAlS5m&d*&81nj6bMcd8?1v|)>jKfz*_YQZl>Wh` zVmD?xa1kUGRH2AUiwcD9;E6Ubu>&EoK7DjczDbIU|O74TLC@PFf9uv)mBaE7s zr0sx2E*UJFL&?vd6cAwj>C>m7_43n;yI;pQSrhxznDByvf;zjpsGmQN{rlHqEYcUd zA%YFZFs!(kC@v*M%g0AlGcEh_%`N6}qALnf^q9sah<-3s;YxRH^Ouf)V25@{w+ zOsM6l7Kb&xdqPR+E#i+^Vm0ge!)msvEf`-}?jv>z^UH4WszN^uvdlL*vgM`+|0pOZ zB=I?gd0ZUZ%{AV_B<5DzpiUd#%vH|ElS$ynmWZZ-dHH<=-K)?C-u*Y;b#ed|3gup` z9k+ht;NrISC-bTQv?tJU-^-FJL!F<`4DoT>JvqrS9v}^Q{4D9~*C&pDC%X2Rd(QTI z>hdyfsRrfBB+>>12QQ}iC)h2t-piIr?Em~!bNPyzd^;&7QeG;5Y&b`bc(J1)K-=ow ze6w$FYC~gTv3WsdTsaw>OoRBr_f-Bxd79 zeV^`-vD>XMRWhdu<-N(_w5r|X4JG0-I@^C#d(dCAw6c;HM*T{i>d&ov<0B><_lY=T zaWLtoM-H7=8pC7sx#{)j!-10Jtyes<&jCrnHs^DScU zDm0YE9yV`vnexutgE1ATJ&==>L`&v#I_ji2uWM}`2ngO3$yW*A->%vDI%J|GhV!3` zm1v>^eSF3~_@xNA#Z?F6UKa)9v)CT4J=69)qb}EYdT~M~Pa=WpdISO%NB`z7t?mW`Oa9RkF{#Y5=XLi!mmQIn`OUWUbgd} zoGdvB$r_U0|G|kD^k8`T@@3v4>iiEdoi~r~qs+J;U~pPYH2x~o)Z%qCFrXrHXAQKf zKT9C<;%`Y4xqCX^Fhjx3J(0yzl)yTl`Z!cnG>kaSz@5DNHa+D$?$yN!B?Ci{(~QeN z)*{N?yJa?uD6YqUU&27Hbt!9WCMfrv{oo}}Pfx2juwKZ@V#3iehQp$ir!=&@h^~Mq zP7tV=GiFA>?~E-K$Go_j>gBjTfsDd0vfLee3M=Na-*v21tnJPD{`X!V*Q|WL%F~4f z*BXui<-NVV%$%H&1}`t_MfCaY%#c^PZm0A9-_%Md7*z_a&n9FNIq%FZ$Ii zCi1u*(zWGu1 zk1CVcdRg+vY>o9i#hp8MMhi8?COw4Ae-)7P^M|bTCDIelq>;c*WgUHL&MIzIFMVz|)ocU=+0Z2J+jMZ>_zG8@aIqV~uz zxXkB@yIvKtdQ;>09&SRo5HPV;y%MCk)zxAuqQ-F@+Py~P(y~fyFDiJTa+c(yArp=y zp2hPw_DEnj^TSzEqxq`g1A>3r*GFIEXZV;M{AR%MZhF>9hMkc|72(rlL{yW8=b zwIpECAK}<8ZwW_UpIGr+0Gz*fEU1aHfd=_nk(QnVjYmGPvt8cE)GqbW7JqXQTz9jeb z^!)c}U6GM=%9E2kNHL5#MwQ-)>whY-Zr!@&ezuG+Y3Jh;bCA%d=UYXhD4MRMB_M!L zNSMvkk}0us&`F8)@bP1D6B9b`yI2cjsya>c*56Hra15)Fnwy(rlACdxli}1Ud zB_^6ax;1_AXu8H}v0_}i!>Fv<{W3!=ob6rXi@5L$RYERH>1x~M(~W$OybRQNN5sQ^ zj^&Tb*SourdY=0g+RxU+}=t_e$U7KOS$T z8ngw)B1ZX)IIYqN9PxNhNz+~jiz$iOpo7mA*U;d-ch6i|>_PKW34(h$+%N#2rSgrM`F2S4IlrSA~|9GKO}4n-}BYk0*j-wced0M|d;I^833PVyvOruR{h*^Q+2!JUMV3Va4n3%)g7I^rb6M`~ir5$EBc2OS0KWs_Al4*@{sWoXet5vr%zghYfLnM&{#1`e1I|a&GHKt{OiqUcP-xT&N)+3A40Y z?blx)HiR*dPsCSU9Oe7kkw0+qX@A z70_?}uE+okaSs!7CBOLi0U6nVaq9b=%*@tx0-s$97|6r4LW7XgJpusE(2w_;49a=p z+S;W4m{)NSclWMNW&yQG0E*i-A+FON&~j>%&k)5Rc@4JR05W~SA|kM~4> ze!O4INo9`dKB4xh3X6%P<1-um_7Y6{F~2iwS{nI3C@8lhl9T)5*^R|zWEO|BQYGXD zo^Wwt1!p}jt40mZ`T{`Bo|gnX(?9?GgH1vr^Xe5hEb|fsq4syI5a#I_7#8N5M5w5! zz%*Y@wu_;TBe1NLg#{Czlcn+L?t{PJ7@nK|$`lP%)6>%n2nhJ%D2Kr~c2vR940@gun^g@mx2d*6s`eXZ@lFIvP4 zd67EJdQ^^dFPs>jtmh<3U2US1ThhI>bbVwfI{nkZ z=1M|#Hf{dzWLbe`WeUEw^DXbDxzQ3IY}J1+%Zj`1f^bvz5Em-*(`Dn)PG)`lp1{?Zf)$56w*Z^?XNO{sHh(3`FI zU?y?e7&Z0r^?iUp{wHe@Z9Wv-ou>Iv`W-;gy4^AK5Q!mwI6YksA?CRq-L9+~e^{A0Wa2#UYePjtV|%)*o29gwvfsY0m$Rl?@x-i_J#?204aXw9CtJ(Q>;TPD@^@5Hk)8>BBnUbh@; zlAFBm=7v%Dhyjqb%+c@2$yM31%$8L?(Hh@M=LhSyW`qEg1L#3IIq$kIU5J5+$)G=p=RPs_ zhi~8L5F^nc-X9Pi;I*ba<$M6GwHw@A~2aiJ+6coHqCKzJavv78{nyTD!_NFJUcy50g7iOBv z8-z_N0?Co@_0`1#9GvFAlXgmCXHwME)V*JxMFYN-2e^Wm6e=W-JVHW3ewZZP&A!2q z3@MPTeg>!I2R`PRQLo9E!hbHRHcll8NKFk47d#hth|x4EoBSf^fui-(ekH{%FE@tX|i*hez0zI;x)%aavIEoZZ)N4^bd_9l$2nEl&3wq9VZQgH;xI zy&sbnoPw9TBE0s_K@gMv9SHzj40tG`!LP>gd`_f1JUn@emrpf+SS+9JErt-$iirtN z-J_>W>)oAi`L0pO^tKA7)X+C?&FZr6Uv4_$cYd@9QSDVcH4KD`j-CPjwl_t33q1dp38$m~be?!Wu0&%U~nM6eQd3lDUgR_%NBOii8b`k$_!Wrl6!; zAE6CfA2HVBOjPcmf0XKV&2tx%_}$-$5`Y5=G+?%IL=a^N2nd*T>fbuVC>~v3L_4pg zt#FwCk_Hp$CWehwgh-dETAU)C$cY@>md-1i%WJ>Z0I*9N5~*U?Ged+S>^7_QrwR@DVGupav`q%z70&BmcF_8;u-HW_XJqem zF`QnK+Q$uoZdQ@!)j8mR_&ex==|+7CNUiPd!;pFip1xyK$yc@!UghWj> zTBs7NlE0jrbKL~d?u*b3r9E%*Mu2b?N!CkH;%$p#qpO(6pXvb%KGBe!pA&k_z+y%b3lP%9}A7_Y6h z)f$fR?{d?QvH?sA&L6zt{QIbI^tBIIe}4NW&aCyb)ouV|exWVZbi7DlK!6MP0~|93 zSz4cqNO&n`8X7+`ugeGiElpu0e5QYnCBWuIAun<}{%iERJeO2c5{M5fa^2^E0p@z+ z%gU{8a0mF=KLD1Dii~`zt(_7RiOux{v8rQv%4d5Wb`95+)0V~uD^JVKj<{JG_#j9)b+6OMi1J~lx(jf^E!d1`cDHZZU zL@9@c9&tNuPdSj4X%xBx6$6dip?k>o;Xa7?4E2DSBJI zDY)7}=0!y#Dm!v-PwZc)e^q!BE+z^|n&Ht#toxM%j>q|7#@DYeUh=N;0ScP_dGv&h zElN3G1qTn$v9DtwnNJKBV%blP{Q3oCYI%^M4-XF)yNC|yhgVPtdeYZ8ZowID!o|mD zlwNc1>guxJ7>)mc#GF~lg0_$-&Fn_f<9ySQXt zwI3?X$Di3Q(S@F_iUabmQYVG@7gt}NGh&h zI#nqg^?59mF$N&eKnVI>HGjW*$<-ezn0Bh_6hsND8 zSZ8Y)XSL@W=G?@XV?!~W{r%ah#oX}wfsHXnL?XC4kQ(O}>T`-bi79?5nKSZ$lvEb5 z$;+2bYxWwKSIC2#4gk%V@X%kse!aA`6qS%5>F9XuaC0LW%YZm&3XpHicwWr*CZ0s5 z@3ea?EiXf)_4h>=0s~SuFfy9i?Oc;x)j@DOo#PEjQcmpX0uZq|L z%|vHBe0;n0Vd|*p0qgxGiQ$ovXOHhAlFo4*ujtpocszSGbed@B=#b!%l^G9YYSlQx ziU0+Wt+aZx)D;bOc5=Dff~D<7#n8FFVJh)zxpowm&R`V}dEEU3$%*@R&VBx&WqgH0k1NnKIgfQC?*xZ6;p3E#`5)9 zA9r?k&JCuCu-&9HNkp*ize7+h0HjPtR_>*zr^87hhCE@l@gp)ZxApf?{M@RlnSbuw z(Jh-a8P2>1HcbBH$%mc#i!cZqrH)&?fLJ9Rq@5hg&V=mOu;GVGkiJqfGUkuAk8B=| z<|zl$$Po5i2A7Ig*O`R?(Rj^{+;hw z2WwsIepi@F0Ydo`09vgB)gR}i*Lje?pjqub1 z`ixSbSpVPn!ScNS13$QF6?ulAt|U$nYlz6WfwfHoWY46w`wZ9&+s)Uz;Txm5eMDBZ zvVh;!>)r3{)E+QbS6AohPqW2)kxPcgD5wJ-d(3<20x?QXQ4xow;SvotLXl+C3iu8< z(ShUIZoUh8=#-)%bDPD{N*(8KV74(o|C#)l76M_MM$nT0!qRHp$xM#<__m=V`9Id& z#05GHDIKKdeO=MC>NT7n(?n8LNj9?$u6?aBwdCb@6Z1p@G#`?X!20KZlTYKXb34%m zN1I0(OISA93$TtJ@YOMn9>xG`ituVci6OYFIyX5sHZ~>#_cZT{K0}?S2Ec$cXQRgM($pJ8TXWzmlt*_b4FKT3n9P5zZeg zh2)l+=RcPd!sXjKH?F}5o*H~MxSqVQMMdL*6lwv1WL53>&X34e!!IzFGN^4&Dobb5$dcE4l& z4ne2>Y=sD*ezREDN48@V9$PLI($)X zHiqWiWIZxK1jJ%AO`RB=`GAm+)_1HxT(k_P4V0OV(A-8wPX4UWc8R`2X}IJE7!lYP zJxFvfFAoMJ*{G-rvJ|rz#xFA#zOCh*o;riSTc2%c80oNGzBD#4_-;04c7EdJ7t5$R zb9ewmh`6|#6i_0BoEFj+7BUM9=hkQYhIy(D{*VFiJkMcV)p4e!r{p>W52#S0_gbYu zEsZzm4;?+d?$O3`r~^Ezo2ka4b6ma*Cw%UQuR}ZlL4=;U{%ny7kLmPFiGIi4*{Y5; z_+N0bXTVaNo;1wf`U+8Awr{=r41Y$VyA#7sYySTBr>vf&-Z;I*mXwSln8yqq`25*SU&%)GHZwqVooJmYytTQB|M#fM>O zeCD@H5V9 zA`^3!aw!Ny{n(91lPGMti6Ji=25!#mS3%p=3D-NwvftLb#{;9ke|cc$WG`s9avyfU z_V>7|z)fY|e+ZX|#g1@x&&z+}LO1`y!hk32^YQVy9T6LwWpG(gz=VQ9*bEtLWNNA$ zP-sM4mU=L3V=U22t<{@60EDHE?{6E~JrHm^wms8! z`LDaB9UU=|mb>pT%GwsX9&MxznLwH9O#&rVX3`t{cTUM(A0V|WvDCT^A>Dpw#=E@S zKF-+s7`BX>>wZ;yevZGeNQ=0f(^UrA^-=MSn5!!ag7}-NwgaYp@S6hVjPs%clHi3! zO%MB(wwl_PH*#sYDL09Mp`n1blmP(@gSS$AGiLF7-uX0cuSK*RlVSm&nButy9* z1%Zdbe((T+Q6wa8>b5tNcpZXN3X^U;Q_A2Bu<*#NBGAgL*Np&{;J20iNd$c0v0Jgd zJhj>1-=||{UO|9`-6jKGr)^1H-L$B;NMI1KX~4`cl|NG&XyCI$oLcG{$C@;lVW!)O zC5P$o{lva(-mpK2hzw*Fg1oZ>l#&xldEljAl;AZVYcOu*Yhek;2K_DUBz?0M{_&bHiW3jOrp7>vjr1K zM@K{ReB*#>qwnJ4^0wAFGVmd7R8mrJS9DRsjyQFpN>710JA@~4<|3>+cZ%u?-u`=E zv8}YFtAiaF{lfLdj`7AQJs`kRrybQi%Ie-fRyV;ag&IROPDxRPRxeiI6rk^ri-{UG z;_J9eRG2xjJN|u)u=mTu5xG1{o>+L@c*{Fh*7v`0T@Tm#zdT!!*+ zDAu-KU)}xwXDcrwHUZ#lDa1YSudR(A2TDC^e#@wP$*t(1=0veEND*V+g*5q29J7`l z5FQ{=7%O>;sw#;9<&HDNJK7-ZDmQB8G;(UFk%cN2MIDagU_xIC(F%n6% zR*k?5$VhdS^Iv@^jZ^H9Ls7flleOti$+X3(_0qYzABy_=(7Dg+*>OduDO0#@I zfU}Z+=qa&);Z7~sQ~ED0Kub@Z>+trCWAw?qKb6I7Q_v&E*i^@%&7*RQ$xl^P+z5o- z+bg}&pWHE=)dS^u$+FmN$f6)Yk;suHp{JvJxAoh>lIte??EGE4P-@rMwyw>kZFqv0 zLbe2fOH?-}WB$l6D-i}&{Vqi^3RX5a+a$r{UdXQ`q%T7tas9bOAOQR+kPtBlLigv< z;y-uq9*n781cZmLmJR%Pqo}xWct7vI$>S}@125}gDnHBXn45z=LuYY1mC*Keb)Tv` zilQm$31i(Ghf2fcysrLY5m{sDV`iokyDtF)ivih-2oqrV#Jq<(P_t`A6m#GJKy9=- zqvXg{z-juC2qf4hgI{mKil)PKOe!>@qUv?wR*OGBLQ_3|$}`NGtIro5%yugFMjhH? zo}IE%afIm6Q>8)bP5aIAsjjjsVVnc+LNi6@ubESdF2d(#gXN|V5hWgAIH87e`w1Uk zA|Ts{goO4iDWT|;l$Vy4ql@gR_3P$}pHR29^LaKBa*7k&z$vB**49^>#Eo$-Gf!9%7yg}VZ&&so&5bP`j|NJy#L!GHWT5d65NSy4fP~}oa3@1w+PZw!ERgy5Cb3tcsNBlZff^-Nbh6tzCgMMp; zoQyZlRG9A&v&)L`35L1d+UoOlPl|8i6%rEl6@PGVRdQr~?ZJbO${F*~K{HY=~zAHX#&x&a`~NT`!vyUp2qSHRCwM3ZAQK>im7Ew9!NAlO7{MP#vl3QeB%6 z-Iv(3`~~lECT|$_IIB6weN^<-?@gUSAsmF_`$J zZ{ivA@!zeFi9BG}B;Rnkm;a>gK`z#WgP)AB9lySw zsY`q@ZGi%+d3Ph&6vdHifmYTs(3-ZP9%ZP*YOo{D1h#g$F(YE2KZ*MNufQ5j|i zpg1$q2H!e!3BkBW`7%g6<{9TZ3-QN^GM-HR;yE&r>JC&2ei8)qU+>Tu8V=`t{je(B zqQ0}5!yAR|6^!v1AEz5l$ZN&OXt1Bjm+G37o)UlLR&*KLx&`x6^&l&b3=K@DiV|~f z%$A(#0PCHl5pOb->cwyjBS6$-m5!Wkpmnyj2k%BA&@p zKH}20*wZ(PqOuD+*5A1)LpP|Y?J>fas+zvS@-TC;Jc$qv_46_|p5L+VTxnRy&J0O< z(rHO6NEzDANhHur$wLq0O|ab{6__})@I8EiCNUKeqd<@TGep)d}{AN{})`w$)xIhWZ>T6_~8y zk#-p-%Q{ezPt92B=%ip^XEfwO9HKSNH88I@ydO^WhVc!3>lW|YqR8wnDk(j~!eZ}z_sode z&j_X5evVgSo~D#qY)ZQvuYgBOOV^0A=mP-pP`zz7*9OE!1#tk>UD^ldSVEVLYeV{P z2?iEj4lc*b)YKv)+jTP{U#89DnsPu*dR#K%O+{ty|IPEeW1UMyM@4;-&1oAL2nS7% z)hQ2eau~S?O7s`!#qi*UfyC7t&5TIx`3D8!a+I*2*SZgIod;*1?u{>Xu5ph3m#_Ek zxHcr2TYxb--OJ4Av}-?jLKLV0x-btfDubx$rcQ(2K49tN}4Bv+P|S#pzyKKwm|l+B~uk z3!s{?G*)(H&~0GML`@7GThG1UJFqAi{90F1At5uQ%2sK#;YsRynupWq=+2vQ!e;79 zuiQlm`8;GoP%&CI?!5kI7pk+*2t)a=PxZ%ZXG#`F5Jh2A)AgVzm%H&djGn{m>v#_& zKD0FbE>}vo;B5ZusA8OXOI3C~w68}wNihbz%3O8r+aM0Yb|0T-98@9ozIT{9#a9=5 z?SI50f>=u)Zzj5-k{o>CQV; zy8Mf|&`jwpME9j5xYyQxiM+NxMEI}c`J*LvKGuNSp?ry@wkT&O@O$1U=@Rmp3%ZIr{Qyj~_G;6F7ti%zcs_VAgr)A1d13 zITR_jd(K9fkm~5vAFpCv$JQ+R51zE)FH>iWQU+ml9iCS2eJUBM@IL zt+=kbS0(h`SX~lhf+vqG9vh~={2dyQ^AF09MpzjCC)GHGfN9x=Oa7HhTctxc^Q%h& zGMw&-DPmDqUGnAC)iS$PW?sj?F8~7pe|L16Uo{ojd-I6K-gT6m>mB?sj4FJ)E@oW%=zN-f|nR#T8^pBGw#Q~V+K9Lw=IB7&$%3i^ z-jxb5(KJWCtAm3t_>W)BlLd(*^J^OzX=yNcpzWWvn=H|?xSMTmPv3}ndJ2m8-Crpi z5X^wOk^@!o!q!3YT?jhlS~>a>qP)?i?75EKY%|N|3vjSYw4KpLqN~Qx@{yb0b5i`} z{PY*oo_n{FZ*Z}(VCdbD3Ei+s=a7lS*m`HZcXDZJ&p?J+hVJ^#4C62#u{{Sq8;4Lh zAvN{o_*%<{@79i|36k?QjBb#Q1LvFp6@B;pE|f8w+OWz2uX@pzg2pF;XsAo3cI1@% z`)dl;fz$OgM*pBh8gN{nSHHRKt(Fwo?}3Ld=6Q0yWxae(S(Ia7#jE4*eZhohrY`kO zK~dO3;@&e(MqN&#O1lWHf+1^(97=Voxy+_UiMo`X`=Xw#k59|27+NijZ2=`$I~sUH5vV99-zBqHQqBpO@&&6YZ`6NnB)YOZ z+^9F-AWCL*7o~J$+y{9g>T|PUVVH4C^UdMrH*K$0jB2BC%cs^2ZNm8!>@vZ@xjK4H zYt|8kW46QZ=6sqO@uCBjlEZM5!#K8LXL-go(ryjx!Ssq~POksY6%mQIhiwh1MPc`^%yr?aOTXz;c%3J?((9EQF2^GNQg{F2K+(^70Jch4DU$(*+aceM ze}LWksdqCxZ0h~h1Fn@($_&5Hdc2SDhO;}RWBS^8>QX#J$uLh(ts6TkM{gnyUpx)= zrTMIvfQvseswn+oy5C8ZQqx_g;OL+uedznm{s68?1%PP4gG`vH29aJ!>b4UeBCd7X zcp|Ei_`Jql#P{X>ghOHb>l)dj$~a3K8d5JEsD)bvI8YidR zBPX}4xGtw>d#EbkDAM*iiS_Xpn$3ZoX%_<1kAg7rK;O%q55Bi<^*@gyR7W2olm9Kj5cD_oGED&+uPchPO#>ZzrM5Wk@qC8jV}-)UEYa}^ka1UDbv|U z-et11Jclh?ed=yuI)s#rhVJr|D^ZUF0?4vC%OBI10i~~gk%ik|7~)z~vh%TfuYA^< zK}R#PeDPH*>EM3FpZKU)iC_x$ojY;*vM;^@NC^;%IO@=+p87RoKg3C7&Nlq*UD*&H z)2BWfAzCB5r)8ooqC!Gw6&f@v1`kau%U0tO*WsAw~wq~|3`ZlM&|zdL_| z;~~@PD>j(d*;}I?U$y$2N7(tUx>s$BPD(aA4>46{&TT?hKe5lb`O4d^uai?UP$*ee zm%lo2Pwdc~Frv=O7+mco9IY0Uk?*<6az1*`dG6yMy-qEJs=9T2v^+Lv8`9O2WolCb zLM3Ms7}xmfY(!}K*XtEVu9#T#y(~L`?RMhX#8@m%#mYKY-0m-1bL*RnXHwXm!(<>7CyehkdeM`Lqq<-_jgSl<8{YSso34|YG?@|7y&^@ zN)P+37!!_yf)5h;NK9TOECqVgG!W4H75oC73aFd2Hjx6h_p z*MzR%4K$R#Mpd4&xdJliR^xotu~umQO>#m4P){lK*Hhm^2sMMIx98_38>X#_}A5M&32g{=tPxDb743y$Lz@Xjd~8c)tf zulSQ|RuQ!%%GdF$NGlPFipH?oi1KQddOhd)?uWK?4sYy~Zjy1b55TO0o~vEcs;&)c zjGi7>P>!zMZ4QRQinkRgIh8xO>%4z%H=TMqCezawRJoe3QNdt7PVjF?9l8a;Aza}i|z^~G$l>0~K2^hn4K%y(@LI2gthR_`nF z`2RdE1jXa#FKT%urB~1f0<{p;&&%P$e>saM3lvaQ?fj2cML`sGy>CZBaeZ#L9YYK2 z@1d%S6)y7L%=59HzCNO;+uSS+OZ?KzEH8?f>!DF)%{2W#lQyOy%II3?kA1d{rjFZKE_9`LC*;{Vq)lAiY}qv4_6{sH7Jc~ zpX|XwAIckBWFBx(hP1n5dhPlyIe%dOcq$Y@*es_e%(a8VZ?@RBK0hT}K3q2dC1KAS zxhrpQA0;ja*_-wKpcdO@7A*6z~<43EP zX9wk$(|*)apMliB+;kJw@u&zlP9bQ7F_Kf7M#fW#EMs^Dx%{_%?{LtQh045U;2O)U z`cko;%a5m?5{(u{=(~$jdOh{UzgUQChR&fPRcQG=Cn+<7t;3VbU-{oZP>N>IUOz#d z=QOygekP{_Cs}m$$QASal$Cq-DBR3i^^pbV??iO<`PK72eNbGMUcViH1DL4&`58Uy z7reID<#eBCW#_tcy@3P!2kTlFyIHIA-0msDDQJk^^>Ck=eIRZo{z}#St-4S+XKV2+UM(V0mL1FE z`^b*zhjH7|K*mmEXOqWwr~ghe2s=N7vGuR2v)D?J^?Q6vd&Uu&pPbt+d0Er^J5d!B zWb}Ok5**R=VhNxeY7+{CW?tgs;$E&4x~FSpkPj`1MNIdb^GtsEa3xCim(<=tj5;y4 zjevlI=?5z-Q_>dA&e=PRQ^8sB_dHIr}=jO`cW_1 zeZ7pXa6PW136sQ7;O-6?J39)703ZdlU29*7Jb4vQvl%WXP8ZAelcC+rP)VCPxz`sL zLc`I4v2SX_ev52f%gdexiUl+@=f59O)KXmhx>)LZ^~iL3_eGxgh|!^M$^m|l=OqD* ztiD0^WOKkuvNEJ7==+~F1^E{{pKj+(6aY&wVa67@X1?%kXf4V(<{xfi4o2qmTNVXvhmwx5#d z9Obwp{TA7UlhUwZK)Q+m@Foa#x8krBwtDi~$=C^h^J7f`^(Y;E+Q&9weW_;^Pw~oM zL=E`^P4GvW#&cL}(mGus!;eY5)CW}U&kQ>4aNU|h?S-9*oU|Y@;i(L{{w6AMPv&VG z2QzbaWY!nDKe4k4r4<_eYe$)84sVAy#m6@~$4p908ZUcpP`HWLh%s-&-@lIO|E7Qp zzb&TTSLj)Df4`lBfdbSl_nO^uYU2A0gz`(JAYc`QtM>^xd?;KZ;;>1#HqO~kTe^Hm zd4%W6O<&L#385grPIYf?GVBqbC^?WDC$k|L|2#zIJFzv&M4#qY;qy2@7Pyf8hD-9h zyu^=5FfS=6pN-~y8R)n#TVW%vY@!kCXW$Ln`%A)J|%1p!e+H+kfQmO_r7U*N#0n6^8bV z|DzJYy}SvmLE--q_39Kyyfrzd_I{?T`JG`4F0_YbRq5GUJvTD zXDEM?XzPd~<;c;FK(U;HfP-Ba%_G_Vnuy`!*5vbd9!>D}ds1bTeXshVH*pX|VUn=y5-lZOhS}yax z_^i(BzXZMfV}^F1x_SqG7zVvL5Nxp@J<0;sHXRovhC*lOn^b@Y7o+w-j4ph(uK;Do zKI%o6+w>Vi2vrbN5)o}uMtuxWd_5j-;x0NkJgoril||7Vf@XJtiEuE@`yWy47YU;`)tW&k(^ znjF<8QKQ`CWi*Y<7dFG7o(@?V8EQdK9)#$5Neip{LNhbu`W46(5a<eP*I+T;EVU&0_!-New14F}SUf1p^ zpwa&1?XBElqX~~}vfyNgjxdCzHt5kFhsodzhzYG^|DQbq3(%Bl`33+JLI!+wf%V;X z**1ameI8;Hop>GH6U@f8jW(1Vb{<_RfYj<>#iMnu$r}|bZd%LoRri_|D2Wh_Li^C^ z@!g<{g4Fd}HM}Nj5%D7^ghs((v^%#i-QXTSJzez0#Y-SyGYHtAvy^~4e=3T%fJ)6^ zDBZW*WG?{ja<1E+u6a{orVO15H_)l@2qML@NSXo+QPYdgwzKcfT5SsHJ*%p-h!cJp5r2u-BDefb8r3Fty%jutaa2m&G>G-ZK+zA~;>{rh?CXdDbtsMsk2l{J+Y0wN15EFwtW@Fg}k|cyq6j~2dpo34GfT!s$ zne+-cB>myc69U#3Kad_Y$ESEWKJoOV5jgn650C2sVHG&QmM_or5#4}L>EUp1 z4H!g1LbpMD7r^b97$Nzs-D}^3lP-y9&QxKx956;tr)F_KL z%oc_KnY@^E(kU83h6oyYs4}94KOiRV{rYl%&1st-(FfOY28|Ju-Fu521YELVVTXCh z&fd@zQljy`_GE?+>2g(QhfbF2)g+huDQkfWBWS1vlC1NlZ{Z2=D#< z&wCJEV}NK-+htk#uVc->4d4HdzKTw0gh%vMl!|5M(};;O|1cfNfmRzIQh}cb+ch^Y z^J9f>lUs^`Cg0<{^_j=Hbgxm_26xuN!GI7#=^H}ArvmC518Svr9bw6c_z9YSR*!R~ zLsy;`j}}xy3D^@tLhgTN(JA7U%yosPDgHxwJFtRm-XI)B(V)LGb&1f$A`OBAXuM9q zjl!<{s+bi7#v-bBE{fr-vJ32!bCNH z{{OaZEGi~|NQ6(xzls66xPfl~C6~PXlcAxZByOAigmEuuoe&K_PLd+u9Lw(jM@B5@ z{^g~&ALMD7;FTm1ZK@z@sJ}X{G1pGzvEx137=sS7juMT+pkba_kl^+}zn?xda=IT+ z9_#3guiNvVn@BlsPi3(tk5E;OMJhn6Ja6*n#zv&$?dhJGI=9K64n*j9?w6ZhJJ84l zK`D(R1VylUIqBMa)`dlQGr5`+m36 zw2`fC@MB|RX~i}tiw3KQ5Voa-17{F9p`$lTD!Pi z&-#IbD?zz;PZkyycDrc3tT!lbe}G2nMNqIoX$jxj!NE5_pAnDgOL%Fi;@_EM3}0b# z5*u;u(Oy)fUxhu5VC%c*n?fYk41#XQ7Vbx5w|c+qv5$^UJrL(Ehj?PMHuzFWb+&nb z*{bf4=sdvlTS!P{iRTsX=-8Ojqw*24#g$ZKfwo2 z1Q#u5f4s;U>GC1g!&DdT2qW=V%zb5G@G7-o^Jwq%_>b-AI2S5)Suvl}w%$;>fwP-i z#@8ogz)Z^Lk9GF2BdyhEp7item!(ID=PE&?HZpXdUXYkuS#^x%tEMS2*ud8{aPj#D zBuvG`?mBLr-%Sv2le4y!#=vTY{n!Z*T9WR*6f`hYQFEXNB-a_jW5Eo%MH%#c2yvSKJ!K`CX|Ua15!se&Xf zE+}uStRKMFAUZ~JR8_FgO+g}>;zT6rx9Vq@IBfBfKt zW@aQL=m*hdiys^vrAq3(R$_Sc!|LWSXClVEdlDWhINK9@^k4@(d=xofN7m(aW(SR> zKsUvWNqYHEnudLN_}3iBK0n>_*LHAt4!(AN>k18&*4WtCgKoWgCCxoO=r9BLyg4k7|qSud{+!VKRUa(%r|}{mj1F!nVHG7?$kcP&iA|O*&90Yp}BSK z+IQ<$#Q2p+AmfB@aFBCablRU|6bo$6Y}ND6&dm5xilMow4j#F4^*iVG>-M0oX)D90 z5P}X5pPQJvpp;EAk#rUD3kZ~Wd0`5Rh?MAx(10gg`LO6}BosS zQc|+jICZPF$=j>lZRb4!UZU2GvWJHN9Y5q^lYVbuQcxgoJ5#PGn0-SU>jksKvmn8mJtHQZTwnkJsRdg`3Gusycii`7mX%N!U{tVUcG+Z+}3u-(2xd_!8`HsM45{?S2`g5 zM0Rp=l1||#Aama(az8WtVNc~hG(7wX8X^}#qWM_JlYfUmf{sPVA0jnoB2nCp4EP91 zsUB?n95FpToD_bSPtZJ@US9qWIzG+(!GIGvuPd{$*rDR^dbx>}m6*{A4RmRVci3>h zfB(L-Qw=MlWP;vU6!Tz&Ry7`|7*Z?xw^8w zFW5ajD~0>z?GFN1J1$vlVFC=s+}ps=*vi}6+k2^y&HJBspxc-Iy}%p{+_12*qR5W=@47m9OnBW`A z@BiIdBBQiO{Gd@$nATJ-U0vNvh8-PoEsyuc^s}*d1DR?%%1TN?$Blsf;=+-~%wzbp j)LB6A;)ZY6>ltJm<+j$gzPkfFri;PT)z4*}Q$iB}9$Rj# literal 0 HcmV?d00001 diff --git a/assets/images/br_4_light-d72dfa633794ec97eddce8e3a4b02660.png b/assets/images/br_4_light-d72dfa633794ec97eddce8e3a4b02660.png new file mode 100644 index 0000000000000000000000000000000000000000..891c0441a502bca461f938709120db49719acaaa GIT binary patch literal 17974 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 literal 0 HcmV?d00001 diff --git a/assets/images/br_5_light-efb3568bf4aadb19a9dcc57e748f89d8.png b/assets/images/br_5_light-efb3568bf4aadb19a9dcc57e748f89d8.png new file mode 100644 index 0000000000000000000000000000000000000000..2d18350b7fae275dc87fa2976696e956fd3177ea GIT binary patch literal 18300 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 literal 0 HcmV?d00001 diff --git a/assets/images/br_6_light-b090675f7b30b574af44d667b083e9b7.png b/assets/images/br_6_light-b090675f7b30b574af44d667b083e9b7.png new file mode 100644 index 0000000000000000000000000000000000000000..7483fe8f8c8a3e3d7e4bc6a5a5dbb6a1665e8770 GIT binary patch literal 26112 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 aGlTXPMBxE}H{hmc92p4(@q)+t@BR-=v#b*U literal 0 HcmV?d00001 diff --git a/assets/images/br_7_light-018e13c41ce1fc6257c4c65748aaae27.png b/assets/images/br_7_light-018e13c41ce1fc6257c4c65748aaae27.png new file mode 100644 index 0000000000000000000000000000000000000000..8e75618a385e2f5ff3f701be8e38baeea1884998 GIT binary patch literal 28524 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 Wf3>dIE{fyxDBF$94GXtApZY)E#2ruo literal 0 HcmV?d00001 diff --git a/assets/images/br_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png b/assets/images/br_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png new file mode 100644 index 0000000000000000000000000000000000000000..f68c4c219c0d208fccef09b5b4397c375f803506 GIT binary patch literal 34025 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 yLGdIcVhhEC`2R=#YO_~_puA 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 z zA^U=s?TcD-5COXg4;*sAWfgk)-jDLsb+`!-HCJHKGeFv*T6z94%AbnFwP<640Mh7@ zeZPqpwEv!X(Y*sJYP-MxR8Jl5l~ho;jFMh&TG~DEm`M{K1ZFFh`st~u;|5FAKYy#! zgDoflw;*$zc$&LE-n6tj|#X*AuCN=tFb8boRr?YfDE@%$ci4+2{&RfX5hn7AyPfoqP8DPN%@_P3_pfJ~;es;)e}TxDnC@6HYf%7$2-ZBk zYZ6;5ar7Wil+3V*MIHFHA?F9LgLHr2sxS&l%DFi2asO&RyTqoyPxPgObw-4&;lC*8)}(j>&Wy$5?=8*sACZQG^-(BnD5r*dz&kJU{sx1DmFPh9zBQ13tb9EP zqKbMH=(%la4W9--6^UgwkZs=osR+aGPG;i!!ECKZSpb;mh?iv5EFJC)v6KO+1-&lJ z!Q6=h4v^`OuMUWlYb_pCo}lzeg>Fm{9g)B?CXD{yN2U>cs8O3{U?S@xCF?e(?~|Cs z#Jghq)s=&$JjwV#1ejx9i!2GJ7LWgugqk6@u83EMYXv{VR!YLB0mMT zcmGQ7ul8SYB}iJnc=W3+pR6SUFVevPQ}&5gT;;kVWWS;Xe^ zpj1UHiIv3C28@Q`#~;U#D)bo{85I?0XU2!WeU}m*U;kAVwuWDePhRDJgi)sC=i@t^ zjQHugjo&8!qhK}uBKdJKL@$T@B>(S6{zslm%H~TjjU_+bx3jrisjG}q4IAZZ43Xy9 NwcS`hXRGa*{{x*Vdw2i< literal 0 HcmV?d00001 diff --git a/assets/images/calendar-f891b624f3e0efb34bba582100a7d8df.png b/assets/images/calendar-f891b624f3e0efb34bba582100a7d8df.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c9bffec4116f046fb6b8922b7645dff7c5d616 GIT binary patch literal 797509 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�A$CI7!651q{V$w)9)Avo%UDF9gq=hI^d$n^i09JuH}qU|kxw30(AXvOk81Ua zyZ|zpPHm-FR=XWaN5wEAwOIao0gbHElps!`;_Z-TC#EmQ1lT-?67pIi9XTZMMbr!H zj(_4BehTx@B42zbqdTSulH6SbD2x0+=})Dl*|uDR-*h;aw6TG3(&rdGPXPIBn3kBz zyIpF4-f(j0r6kP;$dETj4E@pk%2`_JTg8JW_+upqTv`Pdbzy-tp{KBdw=2?AXnG#r zNWOQWuV&X*9fp{o2X=)gyOVY7hwQl-6bfQkvvAZGNHuzU(VFkw0tQz*wz!xlrRGU* z!HrAm3qXMNsRvU6i-dqB=(&Iq{H)~}b0OdL0xc}|Tr?i*0^F`cAjg*-h)i!^+2dA+ z8&;Mlxgp$YUVv;ne9(W?T}ZuBwc_f#yM9)zIN58w zOZPiTPJ3&?CCQ02sr|PA^h`-_`-xA^nA_c(G%BR$yp_s3+45Wh*L3jZQ zmEWNKwm>0tMQ*O`@1SAgQ2mIh#VWFsaOkFy^wlinX|^cK%rdh_F$`=QCFGOKb6l*? z_^=(GOrHZKRiz{Ucekf=Tz8jtbMb05TE9+e8GC4NWK_D#UopWxT{>=D8vr=RByI1nlbBFKOoW|pfz@FKE6TgSH2j_g5 z879Yv^P{GbM&-@g?6y(<3wHyb?E+h0&(dzYPi@&&v(6XB%q?=8Ln@;M$v-kLbzZg; z_fKn+Q_^kM*JNVhPTS9fdVa%caZ3w4essYRE!Q#=`~U@83~j?b)CChd;-|&L$GtC} z+p|eTaWVd3B#6sVI0EUWAO=nkn^sJWSff}(bYN>Ja9DImY&B@q?p7x_9<`zC3_&kE z7++R>5x7KVm2*H>$P$r6{(N$EEvn-NOaT&Ybqk5&s!A2X>0to}iHePI1`!&^;O?fH zH(NBs=(mZ_k|(T-Ijkv$tBv!ltXD!$shJ_vB>{1PX)_a5AD)W?&_zqsz1g7&odWu4 zq;w`VubH449IXRf9+mX!MMFo5zdn8CsNXB?zYluNZK*8(;D;Y#7TB=8kJV%coUMM< z*G|g2bb*ZEj%pIY4Uo6~5*nc)HO|#h&gP!|*bfelaq`w9PgvCcA{Y%!jIb0t=C^y2 zd^)0Wu#xjwA_yLDz}}G}=UCyIL|@K*m;AMU9rmYU*>}n<@jmau`it0^P++dpPA{*~ z5s}lDC~Fk^sLpI-;@q}4woJ1U9rPvw)%WWxOgMfv4VEYB_&`RY=5L;Gmt>?bd~(TE zXpIWB_0R*K^q3B5on2Xq$BDQ6qvGQ+;KY|}t_h#9H-{r-3GE!!e7v@`7jRogHlE}_ z#jhWEOKw!I96S)Ob>wl9+SSyw$1aK0%@c+HikAwc=eWsM8O;= zDu??8^dsk}XcJ@Z5vYu81kcS`UB+@f5t6TGJ+AhAtV~2`aNWuaN?s;Hs+*`!i&xwG zO%1ucf;-hm^SE`)tb%R))@s9e72kvz4tFAEqFct~V8W!LK9L=@OW~$;Q%LiD5B`>s z?meRM-{SHVS;Wro^k2m`G}Ql6xMyS?YH*h|#n0%Gks{=A`+pr`Nb&yL?J?Dz(HUax z&;$gO&ZqSGwy!h1?NE#j4xn;Cb^Jn7t-M7&5&2sl5Ge^)?8pn!b5|yYm;i@^0jk%~ zKbRPOy%Uc*1l)DPpONiSjsFtbzmpU0`^9{V&#%L(6;VK@M*E2@@BI*=R>A6v;lz=# z!7mqn=PYAx6Q1+b$A~#QVx$%wgbAcF=-800;7o*rN{R44SVTv6w<{gmgmgE<^cST- zNVkjExnuh1#><%D&uCz|w$D?uj;+JQ>;>t2HIAF-4&j0vUzza)d)WtU_vaN<>D^{i zg{hafiw#^TEgM56WTlGMYm!=9T?{7FXj?JtgRe}eptm>k2|#}8ALvDdhaFqys(c@nxaJV*u0N?Da)2?{L%3Cg4k5B$Y$;%65f(kF`*JgB(CYBL=d_x}yofFz{*9MvfN-sX>=cy;w{)e2%plYo4xQR<; zQ%ZpH;y%y_><*BoA%dxb%ZZ+y3zD8;iBhIoEh-aB6#ZtF4icKCsza*mb67Qa`l@qf zT5$#t0wmFB!7L)MB-a7YL{{o`aF_@aye6s4s6A-mLmaf!<5bnjs%wOaj2UHht~d`F zp7|gn7RsWebSbc%gAGGncFRn4=xEZva=U2&s>)m z)0g_>x?H;&FxsDl29OcE{SsDW4`ye`%O>k;1K9zEF-y$?l}00nJEl0@dDOmT|MoTL z+~uMMa_lCHZJ0}(W~kzFJljrj>lm_d0vV6oZuWD|gwFWv`Fb)!bNTrmBFYHSPx0G6 zf)Q^}Pbh}N{;*k>j+^oeNcr`oUlLau|W z{G{v}SdifAy~L{*sW^yq5*M(_kb*B}z(iSaUk>MRw(GZ_2~cie*9ktMf^Bv75N46*VT#jdd=x&30iH`$87pO487Fs_IUrR zPg(&uuyBlo!2OpBepDAGEJR)$HQ3X9v#>9f_&nszG$;~7X^gDZh0Ax&c%c|JCKUcX8HBX;e%``-m0YRavhQs!>UidK~on~VCWG9q45)-b_TVw%YrGuc$D9hq~zr# zg^|G$O@3yCAEWkULLaDL%tDzULxXR2su)xhrrIqZr3jW#LJ{qt!7Nw?g9i&dS5cDw60Se=x;AB5Wa1H&VnWIZ)dbEnoUfk0J9pWYF{YoYFXt z|Hw2@IlPD7fS(&);hEM#VYdcmauh^Mo)_Al)J#rk)EAsHGZ=rpSM(%8fsm;dtBPWO zJSlnW7w}ures*m~@-rieIXI3~Qt2SrTb;2Kpvo>dr!A*lZKZkU=A0&#`($OUD0Gw@ zHmm!L{0dLJl~mwOXWe@M;@D$fFN859+6?vimeb#Dhxo9lI;l5Cy0<*(%S*Cb+x{G! z#}bamg<;Vf5nc$+)A}L>)6qIgV7_dYZdp4sVNtR(9?9msU2_BHNDYsWxDp^gzNuZd+yZB zZ{DVb5bjM&n047TFJIIFWG=1c7zj0Y71o77o-6bR{YGJd4e5tQ2!AH2eToLwZn=2{ zla0Vlw_d*hRzT1X)YE*F6&`$x&rw9X##=RmB@>#Ot6q(UD$adsF`VD23W&|J4{dfg zumkJ*Qbe97eO{Alh$DAai6RaXjnY0Ln-&fYXL?Bc(K07|JcglW`sLr6oV-N+YQ%sO zO~Cg0aKAny(e~@piRk~xkiRMby#WT&*P^EHm3yreJGR~3Nx=9O&B>5%ExPjh-2Ece zPb7cYvTztEqm&5ezjasy^olyFgr7^_D^3??&|Io7cXMcmpc0u97p_{9cA^mL#Qb7o zmqS_X)?{Q=bzi;z(ofy=#a&URhJ2fuv77ozZB56+BB9q^r`i#()jnKi*+BHxE6Ju< z>Z8JR(NN2#r&^(r4C?_`{_8<~HueN3J;;7qdFlx(uf{x@i=dw4v~(NXv$2gLt_w8F z!(Z^$skgUU-1^zSPDKl@1})#3#8!IkSwL-0e#*hoec7J*K>xhQEM)z5i5eaHfR9#j zu*a-x{dTs&d2d3&r&c;HtR>is0b)dH5A{PbZ|kN!|K!^vG7>_yOQ8k-eGv4%PN6s) zb}TV<-At*4twi!zhN$yBmyRgp&+tgMG3>$iaTTTe$ga|) zM8kJQoNM4?;Aen?`lZyGKf@`Gh!)8rXun&8_zo=Z-=5L%|)+! zL;wSIa_HiD;P~c%B~@exKMX_@3^13K6iJ+_#23B%KBN7e=J+8j{ab-8|^M#shV_xGjH4#$zFwRG=+XVX(!*Qsck5W`fFHLBPOua^vIxDs4bO8hSHc%m#k(C8+FW#5x zsJDQl8=}fGhJtM7w{<+vinLi0pLMV69Ql(>WaZt4Dd&O(cT(XqilbU13mlNQs~qhH z$`Q>F-}s|$gsnA2e`qG|c&hx`>8S^tfTA3+>$UQMXk&#qnOe#=>+cxyc_CU|C#A!= zaj7xVo$2w{3`g;AQldQL#^J6(;-A>yN`@ffO#nKeGTr9y1Z!wF338G%H9taJfCN`| zA)8Mj>#o}uQ*0V$rnKv{;~=sPztW2-a<;vtdfezwy>mht|zxXpU>ZVo>tQZB1xl3V%R8S zV%Be<)-J)p$>{9t7{kQH%0r6x@Y1T(pNSm{OEM+jMC!J)*3G_B_rOaig2}pb%WJknt1O@HaI0Dy3cSKs%3P zVQ9tuP+ApUhwcPb89bK7(Qa%>;eb^pKYhv!0-bX==O=`CC`xw9Ja%+F?CTg8`Ak-e z!mM;Ht&lh40$Qt+aO7ryv^4Qt2`p`eDfB`ojM?eh3dW~ENE)4AwS6TEGFSGF!Xl^V2X>G2OX7Lsfgq3- zuqcCeN@gS`9?p;VBUn~Y(9~D%8McG`D)5s6TvWomLfW-{d|?gp7A^%fIXA~%<9%wo zCuQB52|9A;FkWY>D0E%Zbxs`b>z609bS*Vf--D>a9Sm!RtR;RYiFXCb(av}6Upw;J zU07As-nlU`&s<>%9h%NShn(1*Jah#eDTlsH zh{S7={*~4HksJ_#?f2`$ufTUt=vV6Jo+kN�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�PjKL-VA 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

H1{RM#Ihkv$u^+t1br@!Zn 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

;7KM-zND1#V+mpfQ+@MARHeDhiHFH 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%0A^j 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

5TACqF1 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%0D1W$0QO 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

(`0a|awhw0s`K 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∓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μ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 }&Z(sZ&g)GRH{fp;{` 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

jB47-l=R()|IU3y(C! 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 R}YCi&rIc7FV{YSyek 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 literal 0 HcmV?d00001 diff --git a/assets/images/correct_light-bc4770146072f748be4a5aa11abf3a0c.png b/assets/images/correct_light-bc4770146072f748be4a5aa11abf3a0c.png new file mode 100644 index 0000000000000000000000000000000000000000..26a58d52648e10e9aa2e67876ddccc80b6b94955 GIT binary patch literal 25572 zcmb@uc{o@5`#wq&$&jfiLr7A}Smxe^LZnGj$~=}aMVX7tku;cx5O#wxLkJ-^4j&L3y*YhU}??e|*iwO+&X+|PaA&+i4ChFJ;P{IMJ`jS?TjJLm(QI$e(KZ~c6Rn_`L`ZEc(5Te zGqb9`zOtodr?9ZFi;K(t%kMZYz1FIzudg4g!X2nJhfXT_hwPTLejF85bAKb1%9%5R zKTAD1WE}!$hwCq%J2zE83d+ruJaXe(oNkfRrY&2Twr@Y){OXKFYdX)4fFx@7&A3gN zPkBZ`0U0t<)G37M>>-_s0m;Sl*`qbdpXVbH@ zWwo`Bnv&G|dwWagf46-3@}+mEHuBns+kSI%x9ei$)vjLM4TTw?Uk30rs8&aoSrVC zps2W&j_%Ohljzvk`t`LHRTUNe-#^}3c71sE`f^&+n=9g&NH!6DitqniI{59Tzi*ZN z#qgbsb}VgeZ9>=b9tR)$j;7!Y}P#MHI9&r+*dPWSYEi)@CT+)Usbl;f|*CVLtb}8YVYJ#@3`mcR`cF->< z$P_avapRkBhEe5At5L9pYmu*SKCvb>hVQS2i<{B+e}2R#EF64U_ufN;GH>ZQ4RPni z36oD=TgyLxX5!$esR6`O_PMX`>!z*gyu7BZ1&+dpu4e0xG{h^NJZaZgzIC5Q z)JVfgt~iV4S8uN6Kf&z%{QX-kV8@2-i;M)>-wUBGK+@Rf;#iJ8#g`jW~@ zAJ>%y(L291eT1h;Es3hkM{T-m1Y%u2`LiB0@5~dGbr=&No?CsMxH7c*g>Z9{+Ro2G zoYk_Eg^DgNa+H*mrj>u1g?4OPTUiv~=YLpIavbXsE_3IfwhSeuYyR|)m>4rWv$G{W zIE;V&{`zv;N7sUjZ^aiE7X^+UeLmWpEPiW1MI%b8G>~1~*3nUt7-uuFJc5SG!CXmJ z9XU^h^W!%2zH zGOKUOw>Kj;qJqMMi#wLNe|Hr~+S%E?xsv5w>PeMA*Nh)O$Lgst=DV%QTrY4)Qu1SZ zqgxblYw&A0=a<9n*%pfG>a?+Le*~HLsf)-4`TAb`J1E|?qJ>?_XJbvfKHOPaS&8JV ze8=TFciyxnthC&Z*)KR)lK5?NQ~Y^e-jjRqhB#1+%*={PN?vVt>dfrysuwOW2?`1x zo)u>1<#k9@Oi)sy(ZNJPs7TI*0@VPVR}Wcmc<;C-^P z9oEurLNYQDIC9;ti`Or{6Xxw3yKSbcl=!%ayuN}d^tSo9?2WV8KK|jL)*Ec*)gYUK zJ1L>T!NFZKonl6xX-@@ldd*iBo|u$mH{O0E$ExELhS*l@PU3c7&A2|>DRy^C|G=ex$}y+v`5%3K#hat=F@`8) zyRA9NI8M~`mieUW6@P5AqtMQ^=EMvSei4Wr2oU}#!e6#D-M>7N5Uir6R@U6y{FIiL zS3|`S2ZE-#uOh&rEi!8|mq4+bAM_&!y`2G*8tmA~l5l>&=EMnUW?oHN+ z{v<;C>-%dnho`Z5_h$E5SXh`=##wiLh?2Y4G{%PUpCrch_*$MVr3Ve`fv|}Fj7qLD z5n9BCw)Z!8-oJmJmit(gYUsZ3h}Q}aX|5ICZTv>O&Z)nbb>`V^EO}bgIhknu<%!(t zR2gxE5je%|htx05K0R>B|7Od(@Q4#iYwpVpS!^17U&L_Nl$wqRMb6yzh_2G8gBP$!3R=gfDHD&wmdci3~pEFqZcr};*kQBP0rS4&!b z+zC&qyHk63cz9k7Y!IRKOibL{oIB3KXm@l6rY%d+*HTKP%jql$ulhsfBh^>oQBBk@^&qqnyd(-Vc8pc@>UlS=A{PU+iE3qM8A(3A2 zz0vaSjEV|%bMje9S^u)7^_9sh*a7wOi&1Uo@wP#K14pKp*Cqrnzkq;*i^&?Mm7>=* zHCd*or#Yl=Z9;DS`@m4PXSgeGLzdauAZ}9KL|4J|!opG6Ad4qYo|t!iII?Z$;Y6Hc z(@I9X%Yj)$0iHvL9u=<+3eQdU#4?ap8^)wwRn^tKLZtro?t0|=n=OVJ+BHFYdHXEq zDBk$0oKLxuwGR=@bf_lWWqI(0X=R4&>+fGn?r;3^^=n_~*<V>Y8pWE6WQKvccnVFfIpi3zl z(K07Ha;&brzrl*E{G;v&!rx1*jUg4Dg3a_O-+ovO8(u*{LCRq)tSy740!P52DRC=l zb!sCLQJkU={og0C6HjuOs}Zj!0L`P_lIGu17?}k$_6i78j%mAp^mk~7%<+a9#-;H@FF!W?Lb!jv4ps|k}>mQ9D{vCsNJ*2 zqrWmZ%cOb-R>2d&v#k-yEQq*%D`F$NsNp6b2JWFW_qBuAc{m{H*r?Xsg%%ElvZvM5 zj0UPgh{au=9iE*in9Ou1yM6lfsU~P2Z(ru^4R3&Cq@3pV+Z0Z3seXPa0V_evA@z7T z#<_0J5pb}#Ojnnt3+I~Dmj3*Sh&ZF9^!Iwjsi`Ub`WSf$%hty` z^;|-p9lXrM#-`%Ag^o?uL8!oSGN(f<>dhOWkAHq0jB)#8@sDPz0)9>;JDZ~U9hh;K zwfUC2PEPIoK$o4-69_9|W05u=-(3p_Ub`5tuo;1|BiF{PEz?9u?_(4W#rYh| zD_3)^&j4Rpv}X$s)A8*y39k@gs7X0fa=J4*ld%eGZ2O#)dxpHM-csTUg zvkCwXRW&s}K0Z&J{Mqr`o+pu!0X{xJX%c%RB%VHgydB#uXVzGEQDj}T?Cew- zLzZQmnEcWKUPCUNb;hi*p5j>S-t)z7u3BljXGWWn+!yPM?oRU}k8{Y~eT)rrYob%S zE=pPv!2EKWF28_)4g0&dxV>7Q@0%ZCWOPZR=%Tg>*C<$h#Ky`08%^T(TIMZG{@UzPZV zjR1oSInImLG7e)ZwzeX8=%MF8fry-Y_wKb_U9xL`f3q@4?Zw~ta*LSaF@S5U?3*n? z&kyNjx-8Ea7Izoopkn?W+7H(?BC8(OEi`x7%gFfR@97lK$+b?xeQ!^6h7VT1kge4a zx%2x6zo=*k0S4n0sl>#^Yl-M3_V@1kz(u#m+n*sWW|=qgCU+#SA=U~UI~FrGW{KEp zGnvDOn5ahNJ>RzgT*yM7%F34Kn$J#8O^L`}2+5oLxT2!2UT&DtfXs|ZH6jL+oJ@pq zujhxapT2un>a6_y(~CQob+D~Jp`@6`3}aAHQg)xlRFI6%{JlF7Jmr=LLgiM*vH+o} zBqdvxp6cY^GC6A1t`sh2LcMKUe`|)(-;i?k-LxbQLbU62#ZDqlU)FPd=1yMe(H7c~ z#n*Nz>GU%cJISY?9muxoc#Z+q{e6z=-|X$WI$bF@|LtPoLikSF|VnK!;4K(#`=!0)u;qeQ@NK1Za%O`!s3P0M{5 z)nkuEquhw#tn5YDnE8HLkCB5zeYh@K_4H}6zww>;dA>4!KJ-Yk`==+vv7h+S5!s-! zndxaBz}AL_bHturM@O^L2b=Q>3Yt-Y5l>6gEvgCP=e;mSz@b%2 zt=G?nW8GuwkF5lTg|T5f)dp!=<`)!*yRW;PelGN-KbTba@?^kBb8;||2mD!yx9LfZ zi}Nsxb$wnDu#*`G9pMp|ja?DiVOkgEhZqq|TF+ZgQdAmXAj+m?P8u4TyMIQLujE*= zXJlmD9&2qJQ_(0h%$ULk@1K~cYd%XlbK(T$Mk;yiZie4ttXq z7CLM$W*V!;I8R6ew!IoZc2ddB6A7s*Ee}y037v@OZ*+2lb{x7I#`%RmaMuwU)Jg!x zg8TP3oVdoz>ljbmo~q^D^#lZ|F$5e$d1ej{ONYHL#88EGc6G5IbCE(-9LOpAgV^Ep z#10=Y1Bx9*LPcH6i-Q~&w4rgjZfNyoP*$GBFU|tL202da@F)=e=8sNMZ%q6dl4L}rz2tq8V)rkEoN-zO= zZ;)e}bF6gmimjO@+mL%CWuL6lgI?H=SZM|#0ii|jp{~-k2;%37m>i}ZJ5C{=fU$@} z-C?TygcPUt;xMs_xO#RV^z4%tFU*MecafN?>gAzG8vPhZGPS{Y3`Q3L^DA%qo$CO};(_BxHGjIGbfqw&h7^=xF=^8^`9#b~MfbPVi{VFZ z?hr1V+Td-_xjv2Am_a=XK(h0>upX$eTtC4IT_kH|Lqpyd!g{apZpNmj-EJMgsMK4x z_Leb__DV~)l|SX>eOP9=x@2>VF~o2m#=X?D^wa&Nc;){qe{Coe0jIMO`SytHE8nUjUlgDrhF0HF&aeK~BY$wE zNr{ZyE$=k9=kQ_B4AeV>wBvXuKM`CSHg;8Yby-=NC*a8XfJZ7(;-Lm&X7=~(WX389 zenetdL0RCQk(*ax$g_XHZ;|t2-_Wb?UhgIdQ`1BC;2dl69h4jk~0ii(P5x#zLE>hj~=_1Eub zc`v*niVhaFVu#D?m0*a-xPndGG>|jYFM)_zAa(W$3XbkPxxRyefdS{f98*3XrJ8yk^zPs95lGwd`zve5VpirJ61R(MY4tW2m$+-vDOXunSJ&r~y6^VWy*d-=P$@Rq z+j|1xiQwXD!bImr8vAwKE?uY@92&~JJ8jtQwqk`MF$in6dGlsRmmcS~wpYkHfq}GQ zVq$r>25Ioe#wI2qv9ZC3K)SlROG``V-d&UaN9(PBk91}IhK_;CvGB}o9V+7n`AUS1LbREtY*JiK0@U%SgU zIG1%filZZXUWdO>SH7cb;l}s4TP7VHot<&FEvBYCez#bWhKJ7N-QL>N+&gwfMa@&u z$5L-Q$1&Rc{Bs$+*%lkEI#9CM_PCP##6hpczIm}YHB|ysm}{elGouWCLVfAXlRjf? z1A<^c(S+z{*Wx<-R_kDa!?+=~I#OsT>OTz)dPK}zwYx=5^C?%~9{>-W0HSYcdAWCJ zh={*{o(`bNKoPB_}5tOb|axcbt8@sh=n4xsR!Xrei&*m5A3SU|@{A z^R1rxAw48Wb?(_#Qw|`yqWKhs%^YU)jeRy4LX4Zi0rlR8UR>vys_2u|0 z;=aBflpFI#2JfuAD=a9GMd&kZO*bf9ovGGLITvp`>)YG`mJM{WAx4&$pC9t#g>tTS zmo^G#)MCT4^&~UU>xs$9v%qac0x>t=A0Hq8P&adSc9tOMwr<@@aNme(x8{Fc0vUKp zNomu@Ewph+0uP@mm!iAH{@I3$;%ow?#^p%?zen zLSOh4*8YBZIJbx3UO|dipimA-OG|UL_iL86>)V8^%r!ey%ZGBuhs((qfrp8O1wzIq zEQCbn?CLO%0g?`4YF(yDHL>3jy7a3a^AO~a|Eys@To;}&onhNlA6$Gn^+8&2@EQh^s-3|L z@SlVVCby-@rZxROd98;$Sc^M26L)yI>H3G;2B;$len|M^(gWlnf}qq}pV?_>XxLCB z#Yj1B%GcNaMoZ@kmn8kn%+F_+^;^@O+bv$DTq}0t9+zoOhMV z1&P2`-CnTsYPLtbBF_ODjVKR4X3os2jlk*c4$J24-*ST7>$y6fzc_TYF53vI#}@D;cC`!ibhPpq}YzSYR)c1OG^ zFTQF$ogU0E)yK~lGh5$iQ$E^V7Q|_q%tU3zw&mh0^>}dU2tnzn z-4W}rjxD&_fPXFkrgiHDUf7BFO zRs-@jA^%;rol6U|1tXw`)x4VZGt~-m-WHtC1E4F>!-N-j4W7eN91J@~06| zhzbrYaN-B%y5b5$gQclng3m#r911+~Of!)kz(Jh5-a>S7-Lcx&aD*58K|k;Tkf zRIb!<>*YsRgNbW8jXPi5UKk@7lSjqHBw&H3_V<_1s;egg!5;yZV(w^wthj4J~(tcuxpm^$!^5@MRgV$X6@k-ItDR|D(U#=1WgqV3$j-hSXjHcPJtUx!EkAPb z@bLQ<-F^TQKuvo0osnc^Zr7*m;-(^YeM)^t$S9$!EtR4!Sqjbl+AJ!%ozcKy*R0Yh zg$qxtDtGVHHsm>q3TW=v_W+bzyw~oogJ3~r$;;1Q!T+4iFK-X$F8;o!x9qJ1@)v%a zE%Jf`-VFFiM6s!vnNNlp>DFB`1*S`WBj#0K?mPAz5%z4o^glF^orkX>)OSvsXoUm? z1?@wCaU@0s+Mt}hHim9=bgJIHeXR+a({TQ9j1fZpz|c_p+MnWcALRmfo9W!L|Mj%Z zqMY8eKIRNUIa$JBo%0L;IJ=}Z2eQe}r$c(>f>2hacEA3f)AQ#s&$+BuUBY@9h9`-7 z3^QI~UoUUA_`9d^XX&|ArkV&72PQ#7)R}}}Wn8uWMuZ5N0+n95NMLN?yKDJ|r+0Wj zSh|>cf#1|({bbY=VBD;>yvBuw-?R0Rx0cV6*5(ANEjbkYn6|TS-nLUgH>S-Zk=m*= zFN7eb3RPz(eE|kf;CKVQ>^(ax+;C$|YE`a<5g z4_w{YG_VY{X;Ss8V4-BkefB0nPFyAVy+hq6l=!i?_Ni$@8L1=9TEVtV?Sl#il$fd25Bj{J($*Ea!*@rA4GvsJ;HT_XC zw3bp4+5?y0S>6Z=*eTqXOgxuR@Iw@C-@JFi^ws#|z00XJ>W5C;GR%G6g6iVJ7q4aa z!Dp9KG*g+7CV!SvaS!0ofJzl}S+b?Tl$b24lb%D+X=mEYC@AwmT)0pD*EdQVo7UX= zY--Tem4+D@wRNl%B&U`RlEXk1V{>MPqp-vcz+mG7w+scdX)7BK0fqoV-5LC9Vg zQL7QEd+ae+se3bfYa=Diz#qLD_+UclI!*sw#J<7JXCg|FDg^B0yeU;x+jE-zKvXwE zF?I-(AalD+QSzM%+=H3|iN0@q{EWW-9-HE|qktk$g|0L`y++|}@c8Ld<3Bmkycd>) zybah)eJ~Xg)*M3G`W+7%ySm0Cf{cD^QE&5n%0f*mA^V6W`DS7D^3eoVqpfUr0~3I*}J+h%7B84?)sMD3@C+eV4q zatgatrWZ#;d_gu}RtPSzlkzc8p(k2mg8{%ao2FLNhTTsYErH6?v47%bE65nL+iA ztY#MZGLIHLpAmEIY-&Pz3JC+8v5;G6HS+TD$*R~q)bl^pDP%T{v&aE$`T3=*%MEXL z-yWw4*clm}GBPmK9>W+WTDDMf6MB>YQz%F@QP6)M?)*N5`t-_J`E2a})U9$cB>uc$ zZjxJJ8xP3n`~t<;W441dfoznL)~z}3Zogs{I~$!j{xi#J_nT{5i=4uvRXDr=*j@k3 z^&+$cvWY$byRm)Ou3wr0U1PSo^+Bb0d@?Avu?CiEY{x7JZtd zRlHtK@zyOdN$bwI^9iTaqohKj3}whbkZ~|q)c6M)YZo{`He-&%PLaljJ3Isz!)>?u zOECb;^NfrlCN!J2d@_qYapHd4v|DVAI-7jER%bAGu6(Pk8U4~yShTwT{VjC62q6w| zm++N95^`B+Gh<;1U9PXGF-A=cd5n-EKGJS8>b$Jii(0K>ahpBkax;$PH7^4;C1qu1 z)D6hf0ABrm^~XHRe0tN|AExZrk=9M8u7=m776 zF$nY(5Uh`Im-P5ck6K%` zQ7UoavV!wagZhgWyT#viS*+Jbi3aKx(UuvC2A=Sw?f-RYg=z<*vyLGQVj?TsXcz@| zfo>#}(%f#R08F}wO}88bU8lv^ry-Q&Wd@hk468FvYkvUOI)*Y-nODXL^ojgDR%*@Dm0&yRrtKW5p66no_ zNT-DR2}3@t_fZ{XH9_8@jDA^eQ|qoyTe$Rcy#C8rTYH;od42^E@KS-vX2-JXZ$ZiH zcKUq?;_^I6OX-bP>&Gswlo!IeR%_ZhLfO_<&PS|ntO%^#_&#yS-0hglB4^?&g$qo3 z_kH^4n)5r?(xT%+)>-a61ml9BDsKJvS798I#b}Ix;-YZakY}1c+__0;kvKS8X=xMN z`A^=-Cg+mmCie;Sg{a!-&GW|7Osr?StI-pg|w zbIuuOG5=SpuNy)_R1Xumzu4^@3=AmhIB^X!qw^%U)DhMk>xW*OI&>#SM{~FrXFWgM zi9gMna)tT8rOan;!opMY?_DFGnH(Iya>aK3AFFZaQ(K~r(e=39lpXt0wsDt4`nWqc zlcDn{o0Hvk42~$z;WZ#kHGkZPd+O_h5vSlqVZHI=jVcI%{W>{91RM0{Pv79+NiD4% zSa|S6b|~kYnwqMrs(u2xyR3}o0`-DYJOSO8nvRYi84Qu*z|POBX}WZZ-mU9_XTmpZ z+|s#H$-<}%HLp({EcU(i~-_=mfuL0j~f6nd$oK@|&ygzw-Elj1D_$Wm%t4IQ3whvaR7W7TQbCwW~c+X=%l4h1(-uf$4zt-*t$P|K&1_oxz_eDs zcOi5_sE>ypZ(7O3Xx2Bh#dAwrPUKrHx~uOqqw}JotsKM{m+6ob=ns%cu?)wSJRtml z8Y_oL9xh?Q1UArAnVHe-4tXuzO(5FMULzpdPR!i?c4M9 znWwb9e)W!}q1_$V|BRT!loaZhC-;6cBlFwq1tdIggAikg z>^3^&CM(&l!X;i{lVpwX=+os%C^W-S;v?Nl-O4m%)CLe>C3YeKj%u4H<_ni)Y{6>QPgR?;f% zsMXH~9;|a72P!UEY3BtYMn*=t>2hX5wFi^?R}$stof*F8^eN?hx^wP$olE~`5hsa( zp@?YpauZ_Xik69J=h^ZgeG`5M7^%{2dlg{pC0r{Pq;?&7Fy3MCOB4GlLegizn0Odi zl@Q+B$n1m`2WpUT1xeffq!{nWB^FtwcXkRSS8oYrisn{qDpzv*5zL{~5#llgbXa5e zp&L3+iuxz>~MfFIY~_TLKWyD^R`TW z;o?;>;vYC&_DM;#5*puvQAUXeWlq_vU6S5GoK`)>x4(=T^J+j6NPIjnI4F8=#yCRK zCI|p-WpUE1DN*(5{_~%3V0ec>>#q;H|Ew0~Ib7$^`fX+qTg2`FCjX&6m~n#g%I$HB zB>pKcSK4*d(i|(zSh<~jt8&osV6KK_2Dx=9W77z%v>+z3(-VMK99y37kb;$o;&kPGgO18RQ^|lXH6vh!tbh!J@Ww&laY%ZpFliEs zHHS{iJKH4@+FhFzy-N~;KaDnHh=Mr?AnS1;|3qNLY|pV$Ltcir+oU1x1mRo2iD6;* z_))}yY46?=Kjs|QU!YmvXkiIhWbtzD$1N>|2(UK){W7twkmCQjoMuhz;=WO!FV_|Q zRuML7CItn{o4-#EI6{M4=7enF8yJ`fYCQYKcYo|GF6S}PEF(P0y}Mh)t#G`&HHyQ$ zseECrP>y)eHaw`9XWu?=4-X26`encvS2B&avL4Xb9 z&0SP1L~v})GGl?(scu@pUSt#=Z#&wR^}$X?_^V7;1c4n~BW!EVlSRs}wcduwIvxh| zeMD9(<5^6M#^OZRmz73`TW~)`p|sptoJMehuwO0&?Z03wL3YS-dOtpg^$C+<-9jrO z8{&J#P_9N}kD)iVb&UJ^Jp}g3v9>G%Al!NITOK0RE>ux)I8E)eQ9E;H?aLyP$IUct zUWfSQ+$`&^J^Y)yU6^0K)c?Y?G{Tp1z6|HhA=%_;-vzg&UMhmE*4AcYke?$E5A7}q zm6IPI)3S+BFa#I$@TF@D&HZkv*YHysQ=YXkGpYVW#eLjGjzb>x!*))(tG0U%!y9|; z^ZzYl`|tV?a4{vuWkwaQ3Ag!i@JH}EPM2(CXcc|t>uSD!rs)+OxNhM>3gM5`@$pmR zxi~9?PHpEjTpw$O7;$^DI~t^rEmWN?=B_3ogoi9xZid?0+Hw6`-^9eb9%s9&5$?>( zOC^b_Im||B*F8T!vP!P%9t=3hXa*C7#-V?AG>k;$h{oF3(WrS%D{tL^C*WJ!VI9b9 zgoDFDW3M48!aekeHLa@Z)DNAU%dhvm#v*`A#!#%+4I932<+3dd8EW5jqueAmp^IaQ)%((j4aL~YG7J&|Ra ze)9!JMHBtCkYyXlq17KD)Pz+U$B(cc7B2M#fRAf{w?UTwDfjQ5VzThMJN8Cnful_* zlV5A_P|y9m{L;7+IR$gy|2gqmOXRMIv02aBaI|dl{K5rGgvGJ~Lh+Tk!z&~6C&&gy z0mBVea$wq+%dwGmtqev4!I>&k`j7*iLa2 zi?A?QbQk8Ust!Jf)QK!p~Ns#G<#F*&0vJd5te%s3B&T&|Gb#$dB z)Me(umfO;f$okl(3)$*4O));rAtJ# zrDuIXa%Ogxa%y_I7ao%%(*G`l_Tbm;%p3JwH_JM-(nntX@NFT-ei&XX@}z653sVq> zs6cYnq_L>mO`c3&)sO3c{uVsCy4~a4S=vH{^FMTibPL0BjK~`?^n#fHArZw5LQn1 zC|d95CdUC)TDGR25Xh5xEL&R-`l1FClZrM55GL6jtG=z*Pf!{gx9VPg_w&-Z;{#<3 z;_kDi>srb5mYwFZtto$%b_sG&{55H$N?zVLclWBA)zOaGnV%!)?=D=?&Q2M*wQA`G zrT&djRei22WA9+na)@4%?CjwYWKb{~_CHG~FI>DR4akm-+>aIlM|uC%;liS#)bj~j zU@zqp5qXTHg!=h3lsotNhNnGcH{KH#kiPzY_gk0$dJ>52wu5z0Kx_F@&@mG4$zPx8 zR5ZLdQtdhNJ!kz-t0-9EodvO$o7T5PQM%a;*ZfD1x2%@?uO2T!UT_?JVs)_k;N_AV zYl9t!b}TIxTgmoz29QKZjusCAm)IdEZ?NJ(O~1azy~s7>)09+Nw(*@_%W73uN{wt5aOCXr zaBSAC!P8C6&4eF`F#kg-Y-ngu5LQJ^OdwUFj<)Xliq?R9r}+Z_T=17Zpxn6S9J)XX z+ydcYX+S{f>AcvDZZr`1(@=)by;2YVv}#i2&iZ2&j*$M|>5hYcXpG#HXlfV6rm+roi?WdRcR!laMarq&PN7d|+B&-r~?X%j7*{z2ypOFzZ09O z);hbaOjdw(&-G4B>Zr`l7Ff7lyF%+NMfjeKP$QfI2&65crlAo-3fG6lqGaOAty{MO zK|Sw6{Vs+BO9vYapPXE$cCp(UXAc?N@G1CIX(c5kH|G5&ygd|wJSgjzFAsM5&#wA* zX1x(A3p-LRvg?Q#tw>*r~FPjt)RR z2>^0^hc_L>h_Of5IAv~&2<-@9WMMG|cq|9U0!|-CPcjfyA}F-kpur-vROPC<;jBGE zWZjLNB#IMxX8oD8Pah7`;$94<+r3BRA5BqO8=ErUKnYr^h`(chE+iUA&uN(?zQ1Y# z3Rh8ey=34w&9X4@N)ayS8j-KhvRLgH7&?AyJj9xcfMp^d^Bz*JNfOiRWMyGtL-WK@ z!srIa^=H`O-`Gv}oy;=o`VM|J5dZAj5m0e=sn_Qb98&FfK~>TPRNN{kbarwg{ttl3 zDWs`DG%$QwnyD6kgy5RhFUx8c&K*KZiYpN@tv?z_!%CZ=&R)hQ`$L4oW&M%7Gi`#| zSsg*=C4;ht)t!f5e;2uMf!1h9T}N_7?1>~;m|*I?%ZQh%T^I1=XLpe|;||jTwbf7CyyKUJWqMqU*zAXQ zog%M$pMU?0%<6>EbUD`shpCx-lmbxsJn$uy4iz@v-o1(1!bd;~h;G=hArQpHE*R@? zr6h6IeGMO~yzzb)OpmF=mPi0M_IY8v1D?yEx*JCVzl2)xAKP1=Q~ok9^D13`^I5BE zSz?#fx;JLwzaL3jp8SZ7G}7G#1F;B*>V##x9S3GBYGF(dgy)?dtk7pHR+MS2E!vQX z{s8RtGLXssZFW)5hm^0iC#iWiriQ+)Ivd_6chg&3oGw8}vg5iTp3u1JYjm~muXw)D zNm5=fge`#ZP(uOoh38gGtjU7DWqN*|Xg^ETOuZ1uB_BZ;-4W<9lQls@5)!07kZN(R z&QkVU`ug^WHQggFcqkC-bsGnhynGhItm5L`r%Cr4V@AQ1gb)?;r4+3gP?{Az4-6vv7 ztNk`7RCzGCdDYy_-$(JlEd9i@%eq99mt{vz?O;%58uB}Kj3GQ?Uf$lf$ZLy)dAkum zzt(;*4dP+CRpf6@6TM`5&3`r}oH}8?-+Y}cRU15%d{+uO8@&+x(f?1~k{L>g>E>>h z5~RZij_z=pe-OrI+q*0v#`NUL9{!3W&wW{T)CNBqN|y3%O!!KF0HQQ(X^pT0U-WN< zS%dJ%96NRltN#!u=RPXtR(Y!9w{J^GOG_8Rvia&-v6R?NH^^6?VQnXzr*Mc7W*&GF zMPQ76r(1L*mxJ_b+3rMszKCVm_=#i80bvGg+2)NK0xA^1nAdJ)RMA0>KX#4CSAh?H_p#E7C@s zf1+0aS>+s5zyjSB)LS?qyI>qgGb!PeMvn_&>qWF8eJ?zzID9aR6Ag6Gt2xlrz1ZX4^Y37{zh-@P)`v&2q;8gMgl5G7qVZt9MNjfj znUyD1#}CrYb@xcW*(~%n(3UM#+#GLzPeDj14z>1?LzUCvf8Kj_p1*c2ijobTS2-*1 ziBhvinfDSs)_WZWOlSWzF^!HX=?w$gJrNW zsYiWH!2*~!zoJ7lP2|u!WW12PkC+b+bQ_lE-k|{E>mHTABNSX+Vyebad(SW=lSSc(hNJ$|j zD{BP9o2`SxXPC<=<8JAYt`t0>_}l~ksEc;{^fL_y_kU(_jP@KjKvU+!0JTj%(bT}b zrn8>3QCj-*vrDSo&Xe-jKDw|2EIfZ6f2v-dDxG}f;&J!&e_p=a0CnLc2$rYQKV=t` zGo)$`LK`>RE0H`bx#dAmAJ*@Y)tKYQ`Q z2ekzjg%Njp#_6*r>S$I+p+NEEk2|nPO^p0*C|RM-s!C_tb2hh<|Gqb*89T&%uZIs+ zz6P0@fC@&@$n4!2lMjsRBG*+SB!?%M@W0;$Y3*D!AyX^{YP%3 zvaD<)MLM){bBSGuKV1WD2c%^-jJenDT^QCvJ}tw+=^Y%rlz-pj_E@l?UD)L?5bhKd z{s94)2h1sj2N}igrS5g;s_}7g6gb~Pw`J}XHwYd$aG^#&MJaP-Bb(mbJ!j{#x;lC) zdXD2Lc#=%=S^v-R{HSJRO--TJC*RzcLCU>~9t7Ggo~yg{$o^~Rh3IE#>}O|uKYdaV zteot~6^@FI&baeis}O7gVO%FX-9#sXM`xD`CjaEt7mxQp8(Zffxp6=hv9+~54ygl` zGp*d>jLsgt~=*dMSoNy|%55op9E8Z6~-xOm-uB@Kzz@dHVP$51tdQ z2AAoR9OHEQ#uon2u2}F#FEKv?XJeG0XTQE?9oJ}%BSR&aZ*7Rl;b6?e2K5uJbr2=iY*ghc#18%8&8ZbNZGaK%kxuny4^4KPGwX={7?OYom}VO%0y zqxjF$)%;$^ot!?r%(^Q7?^2AB$Gs?;npv~PU-AkjlHe8FLSb^< zuxx#Q#Hr5CfX6IEnY4uO9@zbvvoMF^YsZ3C@6FiE=$1{HW7Xw1a{s3iapX#tM==MziAptMF zFItpUimdexwZ{H~Ik6wv{&SpetZidD`SbT7PpbRO0)Z_Lo1-&GmoiAFcUBtcmZEJ6 zJ){9OHR|79Uq0)=VSzHZcXZSb;*36ATABSRTULz9*R@khj_;A&Sydx3an3NcshRTZ zS^cst9&5#pW5J9o30pXZo(Yji-0&buz{LF!7WS$jKB6_YG4-NAwsqGoBoIWjOup1D zD`o52*{d!;N0aZLPoUT~PI{-i8MY@~nI~b?>Ey+rH3Ro=d>Y76o%xv;&&}gpG-jHp z!IMCTK8hWV{kkVlZidu%9|RP*G36^OYB0ce4QflE^%mp zO?amPd6EG?NU0>>&SY+g#+%V1!W}`kbOV|p;c@;FWGn`$x&#p+!*Nm zTfVT0Y@S)4!fn$AXH0r}W+oHp=j}l5TIKU) zPDQ#fy(_{GK#iu92nh>bI13Np0|6$=3B~vb#18Z$yiCu?U_5;I@EF6D=VO*Ux-N}* zp*{ftxW&Q#KL$m*zMQgN)YKx@J6jX|wyV9MDP2DpK=UWm)P!F*CwHfb+VgbMkV(KP zY93>~UyAPuPxsXP{6kMq>>V}_5Hh^L12~*)66V{{Oi7I>9y+FvH2eVHKtO*Cb_3`B z!-u_z{v+4qK9sqD7)4aijP z&!4jSynDj*^DFBfQcvCk*avK9_Qtg&s3$9?M{|C5x@UkO`*Uz}I(eu+cpX-Qe%%T8 zDEFJMNe!bO087k*1_=;Lr`s%*;LsZ~9J2KYL>lP&^K&4Ig-_ zM3wz>VBmH=*&5?Uw}n3>l74h#=G`7;LWvX%;Q+T3eKrl>s`-zI@pV z$A&Us3^9$w_hfK8WmIm&7kmIbe)O8DWpV<8amqTB!{+{Tc-XOJ{ps`P3TZ7p_U`!Z z5wYb~fiKcC`|9!&h1|#8ePg+8=l0vKO4J z&N-%&jZfckT`$UK8yOmcBJSAJVz@`}G>6`w*P8e?2}t5bv@gOGK6B~F_k7}Euvo*l zVG#Xx7fdi*L>Cgi$bNaB)?T5`%A9Ax#oo zmH2KPnkg0Wb&WJfzR)mv=c8afyh=(+WaR6>h7bS*QRK&{o$mzI%Gsf+t}afr2okG> z!JOCB+$+l@PeDI>AoR(T2k_X%VF%#!{)`?mW&>)-7hOVJ=Xqy z+ldn=K)@@&_<&?Eree&4Qk8(MNNOdb)81}@lCkx*nT2yc7E0s>!C?^!P108 zM9@4swGkcZfR(xqdp{_13|%6=GDqAG4R}=d#PSiaKGoMV;PW?ys==~1e+aSc*gs&> zJ3#UgSPwRee(0uzx(LPxcEWYA`GnfB@0V39;OFOhuCpVJw zFLi9gE^Wwi3pnrjG$1&Sb(6j$D}Ac1TVfS`TCWnv9U2T z;c>VT+0WX{#wHkYRRXGok?*f}0;iiOzbyVKlC~XQ!_S0E4ByY;04jLS=_AyNWea)s zEXnuMmq@%7(CGdDqrGeYhdSTGqYEl4O3_5NNox^CmrX{SG#Fl+!sOPL85xx>QW|uM zTAZOW5mRi2m^NaQ%gP}VlY}_QaZ5rX)x;J{lgsS$*|Yz_`StwN>y`2K{oLN4_xpK2 z&of~20gUkC>#p4=+v4(vOeQ0Q?@*MlJw5tZk|e#@nFrjxN}xJKW8pXe$C53BGG&&2 zRcgw!3C|X*1B%feeyTA#>2p+6R6yHBF~8Og;}v&ybZ`)PhB}K3zf6o=!g*>CGJEOf zB8^#4{Z(}ZR>pxyLiA&Ws}iDj!$<(O6&BdRoi0cFdwb7rd>J|$sOf9Tqg&4T3T8;i ziR%lo?;-Ml&e4Q%xu&0P9;-16`=%P*;*TF|^;Z!n!JzQisfra~PF6z+{}gQ9&Y+wP zVE6s2tjxFW@@g`9Tt)1#*gdzVRzHIDw!TI_iF-0puP!qv`Ra8*F}O@?uuV0!wFOAg z>V(WF2LjU|!V|JW-w85ghTGw`toQpG(j$(+mve zAf+f=<%PQb8-FaP{}UZTQAdAZ8+t4<7W4D;L=QG%ER;yNo^AQ5j8mWjHN!cQwAjge zVh66cXfLS(^+teCMMXvR!tX<*S4Rs<-ncTd>MUHCG@dsgl)v;CEO=y@DQ33U|Di9pB5De1i*8?n~y_ zsm*XFijR*!iyQ4hPmd4ZfJU)7c+dzIC_lmEDiaWFVgHLn^dcl!KF@s4IoY>2j$^@l z$WxmbBOIWJP~58_jWc9iw(Fw@&f2IV$MWw3W{osaq!*k03|Y2|w>Lo*J6(oTuof@_ zhy@!AoN!yduB*j(diFS6!1T#FVt55;$94v-Q5MLp02ORNZu>Qo9RPiy!=-Qh9B4UX z*iKw<6^R&tx*@=T(R7CRWueWR^EoN@cC`>*%Xayw0q!Z?dW(=WMOPxAL7(V@n2f3Hv1NjK8O@hF5Cd3>q zf+%k&*oyc76-un>arTjjeB9m#=SYBgiiT5X0&6wKUZ%Zbg}T^T0F$956o5cRn-aoa z)t@#sF*CCVs!7Crgp3+#ZRE=3u0*pf8uYNLx;jUGYUOG=T?1O$zIO)Q>&DX`2g8c< z0@ezLT@CHbG7LIadfJpIZgC+Hi$D}j{jr8=@mOhZtRRTB1b#JVINeT$X(@l?WgJ+1 zSd_UP5wsR6*6I7{F}Ghm3uXZ@+h%7MEo1pdnE`vs zLp5<u4fg6+@oH|40Zrj)d8+D8Ym_i zPGV2^7^bsdsNm}W774D%dvmOwshgS;TO+}6y`@@Q+R10zMGFsk7IcF`V#@Qp1#{jBxPkUin)!2t7x{o$4 zSMn22FRytNSsw29&WPf|vC)yn8dt(Z|8dRjZM#Dor#9C=c@hOxH_QYsfi|aS+%o&as&0Nv@_#gM=Nh}0K)uaFWDLvwkb-3RJOP)l(eODL?q7sn7!$iH zKlrUHh!FzBVhKA^I;B5Cbd{CTUWs0e81;N4W}j!#*^9u%t>hqC|;vRzH2;;9u_%Ix`oa3<9wV7S4q5_^q*V z*@u0kWfEw zrFL{Ao!Av)rfen6uzyw|uhY=54SNBHDj_N9VXJ(L=M)_nXcSrp?sAbI5M30O>X=_p z`l>RO<=0SHoa}OJ#v-7YNlJTp-iAyQfp zUz}L0djQ_%rm6*7>7ma`%tlzg#%0%l3GMpFqLRWwTTB)rod5X585pMY!4%IPCn{&! zn>g#@d?m$Sd`F%9_sq4~X%PxGk{zT>SnTB`-72ntl5l$SnxxeNXnSecEt$`kM^pN3 zwjjw^mph$WDiMVFD&jgKPGUO@p#w(l2e2x0_5{zpXdVn2$D!w(`F_pP(`+_7E^=zS zt!gDMwe>TM^TC7 zer$c&xO^`f2^Uc|!Nt3U7HC~iTwDVnnWEz{kJX8?2FTe?`2;%W$P=A@xS`h6)YJic zo0$>C%t9-%`l*Whk18HJR&*%d6)4{My?x_@ZYa8mdZ2mNLQnTQ@`|mJX7;^?g?Gdy zPr3KAvsK~4R(WLCOBCQ34S{K3*h%hibZZ@rL|j1i#7h>c7e9xLdzL2#)o>~@nh)fI zAPHZa$HE&r>gwu-!fGuFW%fz(9RWltfGw%Aat?t4I}@_66eu?AQ?$mu@pp8?f1Ngk#^qK!}9 zxe0I$(XCu~k>+*;9q{WdZ#9-Lzkt-gUMR5yOiL;lxEjO%%Y>ocx^`UA)DiJVpL}8m zb|rMMHb9J!U}3W_Jh1-f`i5FWDN^@d*duONUC?#xE@p(-z+;1uXg4$zgUXfzMVk!H(l&m620%#X zo0ym&;USo5N9lOxxT6xJrK1b|0=uyi;t}d!Dc~Q`v;{CE zZEJJqYvrt#DJpJt+d*-( Lb7tn*a(?;~u0H<= literal 0 HcmV?d00001 diff --git a/assets/images/incorrect_dark-9b8b3be328ffad83233de4536c120016.png b/assets/images/incorrect_dark-9b8b3be328ffad83233de4536c120016.png new file mode 100644 index 0000000000000000000000000000000000000000..397fdc5ea5fba775095890720bf1eff3799cb80e GIT binary patch literal 33063 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 j&;}w677o~^y{xU^u{||&@QVz_P1YF5 literal 0 HcmV?d00001 diff --git a/assets/images/incorrect_light-e787e568e9a1528dcac5bf55ef29fdaa.png b/assets/images/incorrect_light-e787e568e9a1528dcac5bf55ef29fdaa.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5e452be3ab5f51da305e507544d4ce49b85888 GIT binary patch literal 30168 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 literal 0 HcmV?d00001 diff --git a/assets/images/maze-a374d908bc9445061e15faeddc71641e.png b/assets/images/maze-a374d908bc9445061e15faeddc71641e.png new file mode 100644 index 0000000000000000000000000000000000000000..914cb66769236611d07ec1e35cd5d00aee4d7a1b GIT binary patch literal 25402 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 ($j9p0pVD-MQTFO}=DZUj`!c?2v#p!ou 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 literal 0 HcmV?d00001 diff --git a/assets/images/rb_height_dark-75a70ddff74e5e1aff7e9986221b5687.png b/assets/images/rb_height_dark-75a70ddff74e5e1aff7e9986221b5687.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9c6c736890b7683a5b42555155dac36062c9f2 GIT binary patch literal 57425 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 literal 0 HcmV?d00001 diff --git a/assets/images/rb_height_light-36fa69317ced094d7bb7b0fdf32cb3fe.png b/assets/images/rb_height_light-36fa69317ced094d7bb7b0fdf32cb3fe.png new file mode 100644 index 0000000000000000000000000000000000000000..1b611c7276f40819293f22334037c630bbcc7ffa GIT binary patch literal 53848 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�jFk275a{TDgBHE72U{|eb zsB3&-}fCr5M0a z!^ET{Tmh0z14>OYZ@sW^FQYU0pn5rfKIABQuNRWFOvDz-biP&NkB^VF+;4<2F?si^ zk207u{7O$#zs*DE|FMrvj00NHf4)fQ$nohU z?p(_3gCDZ&?d*&x+g?^?nLn@$4PZh|qDuAuF3HHq*m96Qg3Ti`gzN9Gc&8Y7+}`}< z=by(jh~~?odz;R^DYee;%YFJRo1~@B_{4;S!Nc>C1Ikkmebq7I&%l$j<}&s~1@;hL za3u8Q+19&yA}g>mDKYU|UdwYm;x!-^Waq(B3$5V?5)&_<_|B_Oee$N0P1A<9Q7G0Z zN>%Oy5kWuYkUH!O#_|3|_f342oBW%HpS zIMFa}uz2&`+n0O(dAB(ko;p2yCeyLo-u+=LmOC?u!p;)rQ#=~1D(_eS9(YpkooDBt zn$9I8hejHDG`;D8c^cyhX>Iuz*f2wZp-u$)a zrj@_Fcd^6wrvc-Y((=HFCjjlMgQH^^ z7ZfOGZ)6xi0MPWtjT?)pm9#=GKPxO!53DI{w~lYKW~Pku1xcMi5qBLFuRvLHhsQ0L zend_@-)QKQ{r#?~liyXIS{uYeRJ>Y`t`V>D?{*?x1~yPppzi9PaKYsJ(=MbvC1mV6 zUAxY6_^`hAT5krMGzuPX*oQ6@L+rQyg|ekJfWyJB8V8$_e?XmmbGb2DQIEoDL+0)@$+Y$ zJMWKqoi^?HqE&qKY+ z+jH?c7a1Y*%P;Y4JAZx(32-qRzCii#3p(pAD_5SqeSVdS<>tp}KF2wCs~yviC}EWQ_~TpS$u}}q}{`u(0ec!(-kW(`Wn2UPNVuu&31dG$4oUR z{+}Cqg!VF3&1AX?r5Ms*Q9jz5m}pGf-2tkzasU3Vfq}ezCd3W&VEMJxT^mCS z?^Q3iRFBl>7OWYCYyN)FjAzJM7<5xaVPJ+0Ny)+qjc=cBl_g6nfgF0WfbW!B84woD z7F1lnKELU0L~ZCgP3*2KaCLL@ha**yHg^*yzWX7P5U?iExp%@pdcEc78+R8OF{Ykc zO7uvsQ>Pw41T&8g?@r5*R3LAy!kOEw)0@}y9ml)DXO__gfFR_6nUNc8XIR5^H^On90y?BZ8y1id6}HKb)1MVp(g0eEjdU)ZP=gJ;o_)QrhHu;(GtQM z61Y4jHueZ{oTxv87_j9aPeVnojR}M6F_zmeu^Apns^>BPiu8meHx)6_DzwRj9m1;; z&Ytxmq5~l9z{l7qHvbUq{BN*o0oi5^Nl*Y$oYYjh_P+Vc=F=qG{l<+O#>U3QEH#=J z`+3~Y*f?^W0A3J3YwqTJl<75KtgY=)w7hVCc8F&tP<{fZ?Xy2K)8OXn=;^5tfnD~` z*x8t|?$W}R2(HL}Ir-HyIYSj|DpNEYP|={&JQ&5DAENr~88kvxyW-ACZ?$!z`=o?b Tm;G+be~ceH+4lIDnd|-wO~6TS literal 0 HcmV?d00001 diff --git a/assets/images/rb_light-f53bee3b32ddb2e7a4249828bc03b1a4.png b/assets/images/rb_light-f53bee3b32ddb2e7a4249828bc03b1a4.png new file mode 100644 index 0000000000000000000000000000000000000000..a73079ecb4e917adaaa7d9e2d1012d53bb977675 GIT binary patch literal 42611 zcmb@u2V9Tg+dlkl@4fdRX;2YT+NBawqGYs585L4#YVSddC@CVNB0^KCs5B@=(jXxX zrPA^qSDxqp{NM2(@B4ZEKELPr@cZ8Pecji6UFUh6$8nrj)UKUIY|O&U6bgmS#Mr=s zLZJzvP^d*1>G3b-9j12pfAkKfMh29>0-E6(~0?Vz>smlEQ;mM5B z4y$b##*22W5WSkzWT*)W0cY{SpE~f zvfbE=T6+0UyB2%Mzkj8VtdZm*f0C%yC5Z(^M!McFF6Q36d2_?dm%0G~TJj1C=GNAc z(b3G-Ha5?jnppYy`CZy`nQTg2=|n_Cx|5o(l z!6PGWv9`n}ZiP|2-Mf1S)!h3i7Q1(w+t@IRh+ICWpLyW|4|(*tbLYCcyQ}N!=(ld& zTKMQucvKYAiBA=A?d=vlPfjsZF3l<2J5(O+_U@jPhK9(^omcd>Zl&Lur4?6PyiWCG zuV}gNZ@sbJ^8Oz`Vk#HDC=~~?L`FvD2N-w?u9UXO){kJfe{*9;WPE&GM}gHu K` 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

`#>pweY$&T{uhY_q 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 literal 0 HcmV?d00001 diff --git a/assets/images/rr_3_light-51521ba414ff3a3530ed0109cfab799d.png b/assets/images/rr_3_light-51521ba414ff3a3530ed0109cfab799d.png new file mode 100644 index 0000000000000000000000000000000000000000..d236d688c0dd95cd518dbb7540dbd85330bd86d5 GIT binary patch literal 15545 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 literal 0 HcmV?d00001 diff --git a/assets/images/rr_4_dark-3cc1c8d4b39707d2a51b51f4f1b29dc8.png b/assets/images/rr_4_dark-3cc1c8d4b39707d2a51b51f4f1b29dc8.png new file mode 100644 index 0000000000000000000000000000000000000000..c5614a0b5aefd993f0bffcccaf32c374901a9b36 GIT binary patch literal 19127 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 KelF{r5}E)Ud%}|d literal 0 HcmV?d00001 diff --git a/assets/images/rr_4_light-631a0b3947be21a12b3a489f0cd0c3c4.png b/assets/images/rr_4_light-631a0b3947be21a12b3a489f0cd0c3c4.png new file mode 100644 index 0000000000000000000000000000000000000000..80c47f872e5591c9aaab14c9dbd4281c7b8e8c8d GIT binary patch literal 17489 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 literal 0 HcmV?d00001 diff --git a/assets/images/rr_5_dark-9028cc10e78c05cb669d5d438dcbf93f.png b/assets/images/rr_5_dark-9028cc10e78c05cb669d5d438dcbf93f.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ce2504002f9786b943b3a134e79717d118ea64 GIT binary patch literal 19533 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 Q8pvnxboFyt=akR{0O&h7!vFvP literal 0 HcmV?d00001 diff --git a/assets/images/rr_5_light-6b8f80047906eb1f58472d231eb9b12a.png b/assets/images/rr_5_light-6b8f80047906eb1f58472d231eb9b12a.png new file mode 100644 index 0000000000000000000000000000000000000000..e32514a097b0dcd61cda54ed1c6ba63fbdd2be10 GIT binary patch literal 17837 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 literal 0 HcmV?d00001 diff --git a/assets/images/rr_6_light-b090675f7b30b574af44d667b083e9b7.png b/assets/images/rr_6_light-b090675f7b30b574af44d667b083e9b7.png new file mode 100644 index 0000000000000000000000000000000000000000..7483fe8f8c8a3e3d7e4bc6a5a5dbb6a1665e8770 GIT binary patch literal 26112 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 aGlTXPMBxE}H{hmc92p4(@q)+t@BR-=v#b*U literal 0 HcmV?d00001 diff --git a/assets/images/rr_7_light-018e13c41ce1fc6257c4c65748aaae27.png b/assets/images/rr_7_light-018e13c41ce1fc6257c4c65748aaae27.png new file mode 100644 index 0000000000000000000000000000000000000000..8e75618a385e2f5ff3f701be8e38baeea1884998 GIT binary patch literal 28524 zcmagG1yomS_bv*epfm!~peSM>-6@iSfFKgmNQrcJN|%UAgAxML-JQ~il$3;YcmK{@ zdw<_K|2xJ#_xg=*?6KYJx7NGfnDd#>^UM|WTwV$fn-Uuh4Gr(9w73!)+9g*sH1z7L znD95%oG)XF*-)?s#bI{8xtHe*d z)+MRVr)Xv?_r!$e(Ev5WP}XfS`x9$=#*B`EAbtk=2f@veO@#54EX{T zujzp}{F#V}6GHwA&%$eaG$LyP1_lNLW8J_Dq=Q)>v!Iic0p`Gh8+{w)ClYq-12p?xzmJ zIqG6IHtaus{74XR3>Vm_@SUo49n9AeF&+B;^7{x0(KZ@P>pYgTvvYSGSBT@3bHLu7 zT^zT$%;r?>@>nsWTpXvh>F1`VCn~wGTATcE)C+Xcje8TmYLr{x(hA1l)9~|hg#=1d zd^1uI@4jn!vbS7wvXUJg|Gk~gGvQ!;T!RLWm8xDMt>61)XhjU9z27HW@-9Nv3cNw2nuw%6FwN}*tMqqHT{y>U^ z*;tWZL&M`&B_@r38h!a}7ea>y#Kko~z%C+qO^!L&9+3f~yL|a_f%!Q1-Dfd>cI2iM zxZVzjzRXtHZp5P7sz;qij9bV31eep?UsM~!A}b|^2h{mtR7_0A2L@SkP7}i4R*%I66X6j&4l_+xs_d4ZRNDMKnhjye)T}HTicCnc zUmfm_=ZP3AHs*ju$es%fRFmmR3Z$aqx4S15POUdqWcbeC{}oMp)<*52_FaXfZkYV1 zGBQQ{;emmMC0Rv*@vmx}*o0j6bf;>Z_ckWSS9m`Mg@oMZ;`#*pEFyM{gy@*a{5#WZ zI5rLr1-rr3?d@%O%e`N;S9XT8V>AIx(-*?W_clEQ1Z)ZZuUIBs4Z85b8^Utd4C zqsi{PV}Q(dl8|erYJSpSJ`276t)8`@3aaYK-n6Gt3Oj%>I5x|3jd3O`pLgD)mt%Bxb-n*Cvo&zd^oEi!PRCb}W&@Y&2?jSxDB z8O(QobF0PkVwY~CVh$eyQ|0-=c&vaUGg`98N!B0-`p1W=;jnj&dg3G$6(boa#Km(` zj1*dWx)TMWKR?pAPD{J7_coc|9@`5Ok5Y4c+hu=+h=inNI9KD*_#yMHTi(Qs@&zvY zrm}hP8l+sV^cHs+82sR9s@bgn`J;;l$I!90oq$gGnYK3V@$vEe{Ja`b7~I9W>rr`u z!}_cL^TYZ1A5jnq`-==^W%KB$sBjuyCnw2g>^`vnnby^#Dp~L zhpodyWTQZ~Qv09>Ve474@VPM^>U0{_tK~RpD4IfNHd*!Qu3Vg2oTzxq7$-zP$+NRF zli?hS)sg&irsnQgj^*K8s>a4fNEzNsOC~Ud?J;bxnYu3Pl4E9NWqmf6y$x#}uQ%jy zKtD?e^R2(o9ZSt`ch%C;GJCEfbbj7I|Mlyq3JQ$u>_1m{>FImf6*!Qc0ox^2Dxyfg z6+1h%;^XpQ#$b)JEtd=ZtTpn=u>}RJDXFQkoNqo1DQdQrPkVHo9q&@`T74N(6c@>*a}&@DE$NI0i(_-(FTyLN|xq0qQ5sjIy#D9|a;894*WkhS=%{-DM4Shh`1 zPs7Q7Dkql?VHL?VM@LRbIN^oVu$xIIov~ zro&Wc-wuL{Z9~FUR8CJnjpW5!H8nLcyw>!C-{f9*e!MR(B^4DJsRzGc^Sp3_ zWoUyfsb23Pv_4*5&i^4Wu4(JK2@ zNli^^YisMY^mKqxdiG32MA1mN!I*Se&4s^YgGk>NL8o9~aEH$0=oa8B6{%`wK0dyh zttK4U(pG;O&{guadjPt~K7Q==Pc{ul($wG8)h;;xW3{e4ke3KxQ^3`%whPagwQEf5 zYqC4LyA9ynK*B=itu2hI9pXw*SXe249E=>v=9d~S&QG2Heo{R;nv1xGjh&)X?}1Cr z+rKlOA|WAh=k8r3^25?S0q{b>ZAR{kMR1puwg0CXJ-wkJab@P?>?Zv;UG|nl zA=ywT!I_kUBp;bwJieZzQ67E;=SG3m%oBVFpy@K7OoqObLQ187@E{m6JY=Z->bw`4 zn%%JMko>UVaHgfDAz%V9%_EJnG}V0Vy_KPmc+0vp6Z!2kRdOjI<2Uv7MF4(*@X*oIlU`8~Gclprnb-E=AC8Tu|EK`OKxszl!OgD0|Uw%)5#DsXl(D&@0=oFakbobQ650uKbv?Y zk7jv!d2OOH3XX;C*^zZPt&og^12LThH?M>`2 zx!)a&K_IMl;#n6MxTsjnNIzl>;eEn+F_B5L;yta93-87g0ukJJp7^ljh={qo+w`*( z2u$Cv1W?H9amM@R%^QdT?OG<&!X^{s-xLBo&Z!+~U@pJFTzY81W_O&lCj%J%6@XQE z{U0y%0+-U`v!pV0BBEm<pR z?0~y660kitvz(FWY7RI03W21utffW#LsXRWa(Z-v=XM;IUjI#U9(-m^tBZX|cJBbL z%*O#B6@@gXGZhJyu(fqVdNozUvz(J;tpNuNKtt(*0n}*z9*n(63+0t51}3 zu@!``<<}bZ?!3&@)w)3x$u0vCeTTzekC2p9LQRbvb-wADi)Xt+^3Ja@kZ8*jWo!;t z6-o8M`}g%EizMgQU&H~N-BgkCeosiwep%a-Mn1WWKP*r>772irPo6%#CKu2Bw`|;E zZZ1Nkj6ZyNP2JXEGb`iI-{@TV+w@AGO_0sIx7|)x?6|2t5;Ihtro=$bPjXkzhnO)3 zx#Amg1@l8F#OUdL0KKroS)o_RI3LG>avTbF8f@ePb#B}$5?J?rmI3bfjum7wG_c?@NZbMugK zH#W{KL27;n&Uj(iAq+4aBB#^!az6VNlG~D@1^k`)4^{EC-H4_<>F}wM=LB{Q!d(Ic zJTC;H5J0j`jf#p&<>!x&#V?nbUCS#oRTFP1g?DcmJcm5L09g~4hX2>fy^+50aY26b z1GCZMcI3U7_4*)Mn7}{+4pKO3w;!y_}mMr)e57m$@9)y$aOpsJ$|@6=+r3~xolzlsW1`|S>K1H*uEJ+K=)0r+5cHAyI(u4YxfFodcGJ|g%$d6Zt*|EiOGP8 z_B}i9^E84~ur^s8ZS%KN9iEn+-l*jm+qY@IVP;PW4}|#8@?vegJOa`Uhx>^gl*z{S z)a{jB-Z(h1! zyk{gM`H2(n-ijf&J3T$EI0B@)-(4ei+HNI7M`#OX=5P+<-uItAwW{j4`$b1%orz5K zCK?SwDqYxht#*trw_A7MwQ3O5mJ@H`SmMqLtRAcP6yc5!1GWRVS$C$%FGsD=2k<^V zHLtF{;3BUBuIZ4^h)zJQYYzwfcGs4IV%Uh7$eJAi>PCG@LL{W5S{Lq$ibVc;1%Tq= zoH@@&N==k6YgFHORmxtj%jYq1HX30$esToqkSHP*CbI`7bMreL%Yz3gX=(2igpc2C zZCL?6TA4S%S5~?t|N2{_Da2b#gEn#aYKaGzNprP#ZCVi+vxc8Pr*YKtI zyW8nR4+UIZa>9~<&Pw@4h%ctw5KJ^ewX2S30iXY~R`L9>*|PIiAKw%l%Yq~4`DgS3)mm3-a$f+Ls*c{?y8;67uy39#DLt{U zU~X+~y^M)DySOOz_%RwJvTp!F0ac*Zru#ZOtIkfZ5#MFCTY7HnNtKtO#Bj7DTd^r@ zyDh1AOVgaC>BIGoUTz)Z-kAEn9?H@g0; z)q7fk;zga{ox4rG1WhRt1? z@kk&Og-X6%iq5?yMIxl5vopox{G_F=?K&~B*t2KPvUv11YY%CGb88$QkB71jfCZo9 z2DRgaH5Op4Zvc^hL1nC*zx;DJ*Ed3#-FT;{sQXi8VWH9OGP78|VzTQ>E+Y?_{ny9! zdMKskxpfwM8)+ON5%%XNk39(DL1^D?7l&N;B!(qT#4Sp5F3NR{srcK)&cV)8%V|ls1 zBx}rMf9;w`UcFvSv6Y8Mc$bpe)ohiskLof#mq=rZ z$#6dqx9Ep;d^3=8rBC>j3927zL8tdnd{x<{VgW#Fg~c5$GQ{!r_C^RKm^0w(D6&(} zxi!k4gxuI#D}MhT4U3>@v@maS$-7eDae#ibsCD9Jx&+Sdu!VYdec(q5sH#0~H?xw9 zcnCgvRdN%^ZS(OmHod0H(Uv;rtL2BmKAYQ*QXY)&2YT?KUQ2h22kB z&3|*gEjQ+Kz=dRKTz{Ror})jJmQ1j7b(I2L47c2PabU+LTc7LR(m-mi{H@vV2=5QH z5V~5WjbW_DJL^;+8KjDhdJqgyIKB>N{uS|j)0LyTiyTe$gByAinJ)X?SEyO)Oe|Pl zzl4KAv-a~6UZf5Z!o#Wgnu-j&uHxa9@`t~eblt3dmLwPp+wH^0j|OsqU&UrRh<2Sg z2(m>Er``&e^El*G5=w~AV=i;&b#O6h*Tg{8#cDYv=yJGWZcp9S(%K5_sEmtCm93>7 zi#D#1OGAzGLZorh17>`s7d@oaNme)-;xh5TVOPchCilmsc;e<(^Ma~2icvwocr5Rv zXhppd7*U`a8Y-;k5*!Dbp6uQUJ#q@*c41UVG5}$~Zv8hYaECyUcYS_Ty)vSHU>nO% zijCb6yH7?`4ps5|gDHzSbu~MW}rAZ+>Fp8 zSFOnr>^1BEA_}-W3{q^@Hd*m_&-nr-0VdW+J(TlEQtuN%C3s_CU95~~9N1EDUj6eA^9Og`Q_Z7>(~gi@DJk^r+Gc-cY!&^9S43P7)*f2S zRpr?H?cVh??ztp2^4~iES;P!T^Nyh4#L7KphX2FhwriVgXqt>&S4KT#xC7bn&(cXq z;5c$DiIIJ`)Zh3MSI6U+0VIGn-~|Ax?*NPRK0f~Kn{WSv&u!Pf$8d!y4^^smVwp)*PL8VZ!nB>aqxRH=vxlwm&!EHABrvfKI z@EQfhLU$5Q(b=NS;pBp~H9dVjRQr*1d~Qdq{(4BlmCds(9$Nyz2nzeTiAq~)5f5O@ z7M=rh@N;l57DNz+O6E7C1-An5X>2C0;L~9?qlK(^K4RXreKSf(tq#MJ{qOM5-o1OL zW^?}jJ>d-|wT4N@X*oY^QY4kTpX}-NCh&Px4itX^qL|ly<>MUlmiu{O=EcY?yGZnV zLMsC}CXXPW97mp=xuIRUbcspcCcS#23Mam&Er^(rsRv=sk9QYo9KAPJBSMByuM#e7 zuVG)38ivIIQ7DowODP>24dk6N-XEXJ%*K55$d&W8Cx21{OGD4gJ8De^=d(iXJim2W zB>F{0LnN|!=MgPZ)n@s?9CR3{NNi8`lbshRAXQ41TTEu^)C+^y2NbCv%r3qcLU;%b zM*N+h=RLS_m@Xo~*ghdXDpAqh$H3VB7on0@iz)o|)M%cxyd)tZc@E(M_$;B5gZ0(D zRgtX*jI+afRPD;*M$N7~gy(xYbv02h&cD1J$y3fz+ukWQP0#y+_CVGDa0-L*mnVdu zPzsKPxa4Ud=4NJQ@^)>Pf0I5?xhypVuRI_)389V%&Lu)8LV5J4@&YIVOMe17d0-v0 zl(Vj1TwH(%y0g>80km~c~4MfXvS<Ln?>aDgq+yMUDYzmiF(^Kii*Ow1txNs7X ztxg78J&%EdBWm2DIt)(U4p3%5q+bUNBrYLAbmK*)7dkw6J?~>H{lq9`zGee*XVs!+FaGFfw0YO?gm#dxlPsBjO;iw@FZ0xz&h; z%$@)8Wk@Lf847gV78BBtNU!1HrE66?s7TqwWh8sVG01){a67hH4S%ybII?xu^uJyJ zEN%Pl%3omUaBiX*(ck$64|8JXT~{koag# zeOFUg6&CiRIuZy|(J?UJfBq~9$`)wwdTXPF5DL_2R{ar>1O*8Z8JQFi`M``KG84^e zG#)wHn>Pz<+EI5|9hg22oY-#Nv|GirwqAJn2v4*2f?jC>iug)&NO=$8M-USHx98f4 zDJXsf(0NEdeHt`0kS7b#iv_qdAb6>Ht-OY^RT02^osdx1zGT&QHP`4hrx9)_on;c) z=}f?L$rS~8{F*JFu~8acU1mY&L#=xck?BT~FW%1nz9G!;+Ei`4>qaH$b%=>0hR^mc z1i}*jsh5UEM(p}6SAo3(SqpQnE$lVaTL=Q8Sufw+=SrR)ucg|kY!_5wqQ7L+dzma( zBsP{+|6S$Nolpu^3u?1ze8WO`C!;0Uze+_QkWZbDPn#6#qBlQyIeT$&j!0I2%OygB zgQcH6Gk~(2NxkSD#A9}lb1(^LpXus;NgtCLx;WqJe7LpUPDpb3{G_qLdwBZBqX+DL zM~VEO>~-84u`VuZgj_g<6@;#AD8spZ$uBCFRx&X=*Zl60#?n9qTc7ap9mIjb&i+Be zvi4KtZK)#XU89W2g`S?Czr}sRa|2Rz>5^fTcAHa)IAqMM#=X>lWV-vmicMw@U{w6Q zVOzG=L1dd;B@xm+UR^$geOoHdc#VIR+tPyB?SMk?H~L&bi1p?Gf)`mz3?NQRKvV)h z1TswcxAQz%GO&kOP76D%jf$F@J^*ZCHeQBTJt+^!3^^aQF8i|(l9&@WOLGdw^(Oh% z3eavabCz>wDPIGytD~rB#Bn6Bs$k8wHjX9W@YwW0T3SPy`NF-nhB0qxGWIjEZ0ct~6_oj!32Z()2nwrmm^nkMcHiXi(H8TVh^Gv&m z>FM190%!vCtd^D*LK+%5JG&D5_Jqn58iAX96vH`ehefA#7niZbn*A4WH52)t=f;hZ zoE*oNtDm2B$5zei?~d3mb{lUN75AvOSk|%eh#hRR856zM?>5&(kM|=^GpcKmnVL!7pe-0{1U(pBIF>%R|FRUz4!tA zN>B&gyLay<3rhsxMjs!at^NJbYOu4NWd%;dL=IoqCMmivTuS1hi>FXus924#XF4G1%o>-C7 zz^lNanBnFRLWPQO=|GgYT^ui7zH$ZbNJ>Ni#M!*R`J^egOJwBM@!~>?m(sy$+!rwtGvIs&Rh zpaKw)NWF6mF(fDa4!wmm1P04ehesvmZ-w3Jt-f+MeVS$v6ik3PgXmEFc1sO_)c?6u z61g-o0avT)afZB6YR0FJO4yX#X3{b;*ogB695#rFf##|BL?BH1YN=W5*wUmUU3ctj z;Q|&V8H>7OBS1zSU0t{D-d)%+H7AOkmW5mHAI;({jSaf>B$-Ut!*Jlv241ZbzF zTZm3H>DVZ1Nnu?BMcwY-XdR_OeF;$De{^&dfHM10?}R0~qtxw;ZEqdN^Zeo2qKIy> zdZM(TbgAhOyj2Rs2&9IE7gL9~>bwW}PZdhD|t5B z5(LakC`GEIf~Ms0&fnv+-M%-!OYRpI7J}IHV?~-?$sb7-^Q9x*V>M5sbmyhv@tU_- zS>FS*5ei#>FzW@Q(u)_lu&9RbfD~kHX$B>e2y$VkZPlGVOpeWT4PSl)fW?n8-buVP>6}o4sy{{Ygf>JDd(c z$H0!K70+0ppx)g7-0I$8|bTj}fFW>V0={o-2Q6C*H}`l>>C= z+1c48a8W>fE`lYfxR-c(C#l^cpq0`OHBuiqzy&BZh21X#k7)_qSASlgw1DPr+?SJQ(Q4w4&9Vg#c4DPv2e z=5OukBb5w`$BstoFC;*I#lXb<0u(#?E4w@NupA1{)vgiROhy?iK0oO%Ja z**CZ29gxW11JKwdGiSUryA4y~T5Z*+=~eiKm`MZk(JQq?>6V!!&kJX$yb)>&6#cW8 zRDK~&obZBmy~zQzLb|IewvzeIw%No%ygh+Lw*j#)R4yjnhS(Izf9ZM4Ylzv0AEU7* zs~YpP7S_kV$-!LA+QBQP!}AeC!~EaB+bh}muV6P7t7I~jzi6VS;ymAWF$;P zVK=dYpf^k#_+u_TZ)TkJMh42~PRVcYGuIB(q)C6nia7meDqgFbz>)23PA3BqtL=Gi zkDN(jWB}H)?2!!nXwH4%qR@;@n*46!PIQMJjRVAfg zOF?HofUpX68!v%O(sMgP@QJl`Avix;8h@=l9dnq!TJi=%Sa=~+d;K@OnYA;Bk1UYg z4M2kdXsU{r92gHZiQ&jsF(_+DAH;;PnGTomM@q*IRN5MY#?%HTk47;9A#t#KA-4sw z;OSV2BTI?tmBz*b8-{oOuM(xxx`V>Qjllf^n>_)DSQ}6-#f+3l_w<0f5{O>&gIu0zJ_+Ml>16IN}M0B)gSg zK_VC15lm_YUf`~R+e$CTW(-v*l>xA#5dfhIWNBxd5jmiiLxApa*qAsj?pq%%oC}^l zTpny!FBJ4=96|L8Y#Ou%liIC~Mlx$vLE=azCLu8ZN6CGLs<4NK?Zde+M{{ij20CogXUNlRRITQ{wXj=VUze-*I8R9Ew9ULAq^0cz zn24ATX!z~^{K|SEavBE-duOe<@6~&GaSMod)_BBs8#F8%i4__mMsOJzn`;lBEcP0u zE^bv6S|TG;2{G812xAB z@t|R-$0&*CMXSsO@7vgXvCyh;BC4s;-O`1?cAfaED$CLUhEX3kkNg1|&}nIqE<~ym zmtf@J_ytBNUE+tJ?+VKIwp4h3nYjiMSmFQMfGB{#go=T%nbl;vPDnPIxs?A~;8~F~ z$gHci7yO#P8>cM-P-j>!2b?;!F3!rpRZ~*RfEofJ;9_i%)_I-?2i6H{bST*%a$JG6 z0|Nw9%}5;rz$G{&L>+VnqeJmdG|+%cpIwQu-Km(|}G=f23nk?kX9U**j z?|@FIc?oPnP%CAE#ncZOv}ZcV7&dSeVS~3m3|HCR-UiM9AMkohlO6reLvY94h-XF5 zb9fe|*D#{fEOIe(_Kf)txP012Mh1Klii(m*4g4*8x}^jZsvA z_Qa%BrCjX#Pfk%={B_@Hw};MR=HjDX!_ok&MZ$~Ml|I;{5BdS6cHv2Z{Q(kiDetGn z=jU={%$i@oO#&;UwY#PXwr$A>+Vu%t`ki=)#;ea_tkxwruQz+4PDNrkfAGa>b~F=+ zxH;ct09GE@*pXTBq}IVzU=b8xXRE`6_8IMYto>Y@g7cpcBQNfO!{w?U7RA`3Ui-HD z2Ab6}`mw+U8n`77qLFg|<}{4{YDddN)fIyzZ4`t;#L8=8a&KyCYGlHdu=`Ud>?j+3 zexlr(7kzd97{#1nup8v_KDS2n9i!Dr*9B({?yv> zQOtx1c6R%&N$L21Cc6zkls}UPy97sRFUaa*1Cx+w*^l zlZ(Ka-M_N?Yt1?3%uQOBgY5CzD7t{-6G_YjUOjH7k*;Yvi>hmsTs|Grfq`C`_jcEQ zzcrJ=(R96%m!Cg2Z@+x$bz4KC;n6kLVP? zZpVkf^;A+4lTkk5s5SMcN9Xi(a=b-V5F8&O3W}%V;+GW_6~W7N6c^7PZRk*)$WnLY z1Mai}!>${k7UosduCA`i0`sR<6Z_o{<{*~C@Z&ySTpj4hFp#BkU~ z$CXHib&plOD*Xbbn60+<^RGU9gAOx3$D5ipSEt>v)YYxl$PJ8|^0bVaD_nUDKJGIyr2+Yk083c6 z{#sYZl?%JGYHwhgcRC;DzmJItjELwX4dLK4sd+}OauSG5$Xev-)$D)P<9wq}u1hW#PuUj3<_{aF7bZ=YTsE4rZ7zaJ(j-&w z=!jgh+21JdcPZXn4-eklne*b}_3}@^z9Z&uNf5Dc8%%zeWFZd9xwklNo}!}Og?7tI zb6}U^0i_EMf=DWuWZU3yCnmKHAVv+rba@aj)yA;7V659{Z%_dbWKI6q3U5f9@QW!hQ^7z_ zPpQD+*@jIi?%z$zQcnB>&NtJT(4zrvzqlsWb=YR#e9X`QS1M@Tq# zD2+glyxko9O^ncZ&ADcNl3tF6u|2)DwL|qJB7NZM=;++$=l?yb=-*yHX~6^7&-_=W zVl&bqP?(1s>N%u?NTjL@Zik6_c55cwE_3bGeH@m2eEtKa*_DB>&zzu63ORuz77C>@ zCHN=Xj<)9}7hlc;80qT+sxz|{xt+*E>x)bIR6-2~_7 z8xr^yzIDwG9BfW2#B-ZxLWxPmZT6*%D%=wU6Wcx^Dex5nmkrf6!d*p=zE*_TJzkP! zgTynyt02pUYX9w2VYI3FNMdW0k0_r#?nbPCd7!U~9P!D5@fz%q4_q6L6rMgs{FwlO z0>EFO&hPu}L_@!DBJOUOyZ% zlhgAf9gyA{Y1uDU|DVF?E6$6To^My7@OQ`>v$gLN#8@3^{$09IS(=n4ijk>;m*hDm zIJLeI4^@l&K{rQVfycSaaGutxwUic@Nxv5yf^8^*feUW#xdH1u{re>3;|Hy(u+`2R zEdEd)O$qLrsVk6@fxGv8(gsC&!4)qErh}I6mHbA|FC~ku`ntChB_wIRF z&*fCs@oE8y1?E2>vZlU zG&t@^!r(Oj{qf6}n+U%FL2<0oHlumRn+ulCe%Ruiegy3OdY3Pgw?*ETuLWlLHQt}^ z`M_Te@j`pli(Sowh4_Wo`T%@&TX*a4V7Z`x)`~VFtOyj~gLAV47Okp1V;$rD(^-fb zoM-3fVPf)>s5}+V>Pd?d^YMf4`z)$?3577n0Sk5x=Mpkw8F6E_5)J~-;x7AQi6!#O z*V;jWi@5TkhX7mw&`km?Z5j|82wx1v`0;5` zfN2dIywDK}3u@o3IAkpP|CMwTSTD2+FM#mW2O$oWL`1*nO%?&>J^;EM2mq=e20i?q z`50azDReL&5;)t>Z*{ zT^`krg1#2}p4jxa)(fYz>CxKk(BNl5!tZoet$#l4wkwChs_n9z{!rKh+?g1xKnE>u zx%C2az%ViDW9Ui5d8F~gsbc6U^Jz2P1=?d1lT7!ys%#oThXDAY0dJ;)JFJ25*Qu-o>mHk3< z=BL;ofyh~b{jHTDUkwYk@~=eYpFVtef<;D!8ky}rlmL38;_qh-wbeh{o5A~=K+yta z%3)c%e*=`7yCNdVupmh;EBC#+>iIu_nm&7#AFFNXzZ!7JC?r+lyU+e0)fj-~VgJfg zi`@!dYgs5u?%clZ`ZBEL2GuocR%9!#uoPt{xy$3(!VCAizo5zXU_iL~f!)}w^s z*Y+~_po+IBauzR|B9gF|WLS>;r3Ns^Anh+;uQY_V2$gnkf4rIgTiGuHeL<%ohf-#q zeh&32$3+J^h~A6gQ={@UQFv6`1rTB%3V)7@f|kdk!7@J^yK@O@P$RPWoPVBi-D&wv z9fJ}L2@6XHvnZ4WAHi0ieLL2k&%SeoWcDUwJss*6Gb;?f^H2hu*%{PuqDn6ws^lQ= z3es;3jK>=Kq z8S7(SX*}Ll$sok~f$})RQWJzHtQ;Z?&mzq~PZ-Ql!1}XZKK;#kcLDkkpF^{%w#Ts{ zm{({Kt^hn8)JgyQ5#MA;cSi;@9)%Qu{~Fp0uL9Wy`y7#|ii=4Kx^V;Bl>y$G{h%H`as#rN&BBY1{jr6M8sqmcR0VCKWLQ= zS6a?K%lu869aIbhIqDq4Z_iMndgKtr`Rz1FRC7Hc^MMzQ6g;kX!YH|_&bqaM%tqWw zP-NRVVS*u~MbXS(k6b0-eKI*0woxxX-6W#}O~ogd00ul%QA=zoeU^;h6Q4a`Ym4~E zgj_z7QleC2AOS%0tD{ru*Atz@e@-T>pQ0MMxKwl6Qx!&QnrRQ5-NohxZ*Wp$;ehdp zpFi#?JklNb_-?TOd&`rfzN7m1iZAHHzl>Mpnf6cy26?xLFO3eYa1P5#d!^k0C#_qa z;>7R&(c(pkx^w5w`;Q-6fP>nyZ8}mt&!1m|>{jFqPgnns!flqGw-_dW|2cGsPgT$-kPBKB2FAe)%4Z&0E60|U^o z6+a`*XE_m53h0*zVcFmR{I_%ek>|;B2I5Txvc7z+KOV2Y|KUS%IE%rY?E5 zih5$(Hh@ub{$H#$wRo>*o&b1k1y(W?^w`l%s2>YEG1?Fu>W@!j3XC=tj+QQrjNWi6 z!}Optxampr(qKF5*%|KZUh3>YUU^Y(y_R+=$x0jl?ExuR05Wj(m;lylhttThP_cc) z0>#7Z+*}w$KMK0aeppC}&Jur$@7y4 z`65LC>ktBj&^PF10#}d!OtX7!G5&wO00B`zay)w$s*$*51&wS~j+?!pIjBSJCZuWd z&xn6Bn}65*?Bv`C%7Z!OvsitLngnQL`~H*7v(EYM)>!dEWdpQ|CrWFEMn{t&eGw4$ z5%WKEF|kh=ob|!x1!>UwU`>5EUq``}j2Z>_b}Zc}pNWzc?dMNup1CWhyQX&UUIG75 z7@reimA!8T@9wA1m_$S>8Q00UbsONSpB;UD8GvS>5curF&VNBbD<}=jVj#35gZUns z_vtm={u%E3A)XI^9q%!5hHlT{-M-hsYEjwB3glbptbXK&z4L zVmO==PmI3l?QL3;3k&-XWJcb4Z_>m#dT(Oi`t*1K}-@hXv2A7f+R zz$Tl9UJf=&E>i>Oo@wrI9N6}p?;v^&QoH2y=kFDBUva$#pd_hBK?hS5*!7}#QRQHr z17CQ{i)it$VM3NtE9=FHYV&Ae^NO+&N4Zm>p53aEMTSzUzh2Enm0p5~r9Hd#ZP4O5 zkWR?vuC6XPFTvZONeqq7T$-ydDCh?+q;Mctg9mA+gE;HIeX^QQwK!>ZwmDwj=L8Lo z|Lib`$;|4gVQuZU0B`TM`nCwi>XVQ&9|e2OI4UF-0tQZ3I^M}y8u0Cp5aCV^!XXHl zs-3ww?U5ktRTGVl$H`W0_PJ8v#Fik8XFlHaMRei8ICSSFiwbt8Z|gvsg0_oB_{u;x zpoMD$1R0K-Qxl%3bI!NJ-S;0#+x~xb`SJ14qM&)M26b^-1Kd5cDk^edphZ3gEm5Gk zoz6EuzqvTD0xdCYmHA*}QWm&7#C!&)neon@7C{TMN&e!QR~7vezoGZZWT?|kLLyeG z0Qvw=nYA@>PY)VV<&KMbFJHQ!Hf&-nzPst0k`nYyXd%ZBN}6Dwl*knCAo`SV!VDto za`7eF>pk7t0VM6+w`^suIqltN_(ej}|4i<_gzbY*WLWQ&B@KB`58JVcue_L9EA10L zT&$|-#wfI08lRdj9{K&2MhF`e_&bak0R$m)jvGv$L$Bdu#&PFV@R(b}QI6>` z0gEY`S7ACRmyv^8ce~~P1RPSH5(iFB_`;cCTN@%xK2)i-})QTt!%D)E-VCpW9A|2 z_<{a&(7P+zdw0=0iqSiTzQN@3tMVJGsNfHeevYfM!occr_qLpn|F zhxV676HeqC2Z%}tbl;!3xn}b+i`1-XRHH8#(EePb-ZH;BmM*B zWoB%2fC}_bEUw{3{kROqjf$$OrolmCJW9^TKmqrEfB6uKt{djiRe-UIs+;WF6k%Z@ z0Os4OtYs6`f9s1X3tLs8Ar$>3a*XdWqI*qU^l?O}?%Xt7c>d}t5NwZJk#2%rLX;B#d^ z(HoN00UT28ux2H@W!dz6u{A@$}B4BuY$fsSs7Tyj<%_{KOzY zq*$t7Y%Eb`F&PX|6(lz@AT7Lt-irTwF_$^^+V3m#e}hP`bgDeO`4gSnRfV3J8DCUX z^eQ%X6TGz^C#9hjy%OGPvhw!m>skEd#+wUUh6Ww-;>wR;7~Z3!YT%8y1>OWQ{vy5{ zPon2(?MsF{A3B`d@siv0AtIKvwGcnq+5h|v*&A`T8`3X)~M`wB|G@(I=^?hli! zPtow&N;=S|JeY}n(F~a@0)!3yv!iV_00+33zH8Fr-{IwyX=(NGb$l_s^7BWpf9Q}Y z92?ApHoMz`g49S=1~k+o0sP4CYN)hprEf9D%R^{vdqTSWQL>V&L2if{(#qfl(wz(79-hSNyyFdDJ&PK6JpCPOccWt{A5W zKjg*jrbpM_w7^}r!J(=LJ|E~!sQJ&;FRkn@b6egBVLm+#!Qu_fL5ml{i-8ZgOnIW* zp;he?v=CMO_fn9VZt_!t+iq!Gm1*Efnzh-%9VL=0P-r%QZ3v|gY6HOewExW5(1W)} zK0aO^=Pkt5;*@RaOALx6S1fC`F@;apI6$Ys2L0$0O^`HKj%Sg}!9m0Km$Q8hj|a~7 zH(3No75zrnp6YVPZ|8fS4#iRBk?DoMa>Sk_bUdRpfNbRza_MAxGJ4q#%)=o=(oD ze;Hhrfq>bYr>Aus?$8evTs$qu#RNLZI>WN%>X#A{a$!w}2PqnG|Fq1^t6#r<9W67b z0z)Y-a6|vSKL@#2r7gO#G59bBwzj|C{&|(#^})Rd51v4g3Y3W-H2=?mSReJD7rsyD zerI7Tj23Tx5kpfxkkhLt$&ZwTfPvm0~nC<>lr7nRYqXLoK#|%^n`_8bL1&v=8ED2TXS$ z)_`2k3uGTM7Dm`e|GsDt8gT05KWPM1INdmm;AC+J_at4>taiWyG70&P2M7;A@RJ|^ z4rIW*EtIIMsOBKSGCLj187eO1JM$`u5=BiG5X(EOu-JN#pC4*`l}`* z}_VSiu=~&kU zTzpG=|5trly2vYqW7$6Ny^<6#wOCnOiz+EyM_eNR8OL`YGHtXniz~CUUj5I%RH!-7 z|77EKC0GV`EtJDJkYs@z!2gx2q57XW|Lz?@KuAXbBL3wo=sXrM>->h#NhBg^ntp@v zj2hfC;=n(GYl1*kRdp=#dn@p&{ZLquOdsHL@bHjpw5131( z7uGYE;Id-@rpiiCks4_BBk*a^hCNG*mUsL9n=18%lT%aI#M4;V5=c+Hz#cS^tqP8Y zA#9*V;ngB(vVH?yLkJ&okd~FLUbTg}d~|pS;4Papgj2k4AG#SJ>wob%X{XsIfO{9i zy+u&h+)zUO*<^%-Xl7%Vcm=xTCHR~4Ca{pN@*r>nvR`{B%81W%SAU>(PRGPxha>gm1qo{&UYk1q=ZPwD#~Ie-<89m{B5b*TZG-biqek zV6XE)g*1~h=%@u}@!q3HxqG{qzUX~|ySO8Y#cX9tsH=FStI03hbkUNWF?G*1-t{DV z*3>}Z{HJ^xO+@5RgoptneWGshVFp+jL#cT1jf#)+z}C;$476>cfFqLC{$$P_BOeo! z1YJ>A^~aOsgM$O4g}XDW!e80)g(_e;MwooK?8Jgaq-yU zU{WV461`^I|75Jgv~cWn5I!AI=(Md5j$X`ik>VoPLyH>thLh8bA6dbh!MmVfi0RAN zzY7Rx)@4;b;wv5tg~p0c#F6QR7na1d%o~4RwwPh6p>DM95_o-nuY8b??!ud%-`_?n$PmfWLU{odHdXvoS#f$XLN2L{wRM;(L$`3PGEY zgybD`JcDKQz>*Pf_331lJ&*tdqvPY#`;}1KUkmE^08h=-AX^#`!yTIn+PAb8L`^Id zwztp-`=T#R(JT$)9i2NC3O@f|?S1(_m0$b)kx+BuZnj-k+i<9yccd7j_Df56vIy?UKN-q*gab*;7b z_Ve~h*MfeHZ2CB_8;atVQ>UTPwfpA#(xkTWH>NxUgTN0iwA3=Ml<`$rDo zL?)<#D-x{&Tp4z*V|$&SE>ZV%c;>c9V?E1<+Q#qmeo_4LPk*f2=#|vFx79;nYPM$1 ze4kb+ySi4ekm@lg4Tgliugg;4Jo#rx_{9A8rWMxBzuuauK5^6No~=UYfQ60clwrYv zyUZQHqdmr7h{SEawaIhZrhe+x(H~QhcKeWQJ`UyWzPzG@m1AQ3O>gnngQ`^OY6vtd zHk=8NH?o@SkCGTjwAf^&bM1tRipmmh?#BW3%F4=(cqG}}%x_O;YdM64CDkU2&K2Fa z@wB(d@B8z`f{o3Ux0{tiv6tH6v3S$GWxKswm}ey|RX;Q^N4QcWCbO@WIaiA|dY-l7 z7-V);Gjl%v{!d}SrJ%!SEB}GnyM$|Q)I26jx^C7k8S8|TtFilYQc~5#NOvK9yvM>I z?@HX=_*Sh@yFy1Wmbnx~>lJrtZL#l&4er?n{W5U8r4$i0=ZKmPyE65=%sB*s`8`a? zv*wcXUk<-Akd<|+6evxND$Awbszy{wiJDCeEHIsG!WIvR_D|qwsuf5M4p2;%JYfr~A-| z!tj{>tU}+o3bmw=Hvgxok?pGH(%`9`l8T(aN2E*2&fVmoiCilIgJvG@MY)EC0;w>iiR zczIA#h3BfSEjMjd+)z}|PB|ZW@2TO?aETAK$}uI)%uvW4cX|DO;h|aYtmZt~_k?6% zkkY8A-z-N`?t*Mo@6EU9R+Ng|^S`s~(_A}Ld@`zz@9Mhd(ZS=(oH*dbcbZ2*^rcxIWr;De0!vFVd_VOYR&Q>okA!6ZB9isidqRB zr!u8{qTFd3&R@*c{k4vlifkI3m&?yDon?OJSAW@ghY$GU=&ct|KiZVpSz1y|OiV=V z9o!vh5A>h6+sC*1sYUATF=O847VAz<#RX@+ zZQef5&Br$oFY|^`X~#J7;0>!i^D^$j#85X~q3-UU0jd6xC8C?SU#8t-$W54w=|*pu z-(AEG_q)0lu8&oAfr@W+KN#pQ)(SOr(=Xg77<$$`ZCy&*#|LJ2C*1FGvzL4sPmp$9 zdBLmu>DkmfQg_2cOm(kk>@=)QNmD6TYiZ_d*)eiB%>u*Cv&&6p5@bhHul}ti%Y^vq zW^)x?a37sPv-j<@9|Ruli;|#NSkTVrqr5ABHrr$XMsdX5b~v=UOETdzkHKTE+PecQ_nl`SL2ZdgJJa^*xXb8*mB=PQT9xCduDrN zLxo}X79%59dEEB8kc=wdAa^bu_y%%gX&ITt5DG;C^uY3t z2hO=hRrQtYA4;_HZLb~y2bYASuk9JEgakw?R+5Sl+N^jeUH$RG>}W;EOn&1J7H5W? z@bS4HEBI`sG_0*e#RP}ukH?DN2DV1_a%}WLVcke!#%C)_c~w+6C~aCpF2e-lWd|}%rMt}Bw2&Pj7v1+T{}7&RG}VUjiKVUk@F^ymvT9@bNCx_& zQQ(WXf+-@RAL5_0|B%KtHQ=>SB(DKpgH;HqXA8Iqm*C!rve-dWeqZRa$w`WkYB}A< zbknjAOepKU0S)Uhrr&A9Fa-4r0k8Dt=w-iA9G7^~G-8L{7?|yEL(DBl7ANiO1b%|b$Q>B^NTFm#b|?a^91TD#*Toi8EK@zEk| zALE`Lmf&h~v$Ni~c@xSR4&;7-d7#6#y-9hcFJImw753JHftM>rQ9~|=)>me6@p1#^ z{CeoS7jbZKP>SbweWi@na{m3*8&nPj&ex?mbeUg6u-`yEWH%9^yq9w5Req43^%djM zaBvAc-rwPa3u`p29_yN$m%=556noIFa#4!Qc4gdjW*BHMDe z;hBiCj8uFSOS3q(i+h;7abyLWxMci(_r}UAzSaueRPdAe(3oH5=;&AsD~SLeI-UFT zmjb_a*0;`$G9lvzSL6u%ch8?XwFm|v{Ag%4;&n$u4O{SzUa}yuDpg#b7IfU)9!~@!_8CV#Yz#D!5>LTP2~!IAgAy63f=F? z2Hx-QEDZYbtI(x1!08UWoiljfa3{&*mr*kF+jhbxPIE7lq82jkaRN@Q6(;EC5o5z=%>B&-o&mCbdbH{4?ya6V4eUZ zOX@GUz1f2j=d_;-fbDxQe*D&@2~xaAmcOp4)@_oS!O*hwp#UPruj8}gq^}LGsT(aF zQHVD#=x4MkRa7*BM=YW`)LnipVOo<;BtCKmlJh5c$6)!?!|p8xEfnH=wCPMHW$x!; zuRT2Z#;fjyQ*d!XxSsX{{{?!9Pe{ti-LBubS?I}Z(TdZq-`$JOM~l}btp!ZudY&yb zly><3fnQ$fp+SAm`O=-Jw8PJ>k)Iu4*cow8U~-o~{=s=Ef#n3Vnl97%qft2G;YL;e zkfzxpk^j#Aa)`1bPzSGEOFbVr-^*kvDFNBHH1QHDo{49(MH)N^`9Ec3S-LA(K9#dn zhcuf@_bL@pssdSR7ZisB5^72oT5vgAZt~i1pJYVzo@C__7qC$1%nzH3P;rXba0DUQ zEqBd>;sv%3;Q`LrbXFy&@#xJ6sQD|v-Gr{``+11P!a(`l&w)Xf(^~?ithq*S&Fl~R z9l_3b*klZSXOIMoT^@!8)}p+xXZs~BMa|nU?BXq7KP2iFmeRF8%#Y35~VyhCSKaH~W;(ZQ4h>bm}^UKbEpZ#||b&O$&c8 zu;s&NOL+nVT}_WPa;hKhZsH)YXZ|<7)k;4Nt4})7V>`=ofeZkS%U?wHeJA7i#XO=E zPOiwGW08m7MWk+Y&kfP8W%4X$Uj)$QA}a@o{O-9@$_E(lwvo~OkQ;Es$K|T7;MEOg z^ed0N#4PtJQfZ9l7b~{;9Q_n?){mb*GRKU?#Dv!Td{yznSC$e4)loMM7Ff}U8t~{b zAAhvYJL=%vuGsf%8SSfLN*d4Oxk7uHpDn797MobCcfpXyU0(V~!)z``otS2{sf770 z_S+U5ABs3`+>CT-c>3&XY1G-6*hcZ(mXz}W4d2@N&CCo9Ddy(BWeF#X7xH|&RN|uj zhkv*`5AAUNjV!QZ0aEawBVvIOX(C>7 zg1vO--SEoQWWd*!tz-(WICbudipyIjW&>}3 zQ;vWNmEp_~j+JcB$!h78S?k`$zuUrjh(9Ju|sn*ocEe z{pIIA$#I*cq-X;_-=|$!|7+4Tx)vK}UDfWrmufH6&=mDaFCox0pNX>Dv$sYJ0Me=4 z+}y6-$g#f{^@F)Oy4VL`M*#Z^ug3jJ|81O{|6~5QZ!#d2k|>>0_WYHwum*Z2YkC^l zyaO74uG*lcB+W`Sju&WfJNjwS(avZt>4Xgx_ZEKTW;U}iz4l&sa7fH> zu~k;>J?7)bdQiA5Ei5ej2+srY{^f<-o(N<6-&a(?D^3`&lAieu?MNuSZNNdZeupmN z1t{GmrKKCBdYJ@WgGSOgUi3U7Z>;F)@wMm7ik2r7URbq(6Se9VPtUuJ<5FZ-!4*tR zO^cu7M|J_@3)$=45d+SSD}1r9ZagLqto2aIpyd$RJ-uM0%?pVgtZ!}_ec@OcXAGJ@ z8-Pk7Dtp2zl(}!GinARGHcTNbZ}izSkfaD1q%^zL15%sB;PkcI?SJt5`-mz= z@p(SBKY}KCXcB@QHl_0Vwr&cAhe6H=$QSKsY2ga^_P+nIe(Ap;uYi28Yb=i>r*r57Cnv(0tMMJHv5LUJK;l)1FYiU>r|sPrp}4K$;ndVr1Bb+k z2vQKjw=Q4&({8fB3m$-`|MG?of2^?Tv-Pj^vSz=x438zJq~xFU%*@|mZf*=Z`L|Ya z$)4;PV1+>RKz+An{4PI-(cF`Rev}J<9GE~Y!Mk273(E(I!u_@JkWHKEY_hUN9+rtz zz~gm#Kh@Y`ut(c=!ZRS95p zmu5MmD@2HD02wCdCTd&av&_iF{{{O|mGGU_;FWR$w8(=M$1(g}0>bo^P8iK*yW{}{u zlgxG-jm^v~#Ajtm!%X@+E_gX8| zZG*=8^$95{a$z++H`9U#mco&Y{Z{yb4j5_5)c8Vj;nq}`2-GlsI>7CNsOyu(zNlc; zJp3sl`?eB9V_<(-con5tT{*BugWP8$`dv?C&w@q} z35#l1@MKG~mNOt3H$ROY?X3_aMZMg90Ku2Q7^eWhYE!8PX1=v! z`IJg`gFqu8Y$w-R1$R17Y;zv{2?@%FX$)x@qR|ZZl^5{`X2{sd?YyDQ$H6O3e!Huy z%dP2;10EjhgyQS#>t?bh|2>%J1mJ?vjCo*EZ98}xBwT<~V`y!CnXbM2Z+_ec%I9eW zH;AkjBSSA8>=MQcNJ>eOl9e?I6v*5miy8zyrPF|Q=?cGwAhy{8@jBm%6{nzcd>((` z0lAsmH{eN+)nWo24g6wMsBK|Wlaoa9jft$Otgdb~g~hvGgqsL^t*{he{R}mcVW3RG z(}NeIHM3A`Kr-M#E0rB?yQxHNV;y{~|F#r-Na7&0yPeJw5gW^e8B_v)2iRNf2^9U$ z7p0}77D4YxcwnNUqHaycoiPaTq-liY8G}%1wsq?wDC}Ot)P-gxZVxsKDFPvZeVY^Uov3RAO^f2$7NtDbjzx%^I;_gL(u1Da$EtFGgPRW zI5&V8?qd*a$sqWH<5qWODL=%+5^!YO9C#yYHxB(E?vqnLP5lInpqQ$T*UIYy2& zSC(TCQE1S7?y_S>UjBvxm`pEBsm$0v+IWx~4^6K7;p_&-O8@QeV%PTaq7a*hr>rpu zYWu=wZ2$MoXP#QUA@wSXik!gMOQmhE6%|d~<5Ei44Za>>K|sHFNi63D4%|2eh5dns zbIa^YT+d<(L?VoAUk|SmlxwUIK!K23NY`$!Z))O@OFX~rQTAFyfRUc+DwQ5f7J$uR zlW6YtLs8WP;fM@1ewYN`wWNOs8b4|J?k>5`WWaw;4nQl7o^TMn5ttqAVVtO@hJg=+ zi2fvkg%y%AEaKbb%k4S2xzd`N0(ko{m%AjE+v!uS|MoI`jzJA|Am2mD>;k<5S}={^ z$D>{AZt`{=Nni6Jg@YqoJ%}G9;)*p%A^iEkN)HE|m97+Ci7!|S5~ipw`Ru!ZKc?%9(kETr25 zIqD>sy`<;w(OtO#7P}Ww+8PJyy)A*ttggLX5bygpx(mgJUWvmte8dZZuP1nL8TU$! z#qer+{`~nRF%v)Tm`sJzZOao*3J41~pfNBr3sqO&*jOBz9S%b^4}VD`mcqmXBzi-1 zvrjS^L6nGQx2>>tMe&c|8Hc2-dHePvlwl>TZdIfje099AuyBMw!3G44CY%c3F#Z5Z7K#7halygmT((<^ z9|X#JsDtm=76|PN?q@^T8o)=@k_s z5gy*w*4AV}DRYiKKI%B3B?2^lvmNrnSUve# z#2LIQNR@cIA#2G%lb%BSq#YmmvLV^pU8VY^T5onFD;S-XV~oe{txiTC=?Su!7B&?r zX*AE8_IW3u2gs)WHQ8kZ4C-&7K&A#_04oJnuXR`yV6c+CUsfkW)R@K+ZE64lfV0Lm zOGn2GSP%l(+|PpH4zq`nfYIH5`@$aTSm^bzoxccabC=&zbnM->BiuJsA3TJv5kw0_ z{a~k_TnVc48SrC}>Ot(k7_hMx0y%~Fj~T<&ytDkMl1@%#@S%&*`KBUpcF#@2d_`ye;K0*xw(C1R%uJ83gR{u+0qJ2}tWMzstLbxL_NLDjsn?zv~DnM0gSGDXRP9VT;f+6@OZs zP;C$flg%kbd&+LBM3ro(>gnkzhBag;a3b$z4+;uO-j$~$FV6vM{%6RuFMxLG@J@;1 zW3ITm=YcHpk2`ylmi71K;YA%RTS;U9c&sQ8_qUtoronvoNq2X3eXiI{DO2^Zo%_4R z|H$zpe?gxw+gBv52f&%4&|O(Ah}Jr zawXSQBLFEX7byI9Cbu^H32{3t*ltgo97D57M#kC#&34_O@e9+_)1hgxo<0g!$n(>{ zW1m=6U!7Q8txxz-I0~qaM%$C)=1U$Pw)aa6*8# zj!w5U>L<5gi_2f9t6TZ@_`eup#AxC$P9Pv6Z&u7r9Bk`%Ol&@b=QlGq3OS^? zs-^mx#;bP}iy*mN?JlcCp6*BEhU!3zEqthX@Jqt2A zQSWNac%Mp5b$FEPhyT~UV3x0tx_YnH2`bKsXg>eGJ$(x+EJv7IkTyWm3Recp zY3bL`q`tQGMRj%qM4zrBxK*IbBqjl{G8hSw=n5sW8Q9RcV9M{^`+`H$RM7pHA~rU} zy8wd|4%bLC4bfEuOngdGsK<*B=X_~+BgrQiGaW-cI;*+aNv#CSMDTz4l^k1pQ{Yat ze0+QyzSsRX^{tI)UFbwc!I;6)chw{Kcg7L=69`*~7DH{e5SBc}OOd_3ifc88dblMAR2y zcgLG32I=lvh9mZq>DQzZ1eHsW0uyT0KAe98qLEupV&+j>97m!KyQod+TkW3zyBb6lGIEE4>E6~P$dPmCm^hKAV(uq5&4Pf82&EC2t?|BnOqa*3pI;1V*FrO{zbi5KDD Wf3>dIE{fyxDBF$94GXtApZY)E#2ruo literal 0 HcmV?d00001 diff --git a/assets/images/rr_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png b/assets/images/rr_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png new file mode 100644 index 0000000000000000000000000000000000000000..f68c4c219c0d208fccef09b5b4397c375f803506 GIT binary patch literal 34025 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 yLGdIcVhhEC`2R=#YO_~_puA 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 z zA^U=s?TcD-5COXg4;*sAWfgk)-jDLsb+`!-HCJHKGeFv*T6z94%AbnFwP<640Mh7@ zeZPqpwEv!X(Y*sJYP-MxR8Jl5l~ho;jFMh&TG~DEm`M{K1ZFFh`st~u;|5FAKYy#! zgDoflw;*$zc$&LE-n6tj|#X*AuCN=tFb8boRr?YfDE@%$ci4+2{&RfX5hn7AyPfoqP8DPN%@_P3_pfJ~;es;)e}TxDnC@6HYf%7$2-ZBk zYZ6;5ar7Wil+3V*MIHFHA?F9LgLHr2sxS&l%DFi2asO&RyTqoyPxPgObw-4&;lC*8)}(j>&Wy$5?=8*sACZQG^-(BnD5r*dz&kJU{sx1DmFPh9zBQ13tb9EP zqKbMH=(%la4W9--6^UgwkZs=osR+aGPG;i!!ECKZSpb;mh?iv5EFJC)v6KO+1-&lJ z!Q6=h4v^`OuMUWlYb_pCo}lzeg>Fm{9g)B?CXD{yN2U>cs8O3{U?S@xCF?e(?~|Cs z#Jghq)s=&$JjwV#1ejx9i!2GJ7LWgugqk6@u83EMYXv{VR!YLB0mMT zcmGQ7ul8SYB}iJnc=W3+pR6SUFVevPQ}&5gT;;kVWWS;Xe^ zpj1UHiIv3C28@Q`#~;U#D)bo{85I?0XU2!WeU}m*U;kAVwuWDePhRDJgi)sC=i@t^ zjQHugjo&8!qhK}uBKdJKL@$T@B>(S6{zslm%H~TjjU_+bx3jrisjG}q4IAZZ43Xy9 NwcS`hXRGa*{{x*Vdw2i< literal 0 HcmV?d00001 diff --git a/assets/images/stairs-5ee5d03905645aeb13eeaa7774451a64.png b/assets/images/stairs-5ee5d03905645aeb13eeaa7774451a64.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1d8b14c2a22d85f5f69e7d6eb86116fb068ef9 GIT binary patch literal 43984 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

$8f?wX-zb95 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 literal 0 HcmV?d00001 diff --git a/assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png b/assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png new file mode 100644 index 0000000000000000000000000000000000000000..47f96d6fb74cd70ff4e8823de2f7dccb33ed0ee2 GIT binary patch literal 58553 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 $u1z^8nmQtmVj$Zx8CYuqt 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 V%auNdLuBwDT`eQcQgxf){{tlwn(qJr literal 0 HcmV?d00001 diff --git a/assets/js/01a85c17.02ca9acb.js b/assets/js/01a85c17.02ca9acb.js new file mode 100644 index 0000000..ebe9f51 --- /dev/null +++ b/assets/js/01a85c17.02ca9acb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4013],{9058:(e,t,a)=>{a.d(t,{Z:()=>E});var l=a(7294),r=a(6010),n=a(7452),s=a(7524),i=a(9960),c=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function o(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function g(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function d(e){return l.createElement(u.Zo,{component:g,props:e})}function b(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(d,{sidebar:t}):l.createElement(o,{sidebar:t}):null}function E(e){const{sidebar:t,toc:a,children:s,...i}=e,c=t&&t.items.length>0;return l.createElement(n.Z,i,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(b,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},4524:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(7294),r=a(6010),n=a(5155),s=a(833),i=a(5281),c=a(9058),m=a(6090),o=a(197);function u(e){let{tags:t,sidebar:a}=e;const u=(0,n.M)();return l.createElement(s.FG,{className:(0,r.Z)(i.k.wrapper.blogPages,i.k.page.blogTagsListPage)},l.createElement(s.d,{title:u}),l.createElement(o.Z,{tag:"blog_tags_list"}),l.createElement(c.Z,{sidebar:a},l.createElement("h1",null,u),l.createElement(m.Z,{tags:t})))}},3008:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(7294),r=a(6010),n=a(9960);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(n.Z,{href:t,className:(0,r.Z)(s.tag,i?s.tagWithCount:s.tagRegular)},a,i&&l.createElement("span",null,i))}},6090:(e,t,a)=>{a.d(t,{Z:()=>c});var l=a(7294),r=a(5155),n=a(3008);const s={tag:"tag_Nnez"};function i(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:s.tag},l.createElement(n.Z,e))))),l.createElement("hr",null))}function c(e){let{tags:t}=e;const a=(0,r.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(i,{key:e.letter,letterEntry:e}))))}},5155:(e,t,a)=>{a.d(t,{M:()=>r,P:()=>n});var l=a(5999);const r=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function n(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/0220f5fc.5b1b8f6e.js b/assets/js/0220f5fc.5b1b8f6e.js new file mode 100644 index 0000000..c1b7a12 --- /dev/null +++ b/assets/js/0220f5fc.5b1b8f6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1378],{5804:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0608d96f.ee46e047.js b/assets/js/0608d96f.ee46e047.js new file mode 100644 index 0000000..b347ce5 --- /dev/null +++ b/assets/js/0608d96f.ee46e047.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7568],{7158:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/vps","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/09bc59e7.64a221ae.js b/assets/js/09bc59e7.64a221ae.js new file mode 100644 index 0000000..1c18e99 --- /dev/null +++ b/assets/js/09bc59e7.64a221ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4932],{3649:e=>{e.exports=JSON.parse('{"title":"Graphs","description":"Materials related to basic graph algorithms and graph problems.\\n","slug":"/category/graphs","permalink":"/ib002/category/graphs","navigation":{"previous":{"title":"On the rules of the red-black tree","permalink":"/ib002/rb-trees/rules"},"next":{"title":"Iterative algorithms via iterators","permalink":"/ib002/graphs/iterative-and-iterators"}}}')}}]); \ No newline at end of file diff --git a/assets/js/0bfe45d5.58ce388b.js b/assets/js/0bfe45d5.58ce388b.js new file mode 100644 index 0000000..40d7bbb --- /dev/null +++ b/assets/js/0bfe45d5.58ce388b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4269],{3847:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rust","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0fcbc6ca.e8ea4c91.js b/assets/js/0fcbc6ca.e8ea4c91.js new file mode 100644 index 0000000..e64d18f --- /dev/null +++ b/assets/js/0fcbc6ca.e8ea4c91.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1851],{9900:(e,t,a)=>{a.r(t),a.d(t,{default:()=>S});var n=a(7462),l=a(7294),r=a(7452),c=a(6010);const o="card_h7vX",i="eventDetailsContainer_ujlS",s="list_DjY4",m="buttons_jSVm",v="icon_R7DV";var h,u;function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,h||(h=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),u||(u=l.createElement("path",{d:"M2 3.993A1 1 0 0 1 2.992 3h18.016c.548 0 .992.445.992.993v16.014a1 1 0 0 1-.992.993H2.992A.993.993 0 0 1 2 20.007V3.993zM8 5v14h8V5H8zM4 5v2h2V5H4zm14 0v2h2V5h-2zM4 9v2h2V9H4zm14 0v2h2V9h-2zM4 13v2h2v-2H4zm14 0v2h2v-2h-2zM4 17v2h2v-2H4zm14 0v2h2v-2h-2z"})))};var E,b;function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",g({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,E||(E=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),b||(b=l.createElement("path",{d:"M13 18v2h4v2H7v-2h4v-2H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-8zM4 5v11h16V5H4zm6 2.5 5 3-5 3v-6z"})))};var w,z;function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",y({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,w||(w=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),z||(z=l.createElement("path",{d:"M13 21v2.5l-3-2-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"})))};var O,M;function N(){return N=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",N({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,O||(O=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),M||(M=l.createElement("path",{d:"M17 3h4a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h4V1h2v2h6V1h2v2zm-2 2H9v2H7V5H4v4h16V5h-3v2h-2V5zm5 6H4v8h16v-8z"})))};var V,_;function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",k({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,V||(V=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),_||(_=l.createElement("path",{d:"M6.455 19 2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zm-.692-2H20V5H4v13.385L5.763 17zM11 10h2v2h-2v-2zm-4 0h2v2H7v-2zm8 0h2v2h-2v-2z"})))};var P,C;function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...n}=e;return l.createElement("svg",D({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":a},n),t?l.createElement("title",{id:a},t):null,P||(P=l.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),C||(C=l.createElement("path",{d:"m12 23.728-6.364-6.364a9 9 0 1 1 12.728 0L12 23.728zm4.95-7.778a7 7 0 1 0-9.9 0L12 20.9l4.95-4.95zM12 13a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"})))},R=e=>{let{data:t}=e;if(0===t.length)return null;const[a,...n]=t,{name:r,location:c,date:o}=a;return l.createElement("div",{className:"row"},l.createElement("div",{className:"col col--12"},l.createElement("ul",{className:s},l.createElement("li",null,l.createElement(x,{className:v})," ",l.createElement("strong",null,r)),l.createElement("li",null,l.createElement(L,{className:v})," ",c),l.createElement("li",null,l.createElement(j,{className:v})," ",I(o)))),t.length>1&&l.createElement("div",{className:"col col--12"},l.createElement("p",{className:"margin--none"},"Also presented on:"),l.createElement("ul",null,n.map((e=>{let{name:t,location:a,date:n}=e;return l.createElement("li",{key:t},l.createElement("strong",null,t)," in ",a," (",I(n),")")})))))};function I(e){return`${e.getMonth()+1}/${e.getUTCFullYear()}`}const B=e=>{let{title:t,description:a,events:n=[],recordingURL:r,slidesURL:s,repoURL:v}=e;return l.createElement("div",{className:"col col--12"},l.createElement("div",{className:(0,c.Z)("card",o)},l.createElement("div",{className:"card__header"},l.createElement("h2",null,t)),l.createElement("div",{className:"card__body"},l.createElement("div",{className:"row"},l.createElement("div",{className:"col col--7"},a),l.createElement("div",{className:(0,c.Z)("col col--5",i)},l.createElement(R,{data:n})))),l.createElement("div",{className:"card__footer"},l.createElement("div",{className:m},r&&l.createElement("a",{href:r,target:"_blank",className:"button button--primary button--outline"},l.createElement("span",{className:"button__icon"},l.createElement(p,null)),"Watch recording"),s&&l.createElement("a",{href:s,target:"_blank",className:"button button--secondary button--outline"},l.createElement("span",{className:"button__icon"},l.createElement(f,null)),"See slides"),v&&l.createElement("a",{href:v,target:"_blank",className:"button button--secondary button--outline"},l.createElement("span",{className:"button__icon"},l.createElement(H,null)),"See repository")))))},F=[{title:"Packit: RPM integration, all in one",description:l.createElement(l.Fragment,null,"Do you want to automate how you build and test your RPM packages? Do you maintain any package in Fedora and want to automate the releases? Or are you just interested in CI/CD on GitHub or GitLab, Fedora and integration of upstream projects with RPM-based Linux distributions? In this session, we are going to deep-dive into features of Packit that can help you do your day-to-day job."),events:[{name:"DevConf.cz",location:"Brno, Czechia",date:new Date(2023,5,17)},{name:"DevConf.cz Mini",location:"Brno, Czechia",date:new Date(2023,2,31)}],recordingURL:"https://www.youtube.com/watch?v=FxhXzgxWO18",slidesURL:"https://static.sched.com/hosted_files/devconfcz2023/37/DevConf.cz%20June%202023%20Packit%20talk-1.pdf"}],U="Talks",A="Featured talks I presented on various events.";function S(){return l.createElement(r.Z,{title:U,description:A},l.createElement("main",{className:"container container--fluid margin-vert--lg"},l.createElement("h1",null,U),l.createElement("p",null,A),l.createElement("div",{className:"row"},F.map((e=>l.createElement(B,(0,n.Z)({key:e.title},e))))),l.createElement("hr",null),l.createElement("p",null,"Credits to ",l.createElement("a",{href:"https://kosiec.dev/",target:"_blank"},"Pawe\u0142 Kosiec")," for implementing his own React components for talks.")))}}}]); \ No newline at end of file diff --git a/assets/js/1426.d90fc9fa.js b/assets/js/1426.d90fc9fa.js new file mode 100644 index 0000000..cdeb00a --- /dev/null +++ b/assets/js/1426.d90fc9fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1426],{1426:(e,t,r)=>{function n(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;ipn});var a=function(){};function c(e){var t=e.item,r=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],l=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(s){u=!0,o=s}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(e,t)}(e,t)||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.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t=3||2===r&&n>=4||1===r&&n>=10);function i(t,r,n){if(o&&void 0!==n){var i=n[0].__autocomplete_algoliaCredentials,a={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(p(r),[{headers:a}]))}else e.apply(void 0,[t].concat(p(r)))}return{init:function(t,r){e("init",{appId:t,apiKey:r})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDsAfterSearch",g(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDs",g(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["clickedFilters"].concat(r))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDsAfterSearch",g(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDs",g(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["convertedFilters"].concat(r))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&t.reduce((function(e,t){var r=t.items,n=d(t,f);return[].concat(p(e),p(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=[],n=0;n0&&e.apply(void 0,["viewedFilters"].concat(r))}}}function S(e){var t=e.items.reduce((function(e,t){var r;return e[t.__autocomplete_indexName]=(null!==(r=e[t.__autocomplete_indexName])&&void 0!==r?r:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function j(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function w(e){return w="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},w(e)}function E(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return P(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return P(e,t)}(e)||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.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&C({onItemsChange:o,items:r,insights:f,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,r=e.onSelect,n=e.onActive;s("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:f}}),r((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&l({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Selected"},c({item:t,items:m.current}))]})})),n((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&u({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Active"},c({item:t,items:m.current}))]})}))},onStateChange:function(e){var t=e.state;p({state:t})},__autocomplete_pluginOptions:e}}function _(e){return _="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},_(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function q(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==_(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e,t,r){var n,o=t.initialState;return{getState:function(){return o},dispatch:function(n,i){var a=function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(V++),plugins:o,initialState:X({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(Q(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:a,onResolve:a};Object.keys(t).forEach((function(e){t[e].__default=!0}));var n=$($({},t),e);return Promise.resolve(n)})))}))}(e,r)}))).then((function(e){return L(e)})).then((function(e){return e.map((function(e){return X(X({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))},onResolve:function(r){e.onResolve(r),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:X({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}function te(e){return te="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},te(e)}function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ne(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ie,De,Ae,ke=null,xe=(Ie=-1,De=-1,Ae=void 0,function(e){var t=++Ie;return Promise.resolve(e).then((function(e){return Ae&&t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function He(e){return He="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},He(e)}var Fe=["props","refresh","store"],Ue=["inputElement","formElement","panelElement"],Be=["inputElement"],Ve=["inputElement","maxLength"],Ke=["sourceIndex"],$e=["sourceIndex"],Je=["item","source","sourceIndex"];function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e){var t=e.props,r=e.refresh,n=e.store,o=Ze(e,Fe),i=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,i=e.panelElement;function a(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,i].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return We({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},Ze(e,Ue))},getRootProps:function(e){return We({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return We({action:"",noValidate:!0,role:"search",onSubmit:function(i){var a;i.preventDefault(),t.onSubmit(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(i){var a;i.preventDefault(),t.onReset(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},Ze(e,Be))},getLabelProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,Ke);return We({htmlFor:"".concat(i(t.id,n),"-input"),id:"".concat(i(t.id,n),"-label")},o)},getInputProps:function(e){var i;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&Ce(We({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var l=e||{},u=(l.inputElement,l.maxLength),s=void 0===u?512:u,f=Ze(l,Ve),m=ge(n.getState()),p=function(e){return Boolean(e&&e.match(Me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),v=null!=m&&m.itemUrl&&!p?"go":"search";return We({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:s,type:"search",onChange:function(e){Ce(We({event:e,props:t,query:e.currentTarget.value.slice(0,s),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,i=Le(e,_e);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},c=function(){var e=ge(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,a=e.itemInputValue,c=e.itemUrl,l=e.source;l.onActive(qe({event:t,item:r,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?Ce(qe({event:t,props:r,query:o.getState().query,refresh:n,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),c(),setTimeout(a,0)})):(o.dispatch(t.key,{}),c(),a())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=ge(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});Ce(qe({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},i)).then((function(){m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i))}))}}}(We({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:a,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},f)},getPanelProps:function(e){return We({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,$e);return We({role:"listbox","aria-labelledby":"".concat(i(t.id,n),"-label"),id:"".concat(i(t.id,n),"-list")},o)},getItemProps:function(e){var a=e.item,c=e.source,l=e.sourceIndex,u=Ze(e,Je);return We({id:"".concat(i(t.id,l),"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=ge(n.getState());if(null!==n.getState().activeItemId&&t){var i=t.item,c=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(We({event:e,item:i,itemInputValue:c,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():Ce(We({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(We({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},u)}}}var Xe=[{segment:"autocomplete-core",version:"1.9.3"}];function Ye(e){return Ye="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},Ye(e)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t=r?null===n?null:0:o}function at(e){return at="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},at(e)}function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function lt(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){var t=e.translations,r=void 0===t?{}:t,n=At(e,Pt),o=r.noResultsText,i=void 0===o?"No results for":o,a=r.suggestedQueryText,c=void 0===a?"Try searching for":a,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return yt.createElement("div",{className:"DocSearch-NoResults"},yt.createElement("div",{className:"DocSearch-Screen-Icon"},yt.createElement(Et,null)),yt.createElement("p",{className:"DocSearch-Title"},i,' "',yt.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&yt.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},yt.createElement("p",{className:"DocSearch-Help"},c,":"),yt.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(It(e),[yt.createElement("li",{key:t},yt.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&yt.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),yt.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var xt=function(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ct(e){switch(e.type){case"lvl1":return yt.createElement(xt,null);case"content":return yt.createElement(_t,null);default:return yt.createElement(Nt,null)}}function Nt(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function _t(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Tt(){return yt.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},yt.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),yt.createElement("path",{d:"M8 17l-6-6 6-6"})))}var qt=["hit","attribute","tagName"];function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lt(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ft(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ut(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,i=Ht(e,qt);return(0,yt.createElement)(o,Lt(Lt({},i),{},{dangerouslySetInnerHTML:{__html:Ft(t,"_snippetResult.".concat(r,".value"))||Ft(t,r)}}))}function Bt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,i=[],a=!0,c=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(l){c=!0,o=l}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Vt(e,t)}(e,t)||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.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r|<\/mark>)/g,Wt=RegExp(zt.source);function Qt(e){var t,r,n=e;if(!n.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((n.__docsearch_parent?null===(t=n.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(r=e._highlightResult)||void 0===r||null===(r=r.hierarchy)||void 0===r?void 0:r.lvl0)||{}).value;return o&&Wt.test(o)?o.replace(zt,""):o}function Zt(){return Zt=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function or(e){var t=e.translations,r=void 0===t?{}:t,n=nr(e,tr),o=r.recentSearchesTitle,i=void 0===o?"Recent":o,a=r.noRecentSearchesText,c=void 0===a?"No recent searches":a,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,v=r.removeFavoriteSearchButtonTitle,d=void 0===v?"Remove this search from favorites":v;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:yt.createElement("div",{className:"DocSearch-StartScreen"},yt.createElement("p",{className:"DocSearch-Help"},c)):!1===n.hasCollections?null:yt.createElement("div",{className:"DocSearch-Dropdown-Container"},yt.createElement($t,rr({},n,{title:i,collection:n.state.collections[0],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Xt,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return yt.createElement(yt.Fragment,null,yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(Yt,null))),yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(er,null))))}})),yt.createElement($t,rr({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Yt,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},yt.createElement(er,null)))}})))}var ir=["translations"];function ar(){return ar=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var lr=yt.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=cr(e,ir);if("error"===n.state.status)return yt.createElement(wt,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?yt.createElement(kt,ar({},n,{translations:null==r?void 0:r.noResultsScreen})):yt.createElement(Gt,n):yt.createElement(or,ar({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function ur(){return yt.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},yt.createElement("g",{fill:"none",fillRule:"evenodd"},yt.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},yt.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),yt.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},yt.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var sr=r(830),fr=["translations"];function mr(){return mr=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vr(e){var t=e.translations,r=void 0===t?{}:t,n=pr(e,fr),o=r.resetButtonTitle,i=void 0===o?"Clear the query":o,a=r.resetButtonAriaLabel,c=void 0===a?"Clear the query":a,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return yt.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),yt.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),yt.createElement(yt.Fragment,null,yt.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},yt.createElement("label",mr({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),yt.createElement(sr.W,null)),yt.createElement("div",{className:"DocSearch-LoadingIndicator"},yt.createElement(ur,null)),yt.createElement("input",mr({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:ht}))),yt.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!n.state.query},yt.createElement(er,null))),yt.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var dr=["_highlightResult","_snippetResult"];function yr(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hr(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function br(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=hr(t),i=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,yr(t,dr)),a=i.findIndex((function(e){return e.objectID===r.objectID}));a>-1&&i.splice(a,1),i.unshift(r),i=i.slice(0,n),o.setItem(i)},remove:function(e){i=i.filter((function(t){return t.objectID!==e.objectID})),o.setItem(i)},getAll:function(){return i}}}function gr(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}"),i=e=>{n().setItem(t,JSON.stringify(e))};return{get:(t,r,n={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((([,e])=>void 0!==e.timestamp)));if(i(n),!t)return;const a=Object.fromEntries(Object.entries(n).filter((([,e])=>{const r=(new Date).getTime();return!(e.timestamp+tPromise.all([e?e.value:r(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||n.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const i=o();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:r},n().setItem(t,JSON.stringify(i)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Or(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Or({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Or({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Or({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Or({caches:t}).clear()))}}function Sr(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const i=JSON.stringify(r);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);const a=n(),c=o&&o.miss||(()=>Promise.resolve());return a.then((e=>c(e))).then((()=>a))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function jr(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function wr(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Er(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Pr="4.19.1",Ir={WithinQueryParameters:0,WithinHeaders:1};function Dr(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ar={Read:1,Write:2,Any:3},kr={Up:1,Down:2,Timeouted:3},xr=12e4;function Cr(e,t=kr.Up){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ar.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ar.Any}}const _r={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};function Tr(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Cr(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===kr.Up||Date.now()-e.lastUpdate>xr}(e))),n=e.filter((e=>function(e){return e.status===kr.Timeouted&&Date.now()-e.lastUpdate<=xr}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Nr(e))):t}}))}const qr=(e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e);function Rr(e,t,r,n){const o=[],i=function(e,t){if(e.method===_r.Get||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),a=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),c=r.method,l=r.method!==_r.Get?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Fr(o)};const p={data:i,headers:a,method:c,url:Mr(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},v=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},d={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=v(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",Ur(n)),e.hostsCache.set(m,Cr(m,r.isTimedOut?kr.Timeouted:kr.Down))]).then((()=>f(t,l)))},onFail(e){throw v(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Fr(o))}};return e.requester.send(p).then((e=>qr(e,d)))};return Tr(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Lr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Mr(e,t,r){const n=Hr(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Hr(e){return Object.keys(e).map((t=>{return Er("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Fr(e){return e.map((e=>Ur(e)))}function Ur(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const Br=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Ir.WithinHeaders?n:{},queryParameters:()=>e===Ir.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Ir.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,headers:s,queryParameters:u,hosts:l.map((e=>Nr(e))),read(e,t){const r=Dr(t,f.timeouts.read),n=()=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Write))),e,Dr(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ar.Read},{url:`${t}.algolia.net`,accept:Ar.Write}].concat(jr([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return wr(o,e.methods)},Vr=e=>(t,r)=>t.method===_r.Get?e.transporter.read(t,r):e.transporter.write(t,r),Kr=e=>(t,r={})=>wr({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),$r=e=>(t,r)=>{const n=t.map((e=>({...e,params:Hr(e.params||{})})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},Jr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...i}=t.params;return Kr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(n,o,{...r,...i})}))),zr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),Wr=e=>(t,r)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),Qr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),Zr={Debug:1,Info:2,Error:3};function Gr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let i;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===i&&(clearTimeout(o),i=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(i),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(i),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=Zr.Error,{debug:(e,t)=>(Zr.Debug>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Zr.Info>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Sr(),requestsCache:Sr({serializable:!1}),hostsCache:Or({caches:[gr({key:`${Pr}-${e}`}),Sr()]}),userAgent:Lr(Pr).add({segment:"Browser",version:"lite"}),authMode:Ir.WithinQueryParameters};var o;return Br({...n,...r,methods:{search:$r,searchForFacetValues:Jr,multipleQueries:$r,multipleSearchForFacetValues:Jr,customRequest:Vr,initIndex:e=>t=>Kr(e)(t,{methods:{search:Wr,searchForFacetValues:Qr,findAnswers:zr}})}})}Gr.version=Pr;const Xr=Gr;var Yr="3.5.2";function en(){}function tn(e){return e}function rn(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function nn(e,t,r){return e.reduce((function(e,n){var o=t(n);return e.hasOwnProperty(o)||(e[o]=[]),e[o].length<(r||5)&&e[o].push(n),e}),{})}var on=["footer","searchBox"];function an(){return an=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pn(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,a=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?en:l,s=e.transformItems,f=void 0===s?tn:s,m=e.hitComponent,p=void 0===m?St:m,v=e.resultsFooterComponent,d=void 0===v?function(){return null}:v,y=e.navigator,h=e.initialScrollY,b=void 0===h?0:h,g=e.transformSearchClient,O=void 0===g?tn:g,S=e.disableUserPersonalization,j=void 0!==S&&S,w=e.initialQuery,E=void 0===w?"":w,P=e.translations,I=void 0===P?{}:P,D=e.getMissingResultsUrl,A=e.insights,k=void 0!==A&&A,x=I.footer,C=I.searchBox,N=mn(I,on),_=sn(yt.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),T=_[0],q=_[1],R=yt.useRef(null),L=yt.useRef(null),M=yt.useRef(null),H=yt.useRef(null),F=yt.useRef(null),U=yt.useRef(10),B=yt.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,ht):"").current,V=yt.useRef(E||B).current,K=function(e,t,r){return yt.useMemo((function(){var n=Xr(e,t);return n.addAlgoliaAgent("docsearch",Yr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",Yr),r(n)}),[e,t,r])}(t,r,O),$=yt.useRef(br({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,J=yt.useRef(br({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===$.getAll().length?7:4})).current,z=yt.useCallback((function(e){if(!j){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===$.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&J.add(t)}}),[$,J,j]),W=yt.useCallback((function(e){if(T.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,r={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};T.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(r)}}),[T.context.algoliaInsightsPlugin]),Q=yt.useMemo((function(){return dt({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:V,context:{searchSuggestions:[]}},insights:k,navigator:y,onStateChange:function(e){q(e.state)},getSources:function(e){var o=e.query,i=e.state,l=e.setContext,s=e.setStatus;if(!o)return j?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return J.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return $.getAll()}}];var m=Boolean(k);return K.search([{query:o,indexName:n,params:ln({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(U.current),"hierarchy.lvl2:".concat(U.current),"hierarchy.lvl3:".concat(U.current),"hierarchy.lvl4:".concat(U.current),"hierarchy.lvl5:".concat(U.current),"hierarchy.lvl6:".concat(U.current),"content:".concat(U.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:m},a)}]).catch((function(e){throw"RetryError"===e.name&&s("error"),e})).then((function(e){var o=e.results[0],a=o.hits,s=o.nbHits,p=nn(a,(function(e){return Qt(e)}),c);i.context.searchSuggestions.length0&&(X(),F.current&&F.current.focus())}),[V,X]),yt.useEffect((function(){function e(){if(L.current){var e=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),yt.createElement("div",an({ref:R},G({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===T.status&&"DocSearch-Container--Stalled","error"===T.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),yt.createElement("div",{className:"DocSearch-Modal",ref:L},yt.createElement("header",{className:"DocSearch-SearchBar",ref:M},yt.createElement(vr,an({},Q,{state:T,autoFocus:0===V.length,inputRef:F,isFromSelection:Boolean(V)&&V===B,translations:C,onClose:u}))),yt.createElement("div",{className:"DocSearch-Dropdown",ref:H},yt.createElement(lr,an({},Q,{indexName:n,state:T,hitComponent:p,resultsFooterComponent:d,disableUserPersonalization:j,recentSearches:J,favoriteSearches:$,inputRef:F,translations:N,getMissingResultsUrl:D,onItemClick:function(e,t){W(e),z(e),rn(t)||u()}}))),yt.createElement("footer",{className:"DocSearch-Footer"},yt.createElement(Ot,{translations:x}))))}}}]); \ No newline at end of file diff --git a/assets/js/146d9b84.996dfbcb.js b/assets/js/146d9b84.996dfbcb.js new file mode 100644 index 0000000..bc4ba46 --- /dev/null +++ b/assets/js/146d9b84.996dfbcb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9300],{6671:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/admin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.9c4e865a.js b/assets/js/14eb3368.9c4e865a.js new file mode 100644 index 0000000..8fe08fa --- /dev/null +++ b/assets/js/14eb3368.9c4e865a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9817],{1310:(e,t,a)=>{a.d(t,{Z:()=>E});var n=a(7462),r=a(7294),i=a(6010),l=a(5281),s=a(3438),c=a(8596),o=a(9960),m=a(5999),d=a(4996);function u(e){return r.createElement("svg",(0,n.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const h={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function b(){const e=(0,d.Z)("/");return r.createElement("li",{className:"breadcrumbs__item"},r.createElement(o.Z,{"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},r.createElement(u,{className:h.breadcrumbHomeIcon})))}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(e){let{children:t,href:a,isLast:n}=e;const i="breadcrumbs__link";return n?r.createElement("span",{className:i,itemProp:"name"},t):a?r.createElement(o.Z,{className:i,href:a,itemProp:"item"},r.createElement("span",{itemProp:"name"},t)):r.createElement("span",{className:i},t)}function p(e){let{children:t,active:a,index:l,addMicrodata:s}=e;return r.createElement("li",(0,n.Z)({},s&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,i.Z)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,r.createElement("meta",{itemProp:"position",content:String(l+1)}))}function E(){const e=(0,s.s1)(),t=(0,c.Ns)();return e?r.createElement("nav",{className:(0,i.Z)(l.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},r.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&r.createElement(b,null),e.map(((t,a)=>{const n=a===e.length-1;return r.createElement(p,{key:a,active:n,index:a,addMicrodata:!!t.href},r.createElement(g,{href:t.href,isLast:n},t.label))})))):null}},4228:(e,t,a)=>{a.r(t),a.d(t,{default:()=>y});var n=a(7294),r=a(833),i=a(3438),l=a(4996),s=a(6010),c=a(9960),o=a(3919),m=a(5999);const d={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){let{href:t,children:a}=e;return n.createElement(c.Z,{href:t,className:(0,s.Z)("card padding--lg",d.cardContainer)},a)}function h(e){let{href:t,icon:a,title:r,description:i}=e;return n.createElement(u,{href:t},n.createElement("h2",{className:(0,s.Z)("text--truncate",d.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,s.Z)("text--truncate",d.cardDescription),title:i},i))}function b(e){let{item:t}=e;const a=(0,i.Wl)(t);return a?n.createElement(h,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const a=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.xz)(t.docId??void 0);return n.createElement(h,{href:t.href,icon:a,title:t.label,description:t.description??r?.description})}function g(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(v,{item:t});case"category":return n.createElement(b,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function p(e){let{className:t}=e;const a=(0,i.jA)();return n.createElement(E,{items:a.items,className:t})}function E(e){const{items:t,className:a}=e;if(!t)return n.createElement(p,e);const r=(0,i.MN)(t);return n.createElement("section",{className:(0,s.Z)("row",a)},r.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(g,{item:e})))))}var f=a(49),N=a(3120),Z=a(4364),k=a(1310),L=a(7955);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function T(e){let{categoryGeneratedIndex:t}=e;return n.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,l.Z)(t.image)})}function x(e){let{categoryGeneratedIndex:t}=e;const a=(0,i.jA)();return n.createElement("div",{className:_.generatedIndexPage},n.createElement(N.Z,null),n.createElement(k.Z,null),n.createElement(Z.Z,null),n.createElement("header",null,n.createElement(L.Z,{as:"h1",className:_.title},t.title),t.description&&n.createElement("p",null,t.description)),n.createElement("article",{className:"margin-top--lg"},n.createElement(E,{items:a.items,className:_.list})),n.createElement("footer",{className:"margin-top--lg"},n.createElement(f.Z,{previous:t.navigation.previous,next:t.navigation.next})))}function y(e){return n.createElement(n.Fragment,null,n.createElement(T,e),n.createElement(x,e))}},49:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7462),r=a(7294),i=a(5999),l=a(2244);function s(e){const{previous:t,next:a}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&r.createElement(l.Z,(0,n.Z)({},t,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&r.createElement(l.Z,(0,n.Z)({},a,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(7294),r=a(6010),i=a(5999),l=a(5281),s=a(4477);function c(e){let{className:t}=e;const a=(0,s.E)();return a.badge?n.createElement("span",{className:(0,r.Z)(t,l.k.docs.docVersionBadge,"badge badge--secondary")},n.createElement(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},3120:(e,t,a)=>{a.d(t,{Z:()=>g});var n=a(7294),r=a(6010),i=a(2263),l=a(9960),s=a(5999),c=a(143),o=a(5281),m=a(373),d=a(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function h(e){const t=u[e.versionMetadata.banner];return n.createElement(t,e)}function b(e){let{versionLabel:t,to:a,onClick:r}=e;return n.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(l.Z,{to:a,onClick:r},n.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function v(e){let{className:t,versionMetadata:a}=e;const{siteConfig:{title:l}}=(0,i.Z)(),{pluginId:s}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:v}=(0,c.Jo)(s),g=u??(p=v).docs.find((e=>e.id===p.mainDocId));var p;return n.createElement("div",{className:(0,r.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(h,{siteTitle:l,versionMetadata:a})),n.createElement("div",{className:"margin-top--md"},n.createElement(b,{versionLabel:v.label,to:g.path,onClick:()=>d(v.name)})))}function g(e){let{className:t}=e;const a=(0,d.E)();return a.banner?n.createElement(v,{className:t,versionMetadata:a}):null}},7955:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(7462),r=a(7294),i=a(6010),l=a(5999),s=a(6668),c=a(9960);const o={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function m(e){let{as:t,id:a,...m}=e;const{navbar:{hideOnScroll:d}}=(0,s.L)();if("h1"===t||!a)return r.createElement(t,(0,n.Z)({},m,{id:void 0}));const u=(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof m.children?m.children:a});return r.createElement(t,(0,n.Z)({},m,{className:(0,i.Z)("anchor",d?o.anchorWithHideOnScrollNavbar:o.anchorWithStickyNavbar,m.className),id:a}),m.children,r.createElement(c.Z,{className:"hash-link",to:`#${a}`,"aria-label":u,title:u},"\u200b"))}},2244:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(7294),r=a(6010),i=a(9960);function l(e){const{permalink:t,title:a,subLabel:l,isNext:s}=e;return n.createElement(i.Z,{className:(0,r.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&n.createElement("div",{className:"pagination-nav__sublabel"},l),n.createElement("div",{className:"pagination-nav__label"},a))}}}]); \ No newline at end of file diff --git a/assets/js/17896441.a160e7e2.js b/assets/js/17896441.a160e7e2.js new file mode 100644 index 0000000..f526814 --- /dev/null +++ b/assets/js/17896441.a160e7e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7918],{1310:(e,t,n)=>{n.d(t,{Z:()=>E});var a=n(7462),l=n(7294),o=n(6010),r=n(5281),s=n(3438),c=n(8596),i=n(9960),d=n(5999),m=n(4996);function u(e){return l.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),l.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const v={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function b(){const e=(0,m.Z)("/");return l.createElement("li",{className:"breadcrumbs__item"},l.createElement(i.Z,{"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},l.createElement(u,{className:v.breadcrumbHomeIcon})))}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function h(e){let{children:t,href:n,isLast:a}=e;const o="breadcrumbs__link";return a?l.createElement("span",{className:o,itemProp:"name"},t):n?l.createElement(i.Z,{className:o,href:n,itemProp:"item"},l.createElement("span",{itemProp:"name"},t)):l.createElement("span",{className:o},t)}function f(e){let{children:t,active:n,index:r,addMicrodata:s}=e;return l.createElement("li",(0,a.Z)({},s&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,o.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,l.createElement("meta",{itemProp:"position",content:String(r+1)}))}function E(){const e=(0,s.s1)(),t=(0,c.Ns)();return e?l.createElement("nav",{className:(0,o.Z)(r.k.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},l.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&l.createElement(b,null),e.map(((t,n)=>{const a=n===e.length-1;return l.createElement(f,{key:n,active:a,index:n,addMicrodata:!!t.href},l.createElement(h,{href:t.href,isLast:a},t.label))})))):null}},5154:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});var a=n(7294),l=n(833),o=n(902);const r=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(6010),m=n(7524),u=n(49);function v(){const{metadata:e}=c();return a.createElement(u.Z,{previous:e.previous,next:e.next})}var b=n(3120),p=n(4364),h=n(5281),f=n(5999);function E(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(f.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function g(e){let{lastUpdatedBy:t}=e;return a.createElement(f.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function L(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:h.k.common.lastUpdated},a.createElement(f.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(E,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(g,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var C=n(4881),N=n(1526);const Z={lastUpdated:"lastUpdated_vwxv"};function k(e){return a.createElement("div",{className:(0,d.Z)(h.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(N.Z,e)))}function _(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:o}=e;return a.createElement("div",{className:(0,d.Z)(h.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(C.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",Z.lastUpdated)},(n||l)&&a.createElement(L,{lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:l})))}function x(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:r}=e,s=r.length>0,i=!!(t||n||o);return s||i?a.createElement("footer",{className:(0,d.Z)(h.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(k,{tags:r}),i&&a.createElement(_,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var T=n(6043),H=n(3743),U=n(7462);const y={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function A(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,U.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",y.tocCollapsibleButton,!t&&y.tocCollapsibleButtonExpanded,n.className)}),a.createElement(f.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const w={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function M(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:o}=e;const{collapsed:r,toggleCollapsed:s}=(0,T.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(w.tocCollapsible,!r&&w.tocCollapsibleExpanded,n)},a.createElement(A,{collapsed:r,onClick:s}),a.createElement(T.z,{lazy:!0,className:w.tocCollapsibleContent,collapsed:r},a.createElement(H.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:o})))}const I={tocMobile:"tocMobile_ITEo"};function B(){const{toc:e,frontMatter:t}=c();return a.createElement(M,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(h.k.docs.docTocMobile,I.tocMobile)})}var O=n(9407);function S(){const{toc:e,frontMatter:t}=c();return a.createElement(O.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:h.k.docs.docTocDesktop})}var V=n(7955),P=n(1098);function D(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(h.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(V.Z,{as:"h1"},n)),a.createElement(P.Z,null,t))}var R=n(1310);const F={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function z(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(B,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(S,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&F.docItemCol)},a.createElement(b.Z,null),a.createElement("div",{className:F.docItemContainer},a.createElement("article",null,a.createElement(R.Z,null),a.createElement(p.Z,null),n.mobile,a.createElement(D,null,t),a.createElement(x,null)),a.createElement(v,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function j(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(z,null,a.createElement(n,null))))}},49:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(7462),l=n(7294),o=n(5999),r=n(2244);function s(e){const{previous:t,next:n}=e;return l.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,o.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&l.createElement(r.Z,(0,a.Z)({},t,{subLabel:l.createElement(o.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&l.createElement(r.Z,(0,a.Z)({},n,{subLabel:l.createElement(o.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(7294),l=n(6010),o=n(5999),r=n(5281),s=n(4477);function c(e){let{className:t}=e;const n=(0,s.E)();return n.badge?a.createElement("span",{className:(0,l.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(o.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},3120:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(7294),l=n(6010),o=n(2263),r=n(9960),s=n(5999),c=n(143),i=n(5281),d=n(373),m=n(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function b(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(r.Z,{to:n,onClick:l},a.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function p(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:r}}=(0,o.Z)(),{pluginId:s}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:p}=(0,c.Jo)(s),h=u??(f=p).docs.find((e=>e.id===f.mainDocId));var f;return a.createElement("div",{className:(0,l.Z)(t,i.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(v,{siteTitle:r,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(b,{versionLabel:p.label,to:h.path,onClick:()=>m(p.name)})))}function h(e){let{className:t}=e;const n=(0,m.E)();return n.banner?a.createElement(p,{className:t,versionMetadata:n}):null}},9407:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7462),l=n(7294),o=n(6010),r=n(3743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(7462),l=n(7294),o=n(6668);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,o.L)(),h=d??p.tableOfContents.minHeadingLevel,f=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:f});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:f}}),[c,i,h,f])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}}}]); \ No newline at end of file diff --git a/assets/js/18f481e4.35406774.js b/assets/js/18f481e4.35406774.js new file mode 100644 index 0000000..bbcf10c --- /dev/null +++ b/assets/js/18f481e4.35406774.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6057],{1738:i=>{i.exports=JSON.parse('{"label":"java","permalink":"/ib002/tags/java","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/19d7c045.18dfd0ba.js b/assets/js/19d7c045.18dfd0ba.js new file mode 100644 index 0000000..99d4049 --- /dev/null +++ b/assets/js/19d7c045.18dfd0ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4637],{7772:e=>{e.exports=JSON.parse('{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.48f1640b.js b/assets/js/1a4e3797.48f1640b.js new file mode 100644 index 0000000..7eb6821 --- /dev/null +++ b/assets/js/1a4e3797.48f1640b.js @@ -0,0 +1,2 @@ +/*! For license information please see 1a4e3797.48f1640b.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7920],{7331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(o=a.slice()).length,u=0;u0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(9374),i=r(7775),a=r(3076);function s(e,t,r){return new n(e,t,r)}s.version=r(4336),s.AlgoliaSearchHelper=n,s.SearchParameters=i,s.SearchResults=a,e.exports=s},8078:(e,t,r)=>{"use strict";var n=r(7331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(4853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},2437:(e,t,r)=>{"use strict";var n=r(3336),i=r(116),a=r(9803),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return a(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},7775:(e,t,r)=>{"use strict";var n=r(3336),i=r(7888),a=r(2686),s=r(185),c=r(116),u=r(9803),o=r(8023),h=r(6801),f=r(2437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return s({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=o(r);if(this.isNumericRefined(e,t,n))return this;var i=s({},this.numericRefinements);return i[e]=s({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,o(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var a,s,c=o(r),u=void 0!==(a=this.numericRefinements[e][t],s=c,i(a,(function(e){return l(e,s)})));return n&&u},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=a(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,a){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m{"use strict";var n=r(4587),i=r(3336),a=r(4039),s=r(7888),c=r(9725),u=r(2293),o=r(185),h=r(2148),f=a.escapeFacetValue,l=a.unescapeFacetValue,m=r(210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var u=this;Object.keys(a).forEach((function(e){u[e]=a[e]})),Object.keys(r||{}).forEach((function(e){u[e]=r[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var h=e.getRefinedDisjunctiveFacets(),f=d(e.facets),v=d(e.disjunctiveFacets),g=1,y=a.facets||{};Object.keys(y).forEach((function(t){var r,n,i=y[t],o=(r=e.hierarchicalFacets,n=t,s(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(o){var h=o.attributes.indexOf(t),l=c(e.hierarchicalFacets,(function(e){return e.name===o.name}));u.hierarchicalFacets[l][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=v[t],u.disjunctiveFacets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(u.disjunctiveFacets[m],a.facets_stats,t)),g&&(m=f[t],u.facets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(u.facets[m],a.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),h.forEach((function(r){var n=t[g],s=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(s).forEach((function(t){var r,f=s[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(u.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;u.hierarchicalFacets[r][m].data=o({},u.hierarchicalFacets[r][m].data,f)}else{r=v[t];var d=a.facets&&a.facets[t]||{};u.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(u.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!u.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(u.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(g).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var o=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(u.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0){var m=s[0].split(a)[0];l[m]=u.hierarchicalFacets[h][f].data[m]}u.hierarchicalFacets[h][f].data=i(l,o,u.hierarchicalFacets[h][f].data)}})),g++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=f[t];u.facets[n]={name:t,data:y[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){u.facets[n]=u.facets[n]||{name:t},u.facets[n].data=u.facets[n].data||{},u.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=s(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=s(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var a=s(e.hierarchicalFacets,r);if(!a)return a;var c=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(c),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(c.rootPath)&&(o=o.replace(c.rootPath+u,""));var h=o.split(u);return h.unshift(t),y(a,h,0),a}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return R(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function F(e,t){var r=s(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var a=s(i,(function(e){return e.name===r})),c=a&&a.data&&a.data[n]?a.data[n]:0,u=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return s(this.facets,t)||s(this.disjunctiveFacets,t)||s(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,a=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),s=this;if(Array.isArray(r))n=[e];else n=s._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(a.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(s,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var a,s=t.sortRemainingBy;return"hidden"===s?r:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,a[0],a[1])))}(e,r)}if(Array.isArray(a.sortBy)){var n=u(a.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof a.sortBy)return function(e,t){return t.sort(e)}(a.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),c=r.split(a),u=s(n,(function(e){return e.name===t})),o=c.reduce((function(e,t){var r=e&&s(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},9374:(e,t,r)=>{"use strict";var n=r(7331),i=r(8078),a=r(4039).escapeFacetValue,s=r(4853),c=r(185),u=r(116),o=r(9803),h=r(6394),f=r(7775),l=r(3076),m=r(4336);function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.setClient(e);var n=r||{};n.index=t,this.state=f.make(n),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}s(d,n),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return h._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=h._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new l(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new l(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:o(h._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(n.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,s="function"==typeof this.client.initIndex;if(!i&&!s&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=h.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,l=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):s?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=a(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:f.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new f(e),this},d.prototype.hasRefinements=function(e){return!!u(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=h._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?h._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),s=this._queryId++;if(this._currentNbQueries++,!a.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,s));try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(c){this.emit("error",{error:c})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new i(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},4587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},3336:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},4039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},4853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},2686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},9803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},2148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},8023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},6394:(e,t,r)=>{"use strict";var n=r(185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var u=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)).sort(),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),s.length>0&&(u.numericFilters=s),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),u=a._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),s.length>0&&(o.facetFilters=s),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).sort().forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).sort().forEach((function(e){(a[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).sort().forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(u=f.split(h).length-1,a=f):(u=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=o.attributes[u]}else u=a.split(h).length-1,s=o.attributes[u];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),u))}};e.exports=a},6801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},4336:e=>{"use strict";e.exports="3.14.0"},290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function j(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(s)};var m={data:c,headers:u,method:o,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,u=n(a,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(s,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},k=1,D=2,q=3;function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return k>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return D>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.19.1","-").concat(e)}),u()]}),userAgent:_("4.19.1").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:A,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:Q}})}}}}))}return V.version="4.19.1",V}()},8824:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(7294),i=r(2263);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const i=r.select(t),a=r.pluralForms.indexOf(i);return n[Math.min(a,n.length-1)]}(r,t,e)}}},9172:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>x});var n=r(7294),i=r(6010),a=r(8131),s=r.n(a),c=r(290),u=r.n(c),o=r(412),h=r(5742),f=r(9960),l=r(143),m=r(8824),d=r(6177),p=r(902),v=r(833),g=r(2128),y=r(5999),R=r(2263),F=r(6278),b=r(239),P=r(7452);const j={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};function _(e){let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:(0,i.Z)("col","col--3","padding-left--none",j.searchVersionColumn)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:j.searchVersionInput},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))}function E(){const{i18n:{currentLocale:e}}=(0,R.Z)(),{algolia:{appId:t,apiKey:r,indexName:a}}=(0,F.L)(),c=(0,b.l)(),v=function(){const{selectMessage:e}=(0,m.c)();return t=>e(t,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),E=function(){const e=(0,l._r)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[x,O]=(0,d.K)(),w={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[N,A]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return w;case"loading":return{...e,loading:!0};case"update":return x!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),w),H=u()(t,r),S=s()(H,a,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});S.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!Array.isArray(r))return void A({type:"reset"});const s=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>s(r[e].value)));return{title:i.pop(),url:c(t),summary:n.content?`${s(n.content.value)}...`:"",breadcrumbs:i}}));A({type:"update",value:{items:u,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[T,Q]=(0,n.useState)(null),C=(0,n.useRef)(0),I=(0,n.useRef)(o.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&C.current>r&&A({type:"advance"}),C.current=r}),{threshold:1})),k=()=>x?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:x}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),D=(0,p.zX)((function(t){void 0===t&&(t=0),S.addDisjunctiveFacetRefinement("docusaurus_tag","default"),S.addDisjunctiveFacetRefinement("language",e),Object.entries(E.searchVersions).forEach((e=>{let[t,r]=e;S.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),S.setQuery(x).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!T)return;const e=I.current;return e?(e.observe(T),()=>e.unobserve(T)):()=>!0}),[T]),(0,n.useEffect)((()=>{A({type:"reset"}),x&&(A({type:"loading"}),setTimeout((()=>{D()}),300))}),[x,E.searchVersions,D]),(0,n.useEffect)((()=>{N.lastPage&&0!==N.lastPage&&D(N.lastPage)}),[D,N.lastPage]),n.createElement(P.Z,null,n.createElement(h.Z,null,n.createElement("title",null,(0,g.p)(k())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,k()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:(0,i.Z)("col",j.searchQueryColumn,{"col--9":E.versioningEnabled,"col--12":!E.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:j.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>O(e.target.value),value:x,autoComplete:"off",autoFocus:!0})),E.versioningEnabled&&n.createElement(_,{docsSearchVersionsHelpers:E})),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,i.Z)("col","col--8",j.searchResultsColumn)},!!N.totalResults&&v(N.totalResults)),n.createElement("div",{className:(0,i.Z)("col","col--4","text--right",j.searchLogoColumn)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:j.algoliaLogo},n.createElement("g",{fill:"none"},n.createElement("path",{className:j.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),N.items.length>0?n.createElement("main",null,N.items.map(((e,t)=>{let{title:r,url:a,summary:s,breadcrumbs:c}=e;return n.createElement("article",{key:t,className:j.searchResultItem},n.createElement("h2",{className:j.searchResultItemHeading},n.createElement(f.Z,{to:a,dangerouslySetInnerHTML:{__html:r}})),c.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:(0,i.Z)("breadcrumbs",j.searchResultItemPath)},c.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),s&&n.createElement("p",{className:j.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}}))}))):[x&&!N.loading&&n.createElement("p",{key:"no-results"},n.createElement(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!N.loading&&n.createElement("div",{key:"spinner",className:j.loadingSpinner})],N.hasMore&&n.createElement("div",{className:j.loader,ref:Q},n.createElement(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}function x(){return n.createElement(v.FG,{className:"search-page-wrapper"},n.createElement(E,null))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.48f1640b.js.LICENSE.txt b/assets/js/1a4e3797.48f1640b.js.LICENSE.txt new file mode 100644 index 0000000..f167ba6 --- /dev/null +++ b/assets/js/1a4e3797.48f1640b.js.LICENSE.txt @@ -0,0 +1 @@ +/*! algoliasearch-lite.umd.js | 4.19.1 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1be78505.65bfdbb1.js b/assets/js/1be78505.65bfdbb1.js new file mode 100644 index 0000000..0a66ca9 --- /dev/null +++ b/assets/js/1be78505.65bfdbb1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9514,7515],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ge});var a=n(7294),l=n(6010),o=n(833),r=n(5281),c=n(3320),i=n(3438),s=n(4477),d=n(1116),m=n(7452),u=n(5999),b=n(2466),p=n(5936);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(1442),g=n(6550),k=n(7524),v=n(6668),_=n(1327),C=n(7462);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(9689),Z=n(902);const x=Symbol("EmptyContext"),B=a.createContext(x);function y(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(B.Provider,{value:o},t)}var w=n(6043),L=n(8596),A=n(9960),M=n(2389);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,v.L)(),f=function(e){const t=(0,M.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,o),k=(0,L.Mg)(h,o),{collapsed:_,setCollapsed:S}=(0,w.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===x)throw new Z.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!_),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,Z.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:_,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":k})},a.createElement(A.Z,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":k?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(w.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(j,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:o,level:c+1})))}var P=n(3919),W=n(9471);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,o),E=(0,P.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function z(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function U(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(z,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(y,null,t.map(((e,t)=>a.createElement(U,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),G={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function Y(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",G.menu,c&&G.menuWithAnnouncementBar,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,v.L)();return a.createElement("div",{className:(0,l.Z)(q,c&&O,r&&X)},c&&a.createElement(_.Z,{tabIndex:-1,className:J}),a.createElement(Y,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:o}))}const $=a.memo(Q);var ee=n(3102),te=n(3163);const ne=e=>{let{sidebar:t,path:n}=e;const o=(0,te.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const le=a.memo(ae);function oe(e){const t=(0,k.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),l&&a.createElement(le,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,f.n)()&&s(!0),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,l.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(oe,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(me.docMainContainer,(t||!o)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(ue,{hiddenSidebarContainer:l},t)))}var he=n(4972),Ee=n(197);function fe(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function ge(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(fe,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),l=n(5999),o=n(833),r=n(7452);function c(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/1bebd4ed.a838562f.js b/assets/js/1bebd4ed.a838562f.js new file mode 100644 index 0000000..9839d24 --- /dev/null +++ b/assets/js/1bebd4ed.a838562f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[404],{9623:e=>{e.exports=JSON.parse('{"pluginId":"pb071","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"autogeneratedBar":[{"type":"link","label":"Introduction","href":"/pb071/","docId":"pb071-intro"},{"type":"category","label":"Bonuses","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"3rd seminar","href":"/pb071/bonuses/seminar-03","docId":"bonuses/seminar-03"},{"type":"link","label":"4th seminar","href":"/pb071/bonuses/seminar-04","docId":"bonuses/seminar-04"},{"type":"link","label":"5th and 6th seminar","href":"/pb071/bonuses/seminar-05-06","docId":"bonuses/seminar-05-06"},{"type":"link","label":"8th seminar","href":"/pb071/bonuses/seminar-08","docId":"bonuses/seminar-08"},{"type":"link","label":"10th seminar","href":"/pb071/bonuses/seminar-10","docId":"bonuses/seminar-10"}],"href":"/pb071/category/bonuses"},{"type":"category","label":"Practice Exams","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Practice exam B","href":"/pb071/pexam/garbage_collect","docId":"pexam/b-garbage_collect"},{"type":"link","label":"Practice exam C","href":"/pb071/pexam/cams","docId":"pexam/c-cams"}],"href":"/pb071/category/practice-exams"},{"type":"link","label":"Submitting merge requests","href":"/pb071/mr","docId":"mr"}]},"docs":{"bonuses/seminar-03":{"id":"bonuses/seminar-03","title":"3rd seminar","description":"Select sort implementation on arrays.\\n","sidebar":"autogeneratedBar"},"bonuses/seminar-04":{"id":"bonuses/seminar-04","title":"4th seminar","description":"Robot in a maze.\\n","sidebar":"autogeneratedBar"},"bonuses/seminar-05-06":{"id":"bonuses/seminar-05-06","title":"5th and 6th seminar","description":"200IQ encryption.\\n","sidebar":"autogeneratedBar"},"bonuses/seminar-08":{"id":"bonuses/seminar-08","title":"8th seminar","description":"Manipulating with files only char-by-char and a magic tree.\\n","sidebar":"autogeneratedBar"},"bonuses/seminar-10":{"id":"bonuses/seminar-10","title":"10th seminar","description":"Finding bugs in a hangman.\\n","sidebar":"autogeneratedBar"},"mr":{"id":"mr","title":"Submitting merge requests","description":"This tutorial aims to show you how to follow basic git workflow and submit changes","sidebar":"autogeneratedBar"},"pb071-intro":{"id":"pb071-intro","title":"Introduction","description":"","sidebar":"autogeneratedBar"},"pexam/b-garbage_collect":{"id":"pexam/b-garbage_collect","title":"Practice exam B","description":"Garbage everywhere\u2026\\n","sidebar":"autogeneratedBar"},"pexam/c-cams":{"id":"pexam/c-cams","title":"Practice exam C","description":"Stalking cars\u2026\\n","sidebar":"autogeneratedBar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1e2009d3.7e268ae7.js b/assets/js/1e2009d3.7e268ae7.js new file mode 100644 index 0000000..bd0120c --- /dev/null +++ b/assets/js/1e2009d3.7e268ae7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3906],{3905:(e,a,t)=>{t.d(a,{Zo:()=>m,kt:()=>u});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function l(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=n.createContext({}),p=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},m=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=p(t),k=r,u=c["".concat(s,".").concat(k)]||c[k]||d[k]||l;return t?n.createElement(u,o(o({ref:a},m),{},{components:t})):n.createElement(u,o({ref:a},m))}));function u(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=k;var i={};for(var s in a)hasOwnProperty.call(a,s)&&(i[s]=a[s]);i.originalType=e,i[c]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=t(7462),r=(t(7294),t(3905));const l={id:"applications",title:"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f",description:"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\n",tags:["balanced trees","red-black trees","applications"],last_update:{date:new Date("2022-04-05T00:00:00.000Z")}},o=void 0,i={unversionedId:"rb-trees/applications",id:"rb-trees/applications",title:"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f",description:"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\n",source:"@site/ib002/08-rb-trees/2022-04-05-applications.md",sourceDirName:"08-rb-trees",slug:"/rb-trees/applications",permalink:"/ib002/rb-trees/applications",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/08-rb-trees/2022-04-05-applications.md",tags:[{label:"balanced trees",permalink:"/ib002/tags/balanced-trees"},{label:"red-black trees",permalink:"/ib002/tags/red-black-trees"},{label:"applications",permalink:"/ib002/tags/applications"}],version:"current",lastUpdatedAt:1649116800,formattedLastUpdatedAt:"Apr 5, 2022",frontMatter:{id:"applications",title:"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f",description:"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\n",tags:["balanced trees","red-black trees","applications"],last_update:{date:"2022-04-05T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Red-Black Trees",permalink:"/ib002/category/red-black-trees"},next:{title:"On the rules of the red-black tree",permalink:"/ib002/rb-trees/rules"}},s={},p=[{value:"Pou\u017eit\xed",id:"pou\u017eit\xed",level:2},{value:"R\u016fzn\xe9 implementace",id:"r\u016fzn\xe9-implementace",level:2},{value:"C++",id:"c",level:3},{value:"clang",id:"clang",level:4},{value:"gcc",id:"gcc",level:4},{value:"Java",id:"java",level:3},{value:"C#",id:"c-1",level:3},{value:"Vztah mezi mno\u017einou a mapou",id:"vztah-mezi-mno\u017einou-a-mapou",level:2}],m={toc:p},c="wrapper";function d(e){let{components:a,...t}=e;return(0,r.kt)(c,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"pou\u017eit\xed"},"Pou\u017eit\xed"),(0,r.kt)("p",null,"\u010cerveno-\u010dern\xe9 stromy jsou celkem obl\xedben\xe9 pro implementaci ADT mno\u017einy nebo slovn\xedku za p\u0159edpokladu, \u017ee nad vkl\xe1dan\xfdmi kl\xed\u010di existuje uspo\u0159\xe1d\xe1n\xed. Jazyky n\xed\u017ee implementuj\xed dan\xe9 datov\xe9 struktury v 2 variant\xe1ch a to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"se\u0159azen\xe9: pou\u017e\xedvaj\xed na pozad\xed pr\xe1v\u011b \u010derveno-\u010dern\xfd strom"),(0,r.kt)("li",{parentName:"ul"},"nese\u0159azen\xe9: pou\u017e\xedvaj\xed na pozad\xed ha\u0161ovac\xed tabulku")),(0,r.kt)("p",null,"Pro srovn\xe1n\xed, jak jsme si \u0159\xedkali na cvi\u010den\xed, \u010derveno-\u010dern\xfd strom m\xe1 operace hled\xe1n\xed, vkl\xe1d\xe1n\xed a maz\xe1n\xed v \u010dasov\xe9 slo\u017eitosti ",(0,r.kt)("span",{parentName:"p",className:"math math-inline"},(0,r.kt)("span",{parentName:"span",className:"katex"},(0,r.kt)("span",{parentName:"span",className:"katex-mathml"},(0,r.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,r.kt)("semantics",{parentName:"math"},(0,r.kt)("mrow",{parentName:"semantics"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,r.kt)("mi",{parentName:"mrow"},"log"),(0,r.kt)("mo",{parentName:"mrow"},"\u2061"),(0,r.kt)("mi",{parentName:"mrow"},"n"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,r.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(\\log n)")))),(0,r.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,r.kt)("span",{parentName:"span",className:"mopen"},"("),(0,r.kt)("span",{parentName:"span",className:"mop"},"lo",(0,r.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,r.kt)("span",{parentName:"span",className:"mclose"},")"))))),". Na druhou stranu ha\u0161ovac\xed tabulka m\xe1 ide\xe1ln\u011b konstantn\xed \u010dasovou slo\u017eitost, ale v nejhor\u0161\xedm p\u0159\xedpad\u011b (detaily na posledn\xedm cvi\u010den\xed v semestru) je to bohu\u017eel ",(0,r.kt)("span",{parentName:"p",className:"math math-inline"},(0,r.kt)("span",{parentName:"span",className:"katex"},(0,r.kt)("span",{parentName:"span",className:"katex-mathml"},(0,r.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,r.kt)("semantics",{parentName:"math"},(0,r.kt)("mrow",{parentName:"semantics"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,r.kt)("mi",{parentName:"mrow"},"n"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,r.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n)")))),(0,r.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,r.kt)("span",{parentName:"span",className:"mopen"},"("),(0,r.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,r.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,r.kt)("p",null,"V\xfd\u0161e jsme si uk\xe1zali n\u011bjak\xe9 p\u0159edpoklady nutn\xe9 pro ha\u0161ovac\xed tabulku i \u010derveno-\u010dern\xfd strom. Co je tedy lep\u0161\xed?"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u010derveno-\u010dern\xfd strom n\xe1m poskytuje ",(0,r.kt)("em",{parentName:"li"},"stabiln\xed \u010dasovou slo\u017eitost"),", ale za cenu po\u017eadavku ",(0,r.kt)("em",{parentName:"li"},"uspo\u0159\xe1d\xe1n\xed")," nad prvky"),(0,r.kt)("li",{parentName:"ul"},"ha\u0161ovac\xed tabulka n\xe1m poskytuje ",(0,r.kt)("em",{parentName:"li"},"pomyslnou perfektn\xed \u010dasovou slo\u017eitost"))),(0,r.kt)("h2",{id:"r\u016fzn\xe9-implementace"},"R\u016fzn\xe9 implementace"),(0,r.kt)("p",null,"Pro uk\xe1zku pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v implementac\xedch standardn\xedch knihoven\njsme vybrali n\u011bkolik jazyk\u016f."),(0,r.kt)("p",null,"Pokud V\xe1s zaj\xedmaj\xed r\u016fzn\xe9 implementace, tak bychom doporu\u010dili \u201eprohrab\xe1vat\u201c se p\u0159es n\u011b v n\xe1sleduj\xedc\xedm po\u0159ad\xed: ",(0,r.kt)("inlineCode",{parentName:"p"},"C# \u2192 Java \u2192 C++"),". D\u016fvod pro zvolen\xe9 po\u0159ad\xed vych\xe1z\xed z toho, \u017ee C# implementace je pom\u011brn\u011b \u010diteln\xe1 a obsahuje mno\u017estv\xed vysv\u011btluj\xedc\xedch koment\xe1\u0159\u016f. Implementace v Jav\u011b je stejn\u011b \u010diteln\xe1, a\u010dkoli ji\u017e s minimem koment\xe1\u0159\u016f, kter\xe9 se maxim\xe1ln\u011b odkazuj\xed na CLRS. C++ implementace je \u201ezna\u010dn\u011b pozna\u010den\xe1\u201c podtr\u017e\xedtky ;)"),(0,r.kt)("h3",{id:"c"},"C++"),(0,r.kt)("p",null,"V C++ si m\u016f\u017eeme vybrat mezi 2 r\u016fzn\xfdmi implementacemi (",(0,r.kt)("inlineCode",{parentName:"p"},"clang")," nebo ",(0,r.kt)("inlineCode",{parentName:"p"},"gcc"),")."),(0,r.kt)("h4",{id:"clang"},"clang"),(0,r.kt)("p",null,"Hlavi\u010dkov\xe9 soubory, kter\xe9 pou\u017e\xedv\xe1me p\u0159i pr\xe1ci s mno\u017einou nebo slovn\xedkem (zaj\xedmav\xe9 sekce jsou vyta\u017eeny):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/llvm/llvm-project/blob/main/libcxx/include/map"},(0,r.kt)("inlineCode",{parentName:"a"},"map"))),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"template ,\n class _Allocator = allocator > >\nclass _LIBCPP_TEMPLATE_VIS map\n{\npublic:\n // types:\n typedef _Key key_type;\n typedef _Tp mapped_type;\n typedef pair value_type;\n\n// \u2026\n\nprivate:\n typedef __tree<__value_type, __vc, __allocator_type> __base;\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/llvm/llvm-project/blob/main/libcxx/include/set"},(0,r.kt)("inlineCode",{parentName:"a"},"set"))),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"template ,\n class _Allocator = allocator<_Key> >\nclass _LIBCPP_TEMPLATE_VIS set\n{\npublic:\n // types:\n typedef _Key key_type;\n typedef key_type value_type;\n\n// \u2026\n\nprivate:\n typedef __tree __base;\n")))),(0,r.kt)("p",null,"U obou hlavi\u010dek si m\u016f\u017eeme v\u0161imnout, \u017ee deklaruj\xed n\u011bjak\xfd soukrom\xfd typ ",(0,r.kt)("inlineCode",{parentName:"p"},"__base"),", kter\xfd je aliasem pro ",(0,r.kt)("inlineCode",{parentName:"p"},"__tree"),". Ten n\xe1s pak vede k hlavi\u010dce ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/llvm/llvm-project/blob/main/libcxx/include/__tree"},(0,r.kt)("inlineCode",{parentName:"a"},"__tree")),"."),(0,r.kt)("p",null,"V\xfd\u0148atek:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n\n_NodePtr algorithms\n\nThe algorithms taking _NodePtr are red black tree algorithms. Those\nalgorithms taking a parameter named __root should assume that __root\npoints to a proper red black tree (unless otherwise specified).\n\n\u2026\n\n*/\n")),(0,r.kt)("h4",{id:"gcc"},"gcc"),(0,r.kt)("p",null,"Pro ",(0,r.kt)("inlineCode",{parentName:"p"},"gcc")," je postup t\xe9m\u011b\u0159 stejn\xfd. Pro zm\u011bnu v hlavi\u010dk\xe1ch ",(0,r.kt)("inlineCode",{parentName:"p"},"map")," a ",(0,r.kt)("inlineCode",{parentName:"p"},"set")," nenajdeme nic, deklarace jsou a\u017e v hlavi\u010dkov\xfdch souborech:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/include/bits/stl_map.h;h=9c2b0745673431b4b396ba27982170478838137e;hb=HEAD"},(0,r.kt)("inlineCode",{parentName:"a"},"bits/stl_map.h"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/include/bits/stl_set.h;h=9c2b0745673431b4b396ba27982170478838137e;hb=HEAD"},(0,r.kt)("inlineCode",{parentName:"a"},"bits/stl_set.h")))),(0,r.kt)("p",null,"V obou se zase odkazuje na n\u011bjakou hlavi\u010dku ",(0,r.kt)("a",{parentName:"p",href:"https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/include/bits/stl_tree.h;h=a4de61417652a288e361a55fcc8bb7a9838c58a5;hb=HEAD"},(0,r.kt)("inlineCode",{parentName:"a"},"bits/stl_tree.h")),", zase v\xfd\u0148atek:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"}," // Red-black tree class, designed for use in implementing STL\n // associative containers (set, multiset, map, and multimap). The\n // insertion and deletion algorithms are based on those in Cormen,\n // Leiserson, and Rivest, Introduction to Algorithms (MIT Press,\n // 1990), except that\n //\n // (1) the header cell is maintained with links not only to the root\n // but also to the leftmost node of the tree, to enable constant\n // time begin(), and to the rightmost node of the tree, to enable\n // linear time performance when used with the generic set algorithms\n // (set_union, etc.)\n //\n // (2) when a node being deleted has two children its successor node\n // is relinked into its place, rather than copied, so that the only\n // iterators invalidated are those referring to the deleted node.\n\n enum _Rb_tree_color { _S_red = false, _S_black = true };\n\n struct _Rb_tree_node_base\n {\n typedef _Rb_tree_node_base* _Base_ptr;\n typedef const _Rb_tree_node_base* _Const_Base_ptr;\n\n _Rb_tree_color _M_color;\n _Base_ptr _M_parent;\n _Base_ptr _M_left;\n _Base_ptr _M_right;\n\n static _Base_ptr\n _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT\n {\n while (__x->_M_left != 0) __x = __x->_M_left;\n return __x;\n }\n\n static _Const_Base_ptr\n _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT\n {\n while (__x->_M_left != 0) __x = __x->_M_left;\n return __x;\n }\n\n static _Base_ptr\n _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT\n {\n while (__x->_M_right != 0) __x = __x->_M_right;\n return __x;\n }\n\n static _Const_Base_ptr\n _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT\n {\n while (__x->_M_right != 0) __x = __x->_M_right;\n return __x;\n }\n")),(0,r.kt)("p",null,"Tady u\u017e taky vid\xedme n\u011bjak\xfd k\xf3d pro nalezen\xed minima/maxima ve strom\u011b. Mimo jin\xe9\nje\u0161t\u011b existuje ",(0,r.kt)("a",{parentName:"p",href:"https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/src/c%2B%2B98/tree.cc;h=fd14991589a57c6aa847f57105a938cd2bf4df6f;hb=HEAD"},(0,r.kt)("inlineCode",{parentName:"a"},"tree.cc")),", kde je lze nal\xe9zt t\u0159eba funkci s n\xe1sleduj\xedc\xed hlavi\u010dkou:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"void\n_Rb_tree_insert_and_rebalance(const bool __insert_left,\n _Rb_tree_node_base* __x,\n _Rb_tree_node_base* __p,\n _Rb_tree_node_base& __header) throw ();\n")),(0,r.kt)("h3",{id:"java"},"Java"),(0,r.kt)("p",null,"V Jav\u011b jsou pro n\xe1s kl\xed\u010dov\xe9 implementace ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/TreeSet.java"},(0,r.kt)("inlineCode",{parentName:"a"},"TreeSet"))," a ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/TreeMap.java"},(0,r.kt)("inlineCode",{parentName:"a"},"TreeMap")),"."),(0,r.kt)("p",null,"V implementaci ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeSet")," si m\u016f\u017eete pov\u0161imnout:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public class TreeSet extends AbstractSet\n implements NavigableSet, Cloneable, java.io.Serializable\n{\n /**\n * The backing map.\n */\n private transient NavigableMap m;\n\n // Dummy value to associate with an Object in the backing Map\n private static final Object PRESENT = new Object();\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"TreeSet")," v Jav\u011b tedy pou\u017e\xedv\xe1 na pozad\xed ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeMap")," (co\u017e je vid\u011bt ve v\xfdchoz\xedm konstruktoru, kde se vol\xe1 konstruktor p\u0159eb\xedraj\xedc\xed ",(0,r.kt)("inlineCode",{parentName:"p"},"NavigableMap"),", a je mu p\u0159ed\xe1no ",(0,r.kt)("inlineCode",{parentName:"p"},"new TreeMap<>()"),")."),(0,r.kt)("p",null,"Co se t\xfd\u010de ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeMap"),", tak hned ze za\u010d\xe1tku definice ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeMap")," je vid\u011bt:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public class TreeMap\n extends AbstractMap\n implements NavigableMap, Cloneable, java.io.Serializable\n{\n /**\n * The comparator used to maintain order in this tree map, or\n * null if it uses the natural ordering of its keys.\n *\n * @serial\n */\n @SuppressWarnings("serial") // Conditionally serializable\n private final Comparator comparator;\n\n private transient Entry root;\n')),(0,r.kt)("p",null,"Tak\u017ee m\xe1me \u201en\u011bjak\xfd ko\u0159en\u201c typu ",(0,r.kt)("inlineCode",{parentName:"p"},"Entry"),". Zkus\xedme si naj\xedt definici dan\xe9ho typu\u2026"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"}," // Red-black mechanics\n\n private static final boolean RED = false;\n private static final boolean BLACK = true;\n\n /**\n * Node in the Tree. Doubles as a means to pass key-value pairs back to\n * user (see Map.Entry).\n */\n\n static final class Entry implements Map.Entry {\n K key;\n V value;\n Entry left;\n Entry right;\n Entry parent;\n boolean color = BLACK;\n")),(0,r.kt)("p",null,"A m\xe1me RB-tree."),(0,r.kt)("p",null,"(Implementace vych\xe1z\xed z projektu OpenJDK.)"),(0,r.kt)("h3",{id:"c-1"},"C#"),(0,r.kt)("p",null,"V C# se zam\u011b\u0159\xedme na nejnov\u011bj\u0161\xed vyd\xe1n\xed (.NET), kter\xe9 je open-source a podporov\xe1no i na opera\u010dn\xedch syst\xe9mech zalo\u017een\xfdch na Linuxu."),(0,r.kt)("p",null,"Nejd\u0159\xedve se pod\xedv\xe1me na implementaci slovn\xedku (",(0,r.kt)("a",{parentName:"p",href:"https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections/src/System/Collections/Generic/SortedDictionary.cs"},(0,r.kt)("inlineCode",{parentName:"a"},"SortedDictionary")),")."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"}," public class SortedDictionary : IDictionary, IDictionary, IReadOnlyDictionary where TKey : notnull\n {\n [NonSerialized]\n private KeyCollection? _keys;\n [NonSerialized]\n private ValueCollection? _values;\n\n private readonly TreeSet> _set; // Do not rename (binary serialization)\n")),(0,r.kt)("p",null,"Na prvn\xed pohled m\xe1me probl\xe9m, proto\u017ee ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeSet")," nen\xed ",(0,r.kt)("inlineCode",{parentName:"p"},"SortedSet"),", kter\xfd by jsme \u010dekali. Kdy\u017e se p\u0159esuneme na konec souboru, tak zjist\xedme, \u017ee ",(0,r.kt)("inlineCode",{parentName:"p"},"TreeSet")," je jenom ",(0,r.kt)("em",{parentName:"p"},"backward-compatible wrapper")," pro ",(0,r.kt)("inlineCode",{parentName:"p"},"SortedSet"),"."),(0,r.kt)("p",null,"P\u0159esuneme se k ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections/src/System/Collections/Generic/SortedSet.cs"},(0,r.kt)("inlineCode",{parentName:"a"},"SortedSet")),". A hned ze za\u010d\xe1tku vid\xedme:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs"},' // A binary search tree is a red-black tree if it satisfies the following red-black properties:\n // 1. Every node is either red or black\n // 2. Every leaf (nil node) is black\n // 3. If a node is red, the both its children are black\n // 4. Every simple path from a node to a descendant leaf contains the same number of black nodes\n //\n // The basic idea of a red-black tree is to represent 2-3-4 trees as standard BSTs but to add one extra bit of information\n // per node to encode 3-nodes and 4-nodes.\n // 4-nodes will be represented as: B\n // R R\n //\n // 3 -node will be represented as: B or B\n // R B B R\n //\n // For a detailed description of the algorithm, take a look at "Algorithms" by Robert Sedgewick.\n\n internal enum NodeColor : byte\n {\n Black,\n Red\n }\n\n internal delegate bool TreeWalkPredicate(SortedSet.Node node);\n\n internal enum TreeRotation : byte\n {\n Left,\n LeftRight,\n Right,\n RightLeft\n }\n')),(0,r.kt)("p",null,"Vysv\u011btlen\xed v koment\xe1\u0159i trochu p\u0159edb\xedh\xe1 n\xe1pl\u0148 cvi\u010den\xed zam\u011b\u0159en\xe9ho na B-stromy ;)"),(0,r.kt)("h2",{id:"vztah-mezi-mno\u017einou-a-mapou"},"Vztah mezi mno\u017einou a mapou"),(0,r.kt)("p",null,"P\u0159i ka\u017ed\xe9 implementaci ve standardn\xed knihovn\u011b jsme si mohli v\u0161imnout, \u017ee strom implementuje v\u017edy jenom jeden typ:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Jazyk"),(0,r.kt)("th",{parentName:"tr",align:null},"Zp\u016fsob implementace"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"C++"),(0,r.kt)("td",{parentName:"tr",align:null},"mapa ukl\xe1d\xe1 dvojice do mno\u017einy")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Java"),(0,r.kt)("td",{parentName:"tr",align:null},"mno\u017eina ukl\xe1d\xe1 prvky s \u201edummy\u201c hodnotou do mapy")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"C#"),(0,r.kt)("td",{parentName:"tr",align:null},"mapa ukl\xe1d\xe1 dvojice do mno\u017einy")))),(0,r.kt)("p",null,"Mapa vy\u017eaduje, aby ka\u017ed\xfd kl\xed\u010d m\u011bl p\u0159i\u0159azenou pr\xe1v\u011b jednu hodnotu, tedy kl\xed\u010de jsou navz\xe1jem mezi sebou unik\xe1tn\xed. To n\xe1m umo\u017e\u0148uje organizovat kl\xed\u010de do mno\u017einy, zde ale naraz\xedme na nep\u0159\xedjemn\xfd probl\xe9m spo\u010d\xedvaj\xedc\xed v tom, \u017ee mus\xedme do mno\u017einy vkladat dvojice prvk\u016f: ",(0,r.kt)("inlineCode",{parentName:"p"},"(key, value)"),". Tenhle p\u0159\xedstup m\xe1 ale z\xe1sadn\xed probl\xe9m:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"# let's represent dictionary/map as a set\nset_of_values = set()\n\n# let's insert few pairs\nset_of_values.add((1, 2))\nset_of_values.add((0, 42))\n\n# let's set key 1 to value 6\nset_of_values.add((1, 6))\n\nset_of_values\n")),(0,r.kt)("p",null,"A dostaneme:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"{(1, 6), (1, 2), (0, 42)}\n")),(0,r.kt)("p",null,"V jednotliv\xfdch implementac\xedch, kter\xe9 jste mohli vid\u011bt v\xfd\u0161e, se vyu\u017e\xedv\xe1 nasleduj\xedc\xed, kdy\u017e:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"mapa ukl\xe1d\xe1 dvojice do mno\u017einy"),": Dvojice je obalen\xe1 v samostatn\xedm typu, kter\xfd porovn\xe1v\xe1 jenom kl\xed\u010de"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"mno\u017eina ukl\xe1d\xe1 kl\xed\u010de do mapy"),": V map\u011b se ignoruj\xed hodnoty p\u0159i\u0159azen\xe9 kl\xed\u010d\u016fm")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1e298f0c.caf61e40.js b/assets/js/1e298f0c.caf61e40.js new file mode 100644 index 0000000..32fb75e --- /dev/null +++ b/assets/js/1e298f0c.caf61e40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2732],{3467:e=>{e.exports=JSON.parse('{"label":"bfs","permalink":"/ib002/tags/bfs","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"graphs/bfs-tree","title":"Distance boundaries from BFS tree on undirected graphs","description":"Short explanation of distance boundaries deduced from a BFS tree.\\n","permalink":"/ib002/graphs/bfs-tree"}]}')}}]); \ No newline at end of file diff --git a/assets/js/22a175ec.a5706cf0.js b/assets/js/22a175ec.a5706cf0.js new file mode 100644 index 0000000..b6fc5e9 --- /dev/null +++ b/assets/js/22a175ec.a5706cf0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6890],{707:(e,t,n)=>{n.r(t),n.d(t,{default:()=>E});var r=n(7462),o=n(7294),l=n(7452),a=n(6010);const i="card_n_Wj",s="contributionsContainer_vdAK",c="buttons_UAd1";var u,p;function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:n,...r}=e;return o.createElement("svg",m({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":n},r),t?o.createElement("title",{id:n},t):null,u||(u=o.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),p||(p=o.createElement("path",{d:"M13 21v2.5l-3-2-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"})))},d=e=>{let{title:t,description:n,contribution:r,repoURL:l}=e;return o.createElement("div",{className:"col col--12"},o.createElement("div",{className:(0,a.Z)("card",i)},o.createElement("div",{className:"card__header"},o.createElement("h2",null,t)),o.createElement("div",{className:"card__body"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col col--6"},o.createElement("h6",null,"Description"),n),o.createElement("div",{className:(0,a.Z)("col col--6",s)},o.createElement("h6",null,"Contribution"),r))),o.createElement("div",{className:"card__footer"},o.createElement("div",{className:c},o.createElement("a",{href:l,target:"_blank",className:"button button--secondary button--outline"},o.createElement("span",{className:"button__icon"},o.createElement(h,null)),"See repository")))))},b=[{title:"Fedora Infrastructure Ansible",description:o.createElement("p",null,"Collection of Ansible playbooks that powers the Fedora Infrastructure."),contribution:o.createElement("p",null,"I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions."),repoURL:"https://pagure.io/fedora-infra/ansible"},{title:"Bodhi",description:o.createElement("p",null,"Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution."),contribution:o.createElement("p",null,"I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser."),repoURL:"https://github.com/fedora-infra/bodhi"},{title:"Gluetool Modules Collection",description:o.createElement("p",null,"Modules for ",o.createElement("code",null,"gluetool")," \u2014 a command line centric framework usable for glueing modules into a pipeline."),contribution:o.createElement("ul",null,o.createElement("li",null,"I have proposed a possible implementation of git merging that was later on extended."),o.createElement("li",null,"I have tried to help out with Copr module after they deprecated older version of their API.")),repoURL:"https://gitlab.com/testing-farm/gluetool-modules"},{title:"Pagure",description:o.createElement("p",null,"Pagure is a git-centered forge, python based using pygit2."),contribution:o.createElement("p",null,"I have added an API endpoint for reopening pull requests."),repoURL:"https://pagure.io/pagure"},{title:"Copr",description:o.createElement("p",null,"RPM build system - upstream for"," ",o.createElement("a",{target:"_blank",href:"https://copr.fedorainfracloud.org/"},"Copr"),"."),contribution:o.createElement("ul",null,o.createElement("li",null,"Supporting external repositories for custom SRPM build method."),o.createElement("li",null,"Allowing admins of Copr repositories to build without the need to ask for explicit ",o.createElement("code",null,"builder")," permissions.")),repoURL:"https://github.com/fedora-copr/copr"},{title:"python-gitlab",description:o.createElement("p",null,"A python wrapper for the GitLab API."),contribution:o.createElement("p",null,"I have contributed support for the ",o.createElement("code",null,"merge_ref")," on merge requests that hasn't been supported, yet it was present in the GitLab API."),repoURL:"https://github.com/python-gitlab/python-gitlab"},{title:"PatternFly React",description:o.createElement("p",null,"A set of React components for the PatternFly project."),contribution:o.createElement("p",null,"When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users."),repoURL:"https://github.com/patternfly/patternfly-react"},{title:"Fira Code",description:o.createElement("p",null,"Free monospaced font with programming ligatures."),contribution:o.createElement("p",null,"I have set up a GitHub Action for building the font on each push to the default branch allowing users to install ",o.createElement("i",null,"bleeding edge")," ","version of the font."),repoURL:"https://github.com/tonsky/FiraCode"},{title:"nixpkgs",description:o.createElement("p",null,"Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution."),contribution:o.createElement("p",null,"When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core."),repoURL:"https://github.com/NixOS/nixpkgs"},{title:"Darcula",description:o.createElement("p",null,"A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs."),contribution:o.createElement("p",null,"I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now."),repoURL:"https://github.com/rokoroku/vscode-theme-darcula"},{title:"Packit",description:o.createElement("p",null,"An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions."),contribution:o.createElement("p",null,"Have a look at my"," ",o.createElement("a",{href:"https://github.com/search?q=is%3Apr%20author%3Amfocko%20org%3Apackit&type=pullrequests",target:"_blank"},"pull requests"),"."),repoURL:"https://github.com/packit"},{title:"Snitch",description:o.createElement(o.Fragment,null,o.createElement("p",null,"Language agnostic tool that collects TODOs in the source code and reports them as Issues.")),contribution:o.createElement("ul",null,o.createElement("li",null,"Environment variable support for self-hosted GitLab instances"),o.createElement("li",null,"GitLab support")),repoURL:"https://github.com/tsoding/snitch"},{title:"Karel the Robot",description:o.createElement(o.Fragment,null,o.createElement("p",null,"Karel the robot is in general an educational programming language for beginners, created by ",o.createElement("i",null,"Richard E. Pattis"),". This is implementation of ",o.createElement("i",null,"Karel the Robot")," for"," ",o.createElement("i",null,"C programming language"),"."),o.createElement("p",null,"This project is used for educational purposes at"," ",o.createElement("a",{target:"_blank",href:"https://fei.tuke.sk"},"TUKE"),".")),contribution:o.createElement("p",null,"I have contributed some refactoring tips to the author of the library."),repoURL:"https://git.kpi.fei.tuke.sk/kpi/karel-the-robot"}],g="Contributions",f="Many of my contributions to open-source projects.";function E(){return o.createElement(l.Z,{title:g,description:f},o.createElement("main",{className:"container container--fluid margin-vert--lg"},o.createElement("h1",null,g),o.createElement("p",null,f),o.createElement("div",{className:"row"},b.map((e=>o.createElement(d,(0,r.Z)({key:e.project},e)))))))}}}]); \ No newline at end of file diff --git a/assets/js/2523321d.50613303.js b/assets/js/2523321d.50613303.js new file mode 100644 index 0000000..470fc9f --- /dev/null +++ b/assets/js/2523321d.50613303.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9193],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),u=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return i.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=a,k=m["".concat(s,".").concat(d)]||m[d]||c[d]||r;return n?i.createElement(k,o(o({ref:t},p),{},{components:n})):i.createElement(k,o({ref:t},p))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,o[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var i=n(7462),a=(n(7294),n(3905));const r={id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},o="8th seminar bonus assignment",l={unversionedId:"bonuses/seminar-08",id:"bonuses/seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n",source:"@site/pb071/bonuses/08.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-08",permalink:"/pb071/bonuses/seminar-08",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/bonuses/08.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",frontMatter:{id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},sidebar:"autogeneratedBar",previous:{title:"5th and 6th seminar",permalink:"/pb071/bonuses/seminar-05-06"},next:{title:"10th seminar",permalink:"/pb071/bonuses/seminar-10"}},s={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Warning",id:"warning",level:2},{value:"Testing",id:"testing",level:2},{value:"Task no. 1: Counting (0.75 K\u20a1)",id:"task-no-1-counting-075-k",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Bonus part (0.75 K\u20a1)",id:"bonus-part-075-k",level:3},{value:"Task no. 2: Weird trees (1 K\u20a1)",id:"task-no-2-weird-trees-1-k",level:2},{value:"Submitting",id:"submitting",level:2}],p={toc:u},m="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,i.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"8th-seminar-bonus-assignment"},"8th seminar bonus assignment"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/08.tar.gz"},"Source")),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"In this bonus you can implement two tasks, one of them has a bonus part with generic\nsolution."),(0,a.kt)("p",null,"One is focused on counting ananas or in case of generic version any substring in\nthe file, but with a restriction on the function you use."),(0,a.kt)("p",null,"Other one has a more algorithmic spirit."),(0,a.kt)("p",null,"For this bonus you can get at maximum 2.5 K\u20a1."),(0,a.kt)("h2",{id:"warning"},"Warning"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"DO NOT COMMIT test data")," to your own git repository, since the tests include\nfiles that exceed 10MB by themselves. Even if they are on separate branch, they\ntake up the space."),(0,a.kt)("h2",{id:"testing"},"Testing"),(0,a.kt)("p",null,"For testing you are provided with python script (requires ",(0,a.kt)("inlineCode",{parentName:"p"},"click")," to be installed:\n",(0,a.kt)("inlineCode",{parentName:"p"},"pip3 install --user click"),") and ",(0,a.kt)("inlineCode",{parentName:"p"},"Makefile")," that provides following targets:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"check-counting")," - runs the ",(0,a.kt)("inlineCode",{parentName:"li"},"counting")," tests"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"check-counting-bonus")," - runs the ",(0,a.kt)("inlineCode",{parentName:"li"},"counting")," tests with bonus implemented"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"check")," - runs both ",(0,a.kt)("inlineCode",{parentName:"li"},"counting")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"counting-bonus")," tests"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"clean")," - removes output files from the test runs")),(0,a.kt)("h2",{id:"task-no-1-counting-075-k"},"Task no. 1: Counting (0.75 K\u20a1)"),(0,a.kt)("p",null,"Your first task is to make smallish program that counts occurences of specific\n(or given) word from file and writes the number to other file."),(0,a.kt)("p",null,"Usage of the program is:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"Usage: ./counting [string-to-be-counted]\n")),(0,a.kt)("p",null,"Arguments that are passed to the program represent:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"")," - path to the file where we count the words"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"")," - path to the file where we output the count"),(0,a.kt)("li",{parentName:"ul"},"(optional argument) ",(0,a.kt)("inlineCode",{parentName:"li"},"[string-to-be-counted]")," - in case you implement bonus,\notherwise we default to word ",(0,a.kt)("inlineCode",{parentName:"li"},"ananas")," ;)")),(0,a.kt)("p",null,"In skeleton you are given 3 empty, but documented, functions to implement."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"count_anything")," - function accepts input file and substring to be counted in\nthe file, returns the count."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"count_ananas")," - same as ",(0,a.kt)("inlineCode",{parentName:"li"},"count_anything"),", but specialized for ananases, the\ndefault implementation from the skeleton expects you to implement ",(0,a.kt)("inlineCode",{parentName:"li"},"count_anything"),"\nand therefore it just calls the other function."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"write_number")," - function that writes the number to the file, why would you\nneed the function is explained later :)")),(0,a.kt)("h3",{id:"requirements"},"Requirements"),(0,a.kt)("p",null,"For manipulation with the files you are only allowed to use ",(0,a.kt)("inlineCode",{parentName:"p"},"fopen"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"fclose"),",\n",(0,a.kt)("inlineCode",{parentName:"p"},"fgetc")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"fputc"),". Functions like ",(0,a.kt)("inlineCode",{parentName:"p"},"fprintf")," (except for ",(0,a.kt)("inlineCode",{parentName:"p"},"stderr")," or logging) and\n",(0,a.kt)("inlineCode",{parentName:"p"},"fscanf")," are ",(0,a.kt)("strong",{parentName:"p"},"forbidden"),"."),(0,a.kt)("p",null,"In case you struggle and want to use one of those functions, the solution will be\npenalized by 50% of points."),(0,a.kt)("h3",{id:"bonus-part-075-k"},"Bonus part (0.75 K\u20a1)"),(0,a.kt)("p",null,"Bonus part of this assignment is to implement ",(0,a.kt)("inlineCode",{parentName:"p"},"count_anything")," rather than ",(0,a.kt)("inlineCode",{parentName:"p"},"count_ananas"),"."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Smaller hint: This task does not need dynamic allocation :) You just need one\ngood helper function and the right idea ;)")),(0,a.kt)("h2",{id:"task-no-2-weird-trees-1-k"},"Task no. 2: Weird trees (1 K\u20a1)"),(0,a.kt)("p",null,"In this task we are crossing our paths with ",(0,a.kt)("em",{parentName:"p"},"algorithms and data structures"),".\nYour task is to write a program that constructs tree from the file that is given\nas an argument and pretty-prints it."),(0,a.kt)("p",null,"Input file consists of lines, that include ",(0,a.kt)("inlineCode",{parentName:"p"},"key")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"rank")," in form ",(0,a.kt)("inlineCode",{parentName:"p"},"key;rank"),"\nor ",(0,a.kt)("inlineCode",{parentName:"p"},"nil"),". Why would we have ",(0,a.kt)("inlineCode",{parentName:"p"},"nil")," in a file? The file represents pre-order iteration\nthrough the tree. Leaves never have rank different than 0, so you can safely assume\n2 non-existing ",(0,a.kt)("inlineCode",{parentName:"p"},"nil"),"s in the input after you read such node ;)"),(0,a.kt)("table",null,(0,a.kt)("tr",null,(0,a.kt)("th",null,"Example input file"),(0,a.kt)("th",null,"Tree it represents")),(0,a.kt)("tr",null,(0,a.kt)("td",null,(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"8;4\n5;3\n3;2\n2;1\n1;0\nnil\n4;0\n7;1\n6;0\nnil\n11;2\n10;1\n9;0\nnil\n12;0\n"))),(0,a.kt)("td",null,(0,a.kt)("p",null,(0,a.kt)("img",{alt:"tree",src:n(4860).Z,width:"633",height:"684"}))))),(0,a.kt)("p",null,"In this task you are only provided with different trees in the ",(0,a.kt)("inlineCode",{parentName:"p"},"test-trees")," directory.\nImplementation and format of the pretty-print is totally up to you. :)"),(0,a.kt)("p",null,"Example of mine for the tree above:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"8 (rank = 4)\n+-- 5 (rank = 3)\n| +-- 3 (rank = 2)\n| | +-- 2 (rank = 1)\n| | | +-- 1 (rank = 0)\n| | +-- 4 (rank = 0)\n| +-- 7 (rank = 1)\n| +-- 6 (rank = 0)\n+-- 11 (rank = 2)\n +-- 10 (rank = 1)\n | +-- 9 (rank = 0)\n +-- 12 (rank = 0)\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Can you find out what are those trees? :)")),(0,a.kt)("h2",{id:"submitting"},"Submitting"),(0,a.kt)("p",null,"In case you have any questions, feel free to reach out to me."),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Ideally submit the assignment through the merge request. Step-by-step tutorial is\npresent ",(0,a.kt)("a",{parentName:"p",href:"../mr"},"here"),". For setting assignee my xlogin is ",(0,a.kt)("inlineCode",{parentName:"p"},"xfocko"),"."),(0,a.kt)("p",null,"In case you do not want to experiment on GitLab, send me the source code via email,\nbut please prefix subject with: ",(0,a.kt)("inlineCode",{parentName:"p"},"[PB071/14][seminar-08]")),(0,a.kt)("p",null,"Deadline for the submission of the bonus is ",(0,a.kt)("strong",{parentName:"p"},"May 4th 24:00"),"."))}c.isMDXComponent=!0},4860:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png"}}]); \ No newline at end of file diff --git a/assets/js/27470891.d509d6e4.js b/assets/js/27470891.d509d6e4.js new file mode 100644 index 0000000..fa1b7c5 --- /dev/null +++ b/assets/js/27470891.d509d6e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4972],{9249:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"pb071"}')}}]); \ No newline at end of file diff --git a/assets/js/280c26e1.27c7a6b1.js b/assets/js/280c26e1.27c7a6b1.js new file mode 100644 index 0000000..4799726 --- /dev/null +++ b/assets/js/280c26e1.27c7a6b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5529],{3272:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"ib002"}')}}]); \ No newline at end of file diff --git a/assets/js/29694455.a2e2c1d7.js b/assets/js/29694455.a2e2c1d7.js new file mode 100644 index 0000000..acce2ed --- /dev/null +++ b/assets/js/29694455.a2e2c1d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3388],{9828:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/iterators","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2a09abcd.15946a52.js b/assets/js/2a09abcd.15946a52.js new file mode 100644 index 0000000..80c4718 --- /dev/null +++ b/assets/js/2a09abcd.15946a52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1246],{3905:(a,e,t)=>{t.d(e,{Zo:()=>l,kt:()=>k});var n=t(7294);function s(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,n)}return t}function r(a){for(var e=1;e=0||(s[t]=a[t]);return s}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(s[t]=a[t])}return s}var i=n.createContext({}),o=function(a){var e=n.useContext(i),t=e;return a&&(t="function"==typeof a?a(e):r(r({},e),a)),t},l=function(a){var e=o(a.components);return n.createElement(i.Provider,{value:e},a.children)},h="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},N=n.forwardRef((function(a,e){var t=a.components,s=a.mdxType,m=a.originalType,i=a.parentName,l=p(a,["components","mdxType","originalType","parentName"]),h=o(t),N=s,k=h["".concat(i,".").concat(N)]||h[N]||c[N]||m;return t?n.createElement(k,r(r({ref:e},l),{},{components:t})):n.createElement(k,r({ref:e},l))}));function k(a,e){var t=arguments,s=e&&e.mdxType;if("string"==typeof a||s){var m=t.length,r=new Array(m);r[0]=N;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=a,p[h]="string"==typeof a?a:s,r[1]=p;for(var o=2;o{t.r(e),t.d(e,{assets:()=>i,contentTitle:()=>r,default:()=>c,frontMatter:()=>m,metadata:()=>p,toc:()=>o});var n=t(7462),s=(t(7294),t(3905));const m={id:"bfs-tree",title:"Distance boundaries from BFS tree on undirected graphs",description:"Short explanation of distance boundaries deduced from a BFS tree.\n",tags:["graphs","bfs"],last_update:{date:new Date("2022-04-30T00:00:00.000Z")}},r=void 0,p={unversionedId:"graphs/bfs-tree",id:"graphs/bfs-tree",title:"Distance boundaries from BFS tree on undirected graphs",description:"Short explanation of distance boundaries deduced from a BFS tree.\n",source:"@site/ib002/10-graphs/2022-04-30-bfs-tree.md",sourceDirName:"10-graphs",slug:"/graphs/bfs-tree",permalink:"/ib002/graphs/bfs-tree",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/10-graphs/2022-04-30-bfs-tree.md",tags:[{label:"graphs",permalink:"/ib002/tags/graphs"},{label:"bfs",permalink:"/ib002/tags/bfs"}],version:"current",lastUpdatedAt:1651276800,formattedLastUpdatedAt:"Apr 30, 2022",frontMatter:{id:"bfs-tree",title:"Distance boundaries from BFS tree on undirected graphs",description:"Short explanation of distance boundaries deduced from a BFS tree.\n",tags:["graphs","bfs"],last_update:{date:"2022-04-30T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Iterative algorithms via iterators",permalink:"/ib002/graphs/iterative-and-iterators"}},i={},o=[{value:"Introduction",id:"introduction",level:2},{value:"Lower bound",id:"lower-bound",level:2},{value:"Proof by contradiction",id:"proof-by-contradiction",level:2}],l={toc:o},h="wrapper";function c(a){let{components:e,...m}=a;return(0,s.kt)(h,(0,n.Z)({},l,m,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("h2",{id:"introduction"},"Introduction"),(0,s.kt)("p",null,"As we have talked on the seminar, if we construct from some vertex ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"u")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"u")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"u")))))," BFS tree on an undirected graph, we can obtain:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"lower bound of length of the shortest path between 2 vertices from the ",(0,s.kt)("em",{parentName:"li"},"height difference")),(0,s.kt)("li",{parentName:"ul"},"upper bound of length of the shortest path between 2 vertices from the ",(0,s.kt)("em",{parentName:"li"},"path through the root"))),(0,s.kt)("h2",{id:"lower-bound"},"Lower bound"),(0,s.kt)("p",null,"Consider the following graph:"),(0,s.kt)("p",null,(0,s.kt)("img",{src:t(491).Z+"#gh-light-mode-only",width:"252",height:"539"}),"\n",(0,s.kt)("img",{src:t(9257).Z+"#gh-dark-mode-only",width:"252",height:"539"})),(0,s.kt)("p",null,"We run BFS from the vertex ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"a")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a")))))," and obtain the following BFS tree:"),(0,s.kt)("p",null,(0,s.kt)("img",{src:t(1281).Z+"#gh-light-mode-only",width:"275",height:"347"}),"\n",(0,s.kt)("img",{src:t(820).Z+"#gh-dark-mode-only",width:"275",height:"347"})),(0,s.kt)("p",null,"Let's consider pair of vertices ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"e")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))))," and ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"h")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"h")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"))))),". For them we can safely lay, from the BFS tree, following properties:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"lower bound: ",(0,s.kt)("span",{parentName:"li",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2")))))),(0,s.kt)("li",{parentName:"ul"},"upper bound: ",(0,s.kt)("span",{parentName:"li",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("p",null,"By having a look at the graph we started from, we can see that we have a path \u2039",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"j"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"h")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e, j, h")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05724em"}},"j"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"))))),"\u203a that has a length 2. Apart from that we can also notice there is another path from ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"e")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))))," to ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"h")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"h")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"h")))))," and that is \u2039",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"c"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"i"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"d"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"h")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e, a, c, i, d, h")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"))))),"\u203a. And that path has a length of ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"5")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"5")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"5"))))),". Doesn't this break our statements at the beginning? (",(0,s.kt)("em",{parentName:"p"},"I'm leaving that as an exercise ;)"),")"),(0,s.kt)("h2",{id:"proof-by-contradiction"},"Proof by contradiction"),(0,s.kt)("p",null,"Let's keep the same graph, but break the lower bound, i.e. I have gotten a lower bound ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"))))),", but \u201cthere must be a shorter path\u201d! ;)"),(0,s.kt)("p",null,"Now the more important question, is there a shorter path in that graph? The answer is no, there's no shorter path than the one with length ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"))))),". So what can we do about it? We'll add an edge to have a shorter path. Now we have gotten a lower bound of ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"))))),", which means the only shorter path we can construct has ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"1")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1")))))," edge and that is \u2039",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,s.kt)("mi",{parentName:"mrow"},"h")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e, h")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mpunct"},","),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"))))),"\u203a (no intermediary vertices). Let's do this!"),(0,s.kt)("p",null,(0,s.kt)("img",{src:t(340).Z+"#gh-light-mode-only",width:"252",height:"539"}),"\n",(0,s.kt)("img",{src:t(4110).Z+"#gh-dark-mode-only",width:"252",height:"539"})),(0,s.kt)("p",null,"Okay, so we have a graph that breaks the rule we have laid. However, we need to run BFS to obtain the new BFS tree, since we have changed the graph."),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Do we need to run BFS after ",(0,s.kt)("strong",{parentName:"p"},"every")," change?"),(0,s.kt)("p",{parentName:"admonition"},"\xadI am leaving that as an exercise ;)")),(0,s.kt)("p",null,(0,s.kt)("img",{src:t(6256).Z+"#gh-light-mode-only",width:"371",height:"347"}),"\n",(0,s.kt)("img",{src:t(8680).Z+"#gh-dark-mode-only",width:"371",height:"347"})),(0,s.kt)("p",null,"Oops, we have gotten a new BFS tree, that has a height difference of 1."),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Try to think about a way this can be generalized for shortening of minimal length 3 to minimal length 2 ;)")))}c.isMDXComponent=!0},9257:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_graph_dark-f7a3a78eaf9de049469b4c64e0712867.png"},491:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_graph_light-6e21a942bccd92bcce6840da7c3cb056.png"},4110:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_graph_with_additional_edge_dark-c2da6c052b067785e877b4654a13f328.png"},340:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_graph_with_additional_edge_light-799673ba333298d16327abe67c90507e.png"},820:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_tree_dark-34f32262c6e4ffc14983b3ebf9a2f5a9.png"},1281:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_tree_light-61d6723c3c587d565b6280b8b8eca211.png"},8680:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_tree_with_additional_edge_dark-127aa5b00988d4569669a92f5d841dbf.png"},6256:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/bfs_tree_with_additional_edge_light-93df97e1f9f1883467248532809374d0.png"}}]); \ No newline at end of file diff --git a/assets/js/3011a4c0.573f9325.js b/assets/js/3011a4c0.573f9325.js new file mode 100644 index 0000000..edf99fc --- /dev/null +++ b/assets/js/3011a4c0.573f9325.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7926],{1670:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/copr","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/316.d513d091.js b/assets/js/316.d513d091.js new file mode 100644 index 0000000..67fe849 --- /dev/null +++ b/assets/js/316.d513d091.js @@ -0,0 +1,1354 @@ +"use strict"; +exports.id = 316; +exports.ids = [316]; +exports.modules = { + +/***/ 96316: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(87115); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7201); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91518); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28734); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10__); + + + + + + + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "period_statement": 24, "event_statement": 25, "period": 26, "event": 27, "open_directive": 28, "type_directive": 29, "arg_directive": 30, "close_directive": 31, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 26: "period", 27: "event", 28: "open_directive", 29: "type_directive", 30: "arg_directive", 31: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 20: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "timeline"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])], + defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 28; + case 1: + this.begin("type_directive"); + return 29; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 31; + case 4: + return 30; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 27; + case 21: + return 26; + case 22: + return 6; + case 23: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.j; +const parseDirective = (statement, context, type) => { + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.k)(globalThis, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.m)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + //if event is defined, then add it the events array + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent, + parseDirective +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addEvent, + addSection, + addTask, + addTaskOrg, + clear, + default: timelineDb, + getCommonDb, + getSections, + getTasks, + parseDirective +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(//gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(//gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|
)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "
") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "
") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf2) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf2) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.g)(); + const LEFT_MARGIN = conf2.leftMargin ? conf2.leftMargin : 50; + diagObj.db.clear(); + diagObj.parser.parse(text + "\n"); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("timeline", diagObj.db); + const securityLevel = conf2.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf2); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf2); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf2); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf2); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + const tasksForSection = tasks2.filter((task) => task.section === section); + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf2, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf2, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.s)( + void 0, + svg, + conf2.timeline.padding ? conf2.timeline.padding : 50, + conf2.timeline.useMaxWidth ? conf2.timeline.useMaxWidth : false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf2, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf2); + const taskHeight = node.height; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let linelength = maxTaskHeight; + masterY += 100; + linelength = linelength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf2); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !(0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.g)().timeline.disableMulticolor) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf2) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf2); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + +//# sourceMappingURL=timeline-definition-8e5a9bc6.js.map + + +/***/ }), + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default */.Z.parse(color); + const luminance = .2126 * utils/* default */.Z.channel.toLinear(r) + .7152 * utils/* default */.Z.channel.toLinear(g) + .0722 * utils/* default */.Z.channel.toLinear(b); + return utils/* default */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/337bc122.a2fd825d.js b/assets/js/337bc122.a2fd825d.js new file mode 100644 index 0000000..16ed7a1 --- /dev/null +++ b/assets/js/337bc122.a2fd825d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1731],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),s=l(r),d=o,b=s["".concat(p,".").concat(d)]||s[d]||f[d]||a;return r?n.createElement(b,i(i({ref:t},u),{},{components:r})):n.createElement(b,i({ref:t},u))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[s]="string"==typeof e?e:o,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={id:"pb071-intro",title:"Introduction",slug:"/"},i=void 0,c={unversionedId:"pb071-intro",id:"pb071-intro",title:"Introduction",description:"",source:"@site/pb071/00-intro-pb071.md",sourceDirName:".",slug:"/",permalink:"/pb071/",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/00-intro-pb071.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",sidebarPosition:0,frontMatter:{id:"pb071-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Bonuses",permalink:"/pb071/category/bonuses"}},p={},l=[],u={toc:l},s="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3593220c.04c28473.js b/assets/js/3593220c.04c28473.js new file mode 100644 index 0000000..21853bc --- /dev/null +++ b/assets/js/3593220c.04c28473.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8167],{2947:i=>{i.exports=JSON.parse('{"label":"greedy","permalink":"/ib002/tags/greedy","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/3720c009.996e811f.js b/assets/js/3720c009.996e811f.js new file mode 100644 index 0000000..1c981ed --- /dev/null +++ b/assets/js/3720c009.996e811f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3751],{727:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(7294),n=a(6010),r=a(5155),c=a(833),s=a(5281),m=a(7452),g=a(6090),o=a(197);function u(e){let{tags:t}=e;const a=(0,r.M)();return l.createElement(c.FG,{className:(0,n.Z)(s.k.wrapper.docsPages,s.k.page.docsTagsListPage)},l.createElement(c.d,{title:a}),l.createElement(o.Z,{tag:"doc_tags_list"}),l.createElement(m.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(g.Z,{tags:t}))))))}},3008:(e,t,a)=>{a.d(t,{Z:()=>s});var l=a(7294),n=a(6010),r=a(9960);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function s(e){let{permalink:t,label:a,count:s}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(c.tag,s?c.tagWithCount:c.tagRegular)},a,s&&l.createElement("span",null,s))}},6090:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(7294),n=a(5155),r=a(3008);const c={tag:"tag_Nnez"};function s(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:c.tag},l.createElement(r.Z,e))))),l.createElement("hr",null))}function m(e){let{tags:t}=e;const a=(0,n.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(s,{key:e.letter,letterEntry:e}))))}},5155:(e,t,a)=>{a.d(t,{M:()=>n,P:()=>r});var l=a(5999);const n=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/377f3aa1.4c98e03e.js b/assets/js/377f3aa1.4c98e03e.js new file mode 100644 index 0000000..0dc3a78 --- /dev/null +++ b/assets/js/377f3aa1.4c98e03e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1011],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),h=i,c=d["".concat(s,".").concat(h)]||d[h]||m[h]||o;return n?a.createElement(c,r(r({ref:t},u),{},{components:n})):a.createElement(c,r({ref:t},u))}));function c(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:i,r[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=n(7462),i=(n(7294),n(3905));const o={title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15",slug:"aoc-2022/2nd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},r=void 0,l={permalink:"/blog/aoc-2022/2nd-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/02-week-2.md",source:"@site/blog/aoc-2022/02-week-2.md",title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15:00.000Z",formattedDate:"December 25, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:20.875,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15",slug:"aoc-2022/2nd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"Sort the matrix diagonally",permalink:"/blog/leetcode/sort-diagonally"},nextItem:{title:"1st week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/1st-week"}},s={authorsImageUrls:[void 0]},p=[{value:"Day 8: Treetop Tree House",id:"day-8-treetop-tree-house",level:2},{value:"Swapping indices",id:"swapping-indices",level:4},{value:"Indexing Vec",id:"indexing-vec",level:4},{value:"Issues",id:"issues",level:5},{value:"Checking bounds",id:"checking-bounds",level:4},{value:"Solution",id:"solution",level:3},{value:"Day 9: Rope Bridge",id:"day-9-rope-bridge",level:2},{value:"Solution",id:"solution-1",level:3},{value:"Day 10: Cathode-Ray Tube",id:"day-10-cathode-ray-tube",level:2},{value:"Solution",id:"solution-2",level:3},{value:"Day 11: Monkey in the Middle",id:"day-11-monkey-in-the-middle",level:2},{value:"Solution",id:"solution-3",level:3},{value:"Day 12: Hill Climbing Algorithm",id:"day-12-hill-climbing-algorithm",level:2},{value:"Solution",id:"solution-4",level:3},{value:"Day 13: Distress Signal",id:"day-13-distress-signal",level:2},{value:"Solution",id:"solution-5",level:3},{value:"Day 14: Regolith Reservoir",id:"day-14-regolith-reservoir",level:2},{value:"Solution",id:"solution-6",level:3},{value:"Post Mortem",id:"post-mortem",level:2},{value:"Indexing",id:"indexing",level:3},{value:"Cause of the problem",id:"cause-of-the-problem",level:4}],u={toc:p},d="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(d,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Let's go through the second week of ",(0,i.kt)("a",{parentName:"p",href:"https://adventofcode.com"},(0,i.kt)("em",{parentName:"a"},"Advent of Code"))," in Rust."),(0,i.kt)("h2",{id:"day-8-treetop-tree-house"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/8"},"Day 8: Treetop Tree House")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"We get a forest and we want to know how many trees are visible from the outside.\nApart from that we want to find the best view.")),(0,i.kt)("p",null,"Nothing interesting. We are moving around 2D map though. And indexing can get a\nbit painful when doing so, let's refactor it a bit ;) During the preparation for\nthe AoC, I have written ",(0,i.kt)("inlineCode",{parentName:"p"},"Vector2D")," and now it's time to extend it with indexing\nof ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec")," of ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec"),"s. In my solution I was manipulating with indices in the following\nway:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"swapping them"),(0,i.kt)("li",{parentName:"ul"},"checking whether they are correct indices for the ",(0,i.kt)("inlineCode",{parentName:"li"},"Vec>")),(0,i.kt)("li",{parentName:"ul"},"indexing ",(0,i.kt)("inlineCode",{parentName:"li"},"Vec>")," with them")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"I'm getting familiar with Rust and starting to \u201cabuse\u201d it\u2026 While doing so, I'm\nalso uncovering some \u201cfeatures\u201d that I don't really like. Therefore I will mark\nall of my rants with ",(0,i.kt)("em",{parentName:"p"},"thicc")," ",(0,i.kt)("strong",{parentName:"p"},"\xab\u21af\xbb")," mark and will try to \u201clock\u201d them into their\nown \u201cbox of hell\u201d.")),(0,i.kt)("h4",{id:"swapping-indices"},"Swapping indices"),(0,i.kt)("p",null,"Relatively simple implementation, just take the values, swap them and return new\nvector."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"impl Vector2D {\n pub fn swap(&self) -> Self {\n Self {\n x: self.y,\n y: self.x,\n }\n }\n}\n")),(0,i.kt)("p",null,"Pretty straight-forward implementation, but let's talk about the ",(0,i.kt)("inlineCode",{parentName:"p"},"T: Copy"),". We\nneed to use it, since we are returning a ",(0,i.kt)("strong",{parentName:"p"},"new")," vector, with swapped ",(0,i.kt)("strong",{parentName:"p"},"values"),".\nIf we had values that cannot be copied, the only thing we could do, would be a\nvector of references (and it would also introduce a lifetime, to which we'll get\nlater on). This is pretty similar with the operations on sets from the first week."),(0,i.kt)("h4",{id:"indexing-vec"},"Indexing ",(0,i.kt)("inlineCode",{parentName:"h4"},"Vec")),(0,i.kt)("p",null,"I will start with the indexing, cause bound-checking is a bit more\u2026 complicated\nthan I would like to."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn index<'a, T, U>(v: &'a [Vec], idx: &Vector2D) -> &'a U\nwhere\n usize: TryFrom,\n >::Error: Debug,\n T: Copy,\n{\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\n &v[y][x]\n}\n")),(0,i.kt)("p",null,"Let's talk about this mess\u2026 Body of the function is probably the most easy part\nand should not be hard to understand, we just take the ",(0,i.kt)("inlineCode",{parentName:"p"},"x")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," and convert\nthem both to ",(0,i.kt)("inlineCode",{parentName:"p"},"usize")," type that can be used later on for indexing."),(0,i.kt)("p",null,"The type signature of the function is where the fun is at \ud83d\ude09 We are trying\nto convert unknown type to ",(0,i.kt)("inlineCode",{parentName:"p"},"usize"),", so we must bound the ",(0,i.kt)("inlineCode",{parentName:"p"},"T")," as a type that can\nbe converted to ",(0,i.kt)("inlineCode",{parentName:"p"},"usize"),", that's how we got ",(0,i.kt)("inlineCode",{parentName:"p"},"usize: TryFrom")," which basically\nsays that ",(0,i.kt)("inlineCode",{parentName:"p"},"usize")," must implement ",(0,i.kt)("inlineCode",{parentName:"p"},"TryFrom")," trait and therefore allows us to\nconvert the indices to actual ",(0,i.kt)("inlineCode",{parentName:"p"},"usize")," indices. Using ",(0,i.kt)("inlineCode",{parentName:"p"},".unwrap()")," also forces us\nto bound the error that can occur when converting ",(0,i.kt)("inlineCode",{parentName:"p"},"T")," into ",(0,i.kt)("inlineCode",{parentName:"p"},"usize"),", that's how\nwe get ",(0,i.kt)("inlineCode",{parentName:"p"},">::Error: Debug")," which loosely means"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"error during conversion of ",(0,i.kt)("inlineCode",{parentName:"p"},"T")," into ",(0,i.kt)("inlineCode",{parentName:"p"},"usize")," must implement ",(0,i.kt)("inlineCode",{parentName:"p"},"Debug"),",\ni.e. can be printed in some way or other")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"T: Copy")," is required by ",(0,i.kt)("inlineCode",{parentName:"p"},".try_into()")," which takes ",(0,i.kt)("inlineCode",{parentName:"p"},"T")," by-value."),(0,i.kt)("p",null,"And now we are left only with the first line of the definition."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Skilled Rustaceans might notice that this implementation is rather flaky and can\nbreak in multiple places at once. I'll get back to it\u2026")),(0,i.kt)("p",null,"Let's split it in multiple parts:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"v: &'a [Vec]")," represents the 2D ",(0,i.kt)("inlineCode",{parentName:"li"},"Vec"),", we are indexing, ",(0,i.kt)("inlineCode",{parentName:"li"},"Vec")," implements\n",(0,i.kt)("inlineCode",{parentName:"li"},"Slice")," trait and ",(0,i.kt)("em",{parentName:"li"},"clippy")," recommends using ",(0,i.kt)("inlineCode",{parentName:"li"},"&[T]")," to ",(0,i.kt)("inlineCode",{parentName:"li"},"&Vec"),", exact details\nare unknown to me"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"idx: &Vector2D")," represents the ",(0,i.kt)("em",{parentName:"li"},"indices")," which we use, we take them by\nreference to avoid an unnecessary copy"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-> &'a U")," means that we are returning a ",(0,i.kt)("em",{parentName:"li"},"reference")," to some value of type ",(0,i.kt)("inlineCode",{parentName:"li"},"U"),".\nNow the question is what does the ",(0,i.kt)("inlineCode",{parentName:"li"},"'a")," mean, we can also see it as a generic\ntype declared along ",(0,i.kt)("inlineCode",{parentName:"li"},"T")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"U"),". And the answer is ",(0,i.kt)("em",{parentName:"li"},"relatively")," simple, ",(0,i.kt)("inlineCode",{parentName:"li"},"'a"),"\nrepresents a ",(0,i.kt)("em",{parentName:"li"},"lifetime"),". We take the ",(0,i.kt)("inlineCode",{parentName:"li"},"v")," by a reference and return a reference,\nborrow checker validates all of the ",(0,i.kt)("em",{parentName:"li"},"borrows")," (or references), so we need to\nspecify that our returned value has ",(0,i.kt)("em",{parentName:"li"},"the same lifetime")," as the vector we have\ntaken by a reference, i.e. returned reference must live at least as long as the\n",(0,i.kt)("inlineCode",{parentName:"li"},"v"),". This way we can \u201cbe sure\u201d that the returned reference is valid.")),(0,i.kt)("h5",{id:"issues"},"Issues"),(0,i.kt)("p",null,"First issue that our implementation has is the fact that we cannot get a mutable\nreference out of that function. This could be easily resolved by introducing new\nfunction, e.g. ",(0,i.kt)("inlineCode",{parentName:"p"},"index_mut"),". Which I have actually done while writing this part:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn index_mut<'a, T, U>(v: &'a mut [Vec], idx: &Vector2D) -> &'a mut U\nwhere\n usize: TryFrom,\n >::Error: Debug,\n T: Copy,\n{\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\n &mut v[y][x]\n}\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"\xab\u21af\xbb")," Why can't we use one function?"),(0,i.kt)("p",{parentName:"admonition"},"When we consider a ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec"),", we don't need to consider containers as ",(0,i.kt)("inlineCode",{parentName:"p"},"T"),", Rust\nimplements indexing as traits ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexMut")," that do the dirty work\nbehind syntactic sugar of ",(0,i.kt)("inlineCode",{parentName:"p"},"container[idx]"),"."),(0,i.kt)("p",{parentName:"admonition"},"However, implementing of traits is not allowed for ",(0,i.kt)("em",{parentName:"p"},"external")," types, i.e. types\nthat you haven't defined yourself. This means that you can implement indexing\nover containers that you have implemented yourself, but you cannot use your own\ntypes for indexing \u201cbuilt-in\u201d types."),(0,i.kt)("p",{parentName:"admonition"},"Another part of this rabbit hole is trait ",(0,i.kt)("inlineCode",{parentName:"p"},"SliceIndex")," that is of a relevance\nbecause of"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"impl Index for [T]\nwhere\n I: SliceIndex<[T]>\n\nimpl Index for Vec\nwhere\n I: SliceIndex<[T]>,\n A: Allocator\n\nimpl Index for [T; N]\nwhere\n [T]: Index\n")),(0,i.kt)("p",{parentName:"admonition"},"In other words, if your type implements ",(0,i.kt)("inlineCode",{parentName:"p"},"SliceIndex")," trait, it can be used\nfor indexing. As of now, this trait has all of its required methods experimental\nand is marked as ",(0,i.kt)("inlineCode",{parentName:"p"},"unsafe"),".")),(0,i.kt)("p",null,"Another problem is a requirement for indexing either ",(0,i.kt)("inlineCode",{parentName:"p"},"[Vec]")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec>"),".\nThis requirement could be countered by removing inner type ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec")," and constraining\nit by a trait ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," (or ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexMut")," respectively) in a following way"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn index<'a, C, T>(v: &'a [C], idx: &Vector2D) -> &'a C::Output\nwhere\n usize: TryFrom,\n >::Error: Debug,\n T: Copy,\n C: Index\n{\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\n &v[y][x]\n}\n")),(0,i.kt)("p",null,"Given this, we can also give a more meaningful typename for indexing type, such\nas ",(0,i.kt)("inlineCode",{parentName:"p"},"I"),"."),(0,i.kt)("h4",{id:"checking-bounds"},"Checking bounds"),(0,i.kt)("p",null,"Now we can get to the boundary checks, it is very similar, but a more\u2026 dirty.\nFirst approach that came up was to convert the indices in ",(0,i.kt)("inlineCode",{parentName:"p"},"Vector2D")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"usize"),",\nbut when you add the indices up, e.g. when checking the neighbors, you can end\nup with negative values which, unlike in C++, causes an error (instead of underflow\nthat you can use to your advantage; you can easily guess how)."),(0,i.kt)("p",null,"So how can we approach this then? Well\u2026 we will convert the bounds instead of\nthe indices and that lead us to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn in_range(v: &[Vec], idx: &Vector2D) -> bool\nwhere\n usize: TryInto,\n >::Error: Debug,\n T: PartialOrd + Copy,\n{\n idx.y >= 0.try_into().unwrap()\n && idx.y < v.len().try_into().unwrap()\n && idx.x >= 0.try_into().unwrap()\n && idx.x\n < v[TryInto::::try_into(idx.y).unwrap()]\n .len()\n .try_into()\n .unwrap()\n}\n")),(0,i.kt)("p",null,"You can tell that it's definitely a shitty code. Let's improve it now! We will\nget back to the original idea, but do it better. We know that we cannot convert\nnegative values into ",(0,i.kt)("inlineCode",{parentName:"p"},"usize"),", ",(0,i.kt)("strong",{parentName:"p"},"but")," we also know that conversion like that\nreturns a ",(0,i.kt)("inlineCode",{parentName:"p"},"Result")," which we can use to our advantage."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn in_range(v: &[Vec], idx: &Vector2D) -> bool\nwhere\n T: Copy,\n usize: TryFrom,\n{\n usize::try_from(idx.y)\n .and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))\n .unwrap_or(false)\n}\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Result")," is a type similar to ",(0,i.kt)("inlineCode",{parentName:"p"},"Either")," in Haskell and it allows us to chain\nmultiple operations on correct results or propagate the original error without\ndoing anything. Let's dissect it one-by-one."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"try_from")," is a method implemented in ",(0,i.kt)("inlineCode",{parentName:"p"},"TryFrom")," trait, that allows you to convert\ntypes and either successfully convert them or fail (with a reasonable error). This\nmethod returns ",(0,i.kt)("inlineCode",{parentName:"p"},"Result"),"."),(0,i.kt)("p",null,"We call ",(0,i.kt)("inlineCode",{parentName:"p"},"and_then")," on that ",(0,i.kt)("em",{parentName:"p"},"result"),", let's have a look at the type signature of\n",(0,i.kt)("inlineCode",{parentName:"p"},"and_then"),", IMO it explains more than enough:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn and_then(self, op: F) -> Result\nwhere\n F: FnOnce(T) -> Result\n")),(0,i.kt)("p",null,"OK\u2026 So it takes the result and a function and returns another result with\ndifferent value and different error. However we can see that the function, which\nrepresents an operation on a result, takes just the value, i.e. it doesn't care\nabout any previous error. To make it short:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("inlineCode",{parentName:"p"},"and_then")," allows us to run an operation, which can fail, on the correct result")),(0,i.kt)("p",null,"We parsed a ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," index and now we try to convert the ",(0,i.kt)("inlineCode",{parentName:"p"},"x")," index with ",(0,i.kt)("inlineCode",{parentName:"p"},"try_from"),"\nagain, but on that result we use ",(0,i.kt)("inlineCode",{parentName:"p"},"map")," rather than ",(0,i.kt)("inlineCode",{parentName:"p"},"and_then"),", why would that be?"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn map(self, op: F) -> Result\nwhere\n F: FnOnce(T) -> U\n")),(0,i.kt)("p",null,"Huh\u2026 ",(0,i.kt)("inlineCode",{parentName:"p"},"map")," performs an operation that ",(0,i.kt)("strong",{parentName:"p"},"cannot")," fail. And finally we use\n",(0,i.kt)("inlineCode",{parentName:"p"},"unwrap_or")," which takes the value from result, or in case of an error returns the\ndefault that we define."),(0,i.kt)("p",null,"How does this work then? If ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," is negative, the conversion fails and the error\npropagates all the way to ",(0,i.kt)("inlineCode",{parentName:"p"},"unwrap_or"),", if ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," can be a correct ",(0,i.kt)("inlineCode",{parentName:"p"},"usize")," value, then\nwe do the same with ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),". If ",(0,i.kt)("inlineCode",{parentName:"p"},"x")," is negative, we propagate the error as with ",(0,i.kt)("inlineCode",{parentName:"p"},"y"),",\nand if it's not, then we check whether it exceeds the higher bounds or not."),(0,i.kt)("h3",{id:"solution"},"Solution"),(0,i.kt)("p",null,"Relatively simple, you just need follow the rules and not get too smart, otherwise\nit will get back at you."),(0,i.kt)("h2",{id:"day-9-rope-bridge"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/9"},"Day 9: Rope Bridge")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"We get a rope with knots and we want to track how many different positions are\nvisited with the rope's tail.")),(0,i.kt)("p",null,"By this day, I have come to a conclusion that current skeleton for each day\ngenerates a lot of boilerplate. And even though it can be easily copied, it's\njust a waste of space and unnecessary code. Let's \u201csimplify\u201d this (on one end\nwhile creating monster on the other end). I've gone through what we need in the\npreparations for the AoC. Let's sum up our requirements:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"parsing"),(0,i.kt)("li",{parentName:"ul"},"part 1 & 2"),(0,i.kt)("li",{parentName:"ul"},"running on sample / input"),(0,i.kt)("li",{parentName:"ul"},"tests")),(0,i.kt)("p",null,"Parsing and implementation of both parts is code that changes each day and we\ncannot do anything about it. However running and testing can be simplified!"),(0,i.kt)("p",null,"Let's introduce and export a new module ",(0,i.kt)("inlineCode",{parentName:"p"},"solution")," that will take care of all of\nthis. We will start by introducing a trait for each day."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait Solution {\n fn parse_input>(pathname: P) -> Input;\n\n fn part_1(input: &Input) -> Output;\n fn part_2(input: &Input) -> Output;\n}\n")),(0,i.kt)("p",null,"This does a lot of work for us already, we have defined a trait and for each day\nwe will create a structure representing a specific day. That structure will also\nimplement the ",(0,i.kt)("inlineCode",{parentName:"p"},"Solution")," trait."),(0,i.kt)("p",null,"Now we need to get rid of the boilerplate, we can't get rid of the ",(0,i.kt)("inlineCode",{parentName:"p"},"main")," function,\nbut we can at least move out the functionality."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'fn run(type_of_input: &str) -> Result<()>\nwhere\n Self: Sized,\n{\n tracing_subscriber::fmt()\n .with_env_filter(EnvFilter::from_default_env())\n .with_target(false)\n .with_file(true)\n .with_line_number(true)\n .without_time()\n .compact()\n .init();\n color_eyre::install()?;\n\n let input = Self::parse_input(format!("{}s/{}.txt", type_of_input, Self::day()));\n\n info!("Part 1: {}", Self::part_1(&input));\n info!("Part 2: {}", Self::part_2(&input));\n\n Ok(())\n}\n\nfn main() -> Result<()>\nwhere\n Self: Sized,\n{\n Self::run("input")\n}\n')),(0,i.kt)("p",null,"This is all part of the ",(0,i.kt)("inlineCode",{parentName:"p"},"Solution")," trait, which can implement methods while being\ndependent on what is provided by the implementing types. In this case, we just\nneed to bound the ",(0,i.kt)("inlineCode",{parentName:"p"},"Output")," type to implement ",(0,i.kt)("inlineCode",{parentName:"p"},"Display")," that is necessary for the\n",(0,i.kt)("inlineCode",{parentName:"p"},"info!")," and format string there."),(0,i.kt)("p",null,"Now we can get to first of the nasty things we are going to do\u2026 And it is the\n",(0,i.kt)("inlineCode",{parentName:"p"},"day()")," method that you can see being used when constructing path to the input\nfile. That method will generate a name of the file, e.g. ",(0,i.kt)("inlineCode",{parentName:"p"},"day01")," and we know that\nwe can ",(0,i.kt)("em",{parentName:"p"},"somehow")," deduce it from the structure name, given we name it reasonably."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'fn day() -> String {\n let mut day = String::from(type_name::().split("::").next().unwrap());\n day.make_ascii_lowercase();\n\n day.to_string()\n}\n')),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"type_name")),(0,i.kt)("p",{parentName:"admonition"},"This feature is still experimental and considered to be internal, it is not\nadvised to use it any production code.")),(0,i.kt)("p",null,"And now we can get to the nastiest stuff \ud83d\ude29 We will ",(0,i.kt)("strong",{parentName:"p"},"generate")," the tests!"),(0,i.kt)("p",null,"We want to be able to generate tests for sample input in a following way:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"test_sample!(day_01, Day01, 42, 69);\n")),(0,i.kt)("p",null,"There's not much we can do, so we will write a macro to generate the tests for us."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[macro_export]\nmacro_rules! test_sample {\n ($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {\n #[cfg(test)]\n mod $mod_name {\n use super::*;\n\n #[test]\n fn test_part_1() {\n let sample =\n $day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));\n assert_eq!($day_struct::part_1(&sample), $part_1);\n }\n\n #[test]\n fn test_part_2() {\n let sample =\n $day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));\n assert_eq!($day_struct::part_2(&sample), $part_2);\n }\n }\n };\n}\n')),(0,i.kt)("p",null,"We have used it in a similar way as macros in C/C++, one of the things that we\ncan use to our advantage is defining \u201ctype\u201d of the parameters for the macro. All\nparameters have their name prefixed with ",(0,i.kt)("inlineCode",{parentName:"p"},"$")," sign and you can define various \u201cforms\u201d\nof your macro. Let's go through it!"),(0,i.kt)("p",null,"We have following parameters:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"$mod_name")," which represents the name for the module with tests, it is typed\nwith ",(0,i.kt)("inlineCode",{parentName:"li"},"ident")," which means that we want a valid identifier to be passed in."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"$day_struct")," represents the structure that will be used for tests, it is typed\nwith ",(0,i.kt)("inlineCode",{parentName:"li"},"tt")," which represents a ",(0,i.kt)("em",{parentName:"li"},"token tree"),", in our case it is a type."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"$part_X")," represents the expected output for the ",(0,i.kt)("inlineCode",{parentName:"li"},"X"),"th part and is of type ",(0,i.kt)("inlineCode",{parentName:"li"},"expr"),"\nwhich literally means an ",(0,i.kt)("em",{parentName:"li"},"expression"),".")),(0,i.kt)("p",null,"Apart from that we need to use ",(0,i.kt)("inlineCode",{parentName:"p"},"#[macro_export]")," to mark the macro as exported\nfor usage outside of the module. Now our skeleton looks like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'use aoc_2022::*;\n\ntype Input = String;\ntype Output = String;\n\nstruct DayXX;\nimpl Solution for DayXX {\n fn parse_input>(pathname: P) -> Input {\n file_to_string(pathname)\n }\n\n fn part_1(input: &Input) -> Output {\n todo!()\n }\n\n fn part_2(input: &Input) -> Output {\n todo!()\n }\n}\n\nfn main() -> Result<()> {\n // DayXX::run("sample")\n DayXX::main()\n}\n\n// test_sample!(day_XX, DayXX, , );\n')),(0,i.kt)("h3",{id:"solution-1"},"Solution"),(0,i.kt)("p",null,"Not much to talk about, it is relatively easy to simulate."),(0,i.kt)("h2",{id:"day-10-cathode-ray-tube"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/10"},"Day 10: Cathode-Ray Tube")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Emulating basic arithmetic operations on a CPU and drawing on CRT based on the\nCPU's accumulator.")),(0,i.kt)("p",null,"In this day I have discovered an issue with my design of the ",(0,i.kt)("inlineCode",{parentName:"p"},"Solution")," trait.\nAnd the issue is caused by different types of ",(0,i.kt)("inlineCode",{parentName:"p"},"Output")," for the part 1 and part 2."),(0,i.kt)("p",null,"Problem is relatively simple and consists of simulating a CPU, I have approached\nit in a following way:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"fn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {\n instructions\n .iter()\n .fold(State::new(), |state, instruction| {\n state.execute(instruction, &mut out)\n });\n\n out\n}\n")),(0,i.kt)("p",null,"We just take the instructions, we have some state of the CPU and we execute the\ninstructions one-by-one. Perfect usage of the ",(0,i.kt)("inlineCode",{parentName:"p"},"fold")," (or ",(0,i.kt)("inlineCode",{parentName:"p"},"reduce")," as you may know\nit from other languages)."),(0,i.kt)("p",null,"You can also see that we have an ",(0,i.kt)("inlineCode",{parentName:"p"},"Output")," type, so the question is how can we fix\nthat problem. And the answer is very simple and ",(0,i.kt)("em",{parentName:"p"},"functional"),". Rust allows you to\nhave an ",(0,i.kt)("inlineCode",{parentName:"p"},"enumeration")," that can ",(0,i.kt)("em",{parentName:"p"},"bear")," some other values apart from the type itself."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"We could've seen something like this with the ",(0,i.kt)("inlineCode",{parentName:"p"},"Result")," type that can be\ndefined as"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"enum Result {\n Ok(T),\n Err(E)\n}\n")),(0,i.kt)("h6",{parentName:"admonition",id:"what-does-that-mean-though"},"What does that mean though?"),(0,i.kt)("p",{parentName:"admonition"},"When we have an ",(0,i.kt)("inlineCode",{parentName:"p"},"Ok")," value, it has the result itself, and when we get an ",(0,i.kt)("inlineCode",{parentName:"p"},"Err"),"\nvalue, it has the error. This also allows us to handle ",(0,i.kt)("em",{parentName:"p"},"results")," in a rather\npretty way:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'match do_something(x) {\n Ok(y) => {\n println!("SUCCESS: {}", y);\n },\n Err(y) => {\n eprintln!("ERROR: {}", y);\n }\n}\n'))),(0,i.kt)("p",null,"My solution has a following outline:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"fn execute(&self, i: &Instruction, output: &mut Output) -> State {\n // execute the instruction\n\n // collect results if necessary\n match output {\n Output::Part1(x) => self.execute_part_1(y, x),\n Output::Part2(x) => self.execute_part_2(y, x),\n }\n\n // return the obtained state\n new_state\n}\n")),(0,i.kt)("p",null,"You might think that it's a perfectly reasonable thing to do. Yes, ",(0,i.kt)("strong",{parentName:"p"},"but")," notice\nthat the ",(0,i.kt)("inlineCode",{parentName:"p"},"match")," statement doesn't ",(0,i.kt)("em",{parentName:"p"},"collect")," the changes in any way and also we\npass ",(0,i.kt)("inlineCode",{parentName:"p"},"output")," by ",(0,i.kt)("inlineCode",{parentName:"p"},"&mut"),", so it is shared across each ",(0,i.kt)("em",{parentName:"p"},"iteration")," of the ",(0,i.kt)("inlineCode",{parentName:"p"},"fold"),"."),(0,i.kt)("p",null,"The dirty and ingenious thing is that ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),"s are passed by ",(0,i.kt)("inlineCode",{parentName:"p"},"&mut")," too and therefore\nthey are directly modified by the helper functions. To sum it up and let it sit"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"We are ",(0,i.kt)("strong",{parentName:"p"},"collecting")," the result ",(0,i.kt)("strong",{parentName:"p"},"into")," an ",(0,i.kt)("strong",{parentName:"p"},"enumeration")," that is ",(0,i.kt)("strong",{parentName:"p"},"shared"),"\nacross ",(0,i.kt)("strong",{parentName:"p"},"all")," iterations of ",(0,i.kt)("inlineCode",{parentName:"p"},"fold"),".")),(0,i.kt)("h3",{id:"solution-2"},"Solution"),(0,i.kt)("p",null,"Similar to ",(0,i.kt)("em",{parentName:"p"},"Day 9"),", but there are some technical details that can get you."),(0,i.kt)("h2",{id:"day-11-monkey-in-the-middle"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/11"},"Day 11: Monkey in the Middle")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Simulation of monkeys throwing stuff around and measuring your stress levels\nwhile your stuff is being passed around.")),(0,i.kt)("p",null,"I think I decided to use regular expressions here for the first time, cause\nparsing the input was a pain."),(0,i.kt)("p",null,"Also I didn't expect to implement Euclidean algorithm in Rust\u2026"),(0,i.kt)("h3",{id:"solution-3"},"Solution"),(0,i.kt)("p",null,"Again, we're just running a simulation. Though I must admit it was very easy to\nmake a small technical mistakes that could affect the final results very late."),(0,i.kt)("h2",{id:"day-12-hill-climbing-algorithm"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/12"},"Day 12: Hill Climbing Algorithm")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Finding shortest path up the hill and also shortest path down to the ground while\nalso rolling down the hill\u2026")),(0,i.kt)("p",null,"As I have said in the ",(0,i.kt)("em",{parentName:"p"},"tl;dr"),", we are looking for the shortest path, but the start\nand goal differ for the part 1 and 2. So I have decided to refactor my solution\nto a BFS algorithm that takes necessary parameters via functions:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"fn bfs(\n graph: &[Vec], start: &Position, has_edge: F, is_target: G\n) -> Option\nwhere\n F: Fn(&[Vec], &Position, &Position) -> bool,\n G: Fn(&[Vec], &Position) -> bool\n")),(0,i.kt)("p",null,"We pass the initial vertex from the caller and everything else is left to the BFS\nalgorithm, based on the ",(0,i.kt)("inlineCode",{parentName:"p"},"has_edge")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"is_target")," functions."),(0,i.kt)("p",null,"This was easy! And that is not very usual in Rust once you want to pass around\nfunctions. \ud83d\udc40"),(0,i.kt)("h3",{id:"solution-4"},"Solution"),(0,i.kt)("p",null,"Looking for the shortest path\u2026 Must be Dijkstra, right? ",(0,i.kt)("strong",{parentName:"p"},"Nope!")," Half of the\nReddit got jebaited though. In all fairness, nothing stops you from implementing\nthe Dijkstra's algorithm for finding the shortest path, ",(0,i.kt)("strong",{parentName:"p"},"but")," if you know that\nall connected vertices are in a unit (actually ",(0,i.kt)("span",{parentName:"p",className:"math math-inline"},(0,i.kt)("span",{parentName:"span",className:"katex"},(0,i.kt)("span",{parentName:"span",className:"katex-mathml"},(0,i.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,i.kt)("semantics",{parentName:"math"},(0,i.kt)("mrow",{parentName:"semantics"},(0,i.kt)("mi",{parentName:"mrow"},"d"),(0,i.kt)("mo",{parentName:"mrow"},"="),(0,i.kt)("mn",{parentName:"mrow"},"1")),(0,i.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"d = 1")))),(0,i.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,i.kt)("span",{parentName:"span",className:"base"},(0,i.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,i.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,i.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,i.kt)("span",{parentName:"span",className:"mrel"},"="),(0,i.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,i.kt)("span",{parentName:"span",className:"base"},(0,i.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,i.kt)("span",{parentName:"span",className:"mord"},"1"))))),") distance from each other,\nthen you know that running Dijkstra is equivalent to running BFS, only with worse\ntime complexity, because of the priority heap instead of the queue."),(0,i.kt)("h2",{id:"day-13-distress-signal"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/13"},"Day 13: Distress Signal")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Processing packets with structured data from the distress signal.")),(0,i.kt)("p",null,"You can implement a lot of traits if you want to. It is ",(0,i.kt)("em",{parentName:"p"},"imperative")," to implement\nordering on the packets. I had a typo, so I also proceeded to implement a ",(0,i.kt)("inlineCode",{parentName:"p"},"Display"),"\ntrait for debugging purposes:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'impl Display for Packet {\n fn fmt(&self, f: &mut std::fmt::Formatter<\'_>) -> std::fmt::Result {\n match self {\n Packet::Integer(x) => write!(f, "{x}"),\n Packet::List(lst) => write!(f, "[{}]", lst.iter().map(|p| format!("{p}")).join(",")),\n }\n }\n}\n')),(0,i.kt)("h3",{id:"solution-5"},"Solution"),(0,i.kt)("p",null,"A lot of technical details\u2026 Parsing is nasty too\u2026"),(0,i.kt)("h2",{id:"day-14-regolith-reservoir"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/14"},"Day 14: Regolith Reservoir")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Let's simulate falling sand grain-by-grain.")),(0,i.kt)("p",null,"Again, both parts are relatively similar with minimal changes, so it is a good\nidea to refactor it a bit. Similar approach to the ",(0,i.kt)("a",{parentName:"p",href:"#day-12-hill-climbing-algorithm"},"BFS above"),". Also this is the\nfirst day where I ran into efficiency issues and had to redo my solution to speed\nit up just a bit."),(0,i.kt)("h3",{id:"solution-6"},"Solution"),(0,i.kt)("p",null,"Tedious."),(0,i.kt)("h2",{id:"post-mortem"},"Post Mortem"),(0,i.kt)("h3",{id:"indexing"},"Indexing"),(0,i.kt)("p",null,"I was asked about the indexing after publishing the blog. And truly it is rather\ncomplicated topic, especially after releasing ",(0,i.kt)("inlineCode",{parentName:"p"},"SliceIndex")," trait. I couldn't\nleave it be, so I tried to implement the ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexMut")," trait."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"I have also mentioned that the ",(0,i.kt)("inlineCode",{parentName:"p"},"SliceIndex")," trait is ",(0,i.kt)("inlineCode",{parentName:"p"},"unsafe"),", but truth be told,\nonly ",(0,i.kt)("em",{parentName:"p"},"unsafe")," part are the 2 methods that are named ",(0,i.kt)("inlineCode",{parentName:"p"},"*unchecked*"),". Anyways, I will\nbe implementing the ",(0,i.kt)("inlineCode",{parentName:"p"},"Index*")," traits for now, rather than the ",(0,i.kt)("inlineCode",{parentName:"p"},"SliceIndex"),".")),(0,i.kt)("p",null,"It's relatively straightforward\u2026"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"impl Index> for [C]\nwhere\n I: Copy + TryInto,\n >::Error: Debug,\n C: Index,\n{\n type Output = C::Output;\n\n fn index(&self, index: Vector2D) -> &Self::Output {\n let (x, y): (usize, usize) =\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\n &self[y][x]\n }\n}\n\nimpl IndexMut> for [C]\nwhere\n I: Copy + TryInto,\n >::Error: Debug,\n C: IndexMut,\n{\n fn index_mut(&mut self, index: Vector2D) -> &mut Self::Output {\n let (x, y): (usize, usize) =\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\n &mut self[y][x]\n }\n}\n")),(0,i.kt)("p",null,"We can see a lot of similarities to the implementation of ",(0,i.kt)("inlineCode",{parentName:"p"},"index")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"index_mut"),"\nfunctions. In the end, they are 1:1, just wrapped in the trait that provides a\nsyntax sugar for ",(0,i.kt)("inlineCode",{parentName:"p"},"container[idx]"),"."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"I have also switched from using the ",(0,i.kt)("inlineCode",{parentName:"p"},"TryFrom")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"TryInto")," trait, since it better\nmatches what we are using, the ",(0,i.kt)("inlineCode",{parentName:"p"},".try_into")," rather than ",(0,i.kt)("inlineCode",{parentName:"p"},"usize::try_from"),"."),(0,i.kt)("p",{parentName:"admonition"},"Also implementing ",(0,i.kt)("inlineCode",{parentName:"p"},"TryFrom")," automatically provides you with a ",(0,i.kt)("inlineCode",{parentName:"p"},"TryInto")," trait,\nsince it is relatively easy to implement. Just compare the following:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub trait TryFrom: Sized {\n type Error;\n\n fn try_from(value: T) -> Result;\n}\n\npub trait TryInto: Sized {\n type Error;\n\n fn try_into(self) -> Result;\n}\n"))),(0,i.kt)("p",null,"OK, so we have our trait implemented, we should be able to use ",(0,i.kt)("inlineCode",{parentName:"p"},"container[index]"),",\nright? Yes\u2026 but actually no \ud83d\ude26"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"error[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\n --\x3e src/bin/day08.rs:26:18\n |\n26 | if trees[pos] > tallest {\n | ^^^ slice indices are of type `usize` or ranges of `usize`\n |\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\n\nerror[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\n --\x3e src/bin/day08.rs:30:28\n |\n30 | max(tallest, trees[pos])\n | ^^^ slice indices are of type `usize` or ranges of `usize`\n |\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\n\nerror[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\n --\x3e src/bin/day08.rs:52:28\n |\n52 | let max_height = trees[position];\n | ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`\n |\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\n")),(0,i.kt)("p",null,"Why? We have it implemented for the slices (",(0,i.kt)("inlineCode",{parentName:"p"},"[C]"),"), why doesn't it work? Well,\nthe fun part consists of the fact that in other place, where we were using it,\nwe were passing the ",(0,i.kt)("inlineCode",{parentName:"p"},"&[Vec]"),", but this is coming from a helper functions that\ntake ",(0,i.kt)("inlineCode",{parentName:"p"},"&Vec>")," instead. And\u2026 we don't implement ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"IndexMut")," for\nthose. Just for the slices. \ud83e\udd2f ",(0,i.kt)("em",{parentName:"p"},"What are we going to do about it?")),(0,i.kt)("p",null,"We can either start copy-pasting or be smarter about it\u2026 I choose to be smarter,\nso let's implement a macro! The only difference across the implementations are\nthe types of the outer containers. Implementation doesn't differ ",(0,i.kt)("strong",{parentName:"p"},"at all"),"!"),(0,i.kt)("p",null,"Implementing the macro can be done in a following way:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"macro_rules! generate_indices {\n ($container:ty) => {\n impl Index> for $container\n where\n I: Copy + TryInto,\n >::Error: Debug,\n C: Index,\n {\n type Output = C::Output;\n\n fn index(&self, index: Vector2D) -> &Self::Output {\n let (x, y): (usize, usize) =\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\n &self[y][x]\n }\n }\n\n impl IndexMut> for $container\n where\n I: Copy + TryInto,\n >::Error: Debug,\n C: IndexMut,\n {\n fn index_mut(&mut self, index: Vector2D) -> &mut Self::Output {\n let (x, y): (usize, usize) =\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\n &mut self[y][x]\n }\n }\n };\n}\n")),(0,i.kt)("p",null,"And now we can simply do"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"generate_indices!(VecDeque);\ngenerate_indices!([C]);\ngenerate_indices!(Vec);\n// generate_indices!([C; N], const N: usize);\n")),(0,i.kt)("p",null,"The last type (I took the inspiration from the implementations of the ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," and\n",(0,i.kt)("inlineCode",{parentName:"p"},"IndexMut")," traits) is a bit problematic, because of the ",(0,i.kt)("inlineCode",{parentName:"p"},"const N: usize")," part,\nwhich I haven't managed to be able to parse. And that's how I got rid of the error."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If I were to use 2D-indexing over ",(0,i.kt)("inlineCode",{parentName:"p"},"[C; N]")," slices, I'd probably just go with the\ncopy-paste, cause the cost of this \u201cmonstrosity\u201d outweighs the benefits of no DRY.")),(0,i.kt)("h4",{id:"cause-of-the-problem"},"Cause of the problem"),(0,i.kt)("p",null,"This issue is relatively funny. If you don't use any type aliases, just the raw\ntypes, you'll get suggested certain changes by the ",(0,i.kt)("em",{parentName:"p"},"clippy"),". For example if you\nconsider the following piece of code"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'fn get_sum(nums: &Vec) -> i32 {\n nums.iter().sum()\n}\n\nfn main() {\n let nums = vec![1, 2, 3];\n println!("Sum: {}", get_sum(&nums));\n}\n')),(0,i.kt)("p",null,"and you run ",(0,i.kt)("em",{parentName:"p"},"clippy")," on it, you will get"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'Checking playground v0.0.1 (/playground)\nwarning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do\n --\x3e src/main.rs:1:18\n |\n1 | fn get_sum(nums: &Vec) -> i32 {\n | ^^^^^^^^^ help: change this to: `&[i32]`\n |\n = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg\n = note: `#[warn(clippy::ptr_arg)]` on by default\n\nwarning: `playground` (bin "playground") generated 1 warning\n Finished dev [unoptimized + debuginfo] target(s) in 0.61s\n')),(0,i.kt)("p",null,"However, if you introduce a type alias, such as"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"type Numbers = Vec;\n")),(0,i.kt)("p",null,"Then ",(0,i.kt)("em",{parentName:"p"},"clippy")," won't say anything, cause there is literally nothing to suggest.\nHowever the outcome is not the same\u2026"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/37cf4872.0b06d100.js b/assets/js/37cf4872.0b06d100.js new file mode 100644 index 0000000..c98a0f7 --- /dev/null +++ b/assets/js/37cf4872.0b06d100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7979],{821:i=>{i.exports=JSON.parse('{"label":"postconditions","permalink":"/ib002/tags/postconditions","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"algorithms-correctness/postcondition-ambiguity","title":"Vague postconditions and proving correctness of algorithms","description":"Debugging and testing with precise postconditions.\\n","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"}]}')}}]); \ No newline at end of file diff --git a/assets/js/3aef4518.ae37468c.js b/assets/js/3aef4518.ae37468c.js new file mode 100644 index 0000000..0e69deb --- /dev/null +++ b/assets/js/3aef4518.ae37468c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1505],{1921:t=>{t.exports=JSON.parse('{"label":"iterative","permalink":"/ib002/tags/iterative","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"graphs/iterative-and-iterators","title":"Iterative algorithms via iterators","description":"Iterative DFS using iterators.\\n","permalink":"/ib002/graphs/iterative-and-iterators"}]}')}}]); \ No newline at end of file diff --git a/assets/js/3da4b779.a33bbff3.js b/assets/js/3da4b779.a33bbff3.js new file mode 100644 index 0000000..526c2be --- /dev/null +++ b/assets/js/3da4b779.a33bbff3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2177],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=p(n),h=i,c=m["".concat(l,".").concat(h)]||m[h]||d[h]||o;return n?a.createElement(c,r(r({ref:t},u),{},{components:n})):a.createElement(c,r({ref:t},u))}));function c(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),i=(n(7294),n(3905));const o={title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14",slug:"aoc-2022/4th-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},r=void 0,s={permalink:"/blog/aoc-2022/4th-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/04-week-4.md",source:"@site/blog/aoc-2022/04-week-4.md",title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:15.175,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14",slug:"aoc-2022/4th-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"How can Copr help with broken dependencies",permalink:"/blog/2023/08/02/copr"},nextItem:{title:"3rd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/3rd-week"}},l={authorsImageUrls:[void 0]},p=[{value:"Day 22: Monkey Map",id:"day-22-monkey-map",level:2},{value:"Solution",id:"solution",level:3},{value:"Column iterator",id:"column-iterator",level:4},{value:"Walking around the map",id:"walking-around-the-map",level:4},{value:"Problems",id:"problems",level:4},{value:"Clippy",id:"clippy",level:4},{value:"Day 23: Unstable Diffusion",id:"day-23-unstable-diffusion",level:2},{value:"Solution",id:"solution-1",level:3},{value:"Day 24: Blizzard Basin",id:"day-24-blizzard-basin",level:2},{value:"Solution",id:"solution-2",level:3},{value:"Breakdown",id:"breakdown",level:4},{value:"Evaluating the blizzards",id:"evaluating-the-blizzards",level:4},{value:"Shortest-path algorithm",id:"shortest-path-algorithm",level:4},{value:"Min-heap",id:"min-heap",level:4},{value:"Day 25: Full of Hot Air",id:"day-25-full-of-hot-air",level:2},{value:"Solution",id:"solution-3",level:3},{value:"Converting from &str",id:"converting-from-str",level:4},{value:"Converting to String",id:"converting-to-string",level:4},{value:"Adjusting the code",id:"adjusting-the-code",level:4},{value:"Summary",id:"summary",level:2},{value:"Advent of Code",id:"advent-of-code",level:3},{value:"with Rust",id:"with-rust",level:3}],u={toc:p},m="wrapper";function d(e){let{components:t,...o}=e;return(0,i.kt)(m,(0,a.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Let's go through the fourth week of ",(0,i.kt)("a",{parentName:"p",href:"https://adventofcode.com"},(0,i.kt)("em",{parentName:"a"},"Advent of Code"))," in Rust."),(0,i.kt)("h2",{id:"day-22-monkey-map"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/22"},"Day 22: Monkey Map")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Simulating a movement on a 2D map with given instructions. Map becomes a cube in\nthe 2nd part\u2026")),(0,i.kt)("admonition",{title:"Rant",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"This was the most obnoxious problem of this year\u2026 and a lot of Rust issues have\nbeen hit.")),(0,i.kt)("h3",{id:"solution"},"Solution"),(0,i.kt)("p",null,"It seems like a very simple problem to solve, but with very obnoxious changes in\nthe 2nd part and also it's relatively hard to decompose \xbbproperly\xab."),(0,i.kt)("h4",{id:"column-iterator"},"Column iterator"),(0,i.kt)("p",null,"In the first part of the problem it was needed to know the boundaries of each\nrow and column, since I stored them in ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec>")," and padded with spaces\nto ensure I have a rectangular 2D \u201carray\u201d. However when you wanted to go through\neach row and column to determine the boundaries, it was very easy to do for the\nrows (cause each row is a ",(0,i.kt)("inlineCode",{parentName:"p"},"Vec")," element), but not for the columns, since they\nspan multiple rows."),(0,i.kt)("p",null,"For this use case I have implemented my own ",(0,i.kt)("em",{parentName:"p"},"column iterator"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"pub struct ColumnIterator<'a, T> {\n map: &'a [Vec],\n column: usize,\n\n i: usize,\n}\n\nimpl<'a, T> ColumnIterator<'a, T> {\n pub fn new(map: &'a [Vec], column: usize) -> ColumnIterator<'a, T> {\n Self { map, column, i: 0 }\n }\n}\n\nimpl<'a, T> Iterator for ColumnIterator<'a, T> {\n type Item = &'a T;\n\n fn next(&mut self) -> Option {\n if self.i >= self.map.len() {\n return None;\n }\n\n self.i += 1;\n Some(&self.map[self.i - 1][self.column])\n }\n}\n")),(0,i.kt)("p",null,"Given this piece of an iterator, it is very easy to factor out the common\nfunctionality between the rows and columns into:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"let mut find_boundaries = |constructor: fn(usize) -> Orientation,\n iterator: &mut dyn Iterator,\n upper_bound,\n i| {\n let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');\n let start = first_non_empty.next().unwrap().0 as isize;\n\n let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');\n let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;\n\n boundaries.insert(constructor(i), start..end);\n};\n")),(0,i.kt)("p",null,"And then use it as such:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"// construct all horizontal boundaries\n(0..map.len()).for_each(|row| {\n find_boundaries(\n Orientation::horizontal,\n &mut map[row].iter(),\n map[row].len(),\n row,\n );\n});\n\n// construct all vertical boundaries\n(0..map[0].len()).for_each(|col| {\n find_boundaries(\n Orientation::vertical,\n &mut ColumnIterator::new(&map, col),\n map.len(),\n col,\n );\n});\n")),(0,i.kt)("h4",{id:"walking-around-the-map"},"Walking around the map"),(0,i.kt)("p",null,"Once the 2nd part got introduced, you start to think about a way how not to\ncopy-paste a lot of stuff (I haven't avoided it anyways\u2026). In this problem, I've\nchosen to introduce a trait (i.e. ",(0,i.kt)("em",{parentName:"p"},"interface"),") for 2D and 3D walker."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"trait Wrap: Clone {\n type State;\n\n // simulation\n fn is_blocked(&self) -> bool;\n fn step(&mut self, steps: isize);\n fn turn_left(&mut self);\n fn turn_right(&mut self);\n\n // movement\n fn next(&self) -> (Self::State, Direction);\n\n // final answer\n fn answer(&self) -> Output;\n}\n")),(0,i.kt)("p",null,"Each walker maintains its own state and also provides the functions that are\nused during the simulation. The \u201cpromised\u201d methods are separated into:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"simulation"),"-related: that are used during the simulation from the ",(0,i.kt)("inlineCode",{parentName:"li"},".fold()")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"movement"),"-related: just a one method that holds most of the logic differences\nbetween 2D and 3D"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"final answer"),": which extracts the ",(0,i.kt)("em",{parentName:"li"},"proof of solution")," from the\nimplementation-specific walker")),(0,i.kt)("p",null,"Both 2D and 3D versions borrow the original input and therefore you must\nannotate the lifetime of it:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"struct Wrap2D<'a> {\n input: &'a Input,\n position: Position,\n direction: Direction,\n}\nimpl<'a> Wrap2D<'a> {\n fn new(input: &'a Input) -> Wrap2D<'a> {\n// \u2026\n")),(0,i.kt)("h4",{id:"problems"},"Problems"),(0,i.kt)("p",null,"I have used a lot of closures for this problem and once I introduced a parameter\nthat was of unknown type (apart from the fact it implements a specific trait), I\ngot suggested a \u201cfix\u201d for the compilation error that resulted in something that\nwas not possible to parse, cause it, more than likely, violated the grammar."),(0,i.kt)("p",null,"In a similar fashion, I have been suggested changes that led to a code that\ndidn't make sense by just looking at it (there was no need to try the changes),\nfor example one suggested change in the closure parameter caused disapperance of\nthe parameter name. \ud83d\ude04"),(0,i.kt)("h4",{id:"clippy"},"Clippy"),(0,i.kt)("p",null,"I have to admit that Clippy was rather helpful here, I'll include two examples\nof rather smart suggestions."),(0,i.kt)("p",null,"When writing the parsing for this problem, the first thing I have spotted on the\n",(0,i.kt)("inlineCode",{parentName:"p"},"char")," was the ",(0,i.kt)("inlineCode",{parentName:"p"},".is_digit()")," function that takes a radix as a parameter. Clippy\nnoticed that I use ",(0,i.kt)("inlineCode",{parentName:"p"},"radix = 10")," and suggested switching to ",(0,i.kt)("inlineCode",{parentName:"p"},".is_ascii_digit()"),"\nthat does exactly the same thing:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},"- .take_while(|c| c.is_digit(10))\n+ .take_while(|c| c.is_ascii_digit())\n")),(0,i.kt)("p",null,"Another useful suggestion appeared when working with the iterators and I wanted\nto get the ",(0,i.kt)("span",{parentName:"p",className:"math math-inline"},(0,i.kt)("span",{parentName:"span",className:"katex"},(0,i.kt)("span",{parentName:"span",className:"katex-mathml"},(0,i.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,i.kt)("semantics",{parentName:"math"},(0,i.kt)("mrow",{parentName:"semantics"},(0,i.kt)("mi",{parentName:"mrow"},"n")),(0,i.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,i.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,i.kt)("span",{parentName:"span",className:"base"},(0,i.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,i.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"))))),"-th element from it. You know the ",(0,i.kt)("inlineCode",{parentName:"p"},".skip()"),", you know the\n",(0,i.kt)("inlineCode",{parentName:"p"},".next()"),", just \u201cslap\u201d them together and we're done for \ud83d\ude01 Well, I got\nsuggested to use ",(0,i.kt)("inlineCode",{parentName:"p"},".nth()")," that does exactly the combination of the two mentioned\nmethods on iterators:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},"- match it.clone().skip(skip).next().unwrap() {\n+ match it.clone().nth(skip).unwrap() {\n")),(0,i.kt)("h2",{id:"day-23-unstable-diffusion"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/23"},"Day 23: Unstable Diffusion")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Simulating movement of elves around with a set of specific rules.")),(0,i.kt)("h3",{id:"solution-1"},"Solution"),(0,i.kt)("p",null,"There's not much to mention since it's just a cellular automaton simulation\n(even though the AoC rules for cellular automatons usually get out of hand\n\ud83d\ude09)."),(0,i.kt)("p",null,"Although I had a need to determine boundaries of the elves' positions and ended\nup with a nasty DRY violation. Knowing that you you're looking for maximum and\nminimum that are, of course, exactly the same except for initial values and\ncomparators, it looks like a rather simple fix, but typing in Rust is something\nelse, right? In the end I settled for a function that computes both boundaries\nwithout any duplication while using a closure:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"fn get_bounds(positions: &Input) -> (Vector2D, Vector2D) {\n let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {\n positions\n .iter()\n .fold(Vector2D::new(init, init), |acc, elf| {\n Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))\n })\n };\n\n (f(isize::MAX, &min::), f(isize::MIN, &max::))\n}\n")),(0,i.kt)("p",null,"This function returns a pair of 2D vectors that represent opposite points of the\nbounding rectangle of all elves."),(0,i.kt)("p",null,"You might ask why would we need a closure and the answer is that ",(0,i.kt)("inlineCode",{parentName:"p"},"positions"),"\ncannot be captured from within the nested function, only via closure. One more\nfun fact on top of that is the type of the comparator"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"&dyn Fn(isize, isize) -> isize\n")),(0,i.kt)("p",null,"Once we remove the ",(0,i.kt)("inlineCode",{parentName:"p"},"dyn")," keyword, compiler yells at us and also includes a way\nhow to get a more thorough explanation of the error by running"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ rustc --explain E0782\n")),(0,i.kt)("p",null,"which shows us"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Trait objects must include the `dyn` keyword.\n\nErroneous code example:\n\n```\ntrait Foo {}\nfn test(arg: Box) {} // error!\n```\n\nTrait objects are a way to call methods on types that are not known until\nruntime but conform to some trait.\n\nTrait objects should be formed with `Box`, but in the code above\n`dyn` is left off.\n\nThis makes it harder to see that `arg` is a trait object and not a\nsimply a heap allocated type called `Foo`.\n\nTo fix this issue, add `dyn` before the trait name.\n\n```\ntrait Foo {}\nfn test(arg: Box) {} // ok!\n```\n\nThis used to be allowed before edition 2021, but is now an error.\n")),(0,i.kt)("admonition",{title:"Rant",type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"Not all of the explanations are helpful though, in some cases they might be even\nmore confusing than helpful, since they address ",(0,i.kt)("em",{parentName:"p"},"very simple")," use cases."),(0,i.kt)("p",{parentName:"admonition"},"As you can see, even in this case there are two sides to the explanations:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"it explains why you need to use ",(0,i.kt)("inlineCode",{parentName:"li"},"dyn"),", but"),(0,i.kt)("li",{parentName:"ul"},"it still mentions that trait objects need to be heap-allocated via ",(0,i.kt)("inlineCode",{parentName:"li"},"Box"),"\nthat, as you can see in my snippet, ",(0,i.kt)("strong",{parentName:"li"},"does not")," apply here \ud83d\ude04 IMO it's\ncaused by the fact that we are borrowing it and therefore we don't need to\ncare about the size or whereabouts of it."))),(0,i.kt)("admonition",{title:"C++ parallel",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you dive into the explanation above, you can notice that the ",(0,i.kt)("inlineCode",{parentName:"p"},"Box"),"\npattern is very helpful for using types that are not known during compile-time.\nYou would use a very similar approach in C++ when parsing some data structure\nfrom input (let's say JSON for example)."),(0,i.kt)("p",{parentName:"admonition"},"On the other hand, in this case, it doesn't really make much sense, cause you\ncan clearly see that the types ",(0,i.kt)("strong",{parentName:"p"},"are known")," during the compile-time, which in\nC++ could be easily resolved by templating the helper function.")),(0,i.kt)("h2",{id:"day-24-blizzard-basin"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/24"},"Day 24: Blizzard Basin")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Navigating your way through a basin with series of blizzards that move around\nyou as you move.")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"It's second to last day and I went \u201c",(0,i.kt)("em",{parentName:"p"},"bonkers"),"\u201d on the Rust \ud83d\ude04 Proceed to\nread ",(0,i.kt)("em",{parentName:"p"},"Solution")," part on your own risk.")),(0,i.kt)("h3",{id:"solution-2"},"Solution"),(0,i.kt)("p",null,"You are given a map with blizzards all over the place and you're supposed to\nfind the minimum time it requires you to walk through the basin without getting\nin any of the blizzards."),(0,i.kt)("h4",{id:"breakdown"},"Breakdown"),(0,i.kt)("p",null,"Relatively simple, yet a bit annoying, approach can be taken. It's technically\na shortest-path algorithm implementation with some relaxation restrictions and\nbeing able to stay on one position for some time, so each ",(0,i.kt)("em",{parentName:"p"},"vertex")," of the graph\nis determined by the position on the map and the ",(0,i.kt)("em",{parentName:"p"},"timestamp"),". I have chosen to\nuse ",(0,i.kt)("inlineCode",{parentName:"p"},"Vector3D"),", since ",(0,i.kt)("inlineCode",{parentName:"p"},"x")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," attributes can be used for the position\nand, well, let's use ",(0,i.kt)("inlineCode",{parentName:"p"},"z")," for a timestamp, cause why not, right? \ud83d\ude09"),(0,i.kt)("h4",{id:"evaluating-the-blizzards"},"Evaluating the blizzards"),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"I think that this is the most perverted abuse of the traits in the whole 4 weeks\nof AoC in Rust\u2026")),(0,i.kt)("p",null,"The blizzards move along their respective directions in time and loop around in\ntheir respective row/column. Each vertex holds position ",(0,i.kt)("strong",{parentName:"p"},"and")," time, so we can\n",(0,i.kt)("em",{parentName:"p"},"just")," index the basin with the vertex itself, right? Yes, we can \ud83d\ude08"),(0,i.kt)("admonition",{title:"Fun fact",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"While writing this part, I've recognized unnecessary verbosity in the code and\ncleaned it up a bit. The changed version is shown here and the original was just\nmore verbose.")),(0,i.kt)("p",null,"I'll skip the boring parts of checking bounds and entry/exit of the basin \ud83d\ude09\nWe can easily calculate positions of the blizzards using a modular arithmetics:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"impl Index for Basin {\n type Output = char;\n\n fn index(&self, index: Position) -> &Self::Output {\n // \u2039skipped boring parts\u203a\n\n // We need to account for the loops of the blizzards\n let width = self.cols - 2;\n let height = self.rows - 2;\n\n let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;\n [\n (\n index.y() as usize,\n blizzard_origin(width, -1, index.z(), index.x()),\n '>',\n ),\n (\n index.y() as usize,\n blizzard_origin(width, 1, index.z(), index.x()),\n '<',\n ),\n (\n blizzard_origin(height, -1, index.z(), index.y()),\n index.x() as usize,\n 'v',\n ),\n (\n blizzard_origin(height, 1, index.z(), index.y()),\n index.x() as usize,\n '^',\n ),\n ]\n .iter()\n .find_map(|&(y, x, direction)| {\n if self.map[y][x] == direction {\n Some(&self.map[y][x])\n } else {\n None\n }\n })\n .unwrap_or(&'.')\n }\n}\n")),(0,i.kt)("p",null,"As you can see, there is an expression for calculating the original position and\nit's used multiple times, so why not take it out to a lambda, right? \ud83d\ude09"),(0,i.kt)("p",null,"I couldn't get the ",(0,i.kt)("inlineCode",{parentName:"p"},"rustfmt")," to format the ",(0,i.kt)("inlineCode",{parentName:"p"},"for"),"-loop nicely, so I've just\ndecided to go with iterating over an elements of a slice. I have used, once\nagain, a combination of two functions (",(0,i.kt)("inlineCode",{parentName:"p"},"find_map")," in this case) to do 2 things\nat once and at the end, if we haven't found any blizzard, we just return the\nempty space."),(0,i.kt)("p",null,"I think it's a very ",(0,i.kt)("em",{parentName:"p"},"nice")," (and naughty) way how to use the ",(0,i.kt)("inlineCode",{parentName:"p"},"Index")," trait, don't\nyou think?"),(0,i.kt)("h4",{id:"shortest-path-algorithm"},"Shortest-path algorithm"),(0,i.kt)("p",null,"For the shortest path you can choose and adjust any of the common shortest-path\nalgorithms, in my case, I have decided to use ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/A*_search_algorithm"},(0,i.kt)("em",{parentName:"a"},"A","*"))," instead of Dijkstra's\nalgorithm, since it better reflects the ",(0,i.kt)("em",{parentName:"p"},"cost")," function."),(0,i.kt)("admonition",{title:"Comparison of costs",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"With the Dijkstra's algorithm I would proceed with the ",(0,i.kt)("inlineCode",{parentName:"p"},"time")," attribute used as\na priority for the queue."),(0,i.kt)("p",{parentName:"admonition"},"Whereas with the ",(0,i.kt)("em",{parentName:"p"},"A","*"),", I have chosen to use both time and Manhattan distance\nthat promotes vertices closer to the exit ",(0,i.kt)("strong",{parentName:"p"},"and")," with a minimum time taken.")),(0,i.kt)("p",null,"Cost function is, of course, a closure \ud83d\ude09"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());\n")),(0,i.kt)("p",null,"And also for checking the possible moves from the current vertex, I have\nimplemented, yet another, closure that yields an iterator with the next moves:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"let next_positions = |p| {\n [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]\n .iter()\n .filter_map(move |&(x, y, t)| {\n let next_p = p + Vector3D::new(x, y, t);\n\n if basin[next_p] == '.' {\n Some(next_p)\n } else {\n None\n }\n })\n};\n")),(0,i.kt)("h4",{id:"min-heap"},"Min-heap"),(0,i.kt)("p",null,"In this case I had a need to use the priority queue taking the elements with the\nlowest cost as the prioritized ones. Rust only offers you the ",(0,i.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html"},(0,i.kt)("inlineCode",{parentName:"a"},"BinaryHeap"))," and\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\nelements in wrapped in a ",(0,i.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/cmp/struct.Reverse.html"},(0,i.kt)("inlineCode",{parentName:"a"},"Reverse"))," (as is even showed in the linked ",(0,i.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html#min-heap"},"docs of\nthe ",(0,i.kt)("inlineCode",{parentName:"a"},"BinaryHeap")),"). However the wrapping affects the type of the heap and also\npopping the most prioritized elements yields values wrapped in the ",(0,i.kt)("inlineCode",{parentName:"p"},"Reverse"),"."),(0,i.kt)("p",null,"For this purpose I have just taken the max-heap and wrapped it as a whole in a\nseparate structure providing just the desired methods:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"use std::cmp::{Ord, Reverse};\nuse std::collections::BinaryHeap;\n\npub struct MinHeap {\n heap: BinaryHeap>,\n}\n\nimpl MinHeap {\n pub fn new() -> MinHeap {\n MinHeap {\n heap: BinaryHeap::new(),\n }\n }\n\n pub fn push(&mut self, item: T) {\n self.heap.push(Reverse(item))\n }\n\n pub fn pop(&mut self) -> Option {\n self.heap.pop().map(|Reverse(x)| x)\n }\n}\n\nimpl Default for MinHeap {\n fn default() -> Self {\n Self::new()\n }\n}\n")),(0,i.kt)("p",null,"Rest is just the algorithm implementation which is not that interesting."),(0,i.kt)("h2",{id:"day-25-full-of-hot-air"},(0,i.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/25"},"Day 25: Full of Hot Air")),(0,i.kt)("admonition",{title:"tl;dr",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Playing around with a numbers in a ",(0,i.kt)("em",{parentName:"p"},"special")," base.")),(0,i.kt)("p",null,"Getting flashbacks to the ",(0,i.kt)("em",{parentName:"p"},"IB111 Foundations of Programming"),"\u2026 Very nice \u201cproblem\u201d\nwith a rather easy solution, as the last day always seems to be."),(0,i.kt)("h3",{id:"solution-3"},"Solution"),(0,i.kt)("p",null,"Implementing 2 functions, converting from the ",(0,i.kt)("em",{parentName:"p"},"SNAFU base")," and back to the ",(0,i.kt)("em",{parentName:"p"},"SNAFU"),"\n",(0,i.kt)("em",{parentName:"p"},"base")," representation. Let's do a bit more though! I have implemented two functions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"from_snafu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"to_snafu"))),(0,i.kt)("p",null,"Now it is apparent that all I do is number to string and string to number. Hmm\u2026\nthat sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers\nand implement the traits that we need."),(0,i.kt)("p",null,"Let's start with a structure:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]\nstruct SNAFU {\n value: i64,\n}\n")),(0,i.kt)("h4",{id:"converting-from-str"},"Converting from ",(0,i.kt)("inlineCode",{parentName:"h4"},"&str")),(0,i.kt)("p",null,"We will start by implementing the ",(0,i.kt)("inlineCode",{parentName:"p"},"FromStr")," trait that will help us parse our input.\nThis is rather simple, I can just take the ",(0,i.kt)("inlineCode",{parentName:"p"},"from_snafu")," function, copy-paste it\ninto the ",(0,i.kt)("inlineCode",{parentName:"p"},"from_str")," method and the number I get will be wrapped in ",(0,i.kt)("inlineCode",{parentName:"p"},"Result")," and\n",(0,i.kt)("inlineCode",{parentName:"p"},"SNAFU")," structure."),(0,i.kt)("h4",{id:"converting-to-string"},"Converting to ",(0,i.kt)("inlineCode",{parentName:"h4"},"String")),(0,i.kt)("p",null,"This is more fun. In some cases you need to implement only one trait and others\nare automatically implemented using that one trait. In our case, if you look in\nthe documentation, you can see that ",(0,i.kt)("inlineCode",{parentName:"p"},"ToString")," trait is automatically implemented\nfor any type that implements ",(0,i.kt)("inlineCode",{parentName:"p"},"Display")," trait."),(0,i.kt)("p",null,"Let's implement the ",(0,i.kt)("inlineCode",{parentName:"p"},"Display")," trait then. We should be able to use the ",(0,i.kt)("inlineCode",{parentName:"p"},"to_snafu"),"\nfunction and just take the ",(0,i.kt)("inlineCode",{parentName:"p"},"self.value")," from the ",(0,i.kt)("inlineCode",{parentName:"p"},"SNAFU")," structure."),(0,i.kt)("p",null,"And for the convenience of tests, we can also implement a rather simple ",(0,i.kt)("inlineCode",{parentName:"p"},"From"),"\ntrait for the ",(0,i.kt)("inlineCode",{parentName:"p"},"SNAFU"),"."),(0,i.kt)("h4",{id:"adjusting-the-code"},"Adjusting the code"),(0,i.kt)("p",null,"After those changes we need to adjust the code and tests."),(0,i.kt)("p",null,"Parsing of the input is very easy, before we have used the lines, now we parse\neverything:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"}," fn parse_input>(pathname: P) -> Input {\n- file_to_lines(pathname)\n+ file_to_structs(pathname)\n }\n")),(0,i.kt)("p",null,"Part 1 needs to be adjusted a bit too:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"}," fn part_1(input: &Input) -> Output {\n- to_snafu(input.iter().map(|s| from_snafu(s)).sum())\n+ SNAFU::from(input.iter().map(|s| s.value).sum::()).to_string()\n }\n")),(0,i.kt)("p",null,"You can also see that it simplifies the meaning a bit and it is more explicit than\nthe previous versions."),(0,i.kt)("p",null,"And for the tests:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"}," #[test]\n fn test_from() {\n- for (n, s) in EXAMPLES.iter() {\n- assert_eq!(from_snafu(s), *n);\n+ for (&n, s) in EXAMPLES.iter() {\n+ assert_eq!(s.parse::().unwrap().value, n);\n }\n }\n \n #[test]\n fn test_to() {\n- for (n, s) in EXAMPLES.iter() {\n- assert_eq!(to_snafu(*n), s.to_string());\n+ for (&n, s) in EXAMPLES.iter() {\n+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());\n }\n")),(0,i.kt)("h2",{id:"summary"},"Summary"),(0,i.kt)("p",null,"Let's wrap the whole thing up! Keeping in mind both AoC and the Rust\u2026"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Finished advent calendar :smile:",src:n(3321).Z,width:"2417",height:"1984"})),(0,i.kt)("h3",{id:"advent-of-code"},"Advent of Code"),(0,i.kt)("p",null,"This year was quite fun, even though most of the solutions and posts came in\nlater on (",(0,i.kt)("em",{parentName:"p"},"cough")," in '23 ",(0,i.kt)("em",{parentName:"p"},"cough"),"). Day 22 was the most obnoxious one\u2026 And also\nit feels like I used priority queues and tree data structures ",(0,i.kt)("strong",{parentName:"p"},"a lot")," \ud83d\udc40"),(0,i.kt)("h3",{id:"with-rust"},"with Rust"),(0,i.kt)("p",null,"I must admit that a lot of compiler warnings and errors were very useful. Even\nthough I still found some instances where they didn't help at all or cause even\nworse issues than I had. Compilation times have been addressed with the caching."),(0,i.kt)("p",null,"Building my first tree data structure in Rust has been a very \u201cinteresting\u201d\njourney. Being able to write a more generic BFS algorithm that allows you to not\nduplicate code while still mantaining the desired functionality contributes to\na very readable code."),(0,i.kt)("p",null,"I am definitely much more aware of the basic things that bloated Python is\nmissing, yet Rust has them\u2026"),(0,i.kt)("p",null,"Using explicit types and writing down placeholder functions with ",(0,i.kt)("inlineCode",{parentName:"p"},"todo!()"),"\nmacros is very pleasant, since it allows you to easily navigate the type system\nduring the development when you don't even need to be sure how are you going to\nput the smaller pieces together."),(0,i.kt)("p",null,"I have used a plethora of traits and also implemented some of them to either be\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\ncopying, equality comparison, etc."),(0,i.kt)("p",null,"I confess to touching more \u201ccursed\u201d parts of the Rust, such as macros to\ndeclutter the copy-paste for tests or writing my own structures that need to\ncarry a lifetime for their own fields."),(0,i.kt)("p",null,"tl;dr Relatively pleasant language until you hit brick wall \ud83d\ude09"),(0,i.kt)("hr",null),(0,i.kt)("p",null,"See you next year! Maybe in Rust, maybe not \ud83d\ude43"))}d.isMDXComponent=!0},3321:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/calendar-f891b624f3e0efb34bba582100a7d8df.png"}}]); \ No newline at end of file diff --git a/assets/js/3de247b5.66851c3c.js b/assets/js/3de247b5.66851c3c.js new file mode 100644 index 0000000..ae8ce8a --- /dev/null +++ b/assets/js/3de247b5.66851c3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3184],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),m=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},h=function(e){var t=m(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,o=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),c=m(a),p=r,k=c["".concat(o,".").concat(p)]||c[p]||d[p]||s;return a?n.createElement(k,i(i({ref:t},h),{},{components:a})):n.createElement(k,i({ref:t},h))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=p;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>V,contentTitle:()=>x,default:()=>W,frontMatter:()=>O,metadata:()=>U,toc:()=>M});var n=a(7462),r=a(7294),s=a(3905),i=a(6010),l=a(2466),o=a(6550),m=a(1980),h=a(7392),c=a(12);function d(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function p(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??d(a);return function(e){const t=(0,h.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function k(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function g(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,m._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function u(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,s=p(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!k({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[o,m]=g({queryString:a,groupId:n}),[h,d]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,s]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:n}),u=(()=>{const e=o??h;return k({value:e,tabValues:s})?e:null})();(0,r.useLayoutEffect)((()=>{u&&l(u)}),[u]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!k({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),m(e),d(e)}),[m,d,s]),tabValues:s}}var b=a(2389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function y(e){let{className:t,block:a,selectedValue:s,selectValue:o,tabValues:m}=e;const h=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const t=e.currentTarget,a=h.indexOf(t),n=m[a].value;n!==s&&(c(t),o(n))},p=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=h.indexOf(e.currentTarget)+1;t=h[a]??h[0];break}case"ArrowLeft":{const a=h.indexOf(e.currentTarget)-1;t=h[a]??h[h.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},m.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>h.push(e),onKeyDown:p,onClick:d},l,{className:(0,i.Z)("tabs__item",N.tabItem,l?.className,{"tabs__item--active":s===t})}),a??t)})))}function f(e){let{lazy:t,children:a,selectedValue:n}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function R(e){const t=u(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",N.tabList)},r.createElement(y,(0,n.Z)({},e,t)),r.createElement(f,(0,n.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(R,(0,n.Z)({key:String(t)},e))}const Z={tabItem:"tabItem_Ymn6"};function v(e){let{children:t,hidden:a,className:n}=e;return r.createElement("div",{role:"tabpanel",className:(0,i.Z)(Z.tabItem,n),hidden:a},t)}const O={id:"rules",title:"On the rules of the red-black tree",description:"Shower thoughts on the rules of the red-black tree.\n",tags:["red-black trees","balanced trees"],last_update:{date:new Date("2023-06-10T00:00:00.000Z")}},x=void 0,U={unversionedId:"rb-trees/rules",id:"rb-trees/rules",title:"On the rules of the red-black tree",description:"Shower thoughts on the rules of the red-black tree.\n",source:"@site/ib002/08-rb-trees/2023-06-10-rules.md",sourceDirName:"08-rb-trees",slug:"/rb-trees/rules",permalink:"/ib002/rb-trees/rules",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/08-rb-trees/2023-06-10-rules.md",tags:[{label:"red-black trees",permalink:"/ib002/tags/red-black-trees"},{label:"balanced trees",permalink:"/ib002/tags/balanced-trees"}],version:"current",lastUpdatedAt:1686355200,formattedLastUpdatedAt:"Jun 10, 2023",frontMatter:{id:"rules",title:"On the rules of the red-black tree",description:"Shower thoughts on the rules of the red-black tree.\n",tags:["red-black trees","balanced trees"],last_update:{date:"2023-06-10T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f",permalink:"/ib002/rb-trees/applications"},next:{title:"Graphs",permalink:"/ib002/category/graphs"}},V={},M=[{value:"Introduction",id:"introduction",level:2},{value:"1\xaa Every node is either red or black.",id:"1\xaa-every-node-is-either-red-or-black",level:2},{value:"Do I really need the nodes to be explicitly colored?",id:"do-i-really-need-the-nodes-to-be-explicitly-colored",level:3},{value:"Black height",id:"black-height",level:4},{value:"Isomorphic trees",id:"isomorphic-trees",level:4},{value:"2\xaa The root is black.",id:"2\xaa-the-root-is-black",level:2},{value:"3\xaa Every leaf (nil) is black.",id:"3\xaa-every-leaf-nil-is-black",level:2},{value:"4\xaa If a node is red, then both its children are black.",id:"4\xaa-if-a-node-is-red-then-both-its-children-are-black",level:2},{value:"5\xaa For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.",id:"5\xaa-for-each-node-all-simple-paths-from-the-node-to-descendant-leaves-contain-the-same-number-of-black-nodes",level:2}],j={toc:M},E="wrapper";function W(e){let{components:t,...r}=e;return(0,s.kt)(E,(0,n.Z)({},j,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h2",{id:"introduction"},"Introduction"),(0,s.kt)("p",null,"Have you ever thought about the red-black tree rules in more depth? Why are they\nformulated the way they are? How come they keep the tree balanced? Let's go through\neach of the red-black tree rules and try to change, break and contemplate about\nthem."),(0,s.kt)("p",null,"We expect that you are familiar with the following set of the rules",(0,s.kt)("sup",{parentName:"p",id:"fnref-1"},(0,s.kt)("a",{parentName:"sup",href:"#fn-1",className:"footnote-ref"},"1")),":"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"Every node is either red or black."),(0,s.kt)("li",{parentName:"ol"},"The root is black."),(0,s.kt)("li",{parentName:"ol"},"Every leaf (",(0,s.kt)("inlineCode",{parentName:"li"},"nil"),") is black."),(0,s.kt)("li",{parentName:"ol"},"If a node is red, then both its children are black."),(0,s.kt)("li",{parentName:"ol"},"For each node, all simple paths from the node to descendant leaves contain the\nsame number of black nodes.")),(0,s.kt)("p",null,"Each section will go into ",(0,s.kt)("em",{parentName:"p"},"reasonable")," details of each rule."),(0,s.kt)("h2",{id:"1\xaa-every-node-is-either-red-or-black"},"1\xaa Every node is either red or black."),(0,s.kt)("p",null,"OK\u2026 This one is very simple. It is just a definition and is used in all other\nrules. Not much to talk about here. Or is there?"),(0,s.kt)("h3",{id:"do-i-really-need-the-nodes-to-be-explicitly-colored"},"Do I really need the nodes to be explicitly colored?"),(0,s.kt)("p",null,"The answer is no. Balancing of the red-black trees is \u201cenforced\u201d by the 4th and\n5th rule in the enumeration above. There are many ways you can avoid using colors."),(0,s.kt)("h4",{id:"black-height"},"Black height"),(0,s.kt)("p",null,"We mentioned the 4th and 5th rule and that it enforces the balancing. What does\nit mean for us?"),(0,s.kt)("p",null,"Well, we definitely do not have to use the colors, which even as a ",(0,s.kt)("em",{parentName:"p"},"boolean")," flag\nwould take at least 1 byte of space (and usually even more), cause\u2026 well, it is\neasier for the CPU to work with words rather than single bits."),(0,s.kt)("p",null,"We could use the black height, couldn't we? It would mean more memory used, cause\nit should be ideally big and unsigned. Can we tell the color of a node from the\nblack height? Of course we can, if my child has the same black height as I do,\nit means that there was no black node added on the path between us and therefore\nmy child would be colored red."),(0,s.kt)("p",null,"Example of a red-black tree that keeps count of black nodes on paths to the\nleaves follows:"),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Red-black tree with black height",src:a(5021).Z+"#gh-light-mode-only",width:"923",height:"539"}),"\n",(0,s.kt)("img",{alt:"Red-black tree with black height",src:a(9493).Z+"#gh-dark-mode-only",width:"923",height:"539"})),(0,s.kt)("p",null,"We mark the ",(0,s.kt)("em",{parentName:"p"},"black heights")," in superscript. You can see that all leaves have the\nblack height equal to ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"1")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1"))))),". Let's take a look at some of the interesting cases:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"If we take a look at the node with ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mtext",{parentName:"mrow"},"key"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"9")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\text{key} = 9")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord text"},(0,s.kt)("span",{parentName:"span",className:"mord"},"key")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"9"))))),", we can see that it is\ncoloured red and its black height is 1, because it is a leaf."),(0,s.kt)("p",{parentName:"li"},"Let's look at its parent (node with ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mtext",{parentName:"mrow"},"key"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"8")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\text{key} = 8")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord text"},(0,s.kt)("span",{parentName:"span",className:"mord"},"key")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"8"))))),"). On its left side it has\n",(0,s.kt)("inlineCode",{parentName:"p"},"nil")," and on its right side the ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"9")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"9")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"9"))))),". And its black height is still ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"1")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1"))))),", cause\nexcept for the ",(0,s.kt)("inlineCode",{parentName:"p"},"nil")," leaves, there are no other black nodes."),(0,s.kt)("p",{parentName:"li"},"We can clearly see that if a node has the same black height as its parent, it\nis a red node.")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("p",{parentName:"li"},"Now let's take a look at the root with ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mtext",{parentName:"mrow"},"key"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"3")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\text{key} = 3")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord text"},(0,s.kt)("span",{parentName:"span",className:"mord"},"key")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"))))),". It has a black height\nof 3. Both of its children are black nodes and have black height of 2."),(0,s.kt)("p",{parentName:"li"},"We can see that if a node has its height 1 lower than its parent, it is a black\nnode."),(0,s.kt)("p",{parentName:"li"},"The reasoning behind it is rather simple, we count the black nodes all the way\nto the leaves, therefore if my parent has a higher black height, it means that\non the path from me to my parent there is a black node, but the only node added\nis me, therefore I must be black."))),(0,s.kt)("h4",{id:"isomorphic-trees"},"Isomorphic trees"),(0,s.kt)("p",null,"One of the other ways to avoid using color is storing the red-black tree in some\nisomorphic tree. The structure of 2-3-4 tree allows us to avoid using the color\ncompletely. This is a bit different approach, cause we would be basically using\ndifferent tree, so we keep this note in just as a \u201chack\u201d."),(0,s.kt)("h2",{id:"2\xaa-the-root-is-black"},"2\xaa The root is black."),(0,s.kt)("p",null,"This rule might seem like a very important one, but overall is not. You can safely\nomit this rule, but you also need to deal with the consequences."),(0,s.kt)("p",null,"Let's refresh our memory with the algorithm of ",(0,s.kt)("em",{parentName:"p"},"insert fixup"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"WHILE z.p.color == Red\n IF z.p == z.p.p.left\n y = z.p.p.right\n\n IF y.color == Red\n z.p.color = Black\n y.color = Black\n z.p.p.color = Red\n z = z.p.p\n ELSE\n IF z == z.p.right\n z = z.p\n Left-Rotate(T, z)\n z.p.color = Black\n z.p.p.color = Red\n Right-Rotate(T, z.p.p)\n ELSE (same as above with \u201cright\u201d and \u201cleft\u201d exchanged)\n\nT.root.color = Black\n")),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"If you have tried to implement any of the more complex data structures, such as\nred-black trees, etc., in a statically typed language that also checks you for\n",(0,s.kt)("inlineCode",{parentName:"p"},"NULL"),"-correctness (e.g. ",(0,s.kt)("em",{parentName:"p"},"mypy")," or even C# with nullable reference types), you\nmight have run into numerous issues in the cases where you are 100% sure that you\ncannot obtain ",(0,s.kt)("inlineCode",{parentName:"p"},"NULL")," because of the invariants, but the static type checking\ndoesn't know that."),(0,s.kt)("p",{parentName:"admonition"},"The issue we hit with the ",(0,s.kt)("em",{parentName:"p"},"insert fixup")," is very similar.")),(0,s.kt)("p",null,"You might not realize the issue at the first sight, but the algorithm described\nwith the pseudocode above expects that the root of the red-black tree is black by\nboth relying on the invariant in the algorithm and afterwards by enforcing the\nblack root property."),(0,s.kt)("p",null,"If we decide to omit this condition, we need to address it in the pseudocodes\naccordingly."),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:"center"},"Usual algorithm with black root"),(0,s.kt)("th",{parentName:"tr",align:"center"},"Allowing red root"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"1\xaa insertion",src:a(3416).Z+"#gh-light-mode-only",width:"179",height:"155"}),(0,s.kt)("img",{alt:"1\xaa insertion",src:a(4522).Z+"#gh-dark-mode-only",width:"179",height:"155"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"1\xaa insertion",src:a(477).Z+"#gh-light-mode-only",width:"179",height:"155"}),(0,s.kt)("img",{alt:"1\xaa insertion",src:a(8125).Z+"#gh-dark-mode-only",width:"179",height:"155"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"2\xaa insertion",src:a(6850).Z+"#gh-light-mode-only",width:"227",height:"251"}),(0,s.kt)("img",{alt:"2\xaa insertion",src:a(8983).Z+"#gh-dark-mode-only",width:"227",height:"251"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"2\xaa insertion",src:a(446).Z+"#gh-light-mode-only",width:"227",height:"251"}),(0,s.kt)("img",{alt:"2\xaa insertion",src:a(9905).Z+"#gh-dark-mode-only",width:"227",height:"251"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"3\xaa insertion",src:a(9657).Z+"#gh-light-mode-only",width:"371",height:"251"}),(0,s.kt)("img",{alt:"3\xaa insertion",src:a(9296).Z+"#gh-dark-mode-only",width:"371",height:"251"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"3\xaa insertion",src:a(841).Z+"#gh-light-mode-only",width:"371",height:"251"}),(0,s.kt)("img",{alt:"3\xaa insertion",src:a(7659).Z+"#gh-dark-mode-only",width:"371",height:"251"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"4\xaa insertion",src:a(515).Z+"#gh-light-mode-only",width:"419",height:"347"}),(0,s.kt)("img",{alt:"4\xaa insertion",src:a(9123).Z+"#gh-dark-mode-only",width:"419",height:"347"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"4\xaa insertion",src:a(2658).Z+"#gh-light-mode-only",width:"419",height:"347"}),(0,s.kt)("img",{alt:"4\xaa insertion",src:a(2979).Z+"#gh-dark-mode-only",width:"419",height:"347"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"5\xaa insertion",src:a(8747).Z+"#gh-light-mode-only",width:"419",height:"347"}),(0,s.kt)("img",{alt:"5\xaa insertion",src:a(7518).Z+"#gh-dark-mode-only",width:"419",height:"347"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"5\xaa insertion",src:a(2014).Z+"#gh-light-mode-only",width:"419",height:"347"}),(0,s.kt)("img",{alt:"5\xaa insertion",src:a(5959).Z+"#gh-dark-mode-only",width:"419",height:"347"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"6\xaa insertion",src:a(8317).Z+"#gh-light-mode-only",width:"563",height:"347"}),(0,s.kt)("img",{alt:"6\xaa insertion",src:a(2193).Z+"#gh-dark-mode-only",width:"563",height:"347"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"6\xaa insertion",src:a(162).Z+"#gh-light-mode-only",width:"563",height:"347"}),(0,s.kt)("img",{alt:"6\xaa insertion",src:a(1105).Z+"#gh-dark-mode-only",width:"563",height:"347"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"7\xaa insertion",src:a(8204).Z+"#gh-light-mode-only",width:"563",height:"443"}),(0,s.kt)("img",{alt:"7\xaa insertion",src:a(6986).Z+"#gh-dark-mode-only",width:"563",height:"443"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"7\xaa insertion",src:a(355).Z+"#gh-light-mode-only",width:"563",height:"443"}),(0,s.kt)("img",{alt:"7\xaa insertion",src:a(4300).Z+"#gh-dark-mode-only",width:"563",height:"443"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"8\xaa insertion",src:a(345).Z+"#gh-light-mode-only",width:"635",height:"443"}),(0,s.kt)("img",{alt:"8\xaa insertion",src:a(1988).Z+"#gh-dark-mode-only",width:"635",height:"443"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"8\xaa insertion",src:a(2530).Z+"#gh-light-mode-only",width:"635",height:"443"}),(0,s.kt)("img",{alt:"8\xaa insertion",src:a(363).Z+"#gh-dark-mode-only",width:"635",height:"443"}))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"9\xaa insertion",src:a(6464).Z+"#gh-light-mode-only",width:"755",height:"443"}),(0,s.kt)("img",{alt:"9\xaa insertion",src:a(437).Z+"#gh-dark-mode-only",width:"755",height:"443"})),(0,s.kt)("td",{parentName:"tr",align:"center"},(0,s.kt)("img",{alt:"9\xaa insertion",src:a(6039).Z+"#gh-light-mode-only",width:"755",height:"443"}),(0,s.kt)("img",{alt:"9\xaa insertion",src:a(3122).Z+"#gh-dark-mode-only",width:"755",height:"443"}))))),(0,s.kt)("h2",{id:"3\xaa-every-leaf-nil-is-black"},"3\xaa Every leaf (",(0,s.kt)("inlineCode",{parentName:"h2"},"nil"),") is black."),(0,s.kt)("p",null,"Now, this rule is a funny one. What does this imply and can I interpret this in\nsome other way? Let's go through some of the possible ways I can look at this and\nhow would they affect the other rules and balancing."),(0,s.kt)("p",null,"We will experiment with the following tree:\n",(0,s.kt)("img",{src:a(6769).Z+"#gh-light-mode-only",width:"899",height:"539"}),"\n",(0,s.kt)("img",{src:a(4086).Z+"#gh-dark-mode-only",width:"899",height:"539"})),(0,s.kt)("p",null,"We should start by counting the black nodes from root to the ",(0,s.kt)("inlineCode",{parentName:"p"},"nil")," leaves based\non the rules. We have multiple similar paths, so we will pick only the interesting\nones."),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"What happens if we do not count the ",(0,s.kt)("inlineCode",{parentName:"li"},"nil")," leaves?"),(0,s.kt)("li",{parentName:"ol"},"What happens if we consider leaves the nodes with ",(0,s.kt)("em",{parentName:"li"},"no descendants"),", i.e. both\nof node's children are ",(0,s.kt)("inlineCode",{parentName:"li"},"nil"),"?"),(0,s.kt)("li",{parentName:"ol"},"What happens if we do not count the ",(0,s.kt)("inlineCode",{parentName:"li"},"nil")," leaves, but consider nodes with at\nleast one ",(0,s.kt)("inlineCode",{parentName:"li"},"nil")," descendant as leaves?")),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:"right"},"path"),(0,s.kt)("th",{parentName:"tr",align:"right"},"black nodes"),(0,s.kt)("th",{parentName:"tr",align:"right"},"1\xaa idea"),(0,s.kt)("th",{parentName:"tr",align:"right"},"2\xaa idea"),(0,s.kt)("th",{parentName:"tr",align:"right"},"3\xaa idea"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"right"},(0,s.kt)("inlineCode",{parentName:"td"},"3 \u2192 1 \u2192 0 \u2192 nil")),(0,s.kt)("td",{parentName:"tr",align:"right"},"4"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3"),(0,s.kt)("td",{parentName:"tr",align:"right"},"4"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3")),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"right"},(0,s.kt)("inlineCode",{parentName:"td"},"3 \u2192 5 \u2192 7 \u2192 8 \u2192 nil")),(0,s.kt)("td",{parentName:"tr",align:"right"},"4"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3"),(0,s.kt)("td",{parentName:"tr",align:"right"},"-"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3")),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:"right"},(0,s.kt)("inlineCode",{parentName:"td"},"3 \u2192 5 \u2192 7 \u2192 8 \u2192 9 \u2192 nil")),(0,s.kt)("td",{parentName:"tr",align:"right"},"4"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3"),(0,s.kt)("td",{parentName:"tr",align:"right"},"4"),(0,s.kt)("td",{parentName:"tr",align:"right"},"3")))),(0,s.kt)("p",null,"First idea is very easy to execute and it is also very easy to argue about its\ncorrectness. It is correct, because we just subtract one from each of the paths.\nThis affects ",(0,s.kt)("strong",{parentName:"p"},"all")," paths and therefore results in global decrease by one."),(0,s.kt)("p",null,"Second idea is a bit more complicated. We count the ",(0,s.kt)("inlineCode",{parentName:"p"},"nil"),"s, so the count is ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))),"\nas it should be. However, there is one difference. Second path no longer satisfies\nthe condition of a ",(0,s.kt)("em",{parentName:"p"},"leaf"),". Technically it relaxes the 5th rule, because we leave\nout some of the nodes. We should probably avoid that."),(0,s.kt)("admonition",{type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"With the second idea, you may also feel that we are \u201cbending\u201d the rules a bit,\nespecially the definition of the \u201cleaf\u201d nodes."),(0,s.kt)("p",{parentName:"admonition"},"Given the definition of the red-black tree, where ",(0,s.kt)("inlineCode",{parentName:"p"},"nil")," is considered to be an\nexternal node, we have decided that bending it a bit just to stir a thought about\nit won't hurt anybody. \ud83d\ude09")),(0,s.kt)("h2",{id:"4\xaa-if-a-node-is-red-then-both-its-children-are-black"},"4\xaa If a node is red, then both its children are black."),(0,s.kt)("p",null,"This rule might seem rather silly on the first look, but there are 2 important\nfunctions:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"it allows the algorithms to ",(0,s.kt)("em",{parentName:"li"},"\u201cnotice\u201d")," that something went wrong (i.e. the\ntree needs to be rebalanced), and"),(0,s.kt)("li",{parentName:"ol"},"it holds the balancing and height of the tree ",(0,s.kt)("em",{parentName:"li"},"\u201cin check\u201d")," (with the help of\nthe 5th rule).")),(0,s.kt)("p",null,"When we have a look at the algorithms that are used for fixing up the red-black\ntree after an insertion or deletion, we will notice that all the algorithms need\nis the color of the node. "),(0,s.kt)("blockquote",null,(0,s.kt)("p",{parentName:"blockquote"},"How come it is the only thing that we need?\nHow come such na\xefve thing can be enough?")),(0,s.kt)("p",null,"Let's say we perform an insertion into the tree\u2026 We go with the usual and pretty\nprimitive insertion into the binary-search tree and then, if needed, we \u201cfix up\u201d\nbroken invariants. ",(0,s.kt)("em",{parentName:"p"},"How can that be enough?")," With each insertion and deletion we\nmaintain the invariants, therefore if we break them with one operation, there's\nonly one path on which the invariants were ",(0,s.kt)("em",{parentName:"p"},"felled"),". If we know that rest of the\ntree is correct, it allows us to fix the issues just by propagating it to the\nroot and ",(0,s.kt)("em",{parentName:"p"},"abusing")," the siblings (which are, of course, correct red-black\nsubtrees) to fix or at least partially mitigate the issues and propagate them\nfurther."),(0,s.kt)("p",null,"Let's assume that we do not enforce this rule, you can see how it breaks the\nbalancing of the tree below."),(0,s.kt)(w,{mdxType:"Tabs"},(0,s.kt)(v,{value:"enforcing",label:"Enforcing this rule",mdxType:"TabItem"},(0,s.kt)("p",null,(0,s.kt)("img",{src:a(772).Z+"#gh-light-mode-only",width:"755",height:"347"}),"\n",(0,s.kt)("img",{src:a(8663).Z+"#gh-dark-mode-only",width:"755",height:"347"}))),(0,s.kt)(v,{value:"omitting",label:"Omitting this rule",mdxType:"TabItem"},(0,s.kt)("p",null,(0,s.kt)("img",{src:a(4130).Z+"#gh-light-mode-only",width:"803",height:"443"}),"\n",(0,s.kt)("img",{src:a(2683).Z+"#gh-dark-mode-only",width:"803",height:"443"})))),(0,s.kt)("p",null,"We can create a ",(0,s.kt)("strong",{parentName:"p"},"big")," subtree with only red nodes and ",(0,s.kt)("strong",{parentName:"p"},"even")," when keeping\nthe rest of the rules maintained, it will break the time complexity. It stops us\nfrom \u201chacking\u201d the black height requirement laid by the 5th rule."),(0,s.kt)("h2",{id:"5\xaa-for-each-node-all-simple-paths-from-the-node-to-descendant-leaves-contain-the-same-number-of-black-nodes"},"5\xaa For each node, all simple paths from the node to descendant leaves contain the same number of black nodes."),(0,s.kt)("p",null,"As it was mentioned, with the 4th rule they hold the balancing of the red-black\ntree."),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"An important observation here is the fact that the red-black tree is a\n",(0,s.kt)("strong",{parentName:"p"},"height"),"-balanced tree.")),(0,s.kt)("p",null,"Enforcing this rule (together with the 4th rule) keeps the tree balanced:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"4th rule makes sure we can't \u201chack\u201d this requirement."),(0,s.kt)("li",{parentName:"ol"},"This rule ensures that we have \u201csimilar\u201d",(0,s.kt)("sup",{parentName:"li",id:"fnref-2"},(0,s.kt)("a",{parentName:"sup",href:"#fn-2",className:"footnote-ref"},"2"))," length to each of the leaves.")),(0,s.kt)("admonition",{title:"AVL tree",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"You might have heard about an ",(0,s.kt)("em",{parentName:"p"},"AVL tree")," before. It is the first self-balanced\ntree to be ever introduced and works in a very similar nature as the red-black\ntree, the only difference is that it does not deal with the ",(0,s.kt)("em",{parentName:"p"},"black height"),", but\nthe height in general."),(0,s.kt)("p",{parentName:"admonition"},"If you were to compare AVL with the red-black tree, you can say that AVL is much\nmore strict while red-black tree can still maintain the same asymptotic time\ncomplexity for the operations, but having more relaxed rules.")),(0,s.kt)("div",{className:"footnotes"},(0,s.kt)("hr",{parentName:"div"}),(0,s.kt)("ol",{parentName:"div"},(0,s.kt)("li",{parentName:"ol",id:"fn-1"},"CORMEN, Thomas. Introduction to algorithms. Cambridge, Mass: MIT Press, 2009. isbn 9780262033848.",(0,s.kt)("a",{parentName:"li",href:"#fnref-1",className:"footnote-backref"},"\u21a9")),(0,s.kt)("li",{parentName:"ol",id:"fn-2"},"red nodes still exist",(0,s.kt)("a",{parentName:"li",href:"#fnref-2",className:"footnote-backref"},"\u21a9")))))}W.isMDXComponent=!0},4086:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rb_dark-c025d61dee7913262c86277087751328.png"},9493:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rb_height_dark-75a70ddff74e5e1aff7e9986221b5687.png"},5021:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rb_height_light-36fa69317ced094d7bb7b0fdf32cb3fe.png"},6769:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rb_light-f53bee3b32ddb2e7a4249828bc03b1a4.png"},8663:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/correct_dark-bbd8d4c1796b145025fed5b6dff03b84.png"},772:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/correct_light-bc4770146072f748be4a5aa11abf3a0c.png"},2683:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/incorrect_dark-9b8b3be328ffad83233de4536c120016.png"},4130:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/incorrect_light-e787e568e9a1528dcac5bf55ef29fdaa.png"},4522:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},3416:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALMAAACbCAYAAAAp66qoAAAABmJLR0QA/wD/AP+gvaeTAAASYklEQVR4nO3deVSU1R8G8Ocdhh0FwQVBfyaoECCeLEsMBVMwj1tJLkFJWrnXCcXlZG7Z4QRamNvxmGZFLoBLmkKIiigkirugssqiICAuIOAMzHx/fxQezd2Y9w537ucc/nCcw32AZy6Xd973vhIREQSh+YtVsE4gCE1FlFnghiizwA0l6wA80Wg0KCsrQ1lZGW7dugWNRoPq6mo0NDTAwsICpqamMDc3h42NDdq3bw9bW1vWkbkiyvwC6urqkJ6ejnPnziEjIwOZmZnIy8tDeXk5NBrNM38eMzMzdOjQAS4uLvDw8IC7uzt69uwJNzc3SJKkw6+AT5I4mvF0Wq0Wx44dQ1xcHA4dOoT09HSoVCrY2treK6GLiwvat28PBwcHtGvXDra2tlAoFGjRogWUSiVqa2uhUqlw9+5d3LhxAyUlJSgtLUVxcTEuXLiAzMxMXLx4EWq1Gm3atEHfvn3Rv39/DB8+HP/73/9Yfwuag1hR5idITU3Fpk2bsGvXLpSUlMDZ2Rm+vr7w8fGBj49Pk5esoaEBZ86cweHDh5GcnIzk5GRUVVXh1VdfRUBAAMaNGwcHB4cmHZMjsSDhAdXV1bR69Wrq3r07ASBPT09avHgxnTt3TvYsKpWK4uPjaeLEidS6dWtSKpX07rvv0r59+2TP0gzEiDL/o7q6mpYvX0729vZkZmZGo0aNosTERNax7lGpVBQTE0MDBw4kSZLI09OTYmJiSKvVso6mL0SZNRoNrVmzhuzs7Khly5b01VdfUWVlJetYT3Ty5EkaPnw4SZJEr7/+Oh0/fpx1JH1g2GU+efIk9erVi4yNjSk0NFTvS/xvp06dIl9fX1IoFDR58mS6efMm60gsGWaZtVothYeHk7GxMfXr148yMjJYR3phWq2WoqKiyN7enjp16kSpqamsI7FieGW+ceMG+fv7k7GxMUVERHCz5qyoqKAhQ4aQUqmkiIgI1nFYMKwyFxUVkbu7O3Xs2JHLdaZWq6XvvvuOjIyMaMqUKdTQ0MA6kpxiDOYdwNzcXPTv3x+tWrXC0aNH4ejoyDpSk5MkCTNmzICTkxMCAwNRUVGBLVu2QKk0jB+zQZxoVFpaikGDBsHBwQGHDx/mssj3e+edd5CQkIC4uDhMmjQJZCDvi3Ff5traWgwePBgmJibYu3cvbGxsWEeSRd++fREbG4uoqCgsXryYdRx5sF7o6NrkyZOpVatWVFBQwDoKE2vXriWFQkFJSUmso+ga338A7t69myRJom3btrGOwtR7771HHTp04P04dAy3ywy1Wo2QkBAEBgYiICBAZ+Ncv34dGzZswJAhQ2BqagpJkvDnn38+9LyamhqsX78eb731FhwcHGBqaoquXbti9uzZqKqq0lk+AFi3bh1UKhXCwsJ0Og5zrF9OuhIZGUnm5uZUVFSk03EGDRpEAB74iI+Pf+h5S5Yseeh5jR8vv/wy3bp1S6c5V6xYQWZmZjwvt/icmbVaLSIjIzFlyhR07NhRp2O1adMGEyZMwJ49e/DJJ5889nlWVlYIDg5GQkICiouLcefOHSQkJMDR0REXL17E8uXLdZpz0qRJaNu2LVavXq3TcZhi/XLShYSEBAJAFy9elHXcadOmPXZmfpzffvuNANDQoUN1mOxvCxcupHbt2pFardb5WAzwOTNv3boVXl5ecHV1ZR3lqTp37gwAaN26tc7HGj9+PMrLy5GUlKTzsVjgssxHjhyBn58f6xjPpPGPxaCgIJ2P1alTJ3Tp0gUpKSk6H4sF7sp8/fp15OXlwcvLi3WUpzpz5gyWLl2K999/HwMHDpRlzD59+uDo0aOyjCU37spcWFgIIoKLiwvrKE90+fJlDBs2DJ6enli/fr1s43br1g0FBQWyjScn7sp8/fp1AICdnR3jJI93+fJl+Pr6wsbGBvHx8bCwsJBtbDs7O1RWVso2npy4K3NdXR0AwNzcnHGSR8vLy4OPjw8sLCywf/9+2TeCsbKyQk1NjaxjyoW7Mrdq1QoAcPPmTcZJHpaVlQUfHx+Ym5vj4MGDaNeunewZKisrud1JibsyNy4vKioqGCd5UGZmJnx8fGBpaYmkpCS0b9+eSY6Kigq9XoL9F9yVuWvXrjAzM8Pp06dlGW/RokWQJAmSJN17d23w4MH3Hrt06RIAYOXKlSgrK0N2djYcHR3v/X/jh4eHhyx5T506he7du8sylty4K7OpqSleeeUV/PXXX6yj6B0iQlpaWrM4bPkiuNyea/78+fj5559RUFAAIyMj1nH0RnJyMnx9fXH+/HnZfhPIiM+d88ePH4+rV68iMTGRdRS9smHDBvTq1YvHIgPgcJkBAE5OTujXrx8iIyNZR9EbV65cwbZt2554Zl9zx+UyAwAOHz4MHx8fJCQkwN/fn3Uc5saPH49Dhw7h0qVLMDU1ZR1HF/je0nb48OHIz8/HiRMnYGZmxjoOM2lpafD29savv/6KwMBA1nF0he8yFxcXo0ePHvjggw+wYsUK1nGYuHPnDnr27AknJyfEx8fzvCM/n38ANurYsSPWrFmDVatWITo6mnUc2Wm1WgQHB6O6uhq//PILz0UGYAD3NBk7diyOHTuG4OBgtG7dGgMGDGAdSTbTp09HXFwc9u3bx+Stc9mxusZFThqNhoKCgqhFixZ08OBB1nF0TqvV0syZM8nIyIh27tzJOo5c+N43435qtZrGjh1LpqamtGXLFtZxdEalUlFgYCCZmJjQpk2bWMeRk+GUmejvGXrGjBkkSRLNmTOHuws7CwoKqE+fPtSyZUu9uoWFTAyrzI02bNhAlpaW1Lt3b8rNzWUdp0nExsZSq1atyN3dvVlvnv4fGGaZiYguXLhAPXr0IHNzc/r666/p7t27rCO9kPz8fBo6dCgBoIkTJ1JtbS3rSKwYbpmJ/l5HR0REkJWVFXXp0oWioqKazQbd5eXlNGfOHDI3Nyc3NzdD2BjxaQy7zI2Ki4spODiYlEolubi40MaNG6muro51rEcqKiqiWbNmkZWVFbVt25YiIyO5W/u/IFHm++Xk5NBHH31EJiYmZGtrS1988YVerD/VajX98ccfNGzYMDIyMiJ7e3tatmwZ1dTUsI6mT0SZH+XatWsUFhZGnTt3JgDk6upK8+bNo/T0dNmWIVVVVbRr1y4KDg4mW1tbkiSJBgwYQDExMaRSqWTJ0MzEcH1uxn+l1WqRmpqKHTt2YOfOnSgsLIS1tTW8vb3h7e2Nnj17wsPD4z/fz7qhoQE5OTnIyMhAWloajhw5gtOnT0Or1cLLywsjR47EyJEj8dJLLzXNF8Ynvk80amoZGRlITk7G999/j8rKSty+fRsAYGtri27dusHe3h4dO3ZE27ZtYW1tDVNTU1hYWMDU1BTV1dVoaGhAdXU1qqqqUFxcjLKyMhQVFSE7OxtqtRpKpRLm5ubo168fgoOD0a9fP8N4G7ppiDI/r8zMTHh6emLLli0YMGAAzp8/j8zMTOTm5uLatWu4evUqysrKUFVVBZVKhZqaGqjValhZWcHY2BgtWrRAy5Yt4ejoCHt7e3To0AGurq5wd3eHm5sbgoKCkJWVhbNnz0Kh4Po8sKYmyvy8AgICkJ2drbOy3f9iGT16dJN/fo6JMj+PU6dO4bXXXsPOnTsxYsQInY0TFBSEEydOIDMz02Du4dcERJmfx9ChQ3Ht2jWkp6fr9NzgnJwcuLm5YcOGDRg3bpzOxuGMKPOzSk9PxxtvvIG4uDi8/fbbOh9vwoQJSEpKQlZWFkxMTHQ+HgdEmZ+Vn58f6urqZNuou7CwEN26dcOqVavw6aefyjJmMyfK/CxSUlLQt29fHDx4EP3795dt3KlTp2Lv3r3Izs7m9YrqpiTK/Cx8fX2hVCqxf/9+WcctLS2Fs7MzIiIiMH36dFnHbob4vqC1KSQkJCA5ORkLFy6Ufez27dtj0qRJCAsLQ21trezjNzdiZn6K3r17w87ODnv37mUyfkVFBZydnbFgwQKEhoYyydBMiJn5SXbv3o3jx48zmZUbtWnTBlOnTkV4eDiqq6uZ5WgOxMz8GER0b/OU7du3M81SWVkJJycnzJ49G/PmzWOaRY+Jmflxtm3bhnPnzmHBggWso8DOzg4hISFYtmyZXt7eQl+IMj+CRqPBokWLMGbMGPTo0YN1HABASEgIFAqF2Nn0CUSZH2Hz5s3IysrSi1m5kbW1NWbOnInIyEiUl5ezjqOXxJr5XzQaDdzd3eHl5YWNGzeyjvOAmpoaODs7Izg4GOHh4azj6BuxZv63jRs3Ij8/H/Pnz2cd5SGWlpaYPXs2Vq5ciZKSEtZx9I6Yme+jVqvh6uoKf39/rF27lnWcR7p79y66du2KgIAALF++nHUcfSJm5vv9+OOPKCkp0evDX2ZmZpg7dy7Wrl2L4uJi1nH0ipiZ/9GcZrzm8BuEATEzN1qzZg0qKysxe/Zs1lGeysTEBF9++SV++ukn5Ofns46jN8TMjOZ5lECfj7owImZmAPjhhx9QU1ODmTNnso7yzIyMjDBv3jxERUXdu6WxoTP4mfn27dtwcnLCtGnT8PXXX7OO81w0Gg08PT3Ro0cPbN68mXUc1sTMHBkZCa1Wi5CQENZRnpuRkREWLVqE6OhonD17lnUc5gx6Zr558yacnJwQGhqq14fjnqTx7L7OnTtjx44drOOwZNgzc3h4OJRKJT7//HPWUV6YJElYvHgxfv/9dxw/fpx1HKYMdmbm7QoO1lfE6AHDnZnDwsJgaWmJqVOnso7SJBYvXoy4uDgcOXKEdRRmDHJmbrzqOTw8HJ999hnrOE2G1VXkesIwZ+YlS5agTZs2mDhxIusoTeqbb77BgQMHkJSUxDoKEwY3M/O+U5Cfnx9qa2uRmprKOorcDG8TmI8//hgHDx7kdg83uffE0yOGVWZD2V1Trt1K9Qyfa+YrV67g5MmTDz2+aNEiODk5ITAwkEEq+YSFheH06dPYvXv3A49rNBrs2bOHUSoZNP1Nf9jbvn07SZJEw4cPp3PnzhERUUZGBikUCtq6dSvjdPIICAggDw8P0mg0pNFoKDo6mrp06ULGxsbN5sadz4nPW6dFRESQUqkkpVJJkiTR6NGjyd/f/94P1xA0vnhDQ0PJzc2NJEkihUJBACg/P591PF2I4XKZkZubC0mS0NDQACLCzp07kZiYCFtbW4M5mb20tBQODg5YtmwZsrKyQETQarUAgLy8PMbpdIPLMl+6dAn19fX3/l1fXw8iwtGjR+Hq6ooPP/yQ21KnpKTA29sbfn5+uHbtGoC/18qNlEqlKHNzkpOT88jH6+vrodFoEB0dDVdXV6xbt07mZLqj0WgwYsQI9O3bF8eOHQPw980y/02hUCA3N1fueLLgrswqlerejPQ49M9pk2PGjJEple4ZGRlh7ty5sLKyeuLz6uvrkZ2dLVMqeXFX5suXL4OecOhcqVSid+/e2L9/P6ytrWVMpnteXl5IS0uDjY3NY2+5RkTcXmbFXZmf9CtUqVTCz88PiYmJT53Bmit3d3ekpKTAzs4OxsbGj3xOYWHhE1/wzRWXZX7UD1GhUGDkyJHYtWsXzMzMGCSTj4uLC44dOwYHB4dHfi9UKhVKS0sZJNMt7sqcl5f30Fu4CoUCEyZMwJYtWx47W/GmU6dOSEtLg7Oz8yO/Zh6PaHBX5uzsbKjV6nv/VigUmDx5MtatW2dwN1a3t7dHamoqPDw8Hii0kZERl0c0uPvp3v/HjSRJmDVrFlavXm1IJ9w8wNbWFklJSejZs+e9QvN6rJmrMms0mge2el26dCm+/fZbhon0g7W1NQ4cOIA333wTSqUSarX6scfimzOuylxYWIiGhgZIkoQVK1Y0qx2KdM3S0hIJCQkYMmQIiAgXL15kHanJcVXmvLw8KJVKREVFcXVtX1MxMTFBbGwsRo8ejaKiItZxmhxXZS4qKkJ0dDSCgoJYR9FbxsbG2Lx5M0aNGoXKykrWcZoUV1ea3L17l/tjyE2FiKBWq3m6wTxfV5qIIj87SZJ4KjIAzpYZgmETZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbogyC9wQZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbogyC9wQZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbogyC9wQZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbogyC9wQZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbogyC9wQZRa4IcoscEOUWeCGKLPADVFmgRuizAI3RJkFbigBxLIOIQhNIO3/u4oGcQFqHUsAAAAASUVORK5CYII="},8983:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},6850:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},9296:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_2_dark-e8c35bc37b250271cf480f71904c15a7.png"},9657:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_2_light-5e6a1d53e559a30e5fb86ee019229bbd.png"},9123:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_3_dark-a2b8248c182059b67c703f75f58f3784.png"},515:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_3_light-7be3bbcb08f8b7182a1c719693a47615.png"},7518:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_4_dark-eddf4c315becc51f89b0967320f132d8.png"},8747:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_4_light-d72dfa633794ec97eddce8e3a4b02660.png"},2193:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_5_dark-e24da2d7a3fb2ee63ac8e1ea9c2d45a8.png"},8317:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_5_light-efb3568bf4aadb19a9dcc57e748f89d8.png"},6986:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_6_dark-160fd071a93e279a5339c7976745f8b1.png"},8204:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_6_light-b090675f7b30b574af44d667b083e9b7.png"},1988:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_7_dark-35ede8f297484f4305ea7fd23cbddc49.png"},345:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_7_light-018e13c41ce1fc6257c4c65748aaae27.png"},437:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png"},6464:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/br_8_light-81ac4c8a3988bd43c66f563cd4799d61.png"},8125:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},477:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},9905:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},446:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},7659:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_2_dark-e8c35bc37b250271cf480f71904c15a7.png"},841:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_2_light-5e6a1d53e559a30e5fb86ee019229bbd.png"},2979:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_3_dark-4e8b2ca938738395e438b7fc2fc5dfe4.png"},2658:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_3_light-51521ba414ff3a3530ed0109cfab799d.png"},5959:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_4_dark-3cc1c8d4b39707d2a51b51f4f1b29dc8.png"},2014:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_4_light-631a0b3947be21a12b3a489f0cd0c3c4.png"},1105:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_5_dark-9028cc10e78c05cb669d5d438dcbf93f.png"},162:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_5_light-6b8f80047906eb1f58472d231eb9b12a.png"},4300:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_6_dark-160fd071a93e279a5339c7976745f8b1.png"},355:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_6_light-b090675f7b30b574af44d667b083e9b7.png"},363:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_7_dark-35ede8f297484f4305ea7fd23cbddc49.png"},2530:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_7_light-018e13c41ce1fc6257c4c65748aaae27.png"},3122:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_8_dark-b0f871ab182d06edb5c29bb490ad70bc.png"},6039:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/rr_8_light-81ac4c8a3988bd43c66f563cd4799d61.png"}}]); \ No newline at end of file diff --git a/assets/js/4200b1a9.e4798bae.js b/assets/js/4200b1a9.e4798bae.js new file mode 100644 index 0000000..1e15330 --- /dev/null +++ b/assets/js/4200b1a9.e4798bae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[866],{4612:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2023/08/02/copr","metadata":{"permalink":"/blog/2023/08/02/copr","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md","source":"@site/blog/2023-08-02-copr.md","title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","formattedDate":"August 2, 2023","tags":[{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed"},{"label":"red-hat","permalink":"/blog/tags/red-hat"},{"label":"copr","permalink":"/blog/tags/copr"},{"label":"admin","permalink":"/blog/tags/admin"},{"label":"vps","permalink":"/blog/tags/vps"}],"readingTime":3.44,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. your opinionated admin","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","authors":[{"key":"mf","title":"a.k.a. your opinionated admin"}],"tags":["\ud83c\udfed","red-hat","copr","admin","vps"]},"nextItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"}},"content":"When you decide to run Fedora on your VPS, you might get screwed over by using\\nrandom repositories\u2026\\n\\n\x3c!--truncate--\x3e\\n\\nWhen I \u201creserved\u201d my VPS[^1] back in June \'20, I slapped Fedora on it without\\nthinking. I bet 99% of people would say that I\'m crazy for doing such thing[^2],\\n**BUT** I\'ve been using Fedora on my PCs for some time already and it felt very\\nstable and natural to just use, even for VPS.\\n\\nOne of the first things I\'ve done was setting up a mail server. You may guess\\nwhat\'s the fun part about having a mail server\u2026 Yes, it\'s all the spam you\\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\\nservices. To battle this problem I chose to use\\n[rspamd](https://github.com/rspamd/rspamd) that had CentOS support, but someone\\nhad a [Copr](https://copr.fedorainfracloud.org/) repository that I used to\\ninstall it.\\n\\n## How does Copr repositories work?\\n\\nIf you have ever used Ubuntu, you might be familiar with the concept since it is\\nvery close to [PPAs](https://help.ubuntu.com/community/PPA).\\n\\ntl;dr of the whole process consists of\\n1. enabling the Copr repository, and\\n2. installing the desired package.\\n\\nSo in shell you would do\\n```\\n# dnf copr enable \u2039copr-repository\u203a\\n# dnf install \u2039package-from-the-repository\u203a\\n```\\n\\nAnd\u2026 that\'s it! Nothing else needed! Simple, right? And literally same process\\nas you would do for the PPA.\\n\\n:::tip AUR\\n\\nOn the other hand, if you are familiar with the archLinux, you definitely know\\nAUR and what it can do for you. Copr repository is pretty similar, but the\\npackages are prebuilt in Copr and Copr repositories can carry the required\\ndependencies for said packages, which simplifies the distribution, and can even\\nhelp with installing singular packages (when you just need the dependency, not\\neverything).\\n\\n:::\\n\\n## My issue\\n\\nNow you might wonder how would I use it on my VPS. It\'s rather simple, once in\\n6 months a new Fedora release comes out. And you need to upgrade to newer\\nrelease\u2026 You don\'t need to do it right away and for such setup it probably isn\'t\\neven recommended.\\n\\n:::tip\\n\\nFedora releases are supported for a year, i.e. they live 6 months till the next\\nrelease and then another 6 months till another release.\\n\\nSome people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\\nyour home server or in a similar setup, it might be a pretty good idea to\\nfollow. I\'m using the \u201clatest greatest\u201d, cause why not :smile:\\n\\nOne way or another, you still need to bump the release every six months, unless\\nyou\'d bump 2 releases at once every year, which would be a decision, since, at\\nleast I, cannot see any benefits in it\u2026 You don\'t go for \u201cstability\u201d, cause once\\na year you switch to the latest release and then, before you bump, you use one\\nyear old software, so you\'re not even using the latest.\\n\\n:::\\n\\nFast-forward 2 years in the future, new Fedora release came out (October \'22)\\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026\\n\\n## How can Copr help?\\n\\nI have managed to find\\n[specfile](https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec) for the\\nrspamd package that they use for CentOS. There were some files apart from the\\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\\nto the Copr to\\n[build](https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/)\\nan RPM.\\n\\nI have switched the previous Copr repository for rspamd with my own and happily\\nproceeded with the upgrade.\\n\\n## Conclusion\\n\\nCopr is heavily used for testing builds on the upstream with\\n[Packit](https://packit.dev). However, as you can see, it is possible to use it\\n**very well** for packaging your own stuff and avoiding issues (such as the one\\nI have described above), if need be.\\n\\n[^1]: [vpsFree.cz](https://vpsfree.cz)\\n[^2]: Even though I\'ve been running archLinux on some Raspberry Pi\'s and also\\n on one of my \u201chome servers\u201d, before getting the VPS. You could say I like\\n to live on the edge\u2026"},{"id":"aoc-2022/4th-week","metadata":{"permalink":"/blog/aoc-2022/4th-week","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/04-week-4.md","source":"@site/blog/aoc-2022/04-week-4.md","title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":15.175,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14","slug":"aoc-2022/4th-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"prevItem":{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr"},"nextItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"}},"content":"Let\'s go through the fourth week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 22: Monkey Map](https://adventofcode.com/2022/day/22)\\n\\n:::info tl;dr\\n\\nSimulating a movement on a 2D map with given instructions. Map becomes a cube in\\nthe 2nd part\u2026\\n\\n:::\\n\\n:::caution Rant\\n\\nThis was the most obnoxious problem of this year\u2026 and a lot of Rust issues have\\nbeen hit.\\n\\n:::\\n\\n### Solution\\n\\nIt seems like a very simple problem to solve, but with very obnoxious changes in\\nthe 2nd part and also it\'s relatively hard to decompose \xbbproperly\xab.\\n\\n#### Column iterator\\n\\nIn the first part of the problem it was needed to know the boundaries of each\\nrow and column, since I stored them in `Vec>` and padded with spaces\\nto ensure I have a rectangular 2D \u201carray\u201d. However when you wanted to go through\\neach row and column to determine the boundaries, it was very easy to do for the\\nrows (cause each row is a `Vec` element), but not for the columns, since they\\nspan multiple rows.\\n\\nFor this use case I have implemented my own _column iterator_:\\n```rust\\npub struct ColumnIterator<\'a, T> {\\n map: &\'a [Vec],\\n column: usize,\\n\\n i: usize,\\n}\\n\\nimpl<\'a, T> ColumnIterator<\'a, T> {\\n pub fn new(map: &\'a [Vec], column: usize) -> ColumnIterator<\'a, T> {\\n Self { map, column, i: 0 }\\n }\\n}\\n\\nimpl<\'a, T> Iterator for ColumnIterator<\'a, T> {\\n type Item = &\'a T;\\n\\n fn next(&mut self) -> Option {\\n if self.i >= self.map.len() {\\n return None;\\n }\\n\\n self.i += 1;\\n Some(&self.map[self.i - 1][self.column])\\n }\\n}\\n```\\n\\nGiven this piece of an iterator, it is very easy to factor out the common\\nfunctionality between the rows and columns into:\\n```rust\\nlet mut find_boundaries = |constructor: fn(usize) -> Orientation,\\n iterator: &mut dyn Iterator,\\n upper_bound,\\n i| {\\n let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == \' \');\\n let start = first_non_empty.next().unwrap().0 as isize;\\n\\n let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != \' \');\\n let end = last_non_empty.next().unwrap_or((upper_bound, &\'_\')).0 as isize;\\n\\n boundaries.insert(constructor(i), start..end);\\n};\\n```\\n\\nAnd then use it as such:\\n```rust\\n// construct all horizontal boundaries\\n(0..map.len()).for_each(|row| {\\n find_boundaries(\\n Orientation::horizontal,\\n &mut map[row].iter(),\\n map[row].len(),\\n row,\\n );\\n});\\n\\n// construct all vertical boundaries\\n(0..map[0].len()).for_each(|col| {\\n find_boundaries(\\n Orientation::vertical,\\n &mut ColumnIterator::new(&map, col),\\n map.len(),\\n col,\\n );\\n});\\n```\\n\\n#### Walking around the map\\n\\nOnce the 2nd part got introduced, you start to think about a way how not to\\ncopy-paste a lot of stuff (I haven\'t avoided it anyways\u2026). In this problem, I\'ve\\nchosen to introduce a trait (i.e. _interface_) for 2D and 3D walker.\\n```rust\\ntrait Wrap: Clone {\\n type State;\\n\\n // simulation\\n fn is_blocked(&self) -> bool;\\n fn step(&mut self, steps: isize);\\n fn turn_left(&mut self);\\n fn turn_right(&mut self);\\n\\n // movement\\n fn next(&self) -> (Self::State, Direction);\\n\\n // final answer\\n fn answer(&self) -> Output;\\n}\\n```\\n\\nEach walker maintains its own state and also provides the functions that are\\nused during the simulation. The \u201cpromised\u201d methods are separated into:\\n* _simulation_-related: that are used during the simulation from the `.fold()`\\n* _movement_-related: just a one method that holds most of the logic differences\\n between 2D and 3D\\n* _final answer_: which extracts the _proof of solution_ from the\\n implementation-specific walker\\n\\nBoth 2D and 3D versions borrow the original input and therefore you must\\nannotate the lifetime of it:\\n```rust\\nstruct Wrap2D<\'a> {\\n input: &\'a Input,\\n position: Position,\\n direction: Direction,\\n}\\nimpl<\'a> Wrap2D<\'a> {\\n fn new(input: &\'a Input) -> Wrap2D<\'a> {\\n// \u2026\\n```\\n\\n#### Problems\\n\\nI have used a lot of closures for this problem and once I introduced a parameter\\nthat was of unknown type (apart from the fact it implements a specific trait), I\\ngot suggested a \u201cfix\u201d for the compilation error that resulted in something that\\nwas not possible to parse, cause it, more than likely, violated the grammar.\\n\\nIn a similar fashion, I have been suggested changes that led to a code that\\ndidn\'t make sense by just looking at it (there was no need to try the changes),\\nfor example one suggested change in the closure parameter caused disapperance of\\nthe parameter name. :smile:\\n\\n#### Clippy\\n\\nI have to admit that Clippy was rather helpful here, I\'ll include two examples\\nof rather smart suggestions.\\n\\nWhen writing the parsing for this problem, the first thing I have spotted on the\\n`char` was the `.is_digit()` function that takes a radix as a parameter. Clippy\\nnoticed that I use `radix = 10` and suggested switching to `.is_ascii_digit()`\\nthat does exactly the same thing:\\n```diff\\n- .take_while(|c| c.is_digit(10))\\n+ .take_while(|c| c.is_ascii_digit())\\n```\\n\\nAnother useful suggestion appeared when working with the iterators and I wanted\\nto get the $n$-th element from it. You know the `.skip()`, you know the\\n`.next()`, just \u201cslap\u201d them together and we\'re done for :grin: Well, I got\\nsuggested to use `.nth()` that does exactly the combination of the two mentioned\\nmethods on iterators:\\n```diff\\n- match it.clone().skip(skip).next().unwrap() {\\n+ match it.clone().nth(skip).unwrap() {\\n```\\n\\n## [Day 23: Unstable Diffusion](https://adventofcode.com/2022/day/23)\\n\\n:::info tl;dr\\n\\nSimulating movement of elves around with a set of specific rules.\\n\\n:::\\n\\n### Solution\\n\\nThere\'s not much to mention since it\'s just a cellular automaton simulation\\n(even though the AoC rules for cellular automatons usually get out of hand\\n:wink:).\\n\\nAlthough I had a need to determine boundaries of the elves\' positions and ended\\nup with a nasty DRY violation. Knowing that you you\'re looking for maximum and\\nminimum that are, of course, exactly the same except for initial values and\\ncomparators, it looks like a rather simple fix, but typing in Rust is something\\nelse, right? In the end I settled for a function that computes both boundaries\\nwithout any duplication while using a closure:\\n```rust\\nfn get_bounds(positions: &Input) -> (Vector2D, Vector2D) {\\n let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {\\n positions\\n .iter()\\n .fold(Vector2D::new(init, init), |acc, elf| {\\n Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))\\n })\\n };\\n\\n (f(isize::MAX, &min::), f(isize::MIN, &max::))\\n}\\n```\\n\\nThis function returns a pair of 2D vectors that represent opposite points of the\\nbounding rectangle of all elves.\\n\\nYou might ask why would we need a closure and the answer is that `positions`\\ncannot be captured from within the nested function, only via closure. One more\\nfun fact on top of that is the type of the comparator\\n```rust\\n&dyn Fn(isize, isize) -> isize\\n```\\nOnce we remove the `dyn` keyword, compiler yells at us and also includes a way\\nhow to get a more thorough explanation of the error by running\\n\\n $ rustc --explain E0782\\n\\nwhich shows us\\n\\n Trait objects must include the `dyn` keyword.\\n \\n Erroneous code example:\\n \\n ```\\n trait Foo {}\\n fn test(arg: Box) {} // error!\\n ```\\n \\n Trait objects are a way to call methods on types that are not known until\\n runtime but conform to some trait.\\n \\n Trait objects should be formed with `Box`, but in the code above\\n `dyn` is left off.\\n \\n This makes it harder to see that `arg` is a trait object and not a\\n simply a heap allocated type called `Foo`.\\n \\n To fix this issue, add `dyn` before the trait name.\\n \\n ```\\n trait Foo {}\\n fn test(arg: Box) {} // ok!\\n ```\\n \\n This used to be allowed before edition 2021, but is now an error.\\n\\n:::danger Rant\\n\\nNot all of the explanations are helpful though, in some cases they might be even\\nmore confusing than helpful, since they address _very simple_ use cases.\\n\\nAs you can see, even in this case there are two sides to the explanations:\\n* it explains why you need to use `dyn`, but\\n* it still mentions that trait objects need to be heap-allocated via `Box`\\n that, as you can see in my snippet, **does not** apply here :smile: IMO it\'s\\n caused by the fact that we are borrowing it and therefore we don\'t need to\\n care about the size or whereabouts of it.\\n\\n:::\\n\\n:::info C++ parallel\\n\\nIf you dive into the explanation above, you can notice that the `Box`\\npattern is very helpful for using types that are not known during compile-time.\\nYou would use a very similar approach in C++ when parsing some data structure\\nfrom input (let\'s say JSON for example).\\n\\nOn the other hand, in this case, it doesn\'t really make much sense, cause you\\ncan clearly see that the types **are known** during the compile-time, which in\\nC++ could be easily resolved by templating the helper function.\\n\\n:::\\n\\n## [Day 24: Blizzard Basin](https://adventofcode.com/2022/day/24)\\n\\n:::info tl;dr\\n\\nNavigating your way through a basin with series of blizzards that move around\\nyou as you move.\\n\\n:::\\n\\n:::caution\\n\\nIt\'s second to last day and I went \u201c_bonkers_\u201d on the Rust :smile: Proceed to\\nread _Solution_ part on your own risk.\\n\\n:::\\n\\n### Solution\\n\\nYou are given a map with blizzards all over the place and you\'re supposed to\\nfind the minimum time it requires you to walk through the basin without getting\\nin any of the blizzards.\\n\\n#### Breakdown\\n\\nRelatively simple, yet a bit annoying, approach can be taken. It\'s technically\\na shortest-path algorithm implementation with some relaxation restrictions and\\nbeing able to stay on one position for some time, so each _vertex_ of the graph\\nis determined by the position on the map and the _timestamp_. I have chosen to\\nuse `Vector3D`, since `x` and `y` attributes can be used for the position\\nand, well, let\'s use `z` for a timestamp, cause why not, right? :wink:\\n\\n#### Evaluating the blizzards\\n\\n:::caution\\n\\nI think that this is the most perverted abuse of the traits in the whole 4 weeks\\nof AoC in Rust\u2026\\n\\n:::\\n\\nThe blizzards move along their respective directions in time and loop around in\\ntheir respective row/column. Each vertex holds position **and** time, so we can\\n_just_ index the basin with the vertex itself, right? Yes, we can :smiling_imp:\\n\\n:::tip Fun fact\\n\\nWhile writing this part, I\'ve recognized unnecessary verbosity in the code and\\ncleaned it up a bit. The changed version is shown here and the original was just\\nmore verbose.\\n\\n:::\\n\\nI\'ll skip the boring parts of checking bounds and entry/exit of the basin :wink:\\nWe can easily calculate positions of the blizzards using a modular arithmetics:\\n```rust\\nimpl Index for Basin {\\n type Output = char;\\n\\n fn index(&self, index: Position) -> &Self::Output {\\n // \u2039skipped boring parts\u203a\\n\\n // We need to account for the loops of the blizzards\\n let width = self.cols - 2;\\n let height = self.rows - 2;\\n\\n let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;\\n [\\n (\\n index.y() as usize,\\n blizzard_origin(width, -1, index.z(), index.x()),\\n \'>\',\\n ),\\n (\\n index.y() as usize,\\n blizzard_origin(width, 1, index.z(), index.x()),\\n \'<\',\\n ),\\n (\\n blizzard_origin(height, -1, index.z(), index.y()),\\n index.x() as usize,\\n \'v\',\\n ),\\n (\\n blizzard_origin(height, 1, index.z(), index.y()),\\n index.x() as usize,\\n \'^\',\\n ),\\n ]\\n .iter()\\n .find_map(|&(y, x, direction)| {\\n if self.map[y][x] == direction {\\n Some(&self.map[y][x])\\n } else {\\n None\\n }\\n })\\n .unwrap_or(&\'.\')\\n }\\n}\\n```\\n\\nAs you can see, there is an expression for calculating the original position and\\nit\'s used multiple times, so why not take it out to a lambda, right? :wink:\\n\\nI couldn\'t get the `rustfmt` to format the `for`-loop nicely, so I\'ve just\\ndecided to go with iterating over an elements of a slice. I have used, once\\nagain, a combination of two functions (`find_map` in this case) to do 2 things\\nat once and at the end, if we haven\'t found any blizzard, we just return the\\nempty space.\\n\\nI think it\'s a very _nice_ (and naughty) way how to use the `Index` trait, don\'t\\nyou think?\\n\\n#### Shortest-path algorithm\\n\\nFor the shortest path you can choose and adjust any of the common shortest-path\\nalgorithms, in my case, I have decided to use [_A\\\\*_] instead of Dijkstra\'s\\nalgorithm, since it better reflects the _cost_ function.\\n\\n:::info Comparison of costs\\n\\nWith the Dijkstra\'s algorithm I would proceed with the `time` attribute used as\\na priority for the queue.\\n\\nWhereas with the _A\\\\*_, I have chosen to use both time and Manhattan distance\\nthat promotes vertices closer to the exit **and** with a minimum time taken.\\n\\n:::\\n\\nCost function is, of course, a closure :wink:\\n```rust\\nlet cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());\\n```\\n\\nAnd also for checking the possible moves from the current vertex, I have\\nimplemented, yet another, closure that yields an iterator with the next moves:\\n```rust\\nlet next_positions = |p| {\\n [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]\\n .iter()\\n .filter_map(move |&(x, y, t)| {\\n let next_p = p + Vector3D::new(x, y, t);\\n\\n if basin[next_p] == \'.\' {\\n Some(next_p)\\n } else {\\n None\\n }\\n })\\n};\\n```\\n\\n#### Min-heap\\n\\nIn this case I had a need to use the priority queue taking the elements with the\\nlowest cost as the prioritized ones. Rust only offers you the [`BinaryHeap`] and\\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\\nelements in wrapped in a [`Reverse`] (as is even showed in the linked [docs of\\nthe `BinaryHeap`]). However the wrapping affects the type of the heap and also\\npopping the most prioritized elements yields values wrapped in the `Reverse`.\\n\\nFor this purpose I have just taken the max-heap and wrapped it as a whole in a\\nseparate structure providing just the desired methods:\\n```rust\\nuse std::cmp::{Ord, Reverse};\\nuse std::collections::BinaryHeap;\\n\\npub struct MinHeap {\\n heap: BinaryHeap>,\\n}\\n\\nimpl MinHeap {\\n pub fn new() -> MinHeap {\\n MinHeap {\\n heap: BinaryHeap::new(),\\n }\\n }\\n\\n pub fn push(&mut self, item: T) {\\n self.heap.push(Reverse(item))\\n }\\n\\n pub fn pop(&mut self) -> Option {\\n self.heap.pop().map(|Reverse(x)| x)\\n }\\n}\\n\\nimpl Default for MinHeap {\\n fn default() -> Self {\\n Self::new()\\n }\\n}\\n```\\n\\nRest is just the algorithm implementation which is not that interesting.\\n\\n## [Day 25: Full of Hot Air](https://adventofcode.com/2022/day/25)\\n\\n:::info tl;dr\\n\\nPlaying around with a numbers in a _special_ base.\\n\\n:::\\n\\nGetting flashbacks to the _IB111 Foundations of Programming_\u2026 Very nice \u201cproblem\u201d\\nwith a rather easy solution, as the last day always seems to be.\\n\\n### Solution\\n\\nImplementing 2 functions, converting from the _SNAFU base_ and back to the _SNAFU_\\n_base_ representation. Let\'s do a bit more though! I have implemented two functions:\\n* `from_snafu`\\n* `to_snafu`\\n\\nNow it is apparent that all I do is number to string and string to number. Hmm\u2026\\nthat sounds familiar, doesn\'t it? Let\'s introduce a structure for the SNAFU numbers\\nand implement the traits that we need.\\n\\nLet\'s start with a structure:\\n```rust\\n#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]\\nstruct SNAFU {\\n value: i64,\\n}\\n```\\n\\n#### Converting from `&str`\\n\\nWe will start by implementing the `FromStr` trait that will help us parse our input.\\nThis is rather simple, I can just take the `from_snafu` function, copy-paste it\\ninto the `from_str` method and the number I get will be wrapped in `Result` and\\n`SNAFU` structure.\\n\\n#### Converting to `String`\\n\\nThis is more fun. In some cases you need to implement only one trait and others\\nare automatically implemented using that one trait. In our case, if you look in\\nthe documentation, you can see that `ToString` trait is automatically implemented\\nfor any type that implements `Display` trait.\\n\\nLet\'s implement the `Display` trait then. We should be able to use the `to_snafu`\\nfunction and just take the `self.value` from the `SNAFU` structure.\\n\\nAnd for the convenience of tests, we can also implement a rather simple `From`\\ntrait for the `SNAFU`.\\n\\n#### Adjusting the code\\n\\nAfter those changes we need to adjust the code and tests.\\n\\nParsing of the input is very easy, before we have used the lines, now we parse\\neverything:\\n```diff\\n fn parse_input>(pathname: P) -> Input {\\n- file_to_lines(pathname)\\n+ file_to_structs(pathname)\\n }\\n```\\n\\nPart 1 needs to be adjusted a bit too:\\n```diff\\n fn part_1(input: &Input) -> Output {\\n- to_snafu(input.iter().map(|s| from_snafu(s)).sum())\\n+ SNAFU::from(input.iter().map(|s| s.value).sum::()).to_string()\\n }\\n```\\n\\nYou can also see that it simplifies the meaning a bit and it is more explicit than\\nthe previous versions.\\n\\nAnd for the tests:\\n```diff\\n #[test]\\n fn test_from() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(from_snafu(s), *n);\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(s.parse::().unwrap().value, n);\\n }\\n }\\n \\n #[test]\\n fn test_to() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(to_snafu(*n), s.to_string());\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());\\n }\\n```\\n\\n## Summary\\n\\nLet\'s wrap the whole thing up! Keeping in mind both AoC and the Rust\u2026\\n\\n![Finished advent calendar :smile:](/img/blog/aoc-2022/04-week-4/calendar.png)\\n\\n### Advent of Code\\n\\nThis year was quite fun, even though most of the solutions and posts came in\\nlater on (*cough* in \'23 *cough*). Day 22 was the most obnoxious one\u2026 And also\\nit feels like I used priority queues and tree data structures **a lot** :eyes:\\n\\n### with Rust\\n\\nI must admit that a lot of compiler warnings and errors were very useful. Even\\nthough I still found some instances where they didn\'t help at all or cause even\\nworse issues than I had. Compilation times have been addressed with the caching.\\n\\nBuilding my first tree data structure in Rust has been a very \u201cinteresting\u201d\\njourney. Being able to write a more generic BFS algorithm that allows you to not\\nduplicate code while still mantaining the desired functionality contributes to\\na very readable code.\\n\\nI am definitely much more aware of the basic things that bloated Python is\\nmissing, yet Rust has them\u2026\\n\\nUsing explicit types and writing down placeholder functions with `todo!()`\\nmacros is very pleasant, since it allows you to easily navigate the type system\\nduring the development when you don\'t even need to be sure how are you going to\\nput the smaller pieces together.\\n\\nI have used a plethora of traits and also implemented some of them to either be\\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\\ncopying, equality comparison, etc.\\n\\nI confess to touching more \u201ccursed\u201d parts of the Rust, such as macros to\\ndeclutter the copy-paste for tests or writing my own structures that need to\\ncarry a lifetime for their own fields.\\n\\ntl;dr Relatively pleasant language until you hit brick wall :wink:\\n\\n---\\n\\nSee you next year! Maybe in Rust, maybe not :upside_down_face:\\n\\n[_Advent of Code_]: https://adventofcode.com\\n[_A\\\\*_]: https://en.wikipedia.org/wiki/A*_search_algorithm\\n[`BinaryHeap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html\\n[`Reverse`]: https://doc.rust-lang.org/std/cmp/struct.Reverse.html\\n[docs of the `BinaryHeap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html#min-heap"},{"id":"aoc-2022/3rd-week","metadata":{"permalink":"/blog/aoc-2022/3rd-week","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/03-week-3.md","source":"@site/blog/aoc-2022/03-week-3.md","title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":11.565,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00","slug":"aoc-2022/3rd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"prevItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"},"nextItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"}},"content":"Let\'s go through the third week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 15: Beacon Exclusion Zone](https://adventofcode.com/2022/day/15)\\n\\n:::info tl;dr\\n\\nTriangulating a distress beacon based on the information from the sensors.\\n\\n:::\\n\\n### Solution\\n\\nRelatively easy thing to implement, no major Rust issues hit.\\n\\n## [Day 16: Proboscidea Volcanium](https://adventofcode.com/2022/day/16)\\n\\n:::info tl;dr\\n\\nFinding a max flow in a graph given some time constraints.\\n\\n:::\\n\\n### Solution\\n\\nI have used some interesting things to implement this and make it easier for me.\\n\\n#### Indexing in graph\\n\\nI have come across a situation where I needed to keep more information regarding\\nthe graph\u2026 In that case you can, of course, create a structure and keep it in,\\nbut once you have multiple members in the structure it gets harder to work with\\nsince you need to address the fields in the structure. When you work with graph,\\nyou frequently need to access the vertices and in this case it felt a lot easier\\nto implement the indexing in a graph, rather than explicitly access the\\nunderlying data structure.\\n\\nHere you can see a rather short snippet from the solution that allows you to\\n\u201cindex\u201d the graph:\\n```rust\\nimpl Index<&str> for Graph {\\n type Output = Vertex;\\n\\n fn index(&self, index: &str) -> &Self::Output {\\n &self.g[index]\\n }\\n}\\n```\\n\\n#### Cartesian product\\n\\nDuring the implementation I had to utilize Floyd-Warshall algorithm for finding\\nthe shortest path between pairs of vertices and utilized the `iproduct!` macro\\nfrom the [`itertools`]. It is a very useful higher-order function that allows\\nyou to keep the nesting of the loops at a minimum level while still maintaining\\nthe same functionality.\\n\\n#### \u201cImplementing\u201d an iterator\\n\\nFor the second part, you get to split the work between 2 actors. That way you\\ncan achieve higher efficiency of the whole process that you\'re planning, but it\\nalso makes it harder to evaluate algorithmically, since you need to check the\\ndifferent ways the work can be split.\\n\\nBeing affected by _functional programming brain damage_:tm:, I have chosen to\\ndo this part by function that returns an iterator over the possible ways:\\n```rust\\nfn pairings(\\n valves: &BTreeSet,\\n) -> impl Iterator, BTreeSet)> + \'_ {\\n let mapping = valves.iter().collect_vec();\\n\\n let max_mask = 1 << (valves.len() - 1);\\n\\n (0..max_mask).map(move |mask| {\\n let mut elephant = BTreeSet::new();\\n let mut human = BTreeSet::new();\\n\\n for (i, &v) in mapping.iter().enumerate() {\\n if (mask & (1 << i)) == 0 {\\n human.insert(v.clone());\\n } else {\\n elephant.insert(v.clone());\\n }\\n }\\n\\n (human, elephant)\\n })\\n}\\n```\\n\\n## [Day 17: Pyroclastic Flow](https://adventofcode.com/2022/day/17)\\n\\n:::info tl;dr\\n\\nSimulating an autonomous Tetris where pieces get affected by a series of jets of\\nhot gas.\\n\\n:::\\n\\n### Solution\\n\\nSimilarly to the previous day I have created some iterators :smile:\\n\\n#### Collision detection\\n\\nOnce you need to check for collisions it is very helpful to be able to just\\niterate through the positions that can actually collide with the wall or other\\npiece.\\n\\nTo get the desired behaviour, you can just compose few smaller functions:\\n```rust\\nfn occupied(shape: &[Vec]) -> impl Iterator + \'_ {\\n shape.iter().enumerate().flat_map(|(y, row)| {\\n row.iter().enumerate().filter_map(move |(x, c)| {\\n if c == &\'#\' {\\n Some(Vector2D::new(x as isize, y as isize))\\n } else {\\n None\\n }\\n })\\n })\\n}\\n```\\n\\nIn the end, we get relative positions which we can adjust later when given the\\nspecific positions from iterator. You can see some interesting parts in this:\\n\\n* `.enumerate()` allows us to get both the indices (coordinates) and the line\\n or, later on, the character itself,\\n* `.flat_map()` flattens the iterator, i.e. when we return another iterator,\\n they just get chained instead of iterating over iterators (which sounds pretty\\n disturbing, doesn\'t it?),\\n* and finally `.filter_map()` which is pretty similar to the \u201cbasic\u201d `.map()`\\n with a one, key, difference that it expects the items of an iterator to be\\n mapped to an `Option` from which it ignores nothing (as in `None` :wink:)\\n and also unwraps the values from `Some(\u2026)`.\\n\\n#### Infinite iterator\\n\\nIn the solution we cycle through both Tetris-like shapes that fall down and the\\njets that move our pieces around. Initially I have implemented my own infinite\\niterator that just yields the indices. It is a very simple, yet powerful, piece\\nof code:\\n```rust\\nstruct InfiniteIndex {\\n size: usize,\\n i: usize,\\n}\\n\\nimpl InfiniteIndex {\\n fn new(size: usize) -> InfiniteIndex {\\n InfiniteIndex { size, i: size - 1 }\\n }\\n}\\n\\nimpl Iterator for InfiniteIndex {\\n type Item = usize;\\n\\n fn next(&mut self) -> Option {\\n self.i = (self.i + 1) % self.size;\\n Some(self.i)\\n }\\n}\\n```\\n\\nHowever when I\'m looking at the code now, it doesn\'t really make much sense\u2026\\nGuess what, we can use a built-in function that is implemented on iterators for\\nthat! The function is called `.cycle()`\\n\\nOn the other hand, I am not going to switch to that function, since it would\\nintroduce an another myriad of issues caused by the fact that I create iterators\\nright away in the constructor of my structure and the iterators would borrow\\nboth the jets and shapes which would introduce a lifetime dependency into the\\nstructure.\\n\\n## [Day 18: Boiling Boulders](https://adventofcode.com/2022/day/18) \\n\\n:::info tl;dr\\n\\nLet\'s compute a surface area of some obsidian approximated via coordinates of\\ncubes.\\n\\n:::\\n\\n### Solution\\n\\nThis day is kinda interesting, because it shows how easily you can complicate the\\nproblem and also how much can you screw yourself over with the optimization and\\n\u201csmart\u201d approach.\\n\\nFor the first part you need to find the surface area of an obsidian that is\\napproximated by cubes. Now, that is a very easy thing to do, just keep the track\\nof already added cubes, and check if the newly added cube touches any face of any\\nother cube. Simple, and with a `BTreeSet` relatively efficient way to do it.\\n\\nHowever the second part lets you on a secret that there may be some surface area\\nfrom the \u201cinside\u201d too and you want to know only the one from the outside of the\\nobsidian. I have seen some solutions later, but if you check your data, you might\\nnotice that the bounding box of all the cubes isn\'t that big at all. Therefore I\\nchose to pre-construct the box beforehand, fill in the cubes and then just run a\\nBFS turning all the lava on the outside into the air. Now you just need to check\\ncubes and count how many of their faces touch the air.\\n\\n## [Day 19: Not Enough Minerals](https://adventofcode.com/2022/day/19)\\n\\n:::info tl;dr\\n\\nFinding out the best strategy for building robots to collect geodes.\\n\\n:::\\n\\n### Solution\\n\\nNot much interesting stuff to mention apart from the suggestion to never believe\\nthat the default implementation given by `derive` macro is what you want, it\\ndoesn\'t have to be. :smile:\\n\\n## [Day 20: Grove Positioning System](https://adventofcode.com/2022/day/20)\\n\\n:::info tl;dr\\n\\nShuffling around the _circular linked list_ to find the coordinates.\\n\\n:::\\n\\nNow, small rant for this day is in place. They\'ve never mentioned that coordinates\\ncan repeat and therefore the values are non-unique. This is something that did\\nnot happen in the given sample, but was present in the user input. It took \xbba lot\xab\\nto realize that this is the issue.\\n\\n### Solution\\n\\nI have tried implementing a circular linked list for this\u2026 and I have failed\\nmiserably. To be fair, I still have no clue why. It was \u201cfun\u201d to play around with\\nthe `Rc>`. In the end I failed on _wrong answer_. I have also encountered\\na rather interesting issue with `.borrow_mut()` method being used on `Rc>`.\\n\\n#### `.borrow_mut()`\\n\\nConsider the following snippet of the code (taken from the documentation):\\n```rust\\nuse std::cell::{RefCell, RefMut};\\nuse std::collections::HashMap;\\nuse std::rc::Rc;\\n// use std::borrow::BorrowMut;\\n\\nfn main() {\\n let shared_map: Rc> = Rc::new(RefCell::new(HashMap::new()));\\n // Create a new block to limit the scope of the dynamic borrow\\n {\\n let mut map: RefMut<_> = shared_map.borrow_mut();\\n map.insert(\\"africa\\", 92388);\\n map.insert(\\"kyoto\\", 11837);\\n map.insert(\\"piccadilly\\", 11826);\\n map.insert(\\"marbles\\", 38);\\n }\\n\\n // Note that if we had not let the previous borrow of the cache fall out\\n // of scope then the subsequent borrow would cause a dynamic thread panic.\\n // This is the major hazard of using `RefCell`.\\n let total: i32 = shared_map.borrow().values().sum();\\n println!(\\"{total}\\");\\n}\\n```\\n\\nWe allocate a hash map on the heap and then in the inner block, we borrow it as\\na mutable reference, so that we can use it.\\n\\n:::note\\n\\nIt is a very primitive example for `Rc>` and mutable borrow.\\n\\n:::\\n\\nIf you uncomment the 4th line with `use std::borrow::BorrowMut;`, you cannot\\ncompile the code anymore, because of\\n```\\n Compiling playground v0.0.1 (/playground)\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:34\\n |\\n10 | let mut map: RefMut<_> = shared_map.borrow_mut();\\n | --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference\\n | |\\n | expected due to this\\n |\\n = note: expected struct `RefMut<\'_, _>`\\n found mutable reference `&mut Rc>>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:11:13\\n |\\n11 | map.insert(\\"africa\\", 92388);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:12:13\\n |\\n12 | map.insert(\\"kyoto\\", 11837);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:13:13\\n |\\n13 | map.insert(\\"piccadilly\\", 11826);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:14:13\\n |\\n14 | map.insert(\\"marbles\\", 38);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nSome errors have detailed explanations: E0308, E0599.\\nFor more information about an error, try `rustc --explain E0308`.\\nerror: could not compile `playground` due to 5 previous errors\\n```\\n\\nIt might seem **a bit** ridiculous. However, I got to a point where the compiler\\nsuggested `use std::borrow::BorrowMut;` and it resulted in breaking parts of the\\ncode that worked previously. I think it may be a good idea to go over what is\\nhappening here.\\n\\n##### `.borrow_mut()` on `Rc>`\\n\\nLet\'s consider a variable `x` of type `Rc>`. What happens when you\\ncall `.borrow_mut()` on it? We can look at the `Rc` type, and\u2026 hang on! There is\\nneither `.borrow_mut()` method or `BorrowMut` trait implemented. How can we do it\\nthen?\\n\\nLet\'s go further and we can see that `RefCell` implements a `.borrow_mut()`\\nmethod. OK, but how can we call it on the `Rc`? Easily! `Rc` implements\\n`Deref` and therefore you can call methods on `Rc` objects as if they were\\n`T` objects. If we read on _`Deref` coercion_, we can see the following:\\n\\n> If `T` implements `Deref`, \u2026:\\n> * \u2026\\n> * `T` implicitly implements all the (immutable) methods of the type `U`.\\n\\nWhat is the requirement for the `.borrow_mut()` on `RefCell`? Well, it needs\\n`&self`, so the `Deref` implements the `.borrow_mut()` for the `Rc>`.\\n\\n##### `BorrowMut` trait\\n\\nI have not been able to find a lot on this trait. My guess is that it provides a\\nmethod instead of a syntactic sugar (`&mut x`) for the mutable borrow. And also\\nit provides default implementations for the types:\\n```rust\\nimpl BorrowMut for String\\n\\nimpl BorrowMut for &mut T\\nwhere\\n T: ?Sized,\\n\\nimpl BorrowMut for T\\nwhere\\n T: ?Sized,\\n\\nimpl BorrowMut<[T]> for Vec\\nwhere\\n A: Allocator,\\n\\nimpl BorrowMut for Box\\nwhere\\n A: Allocator,\\n T: ?Sized,\\n\\nimpl BorrowMut<[T]> for [T; N]\\n```\\n\\n##### Conflict\\n\\nNow the question is why did it break the code\u2026 My first take was that the type\\n`Rc>` has some _specialized_ implementation of the `.borrow_mut()` and\\nthe `use` overrides it with the default, which is true **in a sense**. However\\nthere is no _specialized_ implementation. Let\'s have a look at the trait and the\\ntype signature on the `RefCell`:\\n```rust\\n// trait\\npub trait BorrowMut: Borrow\\nwhere\\n Borrowed: ?Sized,\\n{\\n fn borrow_mut(&mut self) -> &mut Borrowed;\\n}\\n\\n// \u2039RefCell.borrow_mut()\u203a type signature\\npub fn borrow_mut(&self) -> RefMut<\'_, T>\\n```\\n\\nI think that we can definitely agree on the fact that `RefMut<\'_, T>` is not the\\n`RefCell`.\\n\\n**In my opinion**, `RefCell` implements a **separate** `.borrow_mut()` rather\\nthan implementing the interface, because it **cannot** satisfy the type requirements\\nof the trait.\\n\\n:::caution\\n\\nI wonder how are we expected to deal with this conflict, if and when, we need\\nboth the `.borrow_mut()` of the trait and `.borrow_mut()` of the `RefCell`.\\n\\n:::\\n\\n:::tip Fun fact\\n\\nI was suggested by the compiler to do `use std::borrow::BorrowMut;` and break the\\ncode.\\n\\nSo much for the _almighty_ and _helpful_ compiler\u2026\\n\\n:::\\n\\n## [Day 21: Monkey Math](https://adventofcode.com/2022/day/21)\\n\\n:::info tl;dr\\n\\nComputing an expression tree and then also finding ideal value for a node.\\n\\n:::\\n\\n### Solution\\n\\nRelatively simple, until you get to the 2nd part where you start to practice\\na lot of the copy-paste. I have managed to sneak some perverted stuff in there\\nthough :) Let\'s go through the details.\\n\\n#### `Default` trait\\n\\nFor the first time and twice I had a need to have a default value for my types,\\nenumerations in this case. Rust offers a very nice trait[^1] that is described\\nas:\\n\\n> A trait for giving a type a useful default value.\\n\\nI guess it sums it up nicely. The more interesting part about this is the fact\\nthat you can use the _macro machinery_ to save yourself some typing. If you have\\nenumeration of which the default value doesn\'t bear any parameter, you can just\\ndo[^2]:\\n\\n```rust\\n#[derive(Default)]\\nenum Color {\\n #[default]\\n White,\\n Gray,\\n Black,\\n}\\n```\\n\\n#### Abusing negation\\n\\nIf you want to use a _unary minus_ operator on your own type, you can implement\\na `Neg` trait[^3]. I was dealing with a binary tree and needed a way how to look\\nat the other side, so I have just implemented the negation for flipping between\\nleft and right :smile:\\n\\n[^1]: [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) docs\\n[^2]: Pardon my example from the graph algorithms ;)\\n[^3]: [`Neg`](https://doc.rust-lang.org/std/ops/trait.Neg.html) docs\\n\\n[_Advent of Code_]: https://adventofcode.com\\n[`itertools`]: https://crates.io/crates/itertools\\n[this Reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"},{"id":"leetcode/sort-diagonally","metadata":{"permalink":"/blog/leetcode/sort-diagonally","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/leetcode/sort-matrix-diagonally.md","source":"@site/blog/leetcode/sort-matrix-diagonally.md","title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15:00.000Z","formattedDate":"March 4, 2023","tags":[{"label":"cpp","permalink":"/blog/tags/cpp"},{"label":"leetcode","permalink":"/blog/tags/leetcode"},{"label":"iterators","permalink":"/blog/tags/iterators"}],"readingTime":16.99,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15","slug":"leetcode/sort-diagonally","authors":"mf","tags":["cpp","leetcode","iterators"],"hide_table_of_contents":false},"prevItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"},"nextItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"}},"content":"Let\'s try to solve one of the LeetCode challenges in easy and hard mode at the\\nsame time.\\n\\n\x3c!--truncate--\x3e\\n\\n* Link to the problem: https://leetcode.com/problems/sort-the-matrix-diagonally/\\n\\n## Problem description\\n\\nA **matrix diagonal** is a diagonal line of cells starting from some cell in\\neither the topmost row or leftmost column and going in the bottom-right direction\\nuntil reaching the matrix\'s end. For example, the **matrix diagonal** starting\\nfrom `mat[2][0]`, where `mat` is a `6 x 3` matrix, includes cells `mat[2][0]`,\\n`mat[3][1]`, and `mat[4][2]`.\\n\\nGiven an `m x n` matrix `mat` of integers, sort each matrix diagonal in ascending\\norder and return the resulting matrix.\\n\\n### Example\\n\\n![Image describing the problem](https://assets.leetcode.com/uploads/2020/01/21/1482_example_1_2.png)\\n\\n## Skeleton and initial adjustments\\n\\nWe are given the following skeleton for the C++ and the given challenge:\\n\\n```cpp\\nclass Solution {\\npublic:\\n vector> diagonalSort(vector>& mat) {\\n \\n }\\n};\\n```\\n\\nThe task is to sort the passed matrix diagonally and then return it. First of all,\\nI don\'t like to solve this in a web browser, so we\'ll need to adjust it accordingly\\nfor running it locally. We\'ll start by including the `vector` header and using\\nfully-qualified namespaces[^1] and also adding few tests:\\n\\n```cpp\\n#include \\n#include \\n\\nusing matrix = std::vector>;\\n\\nclass Solution {\\npublic:\\n matrix diagonalSort(matrix& mat)\\n {\\n }\\n};\\n\\nstatic void test_case_1()\\n{\\n // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]\\n // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },\\n std::vector { 2, 2, 1, 2 },\\n std::vector { 1, 1, 1, 2 } })\\n == std::vector { std::vector { 1, 1, 1, 1 },\\n std::vector { 1, 2, 2, 2 },\\n std::vector { 1, 2, 3, 3 } }));\\n}\\n\\nstatic void test_case_2()\\n{\\n // Input: mat =\\n // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]\\n // Output:\\n // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },\\n std::vector { 23, 55, 17, 45, 15, 52 },\\n std::vector { 75, 31, 36, 44, 58, 8 },\\n std::vector { 22, 27, 33, 25, 68, 4 },\\n std::vector { 84, 28, 14, 11, 5, 50 } })\\n == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },\\n std::vector { 11, 11, 25, 45, 8, 69 },\\n std::vector { 14, 23, 25, 44, 58, 15 },\\n std::vector { 22, 27, 31, 36, 50, 66 },\\n std::vector { 84, 28, 75, 33, 55, 68 } }));\\n}\\n\\nint main()\\n{\\n test_case_1();\\n test_case_2();\\n\\n return 0;\\n}\\n```\\n\\nWe need to return the matrix, but we\'re given a reference to the input matrix. We\\ncan easily abuse the C++ here and just switch the reference to value, this way\\nthe matrix will be copied when passed to the function, we can sort the copy and\\njust return it back. And we also get yelled by the compiler for the fact that the\\nmethod doesn\'t return anything yet, so to make it \u201cshut up\u201d we will just return\\nthe input for now:\\n\\n```diff\\n- matrix diagonalSort(matrix& mat)\\n+ matrix diagonalSort(matrix mat)\\n {\\n+ return mat;\\n }\\n```\\n\\nNow, we get the copy and we\'re good to go.\\n\\n## Na\xefve solution\\n\\nAs you may know, C++ offers a plethora of functions that can be used to your\\nadvantage, given that you know how to \u201cbend\u201d the data structures accordingly.\\n\\nWhat does that mean for us? Well, we have an `std::sort`, we can use it, right?\\nLet\'s have a look at it:\\n```cpp\\ntemplate< class RandomIt >\\nvoid sort( RandomIt first, RandomIt last );\\n```\\n\\nThis overload is more than we need. What does it do? It just sorts the elements\\nin the range `[first, last)` using `operator<` on them. We can\'t sort the whole\\nmatrix using this, but\u2026 we can sort just \xbbone\xab diagonal without doing much work\\non our end.\\n\\nWhat is the `RandomIt` type though? If we look more into the documentation, we\\ncan easily find the requirements for it and also learn that it\'s a _random access_\\n_iterator_ and allows swapping its values at the same time.\\n\\n:::tip Random access iterator\\n\\nWhat is the _random access iterator_ though? We can find it in a documentation\\nand see the following description:\\n\\n> A **LegacyRandomAccessIterator** is a [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator)\\n> that can be moved to point to any element in constant time.\\n\\nAfter that we can see all the requirements for it being listed. I don\'t feel like\\nreading them right now, so we will just use it and see where the compilation blows\\nup, i.e. \u201c_compiler-assisted development_\u201d[^2] if you will ;)\\n\\n:::\\n\\nNow we know that we can use `std::sort` to sort the diagonal itself, but we also\\nneed to get the diagonals somehow. I\'m rather lazy, so I\'ll just delegate it to\\nsomeone else[^3]. And that way we get\\n```cpp\\nmatrix diagonalSort(matrix mat)\\n{\\n // we iterate over the diagonals\\n for (auto d : diagonals(mat)) {\\n // and we sort each diagonal\\n std::sort(d.begin(), d.end());\\n }\\n\\n // we take the matrix by copy, so we can sort in-situ and return the copy\\n // that we sorted\\n return mat;\\n}\\n```\\n\\nThis solution looks very simple, doesn\'t it? Well, cause it is.\\nLet\'s try compiling it:\\n```\\nmatrix-sort.cpp:11:23: error: use of undeclared identifier \'diagonals\' [clang-diagnostic-error]\\n for (auto d : diagonals(mat)) {\\n ^\\nFound compiler error(s).\\nmake: *** [makefile:14: tidy] Error 1\\n```\\n\\nOK, seems about right. We haven\'t implemented the `diagonals` yet. And based on\\nwhat we\'ve written so far, we need a function or a class `diagonals` that will\\ngive us the diagonals we need.\\n\\n## Implementing the `diagonals`\\n\\nCool, so we need the function that will let us go through each and every diagonal\\nin our matrix. We use the _for-range_ loop, so whatever we get back from the\\n`diagonals` must support `.begin()` and `.end()`. Since I am a masochist, we will\\ndo such functionality for a matrix of any type, not just the `int` from the challenge.\\n\\nAs I said, we need to be able to\\n* construct the object\\n* get the beginning\\n* get the end (the \u201csentinel\u201d)\\n\\n```cpp\\ntemplate \\nclass diagonals {\\n using matrix_t = std::vector>;\\n\\n matrix_t& _matrix;\\n\\npublic:\\n diagonals(matrix_t& m)\\n : _matrix(m)\\n {\\n }\\n diagonals_iter begin()\\n {\\n /* TODO */\\n }\\n diagonals_iter end()\\n {\\n /* TODO */\\n }\\n};\\n```\\n\\nNow we have a `diagonals` that we can use to go through the diagonals. We haven\'t\\nimplemented the core of it yet. Let\'s go through what we have for now.\\n\\nWe have a templated class with templated `T` that is used as a placeholder for any\\ntype we would store in the matrix. Because I\'m lazy, I have defined the `matrix_t`\\ntype that is a \u201cshortcut\u201d for `std::vector>`, so I don\'t have to\\ntype it out all the time. Of course, we need to store the matrix, we are given,\\nas a private attribute. And then just have the constructor and the 2 methods we\\nneed for the _for-range_.\\n\\n### Iterating over diagonals\\n\\nNow that we have an object that will allow us to iterate through the diagonals,\\nwe need to implement the iterating itself. We need to go through all of them, so\\nwe have multiple options how to do so. I have decided to start from the \u201cmain\u201d\\ndiagonal that starts at `(0, 0)` index and then proceed with the diagonals starting\\nin the first row, followed by the rest of the diagonals in the first column.\\n\\nWe need to be able to tell that we\'ve iterated through all of them, and also we\\nneed to know which diagonal is next. For that purpose we will pass the indices\\nof the first cell on the diagonal. That way we can always tell how to move forward.\\n\\nWe will start by updating the `begin` and `end` to reflect our choice accordingly.\\n\\n```cpp\\ndiagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }\\ndiagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }\\n```\\n\\nFor the `begin` we return the first diagonal that starts at `(0, 0)`. And because\\nwe have decided to do the diagonals in the first column at the end, the first\\ndiagonal that is not a valid one is the one at `(0, height)`. Apart from the\\nindices, we also need to pass reference to the matrix itself.\\n\\n:::note\\n\\nYou may have noticed that we also include the diagonals that have length 1,\\nspecifically the ones at `(0, height - 1)` and `(width - 1, 0)`. We are implementing\\nan iterator that **should not** care about the way it\'s being used. Therefore, we\\ndon\'t care about the fact they don\'t need to be sorted.\\n\\n:::\\n\\nCool, let\'s leave the iterator itself to someone else, right?[^4]\\n\\n### Implementing the iterator over diagonals\\n\\nWe can start with a simple skeleton based on the information that we pass from\\nthe `diagonals`. Also to utilize the `matrix_t` and also contain implementation\\ndetails hidden away, we will put this code into the `diagonals` class.\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n};\\n```\\n\\nIn this case we will be implementing a \u201csimple\u201d forward iterator, so we don\'t\\nneed to implement a lot. Notably it will be:\\n* inequality operator (we need to know when we reach the end and have nothing to\\n iterate over)\\n* preincrementation operator (we need to be able to move around the iterable)\\n* dereference operator (we need to be able to retrieve the objects we iterate\\n over)\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator!=(const diagonals_iter& rhs) const\\n {\\n // iterators are not equal if they reference different matrices, or\\n // their positions differ\\n return m != rhs.m || x != rhs.x || y != rhs.y;\\n }\\n\\n diagonals_iter& operator++()\\n {\\n if (y != 0) {\\n // iterating through diagonals down the first column\\n y++;\\n return *this;\\n }\\n\\n // iterating the diagonals along the first row\\n x++;\\n if (x == m.front().size()) {\\n // switching to diagonals in the first column\\n x = 0;\\n y++;\\n }\\n\\n return *this;\\n }\\n\\n diagonal operator*() const { return diagonal { m, x, y }; }\\n};\\n```\\n\\nLet\'s go one-by-one. Inequality operator is rather simple, just compare iterator\'s\\nattributes field-by-field. If you think about it, checking inequality of two 2D\\nvectors may be a bit inefficient, therefore, we can swap around and check it as\\na last thing.\\n\\n```diff\\n- return m != rhs.m || x != rhs.x || y != rhs.y;\\n+ return x != rhs.x || y != rhs.y || m != rhs.m;\\n```\\n\\nPreincrementation is where the magic happens. If you have a better look, you can\\nsee two branches of this operation:\\n\\n1. When `y != 0` (we\'re iterating over the diagonals in the first column)\\n In this case, we just bump the row and we\'re done.\\n2. When `y == 0` (we\'re iterating over the diagonals in the first row)\\n In this case, we bump the column and check if we haven\'t gotten out of bounds,\\n i.e. the end of the first row. If we get out of the bounds, we\'re continuing\\n with the second diagonal in the first column.\\n\\nDereferencing the iterator must \u201cyield\u201d something. In our case it will be the\\ndiagonal that we want to sort. For sorting we need just the iterators that can\\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\\nsomething else. In our case it will be a class called `diagonal`.\\n\\n## Implementing the `diagonal` itself\\n\\nAfter implementing the iterator over diagonals, we know that all we need to describe\\na diagonal is the matrix itself and the \u201cstart\u201d of the diagonal (row and column).\\nAnd we also know that the diagonal must provide some iterators for the `std::sort`\\nfunction. We can start with the following skeleton:\\n```cpp\\ntemplate \\nclass diagonal {\\n using matrix_t = std::vector>;\\n\\n matrix_t& matrix;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonal(matrix_t& matrix, std::size_t x, std::size_t y)\\n : matrix(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }\\n\\n diagonal_iter end() const\\n {\\n auto max_x = matrix[y].size();\\n auto max_y = matrix.size();\\n\\n // we need to find the distance in which we get out of bounds (either in\\n // column or row)\\n auto steps = std::min(max_x - x, max_y - y);\\n\\n return diagonal_iter { matrix, x + steps, y + steps };\\n }\\n};\\n```\\n\\nInitialization is rather simple, we just \u201ckeep\u201d the stuff we get, `begin` is the\\nsimplest, we just delegate.\\n\\nIn case of the `end`, it gets more complicated. We need to know where is the \u201cend\u201d\\nof the diagonal. Since `end` should point to the first element \u201cafter\u201d the iterable,\\nwe know that it\'s the first position of the iterator where either `y` becomes\\n`matrix.size()` or `x` becomes `matrix[y].size()`. Also we are moving along diagonal,\\nduh, therefore we can deduce the first \u201cposition\u201d afterwards by minimal amount of\\nsteps to get out of the any column or row, hence `std::min(max_x - x, max_y - y)`.\\nFinal position is then computed simply by adding the steps to the beginning of\\nthe diagonal.\\n\\nNow we just need to finish the iterator for the diagonal itself and we\'re done.\\n\\n### Implementing `diagonal_iter`\\n\\nThis part is the hardest from all we need to do. It\'s because of the requirements\\nof the `std::sort` that requires us to implement a _random access iterator_. I have\\nbriefly described it above, and \u201cin a nutshell\u201d it means that we need to implement\\nan iterator that can move in constant time along the diagonal in any amount of\\nsteps.\\n\\nLet\'s go through all of the functionality that our iterator needs to support to\\nbe used in `std::sort`. We need the usual operations like:\\n\\n* equality/inequality\\n* incrementation\\n* dereferencing\\n\\nWe will also add all the types that our iterator uses with the category of the\\niterator, i.e. what interface it supports:\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n};\\n```\\n\\nThis is pretty similar to the previous iterator, but now we need to implement the\\nremaining requirements of the _random access iterator_. Let\'s see what those are:\\n\\n* decrementation - cause we need to be able to move backwards too, since _random _\\n _access iterator_ extends the interface of _bidirectional iterator_\\n* moving the iterator in either direction by steps given as an integer\\n* being able to tell the distance between two iterators\\n* define an ordering on the iterators\\n\\nLet\'s fill them in:\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n\\n // exactly opposite to the incrementation\\n diagonal_iter operator--()\\n {\\n x--;\\n y--;\\n return *this;\\n }\\n\\n // moving \u2039n\u203a steps back is same as calling decrementation \u2039n\u203a-times, so we\\n // can just return a new iterator and subtract \u2039n\u203a from both coordinates in\\n // the matrix\\n diagonal_iter operator-(difference_type n) const\\n {\\n return diagonal_iter { m, x - n, y - n };\\n }\\n\\n // here we assume that we are given two iterators on the same diagonal\\n difference_type operator-(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x - rhs.x;\\n }\\n\\n // counterpart of moving \u2039n\u203a steps backwards\\n diagonal_iter operator+(difference_type n) const\\n {\\n return diagonal_iter { m, x + n, y + n };\\n }\\n\\n // we compare the coordinates, and also assume that those 2 iterators are\\n // lying on the same diagonal\\n bool operator<(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x < rhs.x && y < rhs.y;\\n }\\n};\\n```\\n\\nAt this point we could probably try and compile it, right? If we do so, we will\\nget yelled at by a compiler for the following reasons:\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __next;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization \'std::__unguarded_linear_insert::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>\' requested here\\n std::__unguarded_linear_insert(__i,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization \'std::__insertion_sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__insertion_sort(__first, __first + int(_S_threshold), __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal::matrix_t &\' (aka \'vector> &\')\\n matrix_t& m;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to \'__unguarded_linear_insert\' [clang-diagnostic-error]\\n std::__unguarded_linear_insert(__i,\\n ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization \'std::__unguarded_insertion_sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]\\n __unguarded_linear_insert(_RandomAccessIterator __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type \'diagonal::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __cut;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization \'std::__introsort_loop::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__introsort_loop(__first, __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal::matrix_t &\' (aka \'vector> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nThat\'s a lot of noise, isn\'t it? Let\'s focus on the important parts:\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n\u2026\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal::matrix_t &\' (aka \'vector> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nAh! We have a reference in our iterator, and this prevents us from having a copy\\nassignment operator (that is used \u201csomewhere\u201d in the sorting algorithm). Well\u2026\\nLet\'s just wrap it!\\n```diff\\n# we need to keep a different type than reference\\n- matrix_t& m;\\n+ std::reference_wrapper m;\\n\\n# in comparison we need to get the reference out of the wrapper first\\n- return x == rhs.x && y == rhs.y && m == rhs.m;\\n+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();\\n\\n# same when we return a reference to the \u201ccell\u201d in the matrix\\n- reference operator*() const { return m[y][x]; }\\n+ reference operator*() const { return m.get()[y][x]; }\\n\\n# and finally in the assertions that we set for the \u201cdistance\u201d and \u201cless than\u201d\\n- assert(m == rhs.m);\\n+ assert(m.get() == rhs.m.get());\\n```\\n\\nWe\'re done now! We have written an iterator over diagonals for a 2D `vector`. You can have a look at the final result [here](pathname:///files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp).\\n\\n[^1]: just because I\'m used to it and don\'t care about your opinion ;)\\n[^2]: exercise at your own risk\\n[^3]: me in 5 minutes in fact, but don\'t make me scared\\n[^4]: me in the next section\u2026"},{"id":"aoc-2022/2nd-week","metadata":{"permalink":"/blog/aoc-2022/2nd-week","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/02-week-2.md","source":"@site/blog/aoc-2022/02-week-2.md","title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15:00.000Z","formattedDate":"December 25, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":20.875,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15","slug":"aoc-2022/2nd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"prevItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"},"nextItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s go through the second week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 8: Treetop Tree House](https://adventofcode.com/2022/day/8)\\n\\n:::info tl;dr\\n\\nWe get a forest and we want to know how many trees are visible from the outside.\\nApart from that we want to find the best view.\\n\\n:::\\n\\nNothing interesting. We are moving around 2D map though. And indexing can get a\\nbit painful when doing so, let\'s refactor it a bit ;) During the preparation for\\nthe AoC, I have written `Vector2D` and now it\'s time to extend it with indexing\\nof `Vec` of `Vec`s. In my solution I was manipulating with indices in the following\\nway:\\n\\n- swapping them\\n- checking whether they are correct indices for the `Vec>`\\n- indexing `Vec>` with them\\n\\n:::caution\\n\\nI\'m getting familiar with Rust and starting to \u201cabuse\u201d it\u2026 While doing so, I\'m\\nalso uncovering some \u201cfeatures\u201d that I don\'t really like. Therefore I will mark\\nall of my rants with _thicc_ **\xab\u21af\xbb** mark and will try to \u201clock\u201d them into their\\nown \u201cbox of hell\u201d.\\n\\n:::\\n\\n#### Swapping indices\\n\\nRelatively simple implementation, just take the values, swap them and return new\\nvector.\\n\\n```rust\\nimpl Vector2D {\\n pub fn swap(&self) -> Self {\\n Self {\\n x: self.y,\\n y: self.x,\\n }\\n }\\n}\\n```\\n\\nPretty straight-forward implementation, but let\'s talk about the `T: Copy`. We\\nneed to use it, since we are returning a **new** vector, with swapped **values**.\\nIf we had values that cannot be copied, the only thing we could do, would be a\\nvector of references (and it would also introduce a lifetime, to which we\'ll get\\nlater on). This is pretty similar with the operations on sets from the first week.\\n\\n#### Indexing `Vec`\\n\\nI will start with the indexing, cause bound-checking is a bit more\u2026 complicated\\nthan I would like to.\\n\\n```rust\\npub fn index<\'a, T, U>(v: &\'a [Vec], idx: &Vector2D) -> &\'a U\\nwhere\\n usize: TryFrom,\\n >::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nLet\'s talk about this mess\u2026 Body of the function is probably the most easy part\\nand should not be hard to understand, we just take the `x` and `y` and convert\\nthem both to `usize` type that can be used later on for indexing.\\n\\nThe type signature of the function is where the fun is at :wink: We are trying\\nto convert unknown type to `usize`, so we must bound the `T` as a type that can\\nbe converted to `usize`, that\'s how we got `usize: TryFrom` which basically\\nsays that `usize` must implement `TryFrom` trait and therefore allows us to\\nconvert the indices to actual `usize` indices. Using `.unwrap()` also forces us\\nto bound the error that can occur when converting `T` into `usize`, that\'s how\\nwe get `>::Error: Debug` which loosely means\\n\\n> error during conversion of `T` into `usize` must implement `Debug`,\\n> i.e. can be printed in some way or other\\n\\n`T: Copy` is required by `.try_into()` which takes `T` by-value.\\n\\nAnd now we are left only with the first line of the definition.\\n\\n:::note\\n\\nSkilled Rustaceans might notice that this implementation is rather flaky and can\\nbreak in multiple places at once. I\'ll get back to it\u2026\\n\\n:::\\n\\nLet\'s split it in multiple parts:\\n- `v: &\'a [Vec]` represents the 2D `Vec`, we are indexing, `Vec` implements\\n `Slice` trait and _clippy_ recommends using `&[T]` to `&Vec`, exact details\\n are unknown to me\\n- `idx: &Vector2D` represents the _indices_ which we use, we take them by\\n reference to avoid an unnecessary copy\\n- `-> &\'a U` means that we are returning a _reference_ to some value of type `U`.\\n Now the question is what does the `\'a` mean, we can also see it as a generic\\n type declared along `T` and `U`. And the answer is _relatively_ simple, `\'a`\\n represents a _lifetime_. We take the `v` by a reference and return a reference,\\n borrow checker validates all of the _borrows_ (or references), so we need to\\n specify that our returned value has _the same lifetime_ as the vector we have\\n taken by a reference, i.e. returned reference must live at least as long as the\\n `v`. This way we can \u201cbe sure\u201d that the returned reference is valid.\\n\\n##### Issues\\n\\nFirst issue that our implementation has is the fact that we cannot get a mutable\\nreference out of that function. This could be easily resolved by introducing new\\nfunction, e.g. `index_mut`. Which I have actually done while writing this part:\\n```rust\\npub fn index_mut<\'a, T, U>(v: &\'a mut [Vec], idx: &Vector2D) -> &\'a mut U\\nwhere\\n usize: TryFrom,\\n >::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &mut v[y][x]\\n}\\n```\\n\\n:::caution **\xab\u21af\xbb** Why can\'t we use one function?\\n\\nWhen we consider a `Vec`, we don\'t need to consider containers as `T`, Rust\\nimplements indexing as traits `Index` and `IndexMut` that do the dirty work\\nbehind syntactic sugar of `container[idx]`.\\n\\nHowever, implementing of traits is not allowed for _external_ types, i.e. types\\nthat you haven\'t defined yourself. This means that you can implement indexing\\nover containers that you have implemented yourself, but you cannot use your own\\ntypes for indexing \u201cbuilt-in\u201d types.\\n\\nAnother part of this rabbit hole is trait `SliceIndex` that is of a relevance\\nbecause of\\n```rust\\nimpl Index for [T]\\nwhere\\n I: SliceIndex<[T]>\\n\\nimpl Index for Vec\\nwhere\\n I: SliceIndex<[T]>,\\n A: Allocator\\n\\nimpl Index for [T; N]\\nwhere\\n [T]: Index\\n```\\n\\nIn other words, if your type implements `SliceIndex` trait, it can be used\\nfor indexing. As of now, this trait has all of its required methods experimental\\nand is marked as `unsafe`.\\n\\n:::\\n\\nAnother problem is a requirement for indexing either `[Vec]` or `Vec>`.\\nThis requirement could be countered by removing inner type `Vec` and constraining\\nit by a trait `Index` (or `IndexMut` respectively) in a following way\\n```rust\\npub fn index<\'a, C, T>(v: &\'a [C], idx: &Vector2D) -> &\'a C::Output\\nwhere\\n usize: TryFrom,\\n >::Error: Debug,\\n T: Copy,\\n C: Index\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nGiven this, we can also give a more meaningful typename for indexing type, such\\nas `I`.\\n\\n#### Checking bounds\\n\\nNow we can get to the boundary checks, it is very similar, but a more\u2026 dirty.\\nFirst approach that came up was to convert the indices in `Vector2D` to `usize`,\\nbut when you add the indices up, e.g. when checking the neighbors, you can end\\nup with negative values which, unlike in C++, causes an error (instead of underflow\\nthat you can use to your advantage; you can easily guess how).\\n\\nSo how can we approach this then? Well\u2026 we will convert the bounds instead of\\nthe indices and that lead us to:\\n```rust\\npub fn in_range(v: &[Vec], idx: &Vector2D) -> bool\\nwhere\\n usize: TryInto,\\n >::Error: Debug,\\n T: PartialOrd + Copy,\\n{\\n idx.y >= 0.try_into().unwrap()\\n && idx.y < v.len().try_into().unwrap()\\n && idx.x >= 0.try_into().unwrap()\\n && idx.x\\n < v[TryInto::::try_into(idx.y).unwrap()]\\n .len()\\n .try_into()\\n .unwrap()\\n}\\n```\\n\\nYou can tell that it\'s definitely a shitty code. Let\'s improve it now! We will\\nget back to the original idea, but do it better. We know that we cannot convert\\nnegative values into `usize`, **but** we also know that conversion like that\\nreturns a `Result` which we can use to our advantage.\\n```rust\\npub fn in_range(v: &[Vec], idx: &Vector2D) -> bool\\nwhere\\n T: Copy,\\n usize: TryFrom,\\n{\\n usize::try_from(idx.y)\\n .and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))\\n .unwrap_or(false)\\n}\\n```\\n\\n`Result` is a type similar to `Either` in Haskell and it allows us to chain\\nmultiple operations on correct results or propagate the original error without\\ndoing anything. Let\'s dissect it one-by-one.\\n\\n`try_from` is a method implemented in `TryFrom` trait, that allows you to convert\\ntypes and either successfully convert them or fail (with a reasonable error). This\\nmethod returns `Result`.\\n\\nWe call `and_then` on that _result_, let\'s have a look at the type signature of\\n`and_then`, IMO it explains more than enough:\\n```rust\\npub fn and_then(self, op: F) -> Result\\nwhere\\n F: FnOnce(T) -> Result\\n```\\n\\nOK\u2026 So it takes the result and a function and returns another result with\\ndifferent value and different error. However we can see that the function, which\\nrepresents an operation on a result, takes just the value, i.e. it doesn\'t care\\nabout any previous error. To make it short:\\n\\n> `and_then` allows us to run an operation, which can fail, on the correct result\\n\\nWe parsed a `y` index and now we try to convert the `x` index with `try_from`\\nagain, but on that result we use `map` rather than `and_then`, why would that be?\\n\\n```rust\\npub fn map(self, op: F) -> Result\\nwhere\\n F: FnOnce(T) -> U\\n```\\n\\nHuh\u2026 `map` performs an operation that **cannot** fail. And finally we use\\n`unwrap_or` which takes the value from result, or in case of an error returns the\\ndefault that we define.\\n\\nHow does this work then? If `y` is negative, the conversion fails and the error\\npropagates all the way to `unwrap_or`, if `y` can be a correct `usize` value, then\\nwe do the same with `x`. If `x` is negative, we propagate the error as with `y`,\\nand if it\'s not, then we check whether it exceeds the higher bounds or not.\\n\\n### Solution\\n\\nRelatively simple, you just need follow the rules and not get too smart, otherwise\\nit will get back at you.\\n\\n## [Day 9: Rope Bridge](https://adventofcode.com/2022/day/9)\\n\\n:::info tl;dr\\n\\nWe get a rope with knots and we want to track how many different positions are\\nvisited with the rope\'s tail.\\n\\n:::\\n\\nBy this day, I have come to a conclusion that current skeleton for each day\\ngenerates a lot of boilerplate. And even though it can be easily copied, it\'s\\njust a waste of space and unnecessary code. Let\'s \u201csimplify\u201d this (on one end\\nwhile creating monster on the other end). I\'ve gone through what we need in the\\npreparations for the AoC. Let\'s sum up our requirements:\\n- parsing\\n- part 1 & 2\\n- running on sample / input\\n- tests\\n\\nParsing and implementation of both parts is code that changes each day and we\\ncannot do anything about it. However running and testing can be simplified!\\n\\nLet\'s introduce and export a new module `solution` that will take care of all of\\nthis. We will start by introducing a trait for each day.\\n```rust\\npub trait Solution {\\n fn parse_input>(pathname: P) -> Input;\\n\\n fn part_1(input: &Input) -> Output;\\n fn part_2(input: &Input) -> Output;\\n}\\n```\\n\\nThis does a lot of work for us already, we have defined a trait and for each day\\nwe will create a structure representing a specific day. That structure will also\\nimplement the `Solution` trait.\\n\\nNow we need to get rid of the boilerplate, we can\'t get rid of the `main` function,\\nbut we can at least move out the functionality.\\n```rust\\nfn run(type_of_input: &str) -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = Self::parse_input(format!(\\"{}s/{}.txt\\", type_of_input, Self::day()));\\n\\n info!(\\"Part 1: {}\\", Self::part_1(&input));\\n info!(\\"Part 2: {}\\", Self::part_2(&input));\\n\\n Ok(())\\n}\\n\\nfn main() -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n Self::run(\\"input\\")\\n}\\n```\\n\\nThis is all part of the `Solution` trait, which can implement methods while being\\ndependent on what is provided by the implementing types. In this case, we just\\nneed to bound the `Output` type to implement `Display` that is necessary for the\\n`info!` and format string there.\\n\\nNow we can get to first of the nasty things we are going to do\u2026 And it is the\\n`day()` method that you can see being used when constructing path to the input\\nfile. That method will generate a name of the file, e.g. `day01` and we know that\\nwe can _somehow_ deduce it from the structure name, given we name it reasonably.\\n\\n```rust\\nfn day() -> String {\\n let mut day = String::from(type_name::().split(\\"::\\").next().unwrap());\\n day.make_ascii_lowercase();\\n\\n day.to_string()\\n}\\n```\\n\\n:::caution `type_name`\\n\\nThis feature is still experimental and considered to be internal, it is not\\nadvised to use it any production code.\\n\\n:::\\n\\nAnd now we can get to the nastiest stuff :weary: We will **generate** the tests!\\n\\nWe want to be able to generate tests for sample input in a following way:\\n```rust\\ntest_sample!(day_01, Day01, 42, 69);\\n```\\n\\nThere\'s not much we can do, so we will write a macro to generate the tests for us.\\n\\n```rust\\n#[macro_export]\\nmacro_rules! test_sample {\\n ($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {\\n #[cfg(test)]\\n mod $mod_name {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_1(&sample), $part_1);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_2(&sample), $part_2);\\n }\\n }\\n };\\n}\\n```\\n\\nWe have used it in a similar way as macros in C/C++, one of the things that we\\ncan use to our advantage is defining \u201ctype\u201d of the parameters for the macro. All\\nparameters have their name prefixed with `$` sign and you can define various \u201cforms\u201d\\nof your macro. Let\'s go through it!\\n\\nWe have following parameters:\\n- `$mod_name` which represents the name for the module with tests, it is typed\\n with `ident` which means that we want a valid identifier to be passed in.\\n- `$day_struct` represents the structure that will be used for tests, it is typed\\n with `tt` which represents a _token tree_, in our case it is a type.\\n- `$part_X` represents the expected output for the `X`th part and is of type `expr`\\n which literally means an _expression_.\\n\\nApart from that we need to use `#[macro_export]` to mark the macro as exported\\nfor usage outside of the module. Now our skeleton looks like:\\n```rust\\nuse aoc_2022::*;\\n\\ntype Input = String;\\ntype Output = String;\\n\\nstruct DayXX;\\nimpl Solution for DayXX {\\n fn parse_input>(pathname: P) -> Input {\\n file_to_string(pathname)\\n }\\n\\n fn part_1(input: &Input) -> Output {\\n todo!()\\n }\\n\\n fn part_2(input: &Input) -> Output {\\n todo!()\\n }\\n}\\n\\nfn main() -> Result<()> {\\n // DayXX::run(\\"sample\\")\\n DayXX::main()\\n}\\n\\n// test_sample!(day_XX, DayXX, , );\\n```\\n\\n### Solution\\n\\nNot much to talk about, it is relatively easy to simulate.\\n\\n## [Day 10: Cathode-Ray Tube](https://adventofcode.com/2022/day/10)\\n\\n:::info tl;dr\\n\\nEmulating basic arithmetic operations on a CPU and drawing on CRT based on the\\nCPU\'s accumulator.\\n\\n:::\\n\\nIn this day I have discovered an issue with my design of the `Solution` trait.\\nAnd the issue is caused by different types of `Output` for the part 1 and part 2.\\n\\nProblem is relatively simple and consists of simulating a CPU, I have approached\\nit in a following way:\\n```rust\\nfn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {\\n instructions\\n .iter()\\n .fold(State::new(), |state, instruction| {\\n state.execute(instruction, &mut out)\\n });\\n\\n out\\n}\\n```\\n\\nWe just take the instructions, we have some state of the CPU and we execute the\\ninstructions one-by-one. Perfect usage of the `fold` (or `reduce` as you may know\\nit from other languages).\\n\\nYou can also see that we have an `Output` type, so the question is how can we fix\\nthat problem. And the answer is very simple and _functional_. Rust allows you to\\nhave an `enumeration` that can _bear_ some other values apart from the type itself.\\n\\n:::tip\\n\\nWe could\'ve seen something like this with the `Result` type that can be\\ndefined as\\n```rust\\nenum Result {\\n Ok(T),\\n Err(E)\\n}\\n```\\n\\n###### What does that mean though?\\n\\nWhen we have an `Ok` value, it has the result itself, and when we get an `Err`\\nvalue, it has the error. This also allows us to handle _results_ in a rather\\npretty way:\\n```rust\\nmatch do_something(x) {\\n Ok(y) => {\\n println!(\\"SUCCESS: {}\\", y);\\n },\\n Err(y) => {\\n eprintln!(\\"ERROR: {}\\", y);\\n }\\n}\\n```\\n\\n:::\\n\\nMy solution has a following outline:\\n```rust\\nfn execute(&self, i: &Instruction, output: &mut Output) -> State {\\n // execute the instruction\\n\\n // collect results if necessary\\n match output {\\n Output::Part1(x) => self.execute_part_1(y, x),\\n Output::Part2(x) => self.execute_part_2(y, x),\\n }\\n\\n // return the obtained state\\n new_state\\n}\\n```\\n\\nYou might think that it\'s a perfectly reasonable thing to do. Yes, **but** notice\\nthat the `match` statement doesn\'t _collect_ the changes in any way and also we\\npass `output` by `&mut`, so it is shared across each _iteration_ of the `fold`.\\n\\nThe dirty and ingenious thing is that `x`s are passed by `&mut` too and therefore\\nthey are directly modified by the helper functions. To sum it up and let it sit\\n\\n> We are **collecting** the result **into** an **enumeration** that is **shared**\\n> across **all** iterations of `fold`.\\n\\n### Solution\\n\\nSimilar to _Day 9_, but there are some technical details that can get you.\\n\\n## [Day 11: Monkey in the Middle](https://adventofcode.com/2022/day/11)\\n\\n:::info tl;dr\\n\\nSimulation of monkeys throwing stuff around and measuring your stress levels\\nwhile your stuff is being passed around.\\n\\n:::\\n\\nI think I decided to use regular expressions here for the first time, cause\\nparsing the input was a pain.\\n\\nAlso I didn\'t expect to implement Euclidean algorithm in Rust\u2026\\n\\n### Solution\\n\\nAgain, we\'re just running a simulation. Though I must admit it was very easy to\\nmake a small technical mistakes that could affect the final results very late.\\n\\n## [Day 12: Hill Climbing Algorithm](https://adventofcode.com/2022/day/12)\\n\\n:::info tl;dr\\n\\nFinding shortest path up the hill and also shortest path down to the ground while\\nalso rolling down the hill\u2026\\n\\n:::\\n\\nAs I have said in the _tl;dr_, we are looking for the shortest path, but the start\\nand goal differ for the part 1 and 2. So I have decided to refactor my solution\\nto a BFS algorithm that takes necessary parameters via functions:\\n```rust\\nfn bfs(\\n graph: &[Vec], start: &Position, has_edge: F, is_target: G\\n) -> Option\\nwhere\\n F: Fn(&[Vec], &Position, &Position) -> bool,\\n G: Fn(&[Vec], &Position) -> bool\\n```\\n\\nWe pass the initial vertex from the caller and everything else is left to the BFS\\nalgorithm, based on the `has_edge` and `is_target` functions.\\n\\nThis was easy! And that is not very usual in Rust once you want to pass around\\nfunctions. :eyes:\\n\\n### Solution\\n\\nLooking for the shortest path\u2026 Must be Dijkstra, right? **Nope!** Half of the\\nReddit got jebaited though. In all fairness, nothing stops you from implementing\\nthe Dijkstra\'s algorithm for finding the shortest path, **but** if you know that\\nall connected vertices are in a unit (actually $d = 1$) distance from each other,\\nthen you know that running Dijkstra is equivalent to running BFS, only with worse\\ntime complexity, because of the priority heap instead of the queue.\\n\\n## [Day 13: Distress Signal](https://adventofcode.com/2022/day/13)\\n\\n:::info tl;dr\\n\\nProcessing packets with structured data from the distress signal.\\n\\n:::\\n\\nYou can implement a lot of traits if you want to. It is _imperative_ to implement\\nordering on the packets. I had a typo, so I also proceeded to implement a `Display`\\ntrait for debugging purposes:\\n```rust\\nimpl Display for Packet {\\n fn fmt(&self, f: &mut std::fmt::Formatter<\'_>) -> std::fmt::Result {\\n match self {\\n Packet::Integer(x) => write!(f, \\"{x}\\"),\\n Packet::List(lst) => write!(f, \\"[{}]\\", lst.iter().map(|p| format!(\\"{p}\\")).join(\\",\\")),\\n }\\n }\\n}\\n```\\n\\n### Solution\\n\\nA lot of technical details\u2026 Parsing is nasty too\u2026\\n\\n## [Day 14: Regolith Reservoir](https://adventofcode.com/2022/day/14)\\n\\n:::info tl;dr\\n\\nLet\'s simulate falling sand grain-by-grain.\\n\\n:::\\n\\nAgain, both parts are relatively similar with minimal changes, so it is a good\\nidea to refactor it a bit. Similar approach to the [BFS above]. Also this is the\\nfirst day where I ran into efficiency issues and had to redo my solution to speed\\nit up just a bit.\\n\\n### Solution\\n\\nTedious.\\n\\n## Post Mortem\\n\\n### Indexing\\n\\nI was asked about the indexing after publishing the blog. And truly it is rather\\ncomplicated topic, especially after releasing `SliceIndex` trait. I couldn\'t\\nleave it be, so I tried to implement the `Index` and `IndexMut` trait.\\n\\n:::note\\n\\nI have also mentioned that the `SliceIndex` trait is `unsafe`, but truth be told,\\nonly _unsafe_ part are the 2 methods that are named `*unchecked*`. Anyways, I will\\nbe implementing the `Index*` traits for now, rather than the `SliceIndex`.\\n\\n:::\\n\\nIt\'s relatively straightforward\u2026\\n\\n```rust\\nimpl Index> for [C]\\nwhere\\n I: Copy + TryInto,\\n >::Error: Debug,\\n C: Index,\\n{\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n}\\n\\nimpl IndexMut> for [C]\\nwhere\\n I: Copy + TryInto,\\n >::Error: Debug,\\n C: IndexMut,\\n{\\n fn index_mut(&mut self, index: Vector2D) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n}\\n```\\n\\nWe can see a lot of similarities to the implementation of `index` and `index_mut`\\nfunctions. In the end, they are 1:1, just wrapped in the trait that provides a\\nsyntax sugar for `container[idx]`.\\n\\n:::note\\n\\nI have also switched from using the `TryFrom` to `TryInto` trait, since it better\\nmatches what we are using, the `.try_into` rather than `usize::try_from`.\\n\\nAlso implementing `TryFrom` automatically provides you with a `TryInto` trait,\\nsince it is relatively easy to implement. Just compare the following:\\n\\n```rust\\npub trait TryFrom: Sized {\\n type Error;\\n\\n fn try_from(value: T) -> Result;\\n}\\n\\npub trait TryInto: Sized {\\n type Error;\\n\\n fn try_into(self) -> Result;\\n}\\n```\\n\\n:::\\n\\nOK, so we have our trait implemented, we should be able to use `container[index]`,\\nright? Yes\u2026 but actually no :frowning:\\n\\n```\\nerror[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\\n --\x3e src/bin/day08.rs:26:18\\n |\\n26 | if trees[pos] > tallest {\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\\n\\nerror[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\\n --\x3e src/bin/day08.rs:30:28\\n |\\n30 | max(tallest, trees[pos])\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\\n\\nerror[E0277]: the type `[std::vec::Vec]` cannot be indexed by `aoc_2022::Vector2D`\\n --\x3e src/bin/day08.rs:52:28\\n |\\n52 | let max_height = trees[position];\\n | ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec]>` is not implemented for `aoc_2022::Vector2D`\\n = note: required for `std::vec::Vec>` to implement `std::ops::Index>`\\n```\\n\\nWhy? We have it implemented for the slices (`[C]`), why doesn\'t it work? Well,\\nthe fun part consists of the fact that in other place, where we were using it,\\nwe were passing the `&[Vec]`, but this is coming from a helper functions that\\ntake `&Vec>` instead. And\u2026 we don\'t implement `Index` and `IndexMut` for\\nthose. Just for the slices. :exploding_head: *What are we going to do about it?*\\n\\nWe can either start copy-pasting or be smarter about it\u2026 I choose to be smarter,\\nso let\'s implement a macro! The only difference across the implementations are\\nthe types of the outer containers. Implementation doesn\'t differ **at all**!\\n\\nImplementing the macro can be done in a following way:\\n```rust\\nmacro_rules! generate_indices {\\n ($container:ty) => {\\n impl Index> for $container\\n where\\n I: Copy + TryInto,\\n >::Error: Debug,\\n C: Index,\\n {\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n }\\n\\n impl IndexMut> for $container\\n where\\n I: Copy + TryInto,\\n >::Error: Debug,\\n C: IndexMut,\\n {\\n fn index_mut(&mut self, index: Vector2D) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n }\\n };\\n}\\n```\\n\\nAnd now we can simply do\\n```rust\\ngenerate_indices!(VecDeque);\\ngenerate_indices!([C]);\\ngenerate_indices!(Vec);\\n// generate_indices!([C; N], const N: usize);\\n```\\n\\nThe last type (I took the inspiration from the implementations of the `Index` and\\n`IndexMut` traits) is a bit problematic, because of the `const N: usize` part,\\nwhich I haven\'t managed to be able to parse. And that\'s how I got rid of the error.\\n\\n:::note\\n\\nIf I were to use 2D-indexing over `[C; N]` slices, I\'d probably just go with the\\ncopy-paste, cause the cost of this \u201cmonstrosity\u201d outweighs the benefits of no DRY.\\n\\n:::\\n\\n#### Cause of the problem\\n\\nThis issue is relatively funny. If you don\'t use any type aliases, just the raw\\ntypes, you\'ll get suggested certain changes by the _clippy_. For example if you\\nconsider the following piece of code\\n```rust\\nfn get_sum(nums: &Vec) -> i32 {\\n nums.iter().sum()\\n}\\n\\nfn main() {\\n let nums = vec![1, 2, 3];\\n println!(\\"Sum: {}\\", get_sum(&nums));\\n}\\n```\\n\\nand you run _clippy_ on it, you will get\\n```\\nChecking playground v0.0.1 (/playground)\\nwarning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do\\n --\x3e src/main.rs:1:18\\n |\\n1 | fn get_sum(nums: &Vec) -> i32 {\\n | ^^^^^^^^^ help: change this to: `&[i32]`\\n |\\n = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg\\n = note: `#[warn(clippy::ptr_arg)]` on by default\\n\\nwarning: `playground` (bin \\"playground\\") generated 1 warning\\n Finished dev [unoptimized + debuginfo] target(s) in 0.61s\\n```\\n\\nHowever, if you introduce a type alias, such as\\n```rust\\ntype Numbers = Vec;\\n```\\n\\nThen _clippy_ won\'t say anything, cause there is literally nothing to suggest.\\nHowever the outcome is not the same\u2026\\n\\n[_Advent of Code_]: https://adventofcode.com\\n[BFS above]: #day-12-hill-climbing-algorithm"},{"id":"aoc-2022/1st-week","metadata":{"permalink":"/blog/aoc-2022/1st-week","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/01-week-1.md","source":"@site/blog/aoc-2022/01-week-1.md","title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15:00.000Z","formattedDate":"December 15, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":12.4,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15","slug":"aoc-2022/1st-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"prevItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"},"nextItem":{"title":"Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/intro"}},"content":"Let\'s go through the first week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n:::note\\n\\nIf you wish to have a look at the solutions, you can follow them on my [GitLab].\\nMore specifically in the [`/src/bin/`].\\n\\n:::\\n\\nI will try to summarize my experience with using Rust for the AoC. Trying it out\\nages ago, I believe it will be _pain and suffering_, but we will see. For each\\nday I will also try to give a tl;dr of the problem, so that you can better imagine\\nthe relation to my woes or :+1: moments.\\n\\n## [Day 1: Calorie Counting](https://adventofcode.com/2022/day/1)\\n\\n:::info tl;dr\\n\\nAs the name suggests, we get the calories of the food contained in the elves\\nbackpacks and we want to choose the elf that has the most food ;)\\n\\n:::\\n\\n> Wakey wakey!\\n\\nProgramming in Rust at 6am definitely hits. I\'ve also forgotten to mention how I\\nhandle samples. With each puzzle you usually get a sample input and expected\\noutput. You can use them to verify that your solution works, or usually doesn\'t.\\n\\nAt first I\'ve decided to put asserts into my `main`, something like\\n```rust\\nassert_eq!(part_1(&sample), 24000);\\ninfo!(\\"Part 1: {}\\", part_1(&input));\\n\\nassert_eq!(part_2(&sample), 45000);\\ninfo!(\\"Part 2: {}\\", part_2(&input));\\n```\\n\\nHowever, once you get further, the sample input may take some time to run itself.\\nSo in the end, I have decided to turn them into unit tests:\\n```rust\\n#[cfg(test)]\\nmod tests {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_1(&sample), 24000);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_2(&sample), 45000);\\n }\\n}\\n```\\n\\nAnd later on I have noticed, it\'s hard to tell the difference between the days,\\nso I further renamed the `mod` from generic `tests` to reflect the days.\\n\\nAlso after finishing the first day puzzle, I have installed an [`sccache`] to\\ncache the builds, so that the build time is lower, cause it was kinda unbearable.\\n\\n### Solution\\n\\nWell, it\'s a pretty simple problem. You just take the input, sum the calories and\\nfind the biggest one. However, if we try to generalize to more than the biggest\\none, the fun appears. We have few options:\\n\\n- keep all the calories, sort them, take what we need\\n- keep all the calories and use max heap\\n- use min heap and maintain at most N calories that we need\\n\\n## [Day 2: Rock Paper Scissors](https://adventofcode.com/2022/day/2)\\n\\n:::info tl;dr\\n\\nYou want to know what score did you achieve while playing _Rock Paper Scissors_.\\nAnd then you want to be strategic about it.\\n\\n:::\\n\\nApart from the technical details of the puzzle, it went relatively smooth.\\n\\n### Solution\\n\\nI took relatively na\xefve approach and then tried to simplify it.\\n\\n## [Day 3: Rucksack Reorganization](https://adventofcode.com/2022/day/3)\\n\\n:::info tl;dr\\n\\nLet\'s go reorganize elves\' backpacks! Each backpacks has 2 compartments and you\\nwant to find the common item among those compartments. Each of them has priority,\\nyou care only about the sum.\\n\\n:::\\n\\nThis is the day where I started to fight the compiler and neither of us decided\\nto give up. Let\'s dive into it \\\\o/\\n\\n:::tip Fun fact\\n\\nFighting the compiler took me 30 minutes.\\n\\n:::\\n\\nWe need to find a common item among 2 collections, that\'s an easy task, right?\\nWe can construct 2 sets and find an intersection:\\n```rust\\nlet top: HashSet = [1, 2, 3].iter().collect();\\nlet bottom: HashSet = [3, 4, 5].iter().collect();\\n```\\n\\nNow, the first issue that we encounter is caused by the fact that we are using\\na slice (the `[\u2026]`), iterator of that returns **references** to the numbers.\\nAnd we get immediately yelled at by the compiler, because the numbers are discarded\\nafter running the `.collect`. To fix this, we can use `.into_iter`:\\n```rust\\nlet top: HashSet = [1, 2, 3].into_iter().collect();\\nlet bottom: HashSet = [3, 4, 5].into_iter().collect();\\n```\\n\\nThis way the numbers will get copied instead of referenced. OK, let\'s find the\\nintersection of those 2 collections:\\n```rust\\nprintln!(\\"Common elements: {:?}\\", top.intersection(&bottom));\\n```\\n```\\nCommon elements: [3]\\n```\\n\\n:::caution\\n\\nNotice that we need to do `&bottom`. It explicitly specifies that `.intersection`\\n**borrows** the `bottom`, i.e. takes an immutable reference to it.\\n\\n:::\\n\\nThat\'s what we want, right? Looks like it! \\\\o/\\n\\nNext part wants us to find the common element among all of the backpacks. OK, so\\nthat should be fairly easy, we have an intersection and we want to find intersection\\nover all of them.\\n\\nLet\'s have a look at the type of the `.intersection`\\n```rust\\npub fn intersection<\'a>(\\n\xa0\xa0\xa0\xa0&\'a self,\\n\xa0\xa0\xa0\xa0other: &\'a HashSet\\n) -> Intersection<\'a, T, S>\\n```\\n\\nOK\u2026 Huh\u2026 But we have an example there!\\n```rust\\nlet intersection: HashSet<_> = a.intersection(&b).collect();\\n```\\n\\nCool, that\'s all we need.\\n```rust\\nlet top: HashSet = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n```\\nIntersection: {3, 4}\\n```\\n\\nCool, so let\'s do the intersection with the `top_2`:\\n```rust\\nlet top: HashSet = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\nAnd we get yelled at by the compiler:\\n```\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:58\\n |\\n10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\n | ------------ ^^^^^^ expected `&i32`, found `i32`\\n | |\\n | arguments to this function are incorrect\\n |\\n = note: expected reference `&HashSet<&i32>`\\n found reference `&HashSet`\\n```\\n\\n/o\\\\ What the hell is going on here? Well, the funny thing is, that this operation\\ndoesn\'t return the elements themselves, but the references to them and when we pass\\nthe third set, it has just the values themselves, without any references.\\n\\n:::tip\\n\\nIt may seem as a very weird decision, but in fact it makes some sense\u2026 It allows\\nyou to do intersection of items that may not be possible to copy. Overall this is\\na \u201ctax\u201d for having a borrow checker ~~drilling your ass~~ having your back and\\nmaking sure you\'re not doing something naughty that may cause an **undefined**\\n**behavior**.\\n\\n:::\\n\\nTo resolve this we need to get an iterator that **clones** the elements:\\n```rust\\nlet top: HashSet = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n```\\nIntersection: {4}\\n```\\n\\n### Solution\\n\\nThe approach is pretty simple, if you omit the _1on1 with the compiler_. You just\\nhave some fun with the set operations :)\\n\\n## [Day 4: Camp Cleanup](https://adventofcode.com/2022/day/4)\\n\\n:::info tl;dr\\n\\nElves are cleaning up the camp and they got overlapping sections to clean up.\\nFind how many overlap and can take the day off.\\n\\n:::\\n\\n[`RangeInclusive`] is your friend not an enemy :)\\n\\n### Solution\\n\\nRelatively easy, you just need to parse the input and know what you want. Rust\'s\\n`RangeInclusive` type helped a lot, cause it took care of all abstractions.\\n\\n## [Day 5: Supply Stacks](https://adventofcode.com/2022/day/5)\\n\\n:::info tl;dr\\n\\nLet\'s play with stacks of crates.\\n\\n:::\\n\\nVery easy problem with very annoying input. You can judge yourself:\\n```\\n [D] \\n[N] [C] \\n[Z] [M] [P]\\n 1 2 3 \\n\\nmove 1 from 2 to 1\\nmove 3 from 1 to 3\\nmove 2 from 2 to 1\\nmove 1 from 1 to 2\\n```\\n\\nGood luck transforming that into something reasonable :)\\n\\n\\n:::tip Fun fact\\n\\nTook me 40 minutes to parse this reasonably, including fighting the compiler.\\n\\n:::\\n\\n### Solution\\n\\nFor the initial solution I went with a manual solution (as in _I have done all_\\n_the work_. Later on I have decided to explore the `std` and interface of the\\n`std::vec::Vec` and found [`split_off`] which takes an index and splits (duh)\\nthe vector:\\n```rust\\nlet mut vec = vec![1, 2, 3];\\nlet vec2 = vec.split_off(1);\\nassert_eq!(vec, [1]);\\nassert_eq!(vec2, [2, 3]);\\n```\\n\\nThis helped me simplify my solution a lot and also get rid of some _edge cases_.\\n\\n## [Day 6: Tuning Trouble](https://adventofcode.com/2022/day/6)\\n\\n:::info tl;dr\\n\\nFinding start of the message in a very weird protocol. Start of the message is\\ndenoted by $N$ unique consecutive characters.\\n\\n:::\\n\\n### Solution\\n\\nA lot of different approaches, knowing that we are dealing with input consisting\\nsolely of ASCII letters, I bit the bullet and went with sliding window and\\nconstructing sets from that window, checking if the set is as big as the window.\\n\\nOne possible optimization could consist of keeping a bit-vector (i.e. `usize`\\nvariable) of encountered characters and updating it as we go. However this has\\na different issue and that is removal of the characters from the left side of the\\nwindow. We don\'t know if the same character is not included later on.\\n\\nOther option is to do similar thing, but keeping the frequencies of the letters,\\nand again knowing we have only ASCII letters we can optimize by having a vector\\nof 26 elements that keeps count for each lowercase letter.\\n\\n## [Day 7: No Space Left On Device](https://adventofcode.com/2022/day/7)\\n\\n:::info tl;dr\\n\\nLet\'s simulate [`du`] to get some stats about our file system and then pinpoint\\ndirectories that take a lot of space and should be deleted.\\n\\n:::\\n\\n> I was waiting for this moment, and yet it got me!\\n> *imagine me swearing for hours*\\n\\n### Solution\\n\\nWe need to \u201c_build_\u201d a file system from the input that is given in a following form:\\n```\\n$ cd /\\n$ ls\\ndir a\\n14848514 b.txt\\n8504156 c.dat\\ndir d\\n$ cd a\\n$ ls\\ndir e\\n29116 f\\n2557 g\\n62596 h.lst\\n$ cd e\\n$ ls\\n584 i\\n$ cd ..\\n$ cd ..\\n$ cd d\\n$ ls\\n4060174 j\\n8033020 d.log\\n5626152 d.ext\\n7214296 k\\n```\\n\\nThere are few ways in which you can achieve this and also you can assume some\\npreconditions, but why would we do that, right? :)\\n\\nYou can \u201cslap\u201d this in either [`HashMap`] or [`BTreeMap`] and call it a day.\\nAnd that would be boring\u2026\\n\\n:::tip\\n\\n`BTreeMap` is quite fitting for this, don\'t you think?\\n\\n:::\\n\\nI always wanted to try allocation on heap in Rust, so I chose to implement a tree.\\nI fought with the `Box` for some time and was losing\u2026\\n\\nThen I looked up some implementations of trees or linked lists and decided to try\\n`Rc>`. And I got my _ass whopped_ by the compiler once again. /o\\\\\\n\\n:::tip\\n\\n`Box` represents a dynamically allocated memory on heap. It is a single pointer,\\nyou can imagine this as `std::unique_ptr` in C++.\\n\\n`Rc` represents a dynamically allocated memory on heap. On top of that it is\\n_reference counted_ (that\'s what the `Rc` stands for). You can imagine this as\\n`std::shared_ptr` in C++.\\n\\nNow the fun stuff. Neither of them lets you **mutate** the contents of the memory.\\n\\n`Cell` allows you to mutate the memory. Can be used reasonably with types that\\ncan be copied, because the memory safety is guaranteed by copying the contents\\nwhen there is more than one **mutable** reference to the memory.\\n\\n`RefCell` is similar to the `Cell`, but the borrowing rules (how many mutable\\nreferences are present) are checked dynamically.\\n\\nSo in the end, if you want something like `std::shared_ptr` in Rust, you want\\nto have `Rc>`.\\n\\n:::\\n\\nSo, how are we going to represent the file system then? We will use an enumeration,\\nhehe, which is an algebraic data type that can store some stuff in itself :weary:\\n```rust\\ntype FileHandle = Rc>;\\n\\n#[derive(Debug)]\\nenum AocFile {\\n File(usize),\\n Directory(BTreeMap),\\n}\\n```\\n\\nLet\'s go over it! `FileHandle` represents dynamically allocated `AocFile`, not\\nmuch to discuss. What does the `#[derive(Debug)]` do though? It lets us to print\\nout the value of that enumeration, it\'s derived, so it\'s not as good as if we had\\nimplemented it ourselves, but it\'s good enough for debugging, hence the name.\\n\\nNow to the fun part! `AocFile` value can be represented in two ways:\\n- `File(usize)`, e.g. `AocFile::File(123)` and we can pattern match it, if we\\n need to\\n- `Directory(BTreeMap)` will represent the directory and will\\n contain map matching the name of the files (or directories) within to their\\n respective file handles\\n\\nI will omit the details about constructing this file system, cause there are a lot\\nof technicalities introduced by the nature of the input. However if you are\\ninterested, you can have a look at my solution.\\n\\nWe need to find small enough directories and also find the smallest directory that\\nwill free enough space. Now the question is, how could we do that. And there are\\nmultiple ways I will describe.\\n\\nI have chosen to implement [_tree catamorphism_] :weary:. It is basically a fold\\nover a tree data structure. We descent down into the leaves and propagate computed\\nresults all the way to the root. You can also notice that this approach is very\\nsimilar to _dynamic programming_, we find overlapping sections of the computation\\nand try to minimize the additional work (in this case: we need to know sizes of\\nour descendants, but we have already been there).\\n\\nAnother approach that has been suggested to me few days later is running DFS on\\nthe graph. And, funnily enough, we would still need to combine what we found in\\nthe branches where we descent. So in the end, it would work very similarly to my\\nsolution.\\n\\nOne of the more exotic options would be precomputing the required information at\\nthe same time as parsing. That could be done by adding additional fields to the\\nnodes which would allow storing such information and updating it as we construct\\nthe file system.\\n\\n## Post Mortem\\n\\nThings that have been brought up in the discussion later on.\\n\\n### `Rc` vs `Rc>`\\n\\nIt has been brought up that I have a contradicting statement regarding the\\ndynamically allocated memory. Specifically:\\n\\n- You can imagine `Rc` as an `std::shared_ptr` (in C++)\\n- When you want an equivalent of `std::shared_ptr`, you want to use\\n `Rc>`\\n\\nNow, in Rust it is a bit more complicated, because the type that represents the\\n\u201cshared pointer\u201d is `Rc`. What `RefCell` does is making sure that there is\\nonly one \u201cowner\u201d of a mutable reference at a time (and dynamically, as opposed\\nto the `Cell`).\\n\\nTherefore to be precise and correct about the equivalents of `std::shared_ptr`\\nin Rust, we can say that\\n\\n- `Rc` is an equivalent of a `const std::shared_ptr`,\\n- and `Rc>` is an equivalent of a `std::shared_ptr`.\\n\\nYou can easily see that they only differ in the mutability. (And even that is not\\nas simple as it seems, because there is also `Cell`)\\n\\n[_Advent of Code_]: https://adventofcode.com\\n[GitLab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[`/src/bin/`]: https://gitlab.com/mfocko/advent-of-code-2022/-/tree/main/src/bin\\n[`sccache`]: https://github.com/mozilla/sccache\\n[`RangeInclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html\\n[`split_off`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.split_off\\n[`du`]: https://www.man7.org/linux/man-pages/man1/du.1.html\\n[`HashMap`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html\\n[`BTreeMap`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html\\n[_tree catamorphism_]: https://en.wikipedia.org/wiki/Catamorphism#Tree_fold"},{"id":"aoc-2022/intro","metadata":{"permalink":"/blog/aoc-2022/intro","editUrl":"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/00-intro.md","source":"@site/blog/aoc-2022/00-intro.md","title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45:00.000Z","formattedDate":"December 14, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":8.665,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45","slug":"aoc-2022/intro","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"prevItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s talk about the preparations for this year\'s [_Advent of Code_].\\n\\n\x3c!--truncate--\x3e\\n\\n## Choosing a language\\n\\nWhen choosing a language for AoC, you usually want a language that gives you a\\nquick feedback which allows you to iterate quickly to the solution of the puzzle.\\nOne of the most common choices is Python, many people also use JavaScript or Ruby.\\n\\nGiven the competitive nature of the AoC and popularity among competitive programming,\\nC++ might be also a very good choice. Only if you are familiar with it, I guess\u2026\\n\\nIf you want a challenge, you might also choose to rotate the languages each day.\\nThough I prefer to use only one language.\\n\\nFor this year I have been deciding between _Rust_, _C++_ and _Pascal_ or _Ada_.\\n\\nI have tried Rust last year and have survived with it for 3 days and then gave\\nup and switched to _Kotlin_, which was pretty good given it is \u201cJava undercover\u201d.\\nI pretty much like the ideas behind Rust, I am not sure about the whole cult and\\nimplementation of those ideas though. After some years with C/C++, I would say\\nthat Rust feels _too safe_ for my taste and tries to \u201c_punish me_\u201d even for the\\nmost trivial things.\\n\\nC++ is a very robust, but also comes with a wide variety of options providing you\\nthe ability to shoot yourself in the leg. I have tried to solve few days of previous\\nAdvent of Code events, it was _relatively easy_ to solve the problems in C++, given\\nthat I do not admit writing my own iterator for `enumerate`\u2026\\n\\nPascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a\\npretty nice standard library that offers enough to be able to quickly solve some\\nproblems in it. However the toolkit is questionable :/\\n\\n## Choosing libraries\\n\\n## Preparations for Rust\\n\\nAll of the sources, later on including solutions, can be found at my\\n[GitLab].\\n\\n### Toolkit\\n\\nSince we are using Rust, we are going to use a [Cargo] and more than likely VSCode\\nwith [`rust-analyzer`]. Because of my choice of libraries, we will also introduce\\na `.envrc` file that can be used by [`direnv`], which allows you to set specific\\nenvironment variables when you enter a directory. In our case, we will use\\n```bash\\n# to show nice backtrace when using the color-eyre\\nexport RUST_BACKTRACE=1\\n\\n# to catch logs generated by tracing\\nexport RUST_LOG=trace\\n```\\n\\nAnd for the one of the most obnoxious things ever, we will use a script to download\\nthe inputs instead of \u201c_clicking, opening and copying to a file_\u201d[^1]. There is\\nno need to be _fancy_, so we will adjust Python script by Martin[^2].\\n```py\\n#!/usr/bin/env python3\\n\\nimport datetime\\nimport yaml\\nimport requests\\nimport sys\\n\\n\\ndef load_config():\\n with open(\\"env.yaml\\", \\"r\\") as f:\\n js = yaml.load(f, Loader=yaml.Loader)\\n return js[\\"session\\"], js[\\"year\\"]\\n\\n\\ndef get_input(session, year, day):\\n return requests.get(\\n f\\"https://adventofcode.com/{year}/day/{day}/input\\",\\n cookies={\\"session\\": session},\\n headers={\\n \\"User-Agent\\": \\"{repo} by {mail}\\".format(\\n repo=\\"gitlab.com/mfocko/advent-of-code-2022\\",\\n mail=\\"me@mfocko.xyz\\",\\n )\\n },\\n ).content.decode(\\"utf-8\\")\\n\\n\\ndef main():\\n day = datetime.datetime.now().day\\n if len(sys.argv) == 2:\\n day = sys.argv[1]\\n\\n session, year = load_config()\\n problem_input = get_input(session, year, day)\\n\\n with open(f\\"./inputs/day{day:>02}.txt\\", \\"w\\") as f:\\n f.write(problem_input)\\n\\n\\nif __name__ == \\"__main__\\":\\n main()\\n```\\n\\nIf the script is called without any arguments, it will deduce the day from the\\nsystem, so we do not need to change the day every morning. It also requires a\\nconfiguration file:\\n```yaml\\n# env.yaml\\nsession: \u2039your session cookie\u203a\\nyear: 2022\\n```\\n\\n### Libraries\\n\\nLooking at the list of the libraries, I have chosen \u201ca lot\u201d of them. Let\'s walk\\nthrough each of them.\\n\\n[`tracing`] and [`tracing-subscriber`] are the crates that can be used for tracing\\nand logging of your Rust programs, there are also other crates that can help you\\nwith providing backtrace to the Sentry in case you have deployed your application\\nsomewhere and you want to watch over it. In our use case we will just utilize the\\nmacros for debugging in the terminal.\\n\\n[`thiserror`], [`anyhow`] and [`color-eyre`] are used for error reporting.\\n`thiserror` is a very good choice for libraries, cause it extends the `Error`\\nfrom the `std` and allows you to create more convenient error types. Next is\\n`anyhow` which kinda builds on top of the `thiserror` and provides you with simpler\\nerror handling in binaries[^3]. And finally we have `color-eyre` which, as I found\\nout later, is a colorful (_wink wink_) extension of `eyre` which is fork of `anyhow`\\nwhile supporting customized reports.\\n\\nIn the end I have decided to remove `thiserror` and `anyhow`, since first one is\\nsuitable for libraries and the latter was basically fully replaced by `{color-,}eyre`.\\n\\n[`regex`] and [`lazy_static`] are a very good and also, I hope, self-explanatory\\ncombination. `lazy_static` allows you to have static variables that must be initialized\\nduring runtime.\\n\\n[`itertools`] provides some nice extensions to the iterators from the `std`.\\n\\n### My own \u201clibrary\u201d\\n\\nWhen creating the crate for this year\'s Advent of Code, I have chosen a library\\ntype. Even though standard library is huge, some things might not be included and\\nalso we can follow _KISS_. I have 2 modules that my \u201clibrary\u201d exports, one for\\nparsing and one for 2D vector (that gets used quite often during Advent of Code).\\n\\nKey part is, of course, processing the input and my library exports following\\nfunctions that get used a lot:\\n```rust\\n/// Reads file to the string.\\npub fn file_to_string>(pathname: P) -> String;\\n\\n/// Reads file and returns it as a vector of characters.\\npub fn file_to_chars>(pathname: P) -> Vec;\\n\\n/// Reads file and returns a vector of parsed structures. Expects each structure\\n/// on its own line in the file. And `T` needs to implement `FromStr` trait.\\npub fn file_to_structs, T: FromStr>(pathname: P) -> Vec\\nwhere\\n ::Err: Debug;\\n\\n/// Converts iterator over strings to a vector of parsed structures. `T` needs\\n/// to implement `FromStr` trait and its error must derive `Debug` trait.\\npub fn strings_to_structs(\\n iter: impl Iterator\\n) -> Vec\\nwhere\\n ::Err: std::fmt::Debug,\\n U: Deref;\\n\\n/// Reads file and returns it as a vector of its lines.\\npub fn file_to_lines>(pathname: P) -> Vec;\\n```\\n\\nAs for the vector, I went with a rather simple implementation that allows only\\naddition of the vectors for now and accessing the elements via functions `x()`\\nand `y()`. Also the vector is generic, so we can use it with any numeric type we\\nneed.\\n\\n### Skeleton\\n\\nWe can also prepare a template to quickly bootstrap each of the days. We know\\nthat each puzzle has 2 parts, which means that we can start with 2 functions that\\nwill solve them.\\n```rust\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n```\\n\\nBoth functions take reference to the input and return some output (in majority\\nof puzzles, it is the same type). `todo!()` can be used as a nice placeholder,\\nit also causes a panic when reached and we could also provide some string with\\nan explanation, e.g. `todo!(\\"part 1\\")`. We have not given functions a specific\\ntype and to avoid as much copy-paste as possible, we will introduce type aliases.\\n```rust\\ntype Input = String;\\ntype Output = i32;\\n```\\n\\n:::tip\\n\\nThis allows us to quickly adjust the types only in one place without the need to\\ndo _regex-replace_ or replace them manually.\\n\\n:::\\n\\nFor each day we get a personalized input that is provided as a text file. Almost\\nall the time, we would like to get some structured type out of that input, and\\ntherefore it makes sense to introduce a new function that will provide the parsing\\nof the input.\\n```rust\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n```\\n\\nThis \u201cparser\u201d will take a path to the file, just in case we would like to run the\\nsample instead of input.\\n\\nOK, so now we can write a `main` function that will take all of the pieces and\\nrun them.\\n```rust\\nfn main() {\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n println!(\\"Part 1: {}\\", part_1(&input));\\n println!(\\"Part 2: {}\\", part_2(&input));\\n}\\n```\\n\\nThis would definitely do :) But we have installed a few libraries and we want to\\nuse them. In this part we are going to utilize _[`tracing`]_ (for tracing, duh\u2026)\\nand _[`color-eyre`]_ (for better error reporting, e.g. from parsing).\\n```rust\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\nThe first statement will set up tracing and configure it to print out the logs to\\nterminal, based on the environment variable. We also change the formatting a bit,\\nsince we do not need all the _fancy_ features of the logger. Pure initialization\\nwould get us logs like this:\\n```\\n2022-12-11T19:53:19.975343Z INFO day01: Part 1: 0\\n```\\n\\nHowever after running that command, we will get the following:\\n```\\n INFO src/bin/day01.rs:35: Part 1: 0\\n```\\n\\nAnd the `color_eyre::install()?` is quite straightforward. We just initialize the\\nerror reporting by _color eyre_.\\n\\n:::caution\\n\\nNotice that we had to add `Ok(())` to the end of the function and adjust the\\nreturn type of the `main` to `Result<()>`. It is caused by the _color eyre_ that\\ncan be installed only once and therefore it can fail, that is how we got the `?`\\nat the end of the `::install` which _unwraps_ the **\xbbresult\xab** of the installation.\\n\\n:::\\n\\nOverall we will get to a template like this:\\n```rust\\nuse aoc_2022::*;\\n\\nuse color_eyre::eyre::Result;\\nuse tracing::info;\\nuse tracing_subscriber::EnvFilter;\\n\\ntype Input = String;\\ntype Output = i32;\\n\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\n[^1]: Copy-pasting might be a relaxing thing to do, but you can also discover\\nnasty stuff about your PC. See [this Reddit post and the comment].\\n[^2]: [GitHub profile](https://github.com/martinjonas)\\n[^3]: Even though you can use it even for libraries, but handling errors from\\nlibraries using `anyhow` is nasty\u2026 You will be the stinky one ;)\\n\\n[_Advent of Code_]: https://adventofcode.com\\n[GitLab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[Cargo]: https://doc.rust-lang.org/cargo/\\n[`rust-analyzer`]: https://rust-analyzer.github.io/\\n[`direnv`]: https://direnv.net/\\n[`tracing`]: https://crates.io/crates/tracing\\n[`tracing-subscriber`]: https://crates.io/crates/tracing-subscriber\\n[`thiserror`]: https://crates.io/crates/thiserror\\n[`anyhow`]: https://crates.io/crates/anyhow\\n[`color-eyre`]: https://crates.io/crates/color-eyre\\n[`regex`]: https://crates.io/crates/regex\\n[`lazy_static`]: https://crates.io/crates/lazy_static\\n[`itertools`]: https://crates.io/crates/itertools\\n[this Reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4621632b.f101cb78.js b/assets/js/4621632b.f101cb78.js new file mode 100644 index 0000000..3a8b6cf --- /dev/null +++ b/assets/js/4621632b.f101cb78.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3519],{9760:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cpp","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4688cd57.4f084bfb.js b/assets/js/4688cd57.4f084bfb.js new file mode 100644 index 0000000..dfcee9b --- /dev/null +++ b/assets/js/4688cd57.4f084bfb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[932],{2647:e=>{e.exports=JSON.parse('{"title":"Bonuses","description":"Bonus assignments for Kontr Coins.\\n","slug":"/category/bonuses","permalink":"/pb071/category/bonuses","navigation":{"previous":{"title":"Introduction","permalink":"/pb071/"},"next":{"title":"3rd seminar","permalink":"/pb071/bonuses/seminar-03"}}}')}}]); \ No newline at end of file diff --git a/assets/js/470a9204.f961c4a3.js b/assets/js/470a9204.f961c4a3.js new file mode 100644 index 0000000..55b999b --- /dev/null +++ b/assets/js/470a9204.f961c4a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3936],{4439:i=>{i.exports=JSON.parse('{"label":"applications","permalink":"/ib002/tags/applications","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"rb-trees/applications","title":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","description":"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\\n","permalink":"/ib002/rb-trees/applications"}]}')}}]); \ No newline at end of file diff --git a/assets/js/487.7b135b0c.js b/assets/js/487.7b135b0c.js new file mode 100644 index 0000000..9a656f4 --- /dev/null +++ b/assets/js/487.7b135b0c.js @@ -0,0 +1,7370 @@ +exports.id = 487; +exports.ids = [487]; +exports.modules = { + +/***/ 17295: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(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=undefined,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function $g(){} +function _p(){} +function yq(){} +function Sq(){} +function Es(){} +function Jw(){} +function Vw(){} +function VA(){} +function dA(){} +function MA(){} +function PA(){} +function PB(){} +function bx(){} +function cx(){} +function vy(){} +function Nz(){} +function Yz(){} +function Ylb(){} +function Ymb(){} +function xmb(){} +function Fmb(){} +function Qmb(){} +function gcb(){} +function ccb(){} +function jcb(){} +function jtb(){} +function otb(){} +function qtb(){} +function _fb(){} +function bpb(){} +function kpb(){} +function ppb(){} +function Gpb(){} +function drb(){} +function dzb(){} +function fzb(){} +function fxb(){} +function Vxb(){} +function Ovb(){} +function byb(){} +function zyb(){} +function Zyb(){} +function _yb(){} +function hzb(){} +function jzb(){} +function lzb(){} +function nzb(){} +function rzb(){} +function zzb(){} +function Czb(){} +function Ezb(){} +function Gzb(){} +function Izb(){} +function Mzb(){} +function bBb(){} +function NBb(){} +function PBb(){} +function RBb(){} +function iCb(){} +function OCb(){} +function SCb(){} +function GDb(){} +function JDb(){} +function fEb(){} +function xEb(){} +function CEb(){} +function GEb(){} +function yFb(){} +function KGb(){} +function tIb(){} +function vIb(){} +function xIb(){} +function zIb(){} +function OIb(){} +function SIb(){} +function TJb(){} +function VJb(){} +function XJb(){} +function XKb(){} +function fKb(){} +function VKb(){} +function VLb(){} +function jLb(){} +function nLb(){} +function GLb(){} +function KLb(){} +function MLb(){} +function OLb(){} +function RLb(){} +function YLb(){} +function bMb(){} +function gMb(){} +function lMb(){} +function pMb(){} +function wMb(){} +function zMb(){} +function CMb(){} +function FMb(){} +function LMb(){} +function zNb(){} +function PNb(){} +function kOb(){} +function pOb(){} +function tOb(){} +function yOb(){} +function FOb(){} +function GPb(){} +function aQb(){} +function cQb(){} +function eQb(){} +function gQb(){} +function iQb(){} +function CQb(){} +function MQb(){} +function OQb(){} +function ASb(){} +function fTb(){} +function kTb(){} +function STb(){} +function fUb(){} +function DUb(){} +function VUb(){} +function YUb(){} +function _Ub(){} +function _Wb(){} +function QWb(){} +function XWb(){} +function jVb(){} +function DVb(){} +function VVb(){} +function $Vb(){} +function dXb(){} +function hXb(){} +function lXb(){} +function gYb(){} +function HYb(){} +function SYb(){} +function VYb(){} +function dZb(){} +function P$b(){} +function T$b(){} +function h1b(){} +function m1b(){} +function q1b(){} +function u1b(){} +function y1b(){} +function C1b(){} +function e2b(){} +function g2b(){} +function m2b(){} +function q2b(){} +function u2b(){} +function S2b(){} +function U2b(){} +function W2b(){} +function _2b(){} +function e3b(){} +function h3b(){} +function p3b(){} +function t3b(){} +function w3b(){} +function y3b(){} +function A3b(){} +function M3b(){} +function Q3b(){} +function U3b(){} +function Y3b(){} +function l4b(){} +function q4b(){} +function s4b(){} +function u4b(){} +function w4b(){} +function y4b(){} +function L4b(){} +function N4b(){} +function P4b(){} +function R4b(){} +function T4b(){} +function X4b(){} +function I5b(){} +function Q5b(){} +function T5b(){} +function Z5b(){} +function l6b(){} +function o6b(){} +function t6b(){} +function z6b(){} +function L6b(){} +function M6b(){} +function P6b(){} +function X6b(){} +function $6b(){} +function a7b(){} +function c7b(){} +function g7b(){} +function j7b(){} +function m7b(){} +function r7b(){} +function x7b(){} +function D7b(){} +function D9b(){} +function b9b(){} +function h9b(){} +function j9b(){} +function l9b(){} +function w9b(){} +function F9b(){} +function hac(){} +function jac(){} +function pac(){} +function uac(){} +function Iac(){} +function Kac(){} +function Sac(){} +function obc(){} +function rbc(){} +function vbc(){} +function Fbc(){} +function Jbc(){} +function Xbc(){} +function ccc(){} +function fcc(){} +function lcc(){} +function occ(){} +function tcc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ecc(){} +function Gcc(){} +function Zcc(){} +function _cc(){} +function bdc(){} +function fdc(){} +function jdc(){} +function pdc(){} +function sdc(){} +function ydc(){} +function Adc(){} +function Cdc(){} +function Edc(){} +function Idc(){} +function Ndc(){} +function Qdc(){} +function Sdc(){} +function Udc(){} +function Wdc(){} +function Ydc(){} +function aec(){} +function hec(){} +function jec(){} +function lec(){} +function nec(){} +function uec(){} +function wec(){} +function yec(){} +function Aec(){} +function Fec(){} +function Jec(){} +function Lec(){} +function Nec(){} +function Rec(){} +function Uec(){} +function Zec(){} +function Zfc(){} +function lfc(){} +function tfc(){} +function xfc(){} +function zfc(){} +function Ffc(){} +function Jfc(){} +function Nfc(){} +function Pfc(){} +function Vfc(){} +function _fc(){} +function fgc(){} +function jgc(){} +function lgc(){} +function Bgc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function khc(){} +function mhc(){} +function ohc(){} +function qhc(){} +function yhc(){} +function Ahc(){} +function Ghc(){} +function Ihc(){} +function Khc(){} +function Mhc(){} +function Shc(){} +function Uhc(){} +function Whc(){} +function dic(){} +function dlc(){} +function blc(){} +function flc(){} +function hlc(){} +function jlc(){} +function Glc(){} +function Ilc(){} +function Klc(){} +function Mlc(){} +function Mjc(){} +function Qjc(){} +function Qlc(){} +function Ulc(){} +function Ylc(){} +function Lkc(){} +function Nkc(){} +function Pkc(){} +function Rkc(){} +function Xkc(){} +function _kc(){} +function gmc(){} +function kmc(){} +function zmc(){} +function Fmc(){} +function Wmc(){} +function $mc(){} +function anc(){} +function mnc(){} +function wnc(){} +function Hnc(){} +function Jnc(){} +function Lnc(){} +function Nnc(){} +function Pnc(){} +function Ync(){} +function eoc(){} +function Aoc(){} +function Coc(){} +function Eoc(){} +function Joc(){} +function Loc(){} +function Zoc(){} +function _oc(){} +function bpc(){} +function hpc(){} +function kpc(){} +function ppc(){} +function pFc(){} +function Ryc(){} +function QCc(){} +function PDc(){} +function xGc(){} +function HGc(){} +function JGc(){} +function NGc(){} +function GIc(){} +function iKc(){} +function mKc(){} +function wKc(){} +function yKc(){} +function AKc(){} +function EKc(){} +function KKc(){} +function OKc(){} +function QKc(){} +function SKc(){} +function UKc(){} +function YKc(){} +function aLc(){} +function fLc(){} +function hLc(){} +function nLc(){} +function pLc(){} +function tLc(){} +function vLc(){} +function zLc(){} +function BLc(){} +function DLc(){} +function FLc(){} +function sMc(){} +function JMc(){} +function hNc(){} +function RNc(){} +function ZNc(){} +function _Nc(){} +function bOc(){} +function dOc(){} +function fOc(){} +function hOc(){} +function hRc(){} +function jRc(){} +function KRc(){} +function NRc(){} +function NQc(){} +function LQc(){} +function _Qc(){} +function cPc(){} +function iPc(){} +function kPc(){} +function mPc(){} +function xPc(){} +function zPc(){} +function zSc(){} +function BSc(){} +function GSc(){} +function ISc(){} +function NSc(){} +function TSc(){} +function NTc(){} +function NVc(){} +function oVc(){} +function SVc(){} +function VVc(){} +function XVc(){} +function ZVc(){} +function bWc(){} +function bXc(){} +function CXc(){} +function FXc(){} +function IXc(){} +function MXc(){} +function UXc(){} +function bYc(){} +function fYc(){} +function oYc(){} +function qYc(){} +function uYc(){} +function pZc(){} +function G$c(){} +function h0c(){} +function N0c(){} +function k1c(){} +function I1c(){} +function Q1c(){} +function f2c(){} +function i2c(){} +function k2c(){} +function w2c(){} +function O2c(){} +function S2c(){} +function Z2c(){} +function v3c(){} +function x3c(){} +function R3c(){} +function U3c(){} +function e4c(){} +function w4c(){} +function x4c(){} +function z4c(){} +function B4c(){} +function D4c(){} +function F4c(){} +function H4c(){} +function J4c(){} +function L4c(){} +function N4c(){} +function P4c(){} +function R4c(){} +function T4c(){} +function V4c(){} +function X4c(){} +function Z4c(){} +function _4c(){} +function _7c(){} +function b5c(){} +function d5c(){} +function f5c(){} +function h5c(){} +function H5c(){} +function Hfd(){} +function Zfd(){} +function Zed(){} +function ged(){} +function Jed(){} +function Ned(){} +function Red(){} +function Ved(){} +function bbd(){} +function mdd(){} +function _fd(){} +function fgd(){} +function kgd(){} +function Mgd(){} +function Ahd(){} +function Ald(){} +function Tld(){} +function xkd(){} +function rmd(){} +function knd(){} +function Jod(){} +function JCd(){} +function Bpd(){} +function BFd(){} +function oFd(){} +function bqd(){} +function bvd(){} +function jvd(){} +function yud(){} +function Hxd(){} +function EBd(){} +function aDd(){} +function MGd(){} +function vHd(){} +function RHd(){} +function wNd(){} +function zNd(){} +function CNd(){} +function KNd(){} +function XNd(){} +function $Nd(){} +function HPd(){} +function lUd(){} +function XUd(){} +function DWd(){} +function GWd(){} +function JWd(){} +function MWd(){} +function PWd(){} +function SWd(){} +function VWd(){} +function YWd(){} +function _Wd(){} +function xYd(){} +function BYd(){} +function mZd(){} +function EZd(){} +function GZd(){} +function JZd(){} +function MZd(){} +function PZd(){} +function SZd(){} +function VZd(){} +function YZd(){} +function _Zd(){} +function c$d(){} +function f$d(){} +function i$d(){} +function l$d(){} +function o$d(){} +function r$d(){} +function u$d(){} +function x$d(){} +function A$d(){} +function D$d(){} +function G$d(){} +function J$d(){} +function M$d(){} +function P$d(){} +function S$d(){} +function V$d(){} +function Y$d(){} +function _$d(){} +function c_d(){} +function f_d(){} +function i_d(){} +function l_d(){} +function o_d(){} +function r_d(){} +function u_d(){} +function x_d(){} +function A_d(){} +function D_d(){} +function G_d(){} +function J_d(){} +function M_d(){} +function P_d(){} +function S_d(){} +function V_d(){} +function Y_d(){} +function h5d(){} +function U6d(){} +function U9d(){} +function _8d(){} +function fae(){} +function hae(){} +function kae(){} +function nae(){} +function qae(){} +function tae(){} +function wae(){} +function zae(){} +function Cae(){} +function Fae(){} +function Iae(){} +function Lae(){} +function Oae(){} +function Rae(){} +function Uae(){} +function Xae(){} +function $ae(){} +function bbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function ude(){} +function Vge(){} +function dhe(){} +function s_b(a){} +function jSd(a){} +function ol(){wb()} +function oPb(){nPb()} +function EPb(){CPb()} +function gFb(){fFb()} +function TRb(){SRb()} +function ySb(){wSb()} +function PSb(){OSb()} +function dTb(){bTb()} +function i4b(){b4b()} +function D2b(){x2b()} +function J6b(){D6b()} +function u9b(){q9b()} +function $9b(){I9b()} +function Umc(){Imc()} +function abc(){Vac()} +function ZCc(){VCc()} +function kCc(){hCc()} +function rCc(){oCc()} +function Tcc(){Occ()} +function xkc(){gkc()} +function xDc(){rDc()} +function iDc(){cDc()} +function kwc(){jwc()} +function tJc(){jJc()} +function dJc(){aJc()} +function Pyc(){Nyc()} +function VBc(){SBc()} +function CFc(){yFc()} +function CUc(){wUc()} +function lUc(){fUc()} +function sUc(){pUc()} +function IUc(){GUc()} +function IWc(){HWc()} +function _Wc(){ZWc()} +function fHc(){dHc()} +function f0c(){d0c()} +function B0c(){A0c()} +function L0c(){J0c()} +function LTc(){JTc()} +function sTc(){rTc()} +function KLc(){ILc()} +function wNc(){tNc()} +function PYc(){OYc()} +function nZc(){lZc()} +function q3c(){p3c()} +function Z7c(){X7c()} +function Z9c(){Y9c()} +function _ad(){Zad()} +function kdd(){idd()} +function $md(){Smd()} +function HGd(){tGd()} +function hLd(){NKd()} +function J6d(){Uge()} +function Mvb(a){uCb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function cj(a){this.a=a} +function ij(a){this.a=a} +function Dj(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function ah(a){this.a=a} +function lh(a){this.a=a} +function th(a){this.a=a} +function Ph(a){this.a=a} +function vi(a){this.a=a} +function Ci(a){this.a=a} +function Fk(a){this.a=a} +function Ln(a){this.a=a} +function ap(a){this.a=a} +function zp(a){this.a=a} +function Yp(a){this.a=a} +function qq(a){this.a=a} +function Dq(a){this.a=a} +function wr(a){this.a=a} +function Ir(a){this.b=a} +function sj(a){this.c=a} +function sw(a){this.a=a} +function fw(a){this.a=a} +function xw(a){this.a=a} +function Cw(a){this.a=a} +function Qw(a){this.a=a} +function Rw(a){this.a=a} +function Xw(a){this.a=a} +function Xv(a){this.a=a} +function Sv(a){this.a=a} +function eu(a){this.a=a} +function Zx(a){this.a=a} +function _x(a){this.a=a} +function xy(a){this.a=a} +function xB(a){this.a=a} +function HB(a){this.a=a} +function TB(a){this.a=a} +function fC(a){this.a=a} +function wB(){this.a=[]} +function MBb(a,b){a.a=b} +function w_b(a,b){a.a=b} +function x_b(a,b){a.b=b} +function YOb(a,b){a.b=b} +function $Ob(a,b){a.b=b} +function ZGb(a,b){a.j=b} +function qNb(a,b){a.g=b} +function rNb(a,b){a.i=b} +function dRb(a,b){a.c=b} +function eRb(a,b){a.d=b} +function z_b(a,b){a.d=b} +function y_b(a,b){a.c=b} +function __b(a,b){a.k=b} +function E0b(a,b){a.c=b} +function njc(a,b){a.c=b} +function mjc(a,b){a.a=b} +function dFc(a,b){a.a=b} +function eFc(a,b){a.f=b} +function nOc(a,b){a.a=b} +function oOc(a,b){a.b=b} +function pOc(a,b){a.d=b} +function qOc(a,b){a.i=b} +function rOc(a,b){a.o=b} +function sOc(a,b){a.r=b} +function $Pc(a,b){a.a=b} +function _Pc(a,b){a.b=b} +function DVc(a,b){a.e=b} +function EVc(a,b){a.f=b} +function FVc(a,b){a.g=b} +function SZc(a,b){a.e=b} +function TZc(a,b){a.f=b} +function c$c(a,b){a.f=b} +function bJd(a,b){a.n=b} +function A1d(a,b){a.a=b} +function J1d(a,b){a.a=b} +function B1d(a,b){a.c=b} +function K1d(a,b){a.c=b} +function L1d(a,b){a.d=b} +function M1d(a,b){a.e=b} +function N1d(a,b){a.g=b} +function d2d(a,b){a.a=b} +function e2d(a,b){a.c=b} +function f2d(a,b){a.d=b} +function g2d(a,b){a.e=b} +function h2d(a,b){a.f=b} +function i2d(a,b){a.j=b} +function Z8d(a,b){a.a=b} +function $8d(a,b){a.b=b} +function g9d(a,b){a.a=b} +function Cic(a){a.b=a.a} +function Dg(a){a.c=a.d.d} +function vib(a){this.d=a} +function eib(a){this.a=a} +function Pib(a){this.a=a} +function Vib(a){this.a=a} +function $ib(a){this.a=a} +function mcb(a){this.a=a} +function Mcb(a){this.a=a} +function Xcb(a){this.a=a} +function Ndb(a){this.a=a} +function _db(a){this.a=a} +function teb(a){this.a=a} +function Qeb(a){this.a=a} +function djb(a){this.a=a} +function Gjb(a){this.a=a} +function Njb(a){this.a=a} +function Bjb(a){this.b=a} +function lnb(a){this.b=a} +function Dnb(a){this.b=a} +function anb(a){this.a=a} +function Mob(a){this.a=a} +function Rob(a){this.a=a} +function iob(a){this.c=a} +function olb(a){this.c=a} +function qub(a){this.c=a} +function Tub(a){this.a=a} +function Vub(a){this.a=a} +function Xub(a){this.a=a} +function Zub(a){this.a=a} +function tpb(a){this.a=a} +function _pb(a){this.a=a} +function Wqb(a){this.a=a} +function nsb(a){this.a=a} +function Rxb(a){this.a=a} +function Txb(a){this.a=a} +function Xxb(a){this.a=a} +function bzb(a){this.a=a} +function tzb(a){this.a=a} +function vzb(a){this.a=a} +function xzb(a){this.a=a} +function Kzb(a){this.a=a} +function Ozb(a){this.a=a} +function iAb(a){this.a=a} +function kAb(a){this.a=a} +function mAb(a){this.a=a} +function BAb(a){this.a=a} +function hBb(a){this.a=a} +function jBb(a){this.a=a} +function nBb(a){this.a=a} +function TBb(a){this.a=a} +function XBb(a){this.a=a} +function QCb(a){this.a=a} +function WCb(a){this.a=a} +function _Cb(a){this.a=a} +function dEb(a){this.a=a} +function QGb(a){this.a=a} +function YGb(a){this.a=a} +function tKb(a){this.a=a} +function CLb(a){this.a=a} +function JMb(a){this.a=a} +function RNb(a){this.a=a} +function kQb(a){this.a=a} +function mQb(a){this.a=a} +function FQb(a){this.a=a} +function ETb(a){this.a=a} +function UTb(a){this.a=a} +function dUb(a){this.a=a} +function hUb(a){this.a=a} +function EZb(a){this.a=a} +function j$b(a){this.a=a} +function v$b(a){this.e=a} +function J0b(a){this.a=a} +function M0b(a){this.a=a} +function R0b(a){this.a=a} +function U0b(a){this.a=a} +function i2b(a){this.a=a} +function k2b(a){this.a=a} +function o2b(a){this.a=a} +function s2b(a){this.a=a} +function G2b(a){this.a=a} +function I2b(a){this.a=a} +function K2b(a){this.a=a} +function M2b(a){this.a=a} +function W3b(a){this.a=a} +function $3b(a){this.a=a} +function V4b(a){this.a=a} +function u5b(a){this.a=a} +function A7b(a){this.a=a} +function G7b(a){this.a=a} +function J7b(a){this.a=a} +function M7b(a){this.a=a} +function Mbc(a){this.a=a} +function Pbc(a){this.a=a} +function lac(a){this.a=a} +function nac(a){this.a=a} +function qcc(a){this.a=a} +function Gdc(a){this.a=a} +function $dc(a){this.a=a} +function cec(a){this.a=a} +function _ec(a){this.a=a} +function pfc(a){this.a=a} +function Bfc(a){this.a=a} +function Lfc(a){this.a=a} +function ygc(a){this.a=a} +function Dgc(a){this.a=a} +function shc(a){this.a=a} +function uhc(a){this.a=a} +function whc(a){this.a=a} +function Chc(a){this.a=a} +function Ehc(a){this.a=a} +function Ohc(a){this.a=a} +function Yhc(a){this.a=a} +function Tkc(a){this.a=a} +function Vkc(a){this.a=a} +function Olc(a){this.a=a} +function pnc(a){this.a=a} +function rnc(a){this.a=a} +function dpc(a){this.a=a} +function fpc(a){this.a=a} +function GCc(a){this.a=a} +function KCc(a){this.a=a} +function mDc(a){this.a=a} +function jEc(a){this.a=a} +function HEc(a){this.a=a} +function FEc(a){this.c=a} +function qoc(a){this.b=a} +function bFc(a){this.a=a} +function GFc(a){this.a=a} +function iGc(a){this.a=a} +function kGc(a){this.a=a} +function mGc(a){this.a=a} +function $Gc(a){this.a=a} +function hIc(a){this.a=a} +function lIc(a){this.a=a} +function pIc(a){this.a=a} +function tIc(a){this.a=a} +function xIc(a){this.a=a} +function zIc(a){this.a=a} +function CIc(a){this.a=a} +function LIc(a){this.a=a} +function CKc(a){this.a=a} +function IKc(a){this.a=a} +function MKc(a){this.a=a} +function $Kc(a){this.a=a} +function cLc(a){this.a=a} +function jLc(a){this.a=a} +function rLc(a){this.a=a} +function xLc(a){this.a=a} +function OMc(a){this.a=a} +function ZOc(a){this.a=a} +function ZRc(a){this.a=a} +function aSc(a){this.a=a} +function I$c(a){this.a=a} +function K$c(a){this.a=a} +function M$c(a){this.a=a} +function O$c(a){this.a=a} +function U$c(a){this.a=a} +function n1c(a){this.a=a} +function z1c(a){this.a=a} +function B1c(a){this.a=a} +function Q2c(a){this.a=a} +function U2c(a){this.a=a} +function z3c(a){this.a=a} +function med(a){this.a=a} +function Xed(a){this.a=a} +function _ed(a){this.a=a} +function Qfd(a){this.a=a} +function Bgd(a){this.a=a} +function $gd(a){this.a=a} +function lrd(a){this.a=a} +function urd(a){this.a=a} +function vrd(a){this.a=a} +function wrd(a){this.a=a} +function xrd(a){this.a=a} +function yrd(a){this.a=a} +function zrd(a){this.a=a} +function Ard(a){this.a=a} +function Brd(a){this.a=a} +function Crd(a){this.a=a} +function Ird(a){this.a=a} +function Krd(a){this.a=a} +function Lrd(a){this.a=a} +function Mrd(a){this.a=a} +function Nrd(a){this.a=a} +function Prd(a){this.a=a} +function Srd(a){this.a=a} +function Yrd(a){this.a=a} +function Zrd(a){this.a=a} +function _rd(a){this.a=a} +function asd(a){this.a=a} +function bsd(a){this.a=a} +function csd(a){this.a=a} +function dsd(a){this.a=a} +function msd(a){this.a=a} +function osd(a){this.a=a} +function qsd(a){this.a=a} +function ssd(a){this.a=a} +function Wsd(a){this.a=a} +function Lsd(a){this.b=a} +function thd(a){this.f=a} +function qtd(a){this.a=a} +function yBd(a){this.a=a} +function GBd(a){this.a=a} +function MBd(a){this.a=a} +function SBd(a){this.a=a} +function iCd(a){this.a=a} +function YMd(a){this.a=a} +function GNd(a){this.a=a} +function EPd(a){this.a=a} +function EQd(a){this.a=a} +function NTd(a){this.a=a} +function qOd(a){this.b=a} +function lVd(a){this.c=a} +function VVd(a){this.e=a} +function iYd(a){this.a=a} +function RYd(a){this.a=a} +function ZYd(a){this.a=a} +function z0d(a){this.a=a} +function O0d(a){this.a=a} +function s0d(a){this.d=a} +function W5d(a){this.a=a} +function cge(a){this.a=a} +function xfe(a){this.e=a} +function Tfd(){this.a=0} +function jkb(){Vjb(this)} +function Rkb(){Ckb(this)} +function Lqb(){Uhb(this)} +function lEb(){kEb(this)} +function A_b(){s_b(this)} +function UQd(){this.c=FQd} +function v6d(a,b){b.Wb(a)} +function moc(a,b){a.b+=b} +function yXb(a){a.b=new Ji} +function vbb(a){return a.e} +function DB(a){return a.a} +function LB(a){return a.a} +function ZB(a){return a.a} +function lC(a){return a.a} +function EC(a){return a.a} +function wC(){return null} +function SB(){return null} +function hcb(){mvd();ovd()} +function zJb(a){a.b.tf(a.e)} +function j5b(a,b){a.b=b-a.b} +function g5b(a,b){a.a=b-a.a} +function PXc(a,b){b.ad(a.a)} +function plc(a,b){G0b(b,a)} +function hp(a,b,c){a.Od(c,b)} +function As(a,b){a.e=b;b.b=a} +function Zl(a){Ql();this.a=a} +function jq(a){Ql();this.a=a} +function sq(a){Ql();this.a=a} +function Fq(a){im();this.a=a} +function Sz(a){Rz();Qz.be(a)} +function gz(){Xy.call(this)} +function xcb(){Xy.call(this)} +function pcb(){gz.call(this)} +function tcb(){gz.call(this)} +function Bdb(){gz.call(this)} +function Vdb(){gz.call(this)} +function Ydb(){gz.call(this)} +function Geb(){gz.call(this)} +function bgb(){gz.call(this)} +function Apb(){gz.call(this)} +function Jpb(){gz.call(this)} +function utb(){gz.call(this)} +function x2c(){gz.call(this)} +function rQd(){this.a=this} +function MPd(){this.Bb|=256} +function tTb(){this.b=new mt} +function fA(){fA=ccb;new Lqb} +function rcb(){pcb.call(this)} +function dCb(a,b){a.length=b} +function Tvb(a,b){Ekb(a.a,b)} +function sKb(a,b){UHb(a.c,b)} +function SMc(a,b){Qqb(a.b,b)} +function vBd(a,b){uAd(a.a,b)} +function wBd(a,b){vAd(a.a,b)} +function GLd(a,b){Uhd(a.e,b)} +function d7d(a){D2d(a.c,a.b)} +function mj(a,b){a.kc().Nb(b)} +function Odb(a){this.a=Tdb(a)} +function Tqb(){this.a=new Lqb} +function gyb(){this.a=new Lqb} +function Wvb(){this.a=new Rkb} +function KFb(){this.a=new Rkb} +function PFb(){this.a=new Rkb} +function FFb(){this.a=new yFb} +function pGb(){this.a=new MFb} +function ZQb(){this.a=new MQb} +function Gxb(){this.a=new Pwb} +function jUb(){this.a=new PTb} +function sDb(){this.a=new oDb} +function zDb(){this.a=new tDb} +function CWb(){this.a=new Rkb} +function HXb(){this.a=new Rkb} +function nYb(){this.a=new Rkb} +function BYb(){this.a=new Rkb} +function fLb(){this.d=new Rkb} +function vYb(){this.a=new Tqb} +function a2b(){this.a=new Lqb} +function wZb(){this.b=new Lqb} +function TCc(){this.b=new Rkb} +function zJc(){this.e=new Rkb} +function uMc(){this.d=new Rkb} +function wdc(){this.a=new xkc} +function vKc(){Rkb.call(this)} +function twb(){Wvb.call(this)} +function oHb(){$Gb.call(this)} +function LXb(){HXb.call(this)} +function L_b(){H_b.call(this)} +function H_b(){A_b.call(this)} +function p0b(){A_b.call(this)} +function s0b(){p0b.call(this)} +function WMc(){VMc.call(this)} +function bNc(){VMc.call(this)} +function EPc(){CPc.call(this)} +function JPc(){CPc.call(this)} +function OPc(){CPc.call(this)} +function w1c(){s1c.call(this)} +function s7c(){Psb.call(this)} +function apd(){Ald.call(this)} +function ppd(){Ald.call(this)} +function lDd(){YCd.call(this)} +function NDd(){YCd.call(this)} +function mFd(){Lqb.call(this)} +function vFd(){Lqb.call(this)} +function GFd(){Lqb.call(this)} +function KPd(){Tqb.call(this)} +function OJd(){hJd.call(this)} +function aQd(){MPd.call(this)} +function SSd(){FId.call(this)} +function rUd(){FId.call(this)} +function oUd(){Lqb.call(this)} +function NYd(){Lqb.call(this)} +function cZd(){Lqb.call(this)} +function R8d(){MGd.call(this)} +function o9d(){MGd.call(this)} +function i9d(){R8d.call(this)} +function hee(){ude.call(this)} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function ph(a){lh.call(this,a)} +function Sh(a){Wc.call(this,a)} +function oi(a){Sh.call(this,a)} +function Ii(a){Wc.call(this,a)} +function Zdd(){this.a=new Psb} +function CPc(){this.a=new Tqb} +function s1c(){this.a=new Lqb} +function QSc(){this.a=new Rkb} +function D2c(){this.j=new Rkb} +function QXc(){this.a=new UXc} +function e_c(){this.a=new d_c} +function YCd(){this.a=new aDd} +function _k(){_k=ccb;$k=new al} +function Lk(){Lk=ccb;Kk=new Mk} +function wb(){wb=ccb;vb=new xb} +function hs(){hs=ccb;gs=new is} +function rs(a){Sh.call(this,a)} +function Gp(a){Sh.call(this,a)} +function xp(a){Lo.call(this,a)} +function Ep(a){Lo.call(this,a)} +function Tp(a){Wn.call(this,a)} +function wx(a){un.call(this,a)} +function ov(a){dv.call(this,a)} +function Mv(a){Br.call(this,a)} +function Ov(a){Br.call(this,a)} +function Lw(a){Br.call(this,a)} +function hz(a){Yy.call(this,a)} +function MB(a){hz.call(this,a)} +function eC(){fC.call(this,{})} +function Ftb(a){Atb();this.a=a} +function zwb(a){a.b=null;a.c=0} +function Vy(a,b){a.e=b;Sy(a,b)} +function LVb(a,b){a.a=b;NVb(a)} +function lIb(a,b,c){a.a[b.g]=c} +function vfd(a,b,c){Dfd(c,a,b)} +function Odc(a,b){rjc(b.i,a.n)} +function Wyc(a,b){Xyc(a).td(b)} +function ERb(a,b){return a*a/b} +function Xr(a,b){return a.g-b.g} +function tC(a){return new TB(a)} +function vC(a){return new yC(a)} +function ocb(a){hz.call(this,a)} +function qcb(a){hz.call(this,a)} +function ucb(a){hz.call(this,a)} +function vcb(a){Yy.call(this,a)} +function fGc(a){LFc();this.a=a} +function c0d(a){kzd();this.a=a} +function bhd(a){Rgd();this.f=a} +function dhd(a){Rgd();this.f=a} +function Cdb(a){hz.call(this,a)} +function Wdb(a){hz.call(this,a)} +function Zdb(a){hz.call(this,a)} +function Feb(a){hz.call(this,a)} +function Heb(a){hz.call(this,a)} +function Ccb(a){return uCb(a),a} +function Edb(a){return uCb(a),a} +function Gdb(a){return uCb(a),a} +function jfb(a){return uCb(a),a} +function tfb(a){return uCb(a),a} +function akb(a){return a.b==a.c} +function Hwb(a){return !!a&&a.b} +function pIb(a){return !!a&&a.k} +function qIb(a){return !!a&&a.j} +function amb(a){uCb(a);this.a=a} +function wVb(a){qVb(a);return a} +function Blb(a){Glb(a,a.length)} +function cgb(a){hz.call(this,a)} +function cqd(a){hz.call(this,a)} +function n8d(a){hz.call(this,a)} +function y2c(a){hz.call(this,a)} +function z2c(a){hz.call(this,a)} +function mde(a){hz.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ji(){Ki.call(this,12,3)} +function Kz(){Kz=ccb;Jz=new Nz} +function jz(){jz=ccb;iz=new nb} +function KA(){KA=ccb;JA=new MA} +function OB(){OB=ccb;NB=new PB} +function jc(){throw vbb(new bgb)} +function zh(){throw vbb(new bgb)} +function Pi(){throw vbb(new bgb)} +function Pj(){throw vbb(new bgb)} +function Qj(){throw vbb(new bgb)} +function Ym(){throw vbb(new bgb)} +function Gb(){this.a=GD(Qb(She))} +function oy(a){Ql();this.a=Qb(a)} +function Bs(a,b){a.Td(b);b.Sd(a)} +function iw(a,b){a.a.ec().Mc(b)} +function CYb(a,b,c){a.c.lf(b,c)} +function scb(a){qcb.call(this,a)} +function Oeb(a){Wdb.call(this,a)} +function Hfb(){mcb.call(this,'')} +function Ifb(){mcb.call(this,'')} +function Ufb(){mcb.call(this,'')} +function Vfb(){mcb.call(this,'')} +function Xfb(a){qcb.call(this,a)} +function zob(a){lnb.call(this,a)} +function Yob(a){Inb.call(this,a)} +function Gob(a){zob.call(this,a)} +function Mk(){Fk.call(this,null)} +function al(){Fk.call(this,null)} +function Az(){Az=ccb;!!(Rz(),Qz)} +function wrb(){wrb=ccb;vrb=yrb()} +function Mtb(a){return a.a?a.b:0} +function Vtb(a){return a.a?a.b:0} +function Lcb(a,b){return a.a-b.a} +function Wcb(a,b){return a.a-b.a} +function Peb(a,b){return a.a-b.a} +function eCb(a,b){return PC(a,b)} +function GC(a,b){return rdb(a,b)} +function _B(b,a){return a in b.a} +function _Db(a,b){a.f=b;return a} +function ZDb(a,b){a.b=b;return a} +function $Db(a,b){a.c=b;return a} +function aEb(a,b){a.g=b;return a} +function HGb(a,b){a.a=b;return a} +function IGb(a,b){a.f=b;return a} +function JGb(a,b){a.k=b;return a} +function dLb(a,b){a.a=b;return a} +function eLb(a,b){a.e=b;return a} +function zVb(a,b){a.e=b;return a} +function AVb(a,b){a.f=b;return a} +function KOb(a,b){a.b=true;a.d=b} +function DHb(a,b){a.b=new g7c(b)} +function uvb(a,b,c){b.td(a.a[c])} +function zvb(a,b,c){b.we(a.a[c])} +function wJc(a,b){return a.b-b.b} +function kOc(a,b){return a.g-b.g} +function WQc(a,b){return a.s-b.s} +function Lic(a,b){return a?0:b-1} +function SFc(a,b){return a?0:b-1} +function RFc(a,b){return a?b-1:0} +function M2c(a,b){return b.Yf(a)} +function M3c(a,b){a.b=b;return a} +function L3c(a,b){a.a=b;return a} +function N3c(a,b){a.c=b;return a} +function O3c(a,b){a.d=b;return a} +function P3c(a,b){a.e=b;return a} +function Q3c(a,b){a.f=b;return a} +function b4c(a,b){a.a=b;return a} +function c4c(a,b){a.b=b;return a} +function d4c(a,b){a.c=b;return a} +function z5c(a,b){a.c=b;return a} +function y5c(a,b){a.b=b;return a} +function A5c(a,b){a.d=b;return a} +function B5c(a,b){a.e=b;return a} +function C5c(a,b){a.f=b;return a} +function D5c(a,b){a.g=b;return a} +function E5c(a,b){a.a=b;return a} +function F5c(a,b){a.i=b;return a} +function G5c(a,b){a.j=b;return a} +function Vdd(a,b){a.k=b;return a} +function Wdd(a,b){a.j=b;return a} +function ykc(a,b){gkc();F0b(b,a)} +function T$c(a,b,c){R$c(a.a,b,c)} +function RGc(a){cEc.call(this,a)} +function iHc(a){cEc.call(this,a)} +function t7c(a){Qsb.call(this,a)} +function aPb(a){_Ob.call(this,a)} +function Ixd(a){zud.call(this,a)} +function dCd(a){ZBd.call(this,a)} +function fCd(a){ZBd.call(this,a)} +function p_b(){q_b.call(this,'')} +function d7c(){this.a=0;this.b=0} +function aPc(){this.b=0;this.a=0} +function NJd(a,b){a.b=0;DId(a,b)} +function X1d(a,b){a.c=b;a.b=true} +function Oc(a,b){return a.c._b(b)} +function gdb(a){return a.e&&a.e()} +function Vd(a){return !a?null:a.d} +function sn(a,b){return Gv(a.b,b)} +function Fv(a){return !a?null:a.g} +function Kv(a){return !a?null:a.i} +function hdb(a){fdb(a);return a.o} +function Fhd(){Fhd=ccb;Ehd=ond()} +function Hhd(){Hhd=ccb;Ghd=Cod()} +function LFd(){LFd=ccb;KFd=qZd()} +function p8d(){p8d=ccb;o8d=Y9d()} +function r8d(){r8d=ccb;q8d=dae()} +function mvd(){mvd=ccb;lvd=n4c()} +function Srb(){throw vbb(new bgb)} +function enb(){throw vbb(new bgb)} +function fnb(){throw vbb(new bgb)} +function gnb(){throw vbb(new bgb)} +function jnb(){throw vbb(new bgb)} +function Cnb(){throw vbb(new bgb)} +function Uqb(a){this.a=new Mqb(a)} +function tgb(a){lgb();ngb(this,a)} +function Hxb(a){this.a=new Qwb(a)} +function _ub(a,b){while(a.ye(b));} +function Sub(a,b){while(a.sd(b));} +function Bfb(a,b){a.a+=b;return a} +function Cfb(a,b){a.a+=b;return a} +function Ffb(a,b){a.a+=b;return a} +function Lfb(a,b){a.a+=b;return a} +function WAb(a){Tzb(a);return a.a} +function Wsb(a){return a.b!=a.d.c} +function pD(a){return a.l|a.m<<22} +function aIc(a,b){return a.d[b.p]} +function h2c(a,b){return c2c(a,b)} +function cCb(a,b,c){a.splice(b,c)} +function WHb(a){a.c?VHb(a):XHb(a)} +function jVc(a){this.a=0;this.b=a} +function ZUc(){this.a=new L2c(K$)} +function tRc(){this.b=new L2c(h$)} +function Q$c(){this.b=new L2c(J_)} +function d_c(){this.b=new L2c(J_)} +function OCd(){throw vbb(new bgb)} +function PCd(){throw vbb(new bgb)} +function QCd(){throw vbb(new bgb)} +function RCd(){throw vbb(new bgb)} +function SCd(){throw vbb(new bgb)} +function TCd(){throw vbb(new bgb)} +function UCd(){throw vbb(new bgb)} +function VCd(){throw vbb(new bgb)} +function WCd(){throw vbb(new bgb)} +function XCd(){throw vbb(new bgb)} +function ahe(){throw vbb(new utb)} +function bhe(){throw vbb(new utb)} +function Rge(a){this.a=new ege(a)} +function ege(a){dge(this,a,Vee())} +function Fhe(a){return !a||Ehe(a)} +function dde(a){return $ce[a]!=-1} +function Iz(){xz!=0&&(xz=0);zz=-1} +function Ybb(){Wbb==null&&(Wbb=[])} +function ONd(a,b){Rxd(ZKd(a.a),b)} +function TNd(a,b){Rxd(ZKd(a.a),b)} +function Yf(a,b){zf.call(this,a,b)} +function $f(a,b){Yf.call(this,a,b)} +function Hf(a,b){this.b=a;this.c=b} +function rk(a,b){this.b=a;this.a=b} +function ek(a,b){this.a=a;this.b=b} +function gk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function yk(a,b){this.a=a;this.b=b} +function Ak(a,b){this.a=a;this.b=b} +function Fj(a,b){this.a=a;this.b=b} +function _j(a,b){this.a=a;this.b=b} +function dr(a,b){this.a=a;this.b=b} +function zr(a,b){this.b=a;this.a=b} +function So(a,b){this.b=a;this.a=b} +function qp(a,b){this.b=a;this.a=b} +function $q(a,b){this.b=a;this.a=b} +function $r(a,b){this.f=a;this.g=b} +function ne(a,b){this.e=a;this.d=b} +function Wo(a,b){this.g=a;this.i=b} +function bu(a,b){this.a=a;this.b=b} +function qu(a,b){this.a=a;this.f=b} +function qv(a,b){this.b=a;this.c=b} +function ox(a,b){this.a=a;this.b=b} +function Px(a,b){this.a=a;this.b=b} +function mC(a,b){this.a=a;this.b=b} +function Wc(a){Lb(a.dc());this.c=a} +function rf(a){this.b=BD(Qb(a),83)} +function Zv(a){this.a=BD(Qb(a),83)} +function dv(a){this.a=BD(Qb(a),15)} +function $u(a){this.a=BD(Qb(a),15)} +function Br(a){this.b=BD(Qb(a),47)} +function eB(){this.q=new $wnd.Date} +function Zfb(){Zfb=ccb;Yfb=new jcb} +function Emb(){Emb=ccb;Dmb=new Fmb} +function Vhb(a){return a.f.c+a.g.c} +function hnb(a,b){return a.b.Hc(b)} +function inb(a,b){return a.b.Ic(b)} +function knb(a,b){return a.b.Qc(b)} +function Dob(a,b){return a.b.Hc(b)} +function dob(a,b){return a.c.uc(b)} +function Rqb(a,b){return a.a._b(b)} +function fob(a,b){return pb(a.c,b)} +function jt(a,b){return Mhb(a.b,b)} +function Lp(a,b){return a>b&&b0} +function Gbb(a,b){return ybb(a,b)<0} +function Crb(a,b){return a.a.get(b)} +function icb(b,a){return a.split(b)} +function Vrb(a,b){return Mhb(a.e,b)} +function Nvb(a){return uCb(a),false} +function Rub(a){Kub.call(this,a,21)} +function wcb(a,b){Zy.call(this,a,b)} +function mxb(a,b){$r.call(this,a,b)} +function Gyb(a,b){$r.call(this,a,b)} +function zx(a){yx();Wn.call(this,a)} +function zlb(a,b){Dlb(a,a.length,b)} +function Alb(a,b){Flb(a,a.length,b)} +function ABb(a,b,c){b.ud(a.a.Ge(c))} +function uBb(a,b,c){b.we(a.a.Fe(c))} +function GBb(a,b,c){b.td(a.a.Kb(c))} +function Zq(a,b,c){a.Mb(c)&&b.td(c)} +function aCb(a,b,c){a.splice(b,0,c)} +function lDb(a,b){return uqb(a.e,b)} +function pjb(a,b){this.d=a;this.e=b} +function kqb(a,b){this.b=a;this.a=b} +function VBb(a,b){this.b=a;this.a=b} +function BEb(a,b){this.b=a;this.a=b} +function sBb(a,b){this.a=a;this.b=b} +function yBb(a,b){this.a=a;this.b=b} +function EBb(a,b){this.a=a;this.b=b} +function KBb(a,b){this.a=a;this.b=b} +function aDb(a,b){this.a=a;this.b=b} +function tMb(a,b){this.b=a;this.a=b} +function oOb(a,b){this.b=a;this.a=b} +function SOb(a,b){$r.call(this,a,b)} +function SMb(a,b){$r.call(this,a,b)} +function NEb(a,b){$r.call(this,a,b)} +function VEb(a,b){$r.call(this,a,b)} +function sFb(a,b){$r.call(this,a,b)} +function hHb(a,b){$r.call(this,a,b)} +function OHb(a,b){$r.call(this,a,b)} +function FIb(a,b){$r.call(this,a,b)} +function wLb(a,b){$r.call(this,a,b)} +function YRb(a,b){$r.call(this,a,b)} +function zTb(a,b){$r.call(this,a,b)} +function rUb(a,b){$r.call(this,a,b)} +function oWb(a,b){$r.call(this,a,b)} +function SXb(a,b){$r.call(this,a,b)} +function k0b(a,b){$r.call(this,a,b)} +function z5b(a,b){$r.call(this,a,b)} +function T8b(a,b){$r.call(this,a,b)} +function ibc(a,b){$r.call(this,a,b)} +function Cec(a,b){this.a=a;this.b=b} +function rfc(a,b){this.a=a;this.b=b} +function Rfc(a,b){this.a=a;this.b=b} +function Tfc(a,b){this.a=a;this.b=b} +function bgc(a,b){this.a=a;this.b=b} +function ngc(a,b){this.a=a;this.b=b} +function Qhc(a,b){this.a=a;this.b=b} +function $hc(a,b){this.a=a;this.b=b} +function Z0b(a,b){this.a=a;this.b=b} +function ZVb(a,b){this.b=a;this.a=b} +function Dfc(a,b){this.b=a;this.a=b} +function dgc(a,b){this.b=a;this.a=b} +function Bmc(a,b){this.b=a;this.a=b} +function cWb(a,b){this.c=a;this.d=b} +function I$b(a,b){this.e=a;this.d=b} +function Unc(a,b){this.a=a;this.b=b} +function Oic(a,b){this.b=b;this.c=a} +function Bjc(a,b){$r.call(this,a,b)} +function Yjc(a,b){$r.call(this,a,b)} +function Gkc(a,b){$r.call(this,a,b)} +function Bpc(a,b){$r.call(this,a,b)} +function Jpc(a,b){$r.call(this,a,b)} +function Tpc(a,b){$r.call(this,a,b)} +function cqc(a,b){$r.call(this,a,b)} +function oqc(a,b){$r.call(this,a,b)} +function yqc(a,b){$r.call(this,a,b)} +function Hqc(a,b){$r.call(this,a,b)} +function Uqc(a,b){$r.call(this,a,b)} +function arc(a,b){$r.call(this,a,b)} +function mrc(a,b){$r.call(this,a,b)} +function zrc(a,b){$r.call(this,a,b)} +function Prc(a,b){$r.call(this,a,b)} +function Yrc(a,b){$r.call(this,a,b)} +function fsc(a,b){$r.call(this,a,b)} +function nsc(a,b){$r.call(this,a,b)} +function nzc(a,b){$r.call(this,a,b)} +function zzc(a,b){$r.call(this,a,b)} +function Kzc(a,b){$r.call(this,a,b)} +function Xzc(a,b){$r.call(this,a,b)} +function Dtc(a,b){$r.call(this,a,b)} +function lAc(a,b){$r.call(this,a,b)} +function uAc(a,b){$r.call(this,a,b)} +function CAc(a,b){$r.call(this,a,b)} +function LAc(a,b){$r.call(this,a,b)} +function UAc(a,b){$r.call(this,a,b)} +function aBc(a,b){$r.call(this,a,b)} +function uBc(a,b){$r.call(this,a,b)} +function DBc(a,b){$r.call(this,a,b)} +function MBc(a,b){$r.call(this,a,b)} +function sGc(a,b){$r.call(this,a,b)} +function VIc(a,b){$r.call(this,a,b)} +function EIc(a,b){this.b=a;this.a=b} +function qKc(a,b){this.a=a;this.b=b} +function GKc(a,b){this.a=a;this.b=b} +function lLc(a,b){this.a=a;this.b=b} +function mMc(a,b){this.a=a;this.b=b} +function fMc(a,b){$r.call(this,a,b)} +function ZLc(a,b){$r.call(this,a,b)} +function ZMc(a,b){this.b=a;this.d=b} +function IOc(a,b){$r.call(this,a,b)} +function GQc(a,b){$r.call(this,a,b)} +function PQc(a,b){this.a=a;this.b=b} +function RQc(a,b){this.a=a;this.b=b} +function ARc(a,b){$r.call(this,a,b)} +function rSc(a,b){$r.call(this,a,b)} +function TTc(a,b){$r.call(this,a,b)} +function _Tc(a,b){$r.call(this,a,b)} +function RUc(a,b){$r.call(this,a,b)} +function uVc(a,b){$r.call(this,a,b)} +function hWc(a,b){$r.call(this,a,b)} +function rWc(a,b){$r.call(this,a,b)} +function kXc(a,b){$r.call(this,a,b)} +function uXc(a,b){$r.call(this,a,b)} +function AYc(a,b){$r.call(this,a,b)} +function l$c(a,b){$r.call(this,a,b)} +function Z$c(a,b){$r.call(this,a,b)} +function D_c(a,b){$r.call(this,a,b)} +function O_c(a,b){$r.call(this,a,b)} +function c1c(a,b){$r.call(this,a,b)} +function cVb(a,b){return uqb(a.c,b)} +function nnc(a,b){return uqb(b.b,a)} +function x1c(a,b){return -a.b.Je(b)} +function D3c(a,b){return uqb(a.g,b)} +function O5c(a,b){$r.call(this,a,b)} +function a6c(a,b){$r.call(this,a,b)} +function m2c(a,b){this.a=a;this.b=b} +function W2c(a,b){this.a=a;this.b=b} +function f7c(a,b){this.a=a;this.b=b} +function G7c(a,b){$r.call(this,a,b)} +function j8c(a,b){$r.call(this,a,b)} +function iad(a,b){$r.call(this,a,b)} +function rad(a,b){$r.call(this,a,b)} +function Bad(a,b){$r.call(this,a,b)} +function Nad(a,b){$r.call(this,a,b)} +function ibd(a,b){$r.call(this,a,b)} +function tbd(a,b){$r.call(this,a,b)} +function Ibd(a,b){$r.call(this,a,b)} +function Ubd(a,b){$r.call(this,a,b)} +function gcd(a,b){$r.call(this,a,b)} +function scd(a,b){$r.call(this,a,b)} +function Ycd(a,b){$r.call(this,a,b)} +function udd(a,b){$r.call(this,a,b)} +function Jdd(a,b){$r.call(this,a,b)} +function Eed(a,b){$r.call(this,a,b)} +function bfd(a,b){this.a=a;this.b=b} +function dfd(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function Kfd(a,b){this.a=a;this.b=b} +function Mfd(a,b){this.a=a;this.b=b} +function Ofd(a,b){this.a=a;this.b=b} +function vgd(a,b){this.a=a;this.b=b} +function qgd(a,b){$r.call(this,a,b)} +function jrd(a,b){this.a=a;this.b=b} +function krd(a,b){this.a=a;this.b=b} +function mrd(a,b){this.a=a;this.b=b} +function nrd(a,b){this.a=a;this.b=b} +function qrd(a,b){this.a=a;this.b=b} +function rrd(a,b){this.a=a;this.b=b} +function srd(a,b){this.b=a;this.a=b} +function trd(a,b){this.b=a;this.a=b} +function Drd(a,b){this.b=a;this.a=b} +function Frd(a,b){this.b=a;this.a=b} +function Hrd(a,b){this.a=a;this.b=b} +function Jrd(a,b){this.a=a;this.b=b} +function Ord(a,b){Xqd(a.a,BD(b,56))} +function BIc(a,b){gIc(a.a,BD(b,11))} +function fIc(a,b){FHc();return b!=a} +function Arb(){wrb();return new vrb} +function CMc(){wMc();this.b=new Tqb} +function NNc(){FNc();this.a=new Tqb} +function eCc(){ZBc();aCc.call(this)} +function Dsd(a,b){$r.call(this,a,b)} +function Urd(a,b){this.a=a;this.b=b} +function Wrd(a,b){this.a=a;this.b=b} +function kGd(a,b){this.a=a;this.b=b} +function nGd(a,b){this.a=a;this.b=b} +function bUd(a,b){this.a=a;this.b=b} +function zVd(a,b){this.a=a;this.b=b} +function C1d(a,b){this.d=a;this.b=b} +function MLd(a,b){this.d=a;this.e=b} +function Wud(a,b){this.f=a;this.c=b} +function f7d(a,b){this.b=a;this.c=b} +function _zd(a,b){this.i=a;this.g=b} +function Y1d(a,b){this.e=a;this.a=b} +function c8d(a,b){this.a=a;this.b=b} +function $Id(a,b){a.i=null;_Id(a,b)} +function ivd(a,b){!!a&&Rhb(cvd,a,b)} +function hCd(a,b){return qAd(a.a,b)} +function e7d(a){return R2d(a.c,a.b)} +function Wd(a){return !a?null:a.dd()} +function PD(a){return a==null?null:a} +function KD(a){return typeof a===Khe} +function LD(a){return typeof a===Lhe} +function ND(a){return typeof a===Mhe} +function Em(a,b){return a.Hd().Xb(b)} +function Kq(a,b){return hr(a.Kc(),b)} +function Bbb(a,b){return ybb(a,b)==0} +function Ebb(a,b){return ybb(a,b)>=0} +function Kbb(a,b){return ybb(a,b)!=0} +function Jdb(a){return ''+(uCb(a),a)} +function pfb(a,b){return a.substr(b)} +function cg(a){ag(a);return a.d.gc()} +function oVb(a){pVb(a,a.c);return a} +function RD(a){CCb(a==null);return a} +function Dfb(a,b){a.a+=''+b;return a} +function Efb(a,b){a.a+=''+b;return a} +function Nfb(a,b){a.a+=''+b;return a} +function Pfb(a,b){a.a+=''+b;return a} +function Qfb(a,b){a.a+=''+b;return a} +function Mfb(a,b){return a.a+=''+b,a} +function Esb(a,b){Gsb(a,b,a.a,a.a.a)} +function Fsb(a,b){Gsb(a,b,a.c.b,a.c)} +function Mqd(a,b,c){Rpd(b,kqd(a,c))} +function Nqd(a,b,c){Rpd(b,kqd(a,c))} +function Dhe(a,b){Hhe(new Fyd(a),b)} +function cB(a,b){a.q.setTime(Sbb(b))} +function fvb(a,b){bvb.call(this,a,b)} +function jvb(a,b){bvb.call(this,a,b)} +function nvb(a,b){bvb.call(this,a,b)} +function Nqb(a){Uhb(this);Ld(this,a)} +function wmb(a){tCb(a,0);return null} +function X6c(a){a.a=0;a.b=0;return a} +function f3c(a,b){a.a=b.g+1;return a} +function PJc(a,b){return a.j[b.p]==2} +function _Pb(a){return VPb(BD(a,79))} +function yJb(){yJb=ccb;xJb=as(wJb())} +function Y8b(){Y8b=ccb;X8b=as(W8b())} +function mt(){this.b=new Mqb(Cv(12))} +function Otb(){this.b=0;this.a=false} +function Wtb(){this.b=0;this.a=false} +function sl(a){this.a=a;ol.call(this)} +function vl(a){this.a=a;ol.call(this)} +function Nsd(a,b){Msd.call(this,a,b)} +function $zd(a,b){Cyd.call(this,a,b)} +function nNd(a,b){_zd.call(this,a,b)} +function s4d(a,b){p4d.call(this,a,b)} +function w4d(a,b){qRd.call(this,a,b)} +function rEd(a,b){pEd();Rhb(oEd,a,b)} +function lcb(a,b){return qfb(a.a,0,b)} +function ww(a,b){return a.a.a.a.cc(b)} +function mb(a,b){return PD(a)===PD(b)} +function Mdb(a,b){return Kdb(a.a,b.a)} +function $db(a,b){return beb(a.a,b.a)} +function seb(a,b){return ueb(a.a,b.a)} +function hfb(a,b){return a.indexOf(b)} +function Ny(a,b){return a==b?0:a?1:-1} +function kB(a){return a<10?'0'+a:''+a} +function Mq(a){return Qb(a),new sl(a)} +function SC(a){return TC(a.l,a.m,a.h)} +function Hdb(a){return QD((uCb(a),a))} +function Idb(a){return QD((uCb(a),a))} +function NIb(a,b){return beb(a.g,b.g)} +function Fbb(a){return typeof a===Lhe} +function mWb(a){return a==hWb||a==kWb} +function nWb(a){return a==hWb||a==iWb} +function G1b(a){return Jkb(a.b.b,a,0)} +function lrb(a){this.a=Arb();this.b=a} +function Frb(a){this.a=Arb();this.b=a} +function swb(a,b){Ekb(a.a,b);return b} +function Z1c(a,b){Ekb(a.c,b);return a} +function E2c(a,b){d3c(a.a,b);return a} +function _gc(a,b){Hgc();return b.a+=a} +function bhc(a,b){Hgc();return b.a+=a} +function ahc(a,b){Hgc();return b.c+=a} +function Nlb(a,b){Klb(a,0,a.length,b)} +function zsb(){Wqb.call(this,new $rb)} +function I_b(){B_b.call(this,0,0,0,0)} +function I6c(){J6c.call(this,0,0,0,0)} +function g7c(a){this.a=a.a;this.b=a.b} +function fad(a){return a==aad||a==bad} +function gad(a){return a==dad||a==_9c} +function Jzc(a){return a==Fzc||a==Ezc} +function fcd(a){return a!=bcd&&a!=ccd} +function oid(a){return a.Lg()&&a.Mg()} +function Gfd(a){return Kkd(BD(a,118))} +function k3c(a){return d3c(new j3c,a)} +function y2d(a,b){return new p4d(b,a)} +function z2d(a,b){return new p4d(b,a)} +function ukd(a,b,c){vkd(a,b);wkd(a,c)} +function _kd(a,b,c){cld(a,b);ald(a,c)} +function bld(a,b,c){dld(a,b);eld(a,c)} +function gmd(a,b,c){hmd(a,b);imd(a,c)} +function nmd(a,b,c){omd(a,b);pmd(a,c)} +function iKd(a,b){$Jd(a,b);_Jd(a,a.D)} +function _ud(a){Wud.call(this,a,true)} +function Xg(a,b,c){Vg.call(this,a,b,c)} +function Ygb(a){Hgb();Zgb.call(this,a)} +function rxb(){mxb.call(this,'Head',1)} +function wxb(){mxb.call(this,'Tail',3)} +function Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)} +function Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)} +function MGb(a){Hkb(a.xf(),new QGb(a))} +function xtb(a){return a!=null?tb(a):0} +function b2b(a,b){return ntd(b,mpd(a))} +function c2b(a,b){return ntd(b,mpd(a))} +function dAb(a,b){return a[a.length]=b} +function gAb(a,b){return a[a.length]=b} +function Vq(a){return lr(a.b.Kc(),a.a)} +function dqd(a,b){return _o(qo(a.d),b)} +function eqd(a,b){return _o(qo(a.g),b)} +function fqd(a,b){return _o(qo(a.j),b)} +function Osd(a,b){Msd.call(this,a.b,b)} +function q0b(a){B_b.call(this,a,a,a,a)} +function HOb(a){a.b&&LOb(a);return a.a} +function IOb(a){a.b&&LOb(a);return a.c} +function uyb(a,b){if(lyb){return}a.b=b} +function lzd(a,b,c){NC(a,b,c);return c} +function mBc(a,b,c){NC(a.c[b.g],b.g,c)} +function _Hd(a,b,c){BD(a.c,69).Xh(b,c)} +function wfd(a,b,c){bld(c,c.i+a,c.j+b)} +function UOd(a,b){wtd(VKd(a.a),XOd(b))} +function bTd(a,b){wtd(QSd(a.a),eTd(b))} +function Lge(a){wfe();xfe.call(this,a)} +function CAd(a){return a==null?0:tb(a)} +function fNc(){fNc=ccb;eNc=new Rpb(v1)} +function h0d(){h0d=ccb;new i0d;new Rkb} +function i0d(){new Lqb;new Lqb;new Lqb} +function GA(){GA=ccb;fA();FA=new Lqb} +function Iy(){Iy=ccb;$wnd.Math.log(2)} +function UVd(){UVd=ccb;TVd=(AFd(),zFd)} +function _ge(){throw vbb(new cgb(Cxe))} +function ohe(){throw vbb(new cgb(Cxe))} +function che(){throw vbb(new cgb(Dxe))} +function rhe(){throw vbb(new cgb(Dxe))} +function Mg(a){this.a=a;Gg.call(this,a)} +function up(a){this.a=a;rf.call(this,a)} +function Bp(a){this.a=a;rf.call(this,a)} +function Okb(a,b){Mlb(a.c,a.c.length,b)} +function llb(a){return a.ab?1:0} +function Deb(a,b){return ybb(a,b)>0?a:b} +function TC(a,b,c){return {l:a,m:b,h:c}} +function Ctb(a,b){a.a!=null&&BIc(b,a.a)} +function Csb(a){a.a=new jtb;a.c=new jtb} +function hDb(a){this.b=a;this.a=new Rkb} +function dOb(a){this.b=new pOb;this.a=a} +function q_b(a){n_b.call(this);this.a=a} +function txb(){mxb.call(this,'Range',2)} +function bUb(){ZTb();this.a=new L2c(zP)} +function Bh(a,b){Qb(b);Ah(a).Jc(new Vw)} +function fKc(a,b){FJc();return b.n.b+=a} +function Tgc(a,b,c){return Rhb(a.g,c,b)} +function LJc(a,b,c){return Rhb(a.k,c,b)} +function r1c(a,b){return Rhb(a.a,b.a,b)} +function jBc(a,b,c){return hBc(b,c,a.c)} +function E6c(a){return new f7c(a.c,a.d)} +function F6c(a){return new f7c(a.c,a.d)} +function R6c(a){return new f7c(a.a,a.b)} +function CQd(a,b){return hA(a.a,b,null)} +function fec(a){QZb(a,null);RZb(a,null)} +function AOc(a){BOc(a,null);COc(a,null)} +function u4d(){qRd.call(this,null,null)} +function y4d(){RRd.call(this,null,null)} +function a7d(a){this.a=a;Lqb.call(this)} +function Pp(a){this.b=(mmb(),new iob(a))} +function Py(a){a.j=KC(VI,nie,310,0,0,1)} +function oAd(a,b,c){a.c.Vc(b,BD(c,133))} +function GAd(a,b,c){a.c.ji(b,BD(c,133))} +function JLd(a,b){Uxd(a);a.Gc(BD(b,15))} +function b7d(a,b){return t2d(a.c,a.b,b)} +function Bv(a,b){return new Qv(a.Kc(),b)} +function Lq(a,b){return rr(a.Kc(),b)!=-1} +function Sqb(a,b){return a.a.Bc(b)!=null} +function pr(a){return a.Ob()?a.Pb():null} +function yfb(a){return zfb(a,0,a.length)} +function JD(a,b){return a!=null&&AD(a,b)} +function $A(a,b){a.q.setHours(b);YA(a,b)} +function Yrb(a,b){if(a.c){jsb(b);isb(b)}} +function nk(a,b,c){BD(a.Kb(c),164).Nb(b)} +function RJc(a,b,c){SJc(a,b,c);return c} +function Eub(a,b,c){a.a=b^1502;a.b=c^kke} +function xHb(a,b,c){return a.a[b.g][c.g]} +function REc(a,b){return a.a[b.c.p][b.p]} +function aEc(a,b){return a.e[b.c.p][b.p]} +function tEc(a,b){return a.c[b.c.p][b.p]} +function OJc(a,b){return a.j[b.p]=aKc(b)} +function k5c(a,b){return cfb(a.f,b.tg())} +function Isd(a,b){return cfb(a.b,b.tg())} +function Sfd(a,b){return a.a0?b*b/a:b*b*100} +function CRb(a,b){return a>0?b/(a*a):b*100} +function G2c(a,b,c){return Ekb(b,I2c(a,c))} +function t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)} +function St(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function O6c(a,b,c){a.a+=b;a.b+=c;return a} +function Z6c(a,b,c){a.a*=b;a.b*=c;return a} +function b7c(a,b,c){a.a-=b;a.b-=c;return a} +function a7c(a,b){a.a=b.a;a.b=b.b;return a} +function V6c(a){a.a=-a.a;a.b=-a.b;return a} +function Dic(a){this.c=a;this.a=1;this.b=1} +function xed(a){this.c=a;dld(a,0);eld(a,0)} +function u7c(a){Psb.call(this);n7c(this,a)} +function AXb(a){xXb();yXb(this);this.mf(a)} +function GRd(a,b){nRd();qRd.call(this,a,b)} +function dSd(a,b){LRd();RRd.call(this,a,b)} +function hSd(a,b){LRd();RRd.call(this,a,b)} +function fSd(a,b){LRd();dSd.call(this,a,b)} +function sId(a,b,c){dId.call(this,a,b,c,2)} +function zXd(a,b){UVd();nXd.call(this,a,b)} +function BXd(a,b){UVd();zXd.call(this,a,b)} +function DXd(a,b){UVd();zXd.call(this,a,b)} +function FXd(a,b){UVd();DXd.call(this,a,b)} +function PXd(a,b){UVd();nXd.call(this,a,b)} +function RXd(a,b){UVd();PXd.call(this,a,b)} +function XXd(a,b){UVd();nXd.call(this,a,b)} +function pAd(a,b){return a.c.Fc(BD(b,133))} +function w1d(a,b,c){return V1d(p1d(a,b),c)} +function N2d(a,b,c){return b.Qk(a.e,a.c,c)} +function P2d(a,b,c){return b.Rk(a.e,a.c,c)} +function a3d(a,b){return xid(a.e,BD(b,49))} +function aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))} +function TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))} +function ypb(a,b){b.$modCount=a.$modCount} +function MUc(){MUc=ccb;LUc=new Lsd('root')} +function LCd(){LCd=ccb;KCd=new lDd;new NDd} +function KVc(){this.a=new Hp;this.b=new Hp} +function FUd(){hJd.call(this);this.Bb|=Tje} +function t_c(){$r.call(this,'GROW_TREE',0)} +function C9d(a){return a==null?null:cde(a)} +function G9d(a){return a==null?null:jde(a)} +function J9d(a){return a==null?null:fcb(a)} +function K9d(a){return a==null?null:fcb(a)} +function fdb(a){if(a.o!=null){return}vdb(a)} +function DD(a){CCb(a==null||KD(a));return a} +function ED(a){CCb(a==null||LD(a));return a} +function GD(a){CCb(a==null||ND(a));return a} +function gB(a){this.q=new $wnd.Date(Sbb(a))} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Sf(a,b){this.a=a;Mf.call(this,a,b)} +function Hg(a,b){this.d=a;Dg(this);this.b=b} +function bAb(a,b){Vzb.call(this,a);this.a=b} +function vAb(a,b){Vzb.call(this,a);this.a=b} +function sNb(a){pNb.call(this,0,0);this.f=a} +function Vg(a,b,c){dg.call(this,a,b,c,null)} +function Yg(a,b,c){dg.call(this,a,b,c,null)} +function Pxb(a,b,c){return a.ue(b,c)<=0?c:b} +function Qxb(a,b,c){return a.ue(b,c)<=0?b:c} +function g4c(a,b){return BD(Wrb(a.b,b),149)} +function i4c(a,b){return BD(Wrb(a.c,b),229)} +function wic(a){return BD(Ikb(a.a,a.b),287)} +function B6c(a){return new f7c(a.c,a.d+a.a)} +function eLc(a){return FJc(),Jzc(BD(a,197))} +function $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))} +function fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)} +function qyb(a,b){if(lyb){return}Ekb(a.a,b)} +function F2b(a,b){x2b();return f_b(b.d.i,a)} +function _9b(a,b){I9b();return new gac(b,a)} +function _Hb(a,b){ytb(b,lle);a.f=b;return a} +function Kld(a,b,c){c=_hd(a,b,3,c);return c} +function bmd(a,b,c){c=_hd(a,b,6,c);return c} +function kpd(a,b,c){c=_hd(a,b,9,c);return c} +function Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)} +function Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))} +function bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function c7d(a,b,c){return C2d(a.c,a.b,b,c)} +function DAd(a,b){return (b&Ohe)%a.d.length} +function Msd(a,b){Lsd.call(this,a);this.a=b} +function uVd(a,b){lVd.call(this,a);this.a=b} +function sYd(a,b){lVd.call(this,a);this.a=b} +function zyd(a,b){this.c=a;zud.call(this,b)} +function YOd(a,b){this.a=a;qOd.call(this,b)} +function fTd(a,b){this.a=a;qOd.call(this,b)} +function Xp(a){this.a=(Xj(a,Jie),new Skb(a))} +function cq(a){this.a=(Xj(a,Jie),new Skb(a))} +function LA(a){!a.a&&(a.a=new VA);return a.a} +function XMb(a){if(a>8){return 0}return a+1} +function Ecb(a,b){Bcb();return a==b?0:a?1:-1} +function Opb(a,b,c){return Npb(a,BD(b,22),c)} +function Bz(a,b,c){return a.apply(b,c);var d} +function Sfb(a,b,c){a.a+=zfb(b,0,c);return a} +function ijb(a,b){var c;c=a.e;a.e=b;return c} +function trb(a,b){var c;c=a[hke];c.call(a,b)} +function urb(a,b){var c;c=a[hke];c.call(a,b)} +function Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1} +function Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d} +function _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)} +function _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))} +function Bxb(a,b){return Vd(Cwb(a.a,b,true))} +function Cxb(a,b){return Vd(Dwb(a.a,b,true))} +function _Bb(a,b){return eCb(new Array(b),a)} +function HD(a){return String.fromCharCode(a)} +function mz(a){return a==null?null:a.message} +function gRb(){this.a=new Rkb;this.b=new Rkb} +function iTb(){this.a=new MQb;this.b=new tTb} +function tDb(){this.b=new d7c;this.c=new Rkb} +function _Qb(){this.d=new d7c;this.e=new d7c} +function n_b(){this.n=new d7c;this.o=new d7c} +function $Gb(){this.n=new p0b;this.i=new I6c} +function sec(){this.a=new Umc;this.b=new mnc} +function NIc(){this.a=new Rkb;this.d=new Rkb} +function LDc(){this.b=new Tqb;this.a=new Tqb} +function hSc(){this.b=new Lqb;this.a=new Lqb} +function HRc(){this.b=new tRc;this.a=new hRc} +function aHb(){$Gb.call(this);this.a=new d7c} +function Ywb(a){Zwb.call(this,a,(lxb(),hxb))} +function J_b(a,b,c,d){B_b.call(this,a,b,c,d)} +function sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))} +function tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))} +function Tod(a,b,c){c=_hd(a,b,11,c);return c} +function P6c(a,b){a.a+=b.a;a.b+=b.b;return a} +function c7c(a,b){a.a-=b.a;a.b-=b.b;return a} +function u7b(a,b){return a.n.a=(uCb(b),b)+10} +function v7b(a,b){return a.n.a=(uCb(b),b)+10} +function dLd(a,b){return b==a||pud(UKd(b),a)} +function PYd(a,b){return Rhb(a.a,b,'')==null} +function E2b(a,b){x2b();return !f_b(b.d.i,a)} +function rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)} +function h1d(a,b){var c;c=b.Hh(a.a);return c} +function Cyd(a,b){qcb.call(this,gve+a+mue+b)} +function gUd(a,b,c,d){cUd.call(this,a,b,c,d)} +function Q4d(a,b,c,d){cUd.call(this,a,b,c,d)} +function U4d(a,b,c,d){Q4d.call(this,a,b,c,d)} +function n5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function p5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function v5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function t5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function A5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function y5d(a,b,c,d){v5d.call(this,a,b,c,d)} +function D5d(a,b,c,d){A5d.call(this,a,b,c,d)} +function d6d(a,b,c,d){Y5d.call(this,a,b,c,d)} +function Vp(a,b,c){this.a=a;qc.call(this,b,c)} +function tk(a,b,c){this.c=b;this.b=c;this.a=a} +function ik(a,b,c){return a.d=BD(b.Kb(c),164)} +function j6d(a,b){return a.Aj().Nh().Kh(a,b)} +function h6d(a,b){return a.Aj().Nh().Ih(a,b)} +function Fdb(a,b){return uCb(a),PD(a)===PD(b)} +function dfb(a,b){return uCb(a),PD(a)===PD(b)} +function Dxb(a,b){return Vd(Cwb(a.a,b,false))} +function Exb(a,b){return Vd(Dwb(a.a,b,false))} +function vBb(a,b){return a.b.sd(new yBb(a,b))} +function BBb(a,b){return a.b.sd(new EBb(a,b))} +function HBb(a,b){return a.b.sd(new KBb(a,b))} +function lfb(a,b,c){return a.lastIndexOf(b,c)} +function uTb(a,b,c){return Kdb(a[b.b],a[c.b])} +function RTb(a,b){return yNb(b,(Nyc(),Cwc),a)} +function fmc(a,b){return beb(b.a.d.p,a.a.d.p)} +function emc(a,b){return beb(a.a.d.p,b.a.d.p)} +function _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)} +function S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)} +function Vxd(a){return a<100?null:new Ixd(a)} +function ecd(a){return a==Zbd||a==_bd||a==$bd} +function zAd(a,b){return JD(b,15)&&Btd(a.c,b)} +function vyb(a,b){if(lyb){return}!!b&&(a.d=b)} +function ujb(a,b){var c;c=b;return !!Awb(a,c)} +function czd(a,b){this.c=a;Pyd.call(this,a,b)} +function fBb(a){this.c=a;nvb.call(this,rie,0)} +function Avb(a,b){Bvb.call(this,a,a.length,b)} +function aId(a,b,c){return BD(a.c,69).lk(b,c)} +function bId(a,b,c){return BD(a.c,69).mk(b,c)} +function O2d(a,b,c){return N2d(a,BD(b,332),c)} +function Q2d(a,b,c){return P2d(a,BD(b,332),c)} +function i3d(a,b,c){return h3d(a,BD(b,332),c)} +function k3d(a,b,c){return j3d(a,BD(b,332),c)} +function tn(a,b){return b==null?null:Hv(a.b,b)} +function Kcb(a){return LD(a)?(uCb(a),a):a.ke()} +function Ldb(a){return !isNaN(a)&&!isFinite(a)} +function Wn(a){Ql();this.a=(mmb(),new zob(a))} +function dIc(a){FHc();this.d=a;this.a=new jkb} +function xqb(a,b,c){this.a=a;this.b=b;this.c=c} +function Nrb(a,b,c){this.a=a;this.b=b;this.c=c} +function $sb(a,b,c){this.d=a;this.b=c;this.a=b} +function Qsb(a){Csb(this);Osb(this);ye(this,a)} +function Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())} +function Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null} +function iyb(a){this.a=a;Zfb();Cbb(Date.now())} +function JCb(){JCb=ccb;GCb=new nb;ICb=new nb} +function ntb(){ntb=ccb;ltb=new otb;mtb=new qtb} +function kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)} +function tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)} +function $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)} +function Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))} +function pxb(a){lxb();return es((zxb(),yxb),a)} +function Hyb(a){Fyb();return es((Kyb(),Jyb),a)} +function OEb(a){MEb();return es((REb(),QEb),a)} +function WEb(a){UEb();return es((ZEb(),YEb),a)} +function tFb(a){rFb();return es((wFb(),vFb),a)} +function iHb(a){gHb();return es((lHb(),kHb),a)} +function PHb(a){NHb();return es((SHb(),RHb),a)} +function GIb(a){EIb();return es((JIb(),IIb),a)} +function vJb(a){qJb();return es((yJb(),xJb),a)} +function xLb(a){vLb();return es((ALb(),zLb),a)} +function TMb(a){RMb();return es((WMb(),VMb),a)} +function TOb(a){ROb();return es((WOb(),VOb),a)} +function ePb(a){cPb();return es((hPb(),gPb),a)} +function ZRb(a){XRb();return es((aSb(),_Rb),a)} +function ATb(a){yTb();return es((DTb(),CTb),a)} +function sUb(a){qUb();return es((vUb(),uUb),a)} +function rWb(a){lWb();return es((uWb(),tWb),a)} +function TXb(a){RXb();return es((WXb(),VXb),a)} +function Mb(a,b){if(!a){throw vbb(new Wdb(b))}} +function l0b(a){j0b();return es((o0b(),n0b),a)} +function r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function mKb(a,b,c){this.b=a;this.c=b;this.a=c} +function BZb(a,b,c){this.b=a;this.a=b;this.c=c} +function TNb(a,b,c){this.a=a;this.b=b;this.c=c} +function uOb(a,b,c){this.a=a;this.b=b;this.c=c} +function S3b(a,b,c){this.a=a;this.b=b;this.c=c} +function Z6b(a,b,c){this.a=a;this.b=b;this.c=c} +function n9b(a,b,c){this.b=a;this.a=b;this.c=c} +function x$b(a,b,c){this.e=b;this.b=a;this.d=c} +function $Ab(a,b,c){EAb();a.a.Od(b,c);return b} +function LGb(a){var b;b=new KGb;b.e=a;return b} +function iLb(a){var b;b=new fLb;b.b=a;return b} +function D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b} +function Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc} +function jbc(a){gbc();return es((mbc(),lbc),a)} +function Cjc(a){Ajc();return es((Fjc(),Ejc),a)} +function Clc(a){Alc();return es((Flc(),Elc),a)} +function Cpc(a){Apc();return es((Fpc(),Epc),a)} +function Kpc(a){Ipc();return es((Npc(),Mpc),a)} +function Wpc(a){Rpc();return es((Zpc(),Ypc),a)} +function $jc(a){Xjc();return es((bkc(),akc),a)} +function Hkc(a){Fkc();return es((Kkc(),Jkc),a)} +function dqc(a){bqc();return es((gqc(),fqc),a)} +function rqc(a){mqc();return es((uqc(),tqc),a)} +function zqc(a){xqc();return es((Cqc(),Bqc),a)} +function Iqc(a){Gqc();return es((Lqc(),Kqc),a)} +function Vqc(a){Sqc();return es((Yqc(),Xqc),a)} +function brc(a){_qc();return es((erc(),drc),a)} +function nrc(a){lrc();return es((qrc(),prc),a)} +function Arc(a){yrc();return es((Drc(),Crc),a)} +function Qrc(a){Orc();return es((Trc(),Src),a)} +function Zrc(a){Xrc();return es((asc(),_rc),a)} +function gsc(a){esc();return es((jsc(),isc),a)} +function osc(a){msc();return es((rsc(),qsc),a)} +function Etc(a){Ctc();return es((Htc(),Gtc),a)} +function qzc(a){lzc();return es((tzc(),szc),a)} +function Azc(a){xzc();return es((Dzc(),Czc),a)} +function Mzc(a){Izc();return es((Pzc(),Ozc),a)} +function MAc(a){KAc();return es((PAc(),OAc),a)} +function mAc(a){kAc();return es((pAc(),oAc),a)} +function vAc(a){tAc();return es((yAc(),xAc),a)} +function DAc(a){BAc();return es((GAc(),FAc),a)} +function VAc(a){TAc();return es((YAc(),XAc),a)} +function $zc(a){Vzc();return es((bAc(),aAc),a)} +function bBc(a){_Ac();return es((eBc(),dBc),a)} +function vBc(a){tBc();return es((yBc(),xBc),a)} +function EBc(a){CBc();return es((HBc(),GBc),a)} +function NBc(a){LBc();return es((QBc(),PBc),a)} +function tGc(a){rGc();return es((wGc(),vGc),a)} +function WIc(a){UIc();return es((ZIc(),YIc),a)} +function $Lc(a){YLc();return es((bMc(),aMc),a)} +function gMc(a){eMc();return es((jMc(),iMc),a)} +function JOc(a){HOc();return es((MOc(),LOc),a)} +function HQc(a){FQc();return es((KQc(),JQc),a)} +function DRc(a){yRc();return es((GRc(),FRc),a)} +function tSc(a){qSc();return es((wSc(),vSc),a)} +function UTc(a){STc();return es((XTc(),WTc),a)} +function UUc(a){PUc();return es((XUc(),WUc),a)} +function aUc(a){$Tc();return es((dUc(),cUc),a)} +function wVc(a){tVc();return es((zVc(),yVc),a)} +function iWc(a){fWc();return es((lWc(),kWc),a)} +function sWc(a){pWc();return es((vWc(),uWc),a)} +function lXc(a){iXc();return es((oXc(),nXc),a)} +function vXc(a){sXc();return es((yXc(),xXc),a)} +function BYc(a){zYc();return es((EYc(),DYc),a)} +function m$c(a){k$c();return es((p$c(),o$c),a)} +function $$c(a){Y$c();return es((b_c(),a_c),a)} +function n_c(a){i_c();return es((q_c(),p_c),a)} +function w_c(a){s_c();return es((z_c(),y_c),a)} +function E_c(a){C_c();return es((H_c(),G_c),a)} +function P_c(a){N_c();return es((S_c(),R_c),a)} +function W0c(a){R0c();return es((Z0c(),Y0c),a)} +function f1c(a){a1c();return es((i1c(),h1c),a)} +function P5c(a){N5c();return es((S5c(),R5c),a)} +function b6c(a){_5c();return es((e6c(),d6c),a)} +function H7c(a){F7c();return es((K7c(),J7c),a)} +function k8c(a){i8c();return es((n8c(),m8c),a)} +function V8b(a){S8b();return es((Y8b(),X8b),a)} +function A5b(a){y5b();return es((D5b(),C5b),a)} +function jad(a){ead();return es((mad(),lad),a)} +function sad(a){qad();return es((vad(),uad),a)} +function Cad(a){Aad();return es((Fad(),Ead),a)} +function Oad(a){Mad();return es((Rad(),Qad),a)} +function jbd(a){hbd();return es((mbd(),lbd),a)} +function ubd(a){rbd();return es((xbd(),wbd),a)} +function Kbd(a){Hbd();return es((Nbd(),Mbd),a)} +function Vbd(a){Tbd();return es((Ybd(),Xbd),a)} +function hcd(a){dcd();return es((kcd(),jcd),a)} +function vcd(a){rcd();return es((ycd(),xcd),a)} +function vdd(a){tdd();return es((ydd(),xdd),a)} +function Kdd(a){Idd();return es((Ndd(),Mdd),a)} +function $cd(a){Ucd();return es((cdd(),bdd),a)} +function Fed(a){Ded();return es((Ied(),Hed),a)} +function rgd(a){pgd();return es((ugd(),tgd),a)} +function Esd(a){Csd();return es((Hsd(),Gsd),a)} +function Yoc(a,b){return (uCb(a),a)+(uCb(b),b)} +function NNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function SNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function bPc(a,b){this.c=a;this.a=b;this.b=b-a} +function nYc(a,b,c){this.a=a;this.b=b;this.c=c} +function L1c(a,b,c){this.a=a;this.b=b;this.c=c} +function T1c(a,b,c){this.a=a;this.b=b;this.c=c} +function Rrd(a,b,c){this.a=a;this.b=b;this.c=c} +function zCd(a,b,c){this.a=a;this.b=b;this.c=c} +function IVd(a,b,c){this.e=a;this.a=b;this.c=c} +function kWd(a,b,c){UVd();cWd.call(this,a,b,c)} +function HXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function TXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function ZXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function JXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function LXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function NXd(a,b,c){UVd();LXd.call(this,a,b,c)} +function VXd(a,b,c){UVd();TXd.call(this,a,b,c)} +function _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)} +function $j(a,b){Qb(a);Qb(b);return new _j(a,b)} +function Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)} +function Rq(a,b){Qb(a);Qb(b);return new ar(a,b)} +function lr(a,b){Qb(a);Qb(b);return new zr(a,b)} +function BD(a,b){CCb(a==null||AD(a,b));return a} +function Nu(a){var b;b=new Rkb;fr(b,a);return b} +function Ex(a){var b;b=new Tqb;fr(b,a);return b} +function Hx(a){var b;b=new Gxb;Jq(b,a);return b} +function Ru(a){var b;b=new Psb;Jq(b,a);return b} +function YEc(a){!a.e&&(a.e=new Rkb);return a.e} +function SMd(a){!a.c&&(a.c=new xYd);return a.c} +function Ekb(a,b){a.c[a.c.length]=b;return true} +function WA(a,b){this.c=a;this.b=b;this.a=false} +function Gg(a){this.d=a;Dg(this);this.b=ed(a.d)} +function pzb(){this.a=';,;';this.b='';this.c=''} +function Bvb(a,b,c){qvb.call(this,b,c);this.a=a} +function fAb(a,b,c){this.b=a;fvb.call(this,b,c)} +function lsb(a,b,c){this.c=a;pjb.call(this,b,c)} +function bCb(a,b,c){$Bb(c,0,a,b,c.length,false)} +function HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}} +function v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))} +function rlc(a,b){return beb(D0b(a.d),D0b(b.d))} +function uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d} +function FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd} +function DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))} +function aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)} +function C6c(a){return new f7c(a.c+a.b,a.d+a.a)} +function Vmc(a,b){Imc();return beb(a.d.p,b.d.p)} +function Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)} +function Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)} +function rCb(a,b){if(!a){throw vbb(new ucb(b))}} +function mCb(a,b){if(!a){throw vbb(new Wdb(b))}} +function dWb(a,b,c){cWb.call(this,a,b);this.b=c} +function pMd(a,b,c){MLd.call(this,a,b);this.c=c} +function Dnc(a,b,c){Cnc.call(this,b,c);this.d=a} +function _Gd(a){$Gd();MGd.call(this);this.th(a)} +function PNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function UNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function k2d(a,b,c){MLd.call(this,a,b);this.c=c} +function y1d(){T0d();z1d.call(this,(yFd(),xFd))} +function gFd(a){return a!=null&&!OEd(a,CEd,DEd)} +function dFd(a,b){return (jFd(a)<<4|jFd(b))&aje} +function ln(a,b){return Vm(),Wj(a,b),new iy(a,b)} +function Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}} +function Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)} +function WUd(a,b){var c;c=a.c;VUd(a,b);return c} +function Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a} +function G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true} +function jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()} +function Wq(a,b){this.b=a;this.a=b;ol.call(this)} +function ar(a,b){this.a=a;this.b=b;ol.call(this)} +function vvb(a,b){qvb.call(this,b,1040);this.a=a} +function Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function WPb(a){QPb();return jtd(a)==Xod(ltd(a))} +function XPb(a){QPb();return ltd(a)==Xod(jtd(a))} +function iYb(a,b){return hYb(a,new cWb(b.a,b.b))} +function NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c} +function _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function YHb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function zfe(a){wfe();++vfe;return new ige(0,a)} +function o_b(a){if(a.a){return a.a}return JZb(a)} +function CCb(a){if(!a){throw vbb(new Cdb(null))}} +function X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))} +function ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))} +function oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)} +function d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)} +function sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function xfd(a,b){return Ekb(a,new f7c(b.a,b.b))} +function Bic(a,b){return a.c=b){throw vbb(new rcb)}} +function Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b} +function _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)} +function n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)} +function tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)} +function D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)} +function oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b} +function bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b} +function qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie} +function gub(a){this.b=new Skb(11);this.a=(ipb(),a)} +function Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)} +function nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)} +function Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)} +function Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)} +function jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)} +function Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)} +function nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)} +function DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)} +function cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d} +function i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d} +function x0d(a){Wud.call(this,a,false);this.a=false} +function Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b} +function px(a,b){im();ox.call(this,a,Dm(new amb(b)))} +function Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)} +function Efe(a,b){wfe();++vfe;return new Dge(6,a,b)} +function nfb(a,b){return dfb(a.substr(0,b.length),b)} +function Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)} +function Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}} +function Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c} +function amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function xJc(a){var b;b=a;while(b.f){b=b.f}return b} +function fkb(a){var b;b=bkb(a);sCb(b!=null);return b} +function gkb(a){var b;b=ckb(a);sCb(b!=null);return b} +function cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Glb(a,b){var c;for(c=0;c0?$wnd.Math.log(a/b):-100} +function ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0} +function HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))} +function iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()} +function Olb(a,b){return avb(b,a.length),new vvb(a,b)} +function Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b} +function Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie} +function rge(a,b){xfe.call(this,1);this.a=a;this.b=b} +function Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a} +function uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d} +function ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)} +function Flb(a,b,c){var d;for(d=0;d=a.g} +function NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)} +function Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)} +function gCb(a,b){var c;c=console[a];c.call(console,b)} +function Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))} +function E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))} +function oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c} +function Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c} +function dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c} +function f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)} +function z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd} +function ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)} +function uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1} +function U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)} +function Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function oAb(a){if(0>=a){return new yAb}return pAb(a-1)} +function Nfe(a){if(!bfe)return false;return Qhb(bfe,a)} +function Ehe(a){if(a)return a.dc();return !a.Kc().Ob()} +function Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a} +function LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d} +function uCb(a){if(a==null){throw vbb(new Geb)}return a} +function Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}} +function Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}} +function Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)} +function qlc(a,b){return beb(b.j.c.length,a.j.c.length)} +function igd(a,b){a.c<0||a.b.b=0?a.Bh(c):vid(a,b)} +function WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e} +function Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e} +function Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f} +function fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k} +function cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j} +function dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j} +function AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b} +function $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c} +function pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c} +function MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))} +function Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)} +function Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)} +function Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)} +function Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d} +function $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d} +function iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b} +function cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)} +function AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)} +function T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)} +function vfb(a){return String.fromCharCode.apply(null,a)} +function Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)} +function tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()} +function d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))} +function ix(a,b){ex();return new gx(new il(a),new Uk(b))} +function Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))} +function Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))} +function hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d} +function eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a} +function gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b} +function keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function Gbc(a,b){return Bcb(),BD(b.b,19).ad&&++d;return d} +function Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c} +function Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c} +function hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null} +function JZb(a){var b;b=P2b(a);if(b){return b}return null} +function Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b} +function YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())} +function ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)} +function prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))} +function ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)} +function lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)} +function tib(a){sCb(a.b=0&&dfb(a.substr(c,b.length),b)} +function H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)} +function Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])} +function KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b} +function cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b} +function kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)} +function nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)} +function cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])} +function crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])} +function Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])} +function Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])} +function psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])} +function EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])} +function XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])} +function KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])} +function _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])} +function hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])} +function IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])} +function bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])} +function VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])} +function VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])} +function jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])} +function g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])} +function F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])} +function PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])} +function XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])} +function $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])} +function B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])} +function lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)} +function hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)} +function Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)} +function exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)} +function pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a} +function by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))} +function bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))} +function FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)} +function YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)} +function Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2} +function Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c} +function cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c} +function aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true} +function isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)} +function iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))} +function tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)} +function YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))} +function Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)} +function Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))} +function QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0} +function uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c} +function Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)} +function QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)} +function Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d} +function NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)} +function zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)} +function hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)} +function g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c} +function VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c} +function b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c} +function Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()} +function ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)} +function no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}} +function Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b} +function ecb(a){function b(){} +;b.prototype=a||{};return new b} +function dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false} +function aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)} +function tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]} +function Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)} +function mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)} +function fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)} +function Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)} +function Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)} +function Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)} +function nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)} +function Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)} +function Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()} +function t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0} +function oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0} +function BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)} +function RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)} +function eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)} +function STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)} +function evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)} +function Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)} +function _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)} +function MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)} +function ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)} +function WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)} +function rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))} +function hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c} +function aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)} +function Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)} +function FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)} +function Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a} +function bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a} +function uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)} +function QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)} +function $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)} +function F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)} +function jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)} +function IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))} +function wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}} +function Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null} +function WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false} +function qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))} +function SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))} +function DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)} +function W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a} +function e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)} +function COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)} +function D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b} +function BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)} +function cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)} +function lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)} +function T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)} +function jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))} +function XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c} +function Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()} +function UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)} +function nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b} +function Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)} +function Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))} +function tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}} +function BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}} +function Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b} +function kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)} +function A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))} +function Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])} +function jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])} +function QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])} +function HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])} +function UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])} +function BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])} +function Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])} +function Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])} +function eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])} +function Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])} +function Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])} +function hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])} +function $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])} +function NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])} +function wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])} +function WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])} +function OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])} +function wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])} +function FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])} +function uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])} +function xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])} +function tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])} +function CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])} +function wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])} +function _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])} +function kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])} +function tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])} +function o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c} +function tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)} +function fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)} +function av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)} +function cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)} +function Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje} +function bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje} +function Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a} +function _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d} +function mlb(a){sCb(a.ad?1:0} +function bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a} +function iSc(a,b){var c;c=a+'';while(c.length0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))} +function cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))} +function $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))} +function XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))} +function k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)} +function l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)} +function cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)} +function kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))} +function rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))} +function Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)} +function YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)} +function o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)} +function p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)} +function i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d} +function vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b} +function H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a} +function tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null} +function Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true} +function _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a} +function Tb(a,b,c){if(a<0||bc){throw vbb(new qcb(Kb(a,b,c)))}} +function eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a} +function xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}} +function $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false} +function Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)} +function tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b} +function Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b} +function Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b} +function orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array} +function Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))} +function Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))} +function m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)} +function sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)} +function SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)} +function a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))} +function _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))} +function Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d} +function Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d} +function $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d} +function _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d} +function Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b} +function Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}} +function C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()} +function j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1} +function mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} +function uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c} +function msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)} +function cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))} +function z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))} +function q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))} +function Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))} +function hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))} +function yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])} +function qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])} +function UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])} +function UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])} +function sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])} +function kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])} +function Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)} +function Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])} +function okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))} +function Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)} +function Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)} +function Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()} +function ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null} +function Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0} +function Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)} +function Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)} +function A2c(a,b){var c;for(c=a.j.c.length;c0&&$fb(a.g,0,b,0,a.i);return b} +function qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)} +function Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24} +function axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24} +function gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16} +function Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16} +function sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)} +function nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a} +function Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))} +function VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))} +function E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32} +function Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)} +function kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)} +function Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b} +function Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a} +function kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c} +function R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)} +function TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)} +function mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)} +function dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)} +function dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}} +function vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b} +function pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}} +function VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n} +function Fqb(a){sCb(a.a=0&&a.a[c]===b[c];c--);return c<0} +function Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb} +function Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b} +function GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))} +function Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))} +function REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))} +function ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))} +function aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))} +function D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))} +function Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))} +function erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))} +function eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))} +function GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))} +function Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))} +function rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))} +function MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))} +function ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))} +function bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))} +function jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))} +function KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))} +function dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))} +function XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))} +function XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))} +function lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))} +function i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))} +function H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))} +function UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)} +function Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d} +function zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a} +function reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}} +function me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))} +function Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)} +function fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)} +function FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)} +function tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])} +function _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])} +function Dz(b){Az();return function(){return Ez(b,this,arguments);var a}} +function sz(){if(Date.now){return Date.now()}return (new Date).getTime()} +function OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()} +function ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g} +function ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)} +function PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)} +function jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)} +function rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c} +function wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb} +function oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false} +function C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false} +function zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} +function j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)} +function Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t} +function kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])} +function Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])} +function Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])} +function Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])} +function _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])} +function sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])} +function n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])} +function _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])} +function Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])} +function T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)} +function yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)} +function uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d0?ihb(a,b):lhb(a,-b)} +function Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)} +function Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}} +function Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b} +function kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b} +function hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)} +function uHb(a,b,c,d){var e;for(e=0;eb){throw vbb(new qcb(Jb(a,b,'index')))}return a} +function zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e} +function _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)} +function A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))} +function Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)} +function b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)} +function kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb} +function MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb} +function Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)} +function wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)} +function SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb} +function g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')} +function Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))} +function HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)} +function _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)} +function C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)} +function PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)} +function KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()} +function JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a} +function poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null} +function ODc(a,b){if(a.pb.p){return -1}return 0} +function pvb(a,b){uCb(b);if(a.c=0,'Initial capacity must not be negative')} +function lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))} +function SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))} +function JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))} +function Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))} +function DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))} +function WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))} +function Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))} +function gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))} +function Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))} +function Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))} +function jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))} +function asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))} +function Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))} +function YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))} +function yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))} +function PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))} +function QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))} +function yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))} +function HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))} +function wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))} +function zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))} +function vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))} +function EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))} +function yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))} +function b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))} +function mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))} +function vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))} +function icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])} +function ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)} +function NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d} +function yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a} +function EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b} +function FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c} +function A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;dc||b=0?a._g(c,true,true):sid(a,b,true)} +function s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))} +function pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)} +function IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)} +function qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)} +function ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b} +function dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true} +function vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)} +function r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)} +function p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)} +function fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)} +function UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)} +function yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0} +function MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}} +function nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]} +function pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)} +function Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c} +function Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)} +function bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)} +function hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b} +function Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)} +function NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)} +function lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb} +function zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))} +function uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))} +function ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))} +function WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))} +function WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))} +function GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))} +function mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))} +function oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))} +function Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))} +function Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))} +function ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))} +function xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))} +function Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))} +function Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))} +function ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))} +function A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)} +function _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)} +function eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a} +function Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true} +function Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null} +function Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))} +function Jkb(a,b,c){for(;c=0?fid(a,c,true,true):sid(a,b,true)} +function vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)} +function Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)} +function S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)} +function uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d} +function Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}} +function YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e} +function fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null} +function UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)} +function tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)} +function yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}} +function oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije} +function HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b} +function uA(a,b){while(b[0]=0){++b[0]}} +function sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))} +function vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function EA(a,b,c){var d,e;d=10;for(e=0;ea.a[d]&&(d=c)}return d} +function fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c} +function Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)} +function nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}} +function AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb} +function UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)} +function XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)} +function xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)} +function uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))} +function bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))} +function bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))} +function Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))} +function S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))} +function S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))} +function p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))} +function vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))} +function mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))} +function Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))} +function cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))} +function _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c} +function hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false} +function ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false} +function Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false} +function Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)} +function Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a=0&&b=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a} +function sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()} +function idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)} +function Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)} +function Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)} +function u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))} +function VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a} +function Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b} +function bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)} +function zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)} +function avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}} +function Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b} +function Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)} +function ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)} +function xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}} +function t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b} +function ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))} +function NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))} +function iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))} +function Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c} +function ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false} +function Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e0){a.a/=b;a.b/=b}return a} +function bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}} +function gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}} +function qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])} +function Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)} +function Jmc(a){var b;for(b=0;b=14&&b<=16)));return a} +function dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()} +function ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))} +function n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))} +function K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))} +function Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))} +function Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))} +function qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))} +function tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))} +function Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))} +function wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))} +function ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))} +function Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))} +function Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])} +function vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))} +function wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))} +function hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))} +function ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))} +function cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))} +function dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))} +function eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))} +function omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))} +function imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))} +function pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))} +function qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))} +function AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))} +function DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))} +function _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))} +function izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)} +function Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null} +function ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c} +function LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a} +function ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e} +function My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a} +function n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c} +function KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)} +function bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)} +function rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)} +function ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)} +function JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}} +function $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a} +function Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a} +function Bt(a,b){var c,d;for(c=0,d=a.gc();c0){return BD(Ikb(c.a,d-1),10)}return null} +function Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))} +function kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))} +function lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))} +function Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))} +function zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))} +function PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))} +function jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))} +function Rdd(a,b){if(a.r>0&&a.c0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}} +function dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)} +function g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)} +function _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))} +function pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)} +function umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)} +function aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(cb){b<<=1;return b>0?b:Iie}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d} +function IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}} +function N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))} +function DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))} +function jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))} +function _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))} +function $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d>>31}d!=0&&(a[c]=d)} +function rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))} +function Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}} +function G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true} +function sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e} +function tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e} +function Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}} +function $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}} +function nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)} +function oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)} +function l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)} +function Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)} +function WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.af&&b.b1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}} +function kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)} +function Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)} +function Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)} +function ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b} +function btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}} +function Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false} +function kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()} +function Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true} +function Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a} +function yac(a,b){var c,d;for(d=new olb(a.b);d.a=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)} +function _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)} +function bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0} +function I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;dd)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)} +function xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a} +function yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a} +function TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c} +function j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c} +function Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f>=1);return b}} +function $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}} +function bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}} +function xVb(a){var b,c;for(c=new olb(a.a.b);c.ac&&(c=a[b])}return c} +function SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d} +function crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f} +function j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function Xb(a,b){var c;for(c=0;c1||b>=0&&a.b<3} +function w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b} +function qVb(a){var b,c;for(c=new olb(a.a.b);c.ad?1:0} +function NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}} +function d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}} +function syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)} +function mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))} +function Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e} +function Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1} +function UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}} +function nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c} +function JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false} +function oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false} +function Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false} +function Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false} +function Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb("The 'no null' constraint is violated"))}return b} +function $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)} +function XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a} +function b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}} +function c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}} +function Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)} +function pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)} +function pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)} +function Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)} +function nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)} +function Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)} +function tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)} +function Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c} +function o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)} +function r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d} +function $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null} +function Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))} +function Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)} +function le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}} +function C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(bb){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}} +function j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}} +function vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.iRqe?a-c>Rqe:c-a>Rqe} +function pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()} +function qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()} +function fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)} +function xC(a){rC();throw vbb(new MB("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''} +function F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)} +function ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)} +function xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)} +function LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))} +function VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b} +function DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}} +function yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()} +function VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)} +function wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.de){$Zc(b.q,e);d=c!=b.q.d}}return d} +function PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d} +function Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function j7c(a,b){var c;for(c=0;c=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)} +function BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f} +function Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false} +function JDc(a){var b,c;for(c=new olb(a.r);c.a=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function sAd(a){var b,c,d,e;if(a!=null){for(c=0;c0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))} +function $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))} +function gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a} +function u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b} +function qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a} +function Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c} +function _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c} +function vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d} +function RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c} +function o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d} +function kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()} +function vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a} +function __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;dc){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}} +function eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}} +function Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f=d||b=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a} +function OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c} +function BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))} +function eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))} +function fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))} +function N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)} +function meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)} +function Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)} +function L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false} +function i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null} +function l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null} +function cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false} +function vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)} +function iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null} +function $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+"' is not a valid attribute"))} +function V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;db){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)} +function Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}} +function vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}} +function ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))} +function dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))} +function eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))} +function fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))} +function jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)} +function jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null} +function k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null} +function n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)} +function a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c} +function rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}} +function Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb("Stream already terminated, can't be modified or used"))}} +function Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a} +function ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d} +function ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f} +function pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c} +function hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c} +function Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje>1;a.k=c-1>>1} +function Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke} +function O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b} +function aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)} +function Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e} +function EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)} +function LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e} +function efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))} +function Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)} +function Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)} +function zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)} +function Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)} +function tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)} +function Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b))} +function yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)} +function t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;fb&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}} +function did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}} +function xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}} +function iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)} +function Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)} +function MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)} +function fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)} +function _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)} +function OEd(a,b,c){var d,e;for(d=0,e=a.length;d=e){return b.c+c}}return b.c+b.b.gc()} +function NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b0&&this.b>0&&q$c(this.c,this.b,this.a)} +function ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))} +function I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}} +function Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false} +function Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}} +function Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)} +function gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}} +function b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb} +function hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b} +function bhb(a){var b,c,d;if(a>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false} +function s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}} +function Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c=0;--d){b=c[d];for(e=0;e>1;this.k=b-1>>1} +function r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)} +function NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function xud(a,b){var c;if(a.i>0){if(b.lengtha.i&&NC(b,a.i,null);return b} +function Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c} +function HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b} +function pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d} +function Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false} +function qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}} +function AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null} +function R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))} +function Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f} +function Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}} +function Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g} +function hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))} +function zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false} +function wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true} +function Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false} +function Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))>0} +function DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<0} +function CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<=0} +function ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;cWje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d} +function fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null} +function fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}} +function uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))} +function Igb(a,b){if(a.e>b.e){return 1}if(a.eb.d){return a.e}if(a.d=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c=f){hkb(a,b);return -1}else{ikb(a,b);return 1}} +function lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(db.e){return 1}else if(a.fb.f){return 1}return tb(a)-tb(b)} +function efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())} +function x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)} +function _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null} +function HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c} +function gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d0}else{return false}} +function q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}} +function ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}} +function OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}} +function TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}} +function tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)} +function xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))} +function b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))} +function dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)} +function _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}} +function HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a=e)return e;for(b=b>0?b:0;bd&&NC(b,d,null);return b} +function _lb(a,b){var c,d;d=a.a.length;b.lengthd&&NC(b,d,null);return b} +function Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}} +function P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid hexBinary value: '"+a+"'"))}return b} +function ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)} +function wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])} +function vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))} +function Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))} +function N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)} +function Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)} +function UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad} +function kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}} +function Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e} +function c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d} +function oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))} +function mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)} +function Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}} +function L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid base64Binary value: '"+a+"'"))}return b} +function Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb} +function NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}} +function ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}} +function JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}} +function S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}} +function zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)} +function Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't get element "+c))}else throw vbb(a)}} +function Tgb(a,b){this.e=a;if(b=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true} +function ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true} +function dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)} +function CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.ac.b){return true}}}return false} +function AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false} +function jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a} +function jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)} +function fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)} +function u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}} +function H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}} +function kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}} +function Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b=0)return e;if(a.Fk()){for(d=0;d=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)} +function gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}} +function mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)} +function LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b} +function qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)} +function X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a1&&(f=GFb(a,b));return f} +function dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f} +function emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i} +function zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b} +function uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}} +function m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null} +function wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a} +function Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)} +function Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)} +function XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}} +function HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false} +function FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}} +function kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)} +function iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}} +function V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e} +function IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.af&&NC(b,f,null);return b} +function Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b0?a.c:0);++e}a.b=d;a.d=f} +function BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a0?a.g:0);++c}a.c=e;a.d=d} +function AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}} +function e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}} +function udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)} +function ikc(a,b,c,d){var e,f;for(e=b;e0&&(e.b+=b);return e} +function GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d} +function DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b} +function P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))} +function C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))} +function Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}} +function bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)} +function Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true} +function Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true} +function Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0} +function Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}} +function End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d} +function tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c} +function UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.ac.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)} +function p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)} +function $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb} +function MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;eWje){return p6d(a,d)}if(d==a){return true}}}return false} +function HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}} +function LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}} +function XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}} +function V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}} +function v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r} +function yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))} +function cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a0?a.g:0);++c}b.b=d;b.e=e} +function to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}} +function cNb(a,b,c,d){var e,f,g,h;for(e=0;eg&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a} +function ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd} +function Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d} +function qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd} +function HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c} +function nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie} +function qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)} +function s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)} +function qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null} +function t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}} +function IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}} +function lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)} +function FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)} +function Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)} +function Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)} +function mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}} +function Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)} +function JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}} +function Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;aOqe){return c}else e>-1.0E-6&&++c}return c} +function PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))} +function E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}} +function Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}} +function eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false} +function h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c} +function Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b} +function mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f} +function U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))} +function Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)} +function jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)} +function KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a0&&ric(this,this.c-1,(Ucd(),zcd));this.c0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss} +function tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)} +function rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b} +function HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))} +function oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b} +function pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)} +function yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d} +function zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}} +function S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false} +function kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}} +function rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)} +function tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.ac;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<=a.f){break}f.c[f.c.length]=c}return f} +function sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;ef&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0} +function iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}} +function j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c} +function wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}} +function bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}} +function Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)} +function kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true} +function BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f=h} +function Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}} +function W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0} +function X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true} +function fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}} +function lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)} +function vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c} +function qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)} +function SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}} +function IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}} +function y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)} +function RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d} +function m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;cd&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])} +function omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}} +function oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;dwic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}} +function XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.ah&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g} +function t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false} +function ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)} +function bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}} +function wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}} +function pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f>22-b;e=a.h<>22-b}else if(b<44){c=0;d=a.l<>44-b}else{c=0;d=0;e=a.l<a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))} +function jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)} +function fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}} +function ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a0&&WGc(a,c,b);return e}return TGc(a,b,c)} +function MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}} +function JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+11&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function Q6c(a,b,c,d,e){if(dd&&(a.a=d);a.be&&(a.b=e);return a} +function lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}} +function mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g>>e|c[g+d+1]<>>e;++g}return f} +function zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)} +function Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)} +function ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a=c){K9b(a,b,d.p);return true}}return false} +function Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' "',b),a.a),'"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;gc){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))} +function Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e0&&iCc(a,f,c))}}b.p=0} +function p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}} +function aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c} +function ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g1&&(b.c[b.c.length]=f,true)}} +function TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}} +function _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)} +function H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++0){uu(this)}}this.b=b;this.a=null} +function rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)} +function FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d} +function OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d} +function cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.ac.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)} +function aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))} +function PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}} +function Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}} +function q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b} +function jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null} +function YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c} +function uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}} +function RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)} +function SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)} +function Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f=0?BD(qud(d,f),56):null} +function Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}} +function Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))} +function QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d} +function Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a=f){g.$b()}else{e=g.Kc();for(d=0;d0?zh():g<0&&Bw(a,b,-g);return true}else{return false}} +function fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0} +function gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a} +function zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}} +function LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e=0&&f=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a} +function v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}} +function rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))} +function fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e=0&&j>=0&&i=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb} +function BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}} +function _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h} +function ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)} +function sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}} +function u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}} +function KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)} +function qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}} +function oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}} +function NRd(a){var b,c;if(a.f){while(a.n=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e} +function m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))} +function AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)} +function IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}} +function Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)} +function olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0} +function swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))} +function Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;bg){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)} +function DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)} +function Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a} +function l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb("Couldn't create new instance of property '"+a.f+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)} +function aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f} +function nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e>16)),15).Xc(f);if(h0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)} +function XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)} +function Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d} +function gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)} +function Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c0&&(e=c);for(g=new olb(a.f.e);g.a0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))} +function PIc(a,b){if(a.cb.c){return 1}else if(a.bb.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0} +function aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e0}else if(e<0&&-e0}return false} +function RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a>24}return g} +function vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]} +function qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h0&&++k}}++j}return k} +function Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a} +function TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a>24}return c} +function lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e} +function r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g=0){return e}else{f=1;for(h=new olb(b.j);h.a0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb} +function n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}} +function htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g} +function Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<=2147483648&&(d-=Zje);return d}} +function Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}} +function l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\w+'),e=0,f=d.length;ea.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i} +function lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc} +function Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i0&&JPb(this,e)}} +function IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null} +function e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a=2} +function gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true} +function U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null} +function ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}} +function mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}} +function Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e} +function r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f1||c>1){return 2}}if(b+c==1){return 2}return 0} +function WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)} +function yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c} +function AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}} +function UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j} +function O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}} +function _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1} +function qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a1){for(e=new olb(a.a);e.a0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b3&&EA(a,0,b-3)}} +function cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)} +function lkc(a){var b,c;c=0;for(;c0){break}}if(c>0&&c0){break}}if(b>0&&c>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))} +function npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))} +function Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null} +function wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b} +function IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d} +function vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}} +function jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}} +function jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(ed.b.g&&(f.c[f.c.length]=d,true)}}return f} +function k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)} +function Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}} +function $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))} +function uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}} +function G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.af.a){return -1}else if(e.ai){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f} +function rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))} +function W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])} +function Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)} +function esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l} +function ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))} +function NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)} +function aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g} +function o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}} +function rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)} +function Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c} +function Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;fj){i=c;k=e;j=d}}b.a=k;b.c=i} +function sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} +function AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a} +function HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;hi-a.b&&hi-a.a&&h0&&++n}}}++m}return n} +function hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)} +function S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}} +function Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}} +function Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))} +function q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}} +function FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}} +function Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} +function vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)} +function Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}} +function aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c0&&a.a[c]<<32-b!=0){for(c=0;c=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}} +function R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)} +function bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)} +function Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}} +function inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k1){Xxd(e,e.i-1)}}return d}} +function Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.aa.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f} +function Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}} +function UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.ah.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)} +function gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e} +function fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;dvre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e} +function Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)} +function hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje} +function BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c0){a.qj();if(b!=null){for(f=0;f>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}} +function AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)} +function rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)} +function roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e} +function VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)} +function hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}} +function Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))} +function a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c} +function wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb} +function ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a0&&b=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;ea.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false} +function iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:ef?1:Ny(isNaN(e),isNaN(f))} +function YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}} +function N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e} +function QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(ee.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h0){e=i.length;while(e>0&&i[e-1]==''){--e}e=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}} +function _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a=0&&ic?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)} +function Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a=0){h=bD(a,g);if(h){j<22?(i.l|=1<>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i} +function TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;dc){throw vbb(new Oeb(Oje+a+'"'))}return h} +function dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)} +function pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}} +function B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))} +function tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d} +function LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;bm){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n} +function kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)} +function DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f1){for(d=new olb(e);d.ac.s&&hh){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}} +function MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.ah){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}} +function Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))} +function W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.ai+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}} +function FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}} +function xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.fb.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}} +function Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)} +function Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}} +function pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b} +function _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.bf*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l} +function qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e0){for(g=0;g>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c} +function f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.ac);return e} +function XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e} +function uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}} +function _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47} +function FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)} +function mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.af){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}} +function gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)} +function WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a0);d.a.Xb(d.c=--d.b)}}}} +function Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe} +function S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb("Layout algorithm '"),b),"' not found for ");yfd(a,c);throw vbb(new y2c(c.a))}}} +function hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h} +function ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.aEdb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} +function odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a>>0,'0'+b.toString(16));d='\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d} +function yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j} +function YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false} +function Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}} +function YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)} +function MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;ee&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n} +function y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}} +function E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c} +function Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e} +function X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.aj&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e} +function XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)} +function q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)} +function qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)} +function pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]} +function SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f} +function rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;ib[m]&&md[i]&&aNb(a,i,m,false,true)}}} +function lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))} +function Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a} +function v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}} +function OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.ab.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.ab){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l} +function OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a} +function vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l} +function C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;ha.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)} +function $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,"Array types don't match");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&bd;){NC(f,h,k[--b])}}else{for(h=d+e;d0&&$Bb(a,b,c,d,e,true)} +function phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} +function soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' "',b),e),'"')}}else{Qfb(Qfb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a} +function TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;kk){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g} +function TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)} +function Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.aa.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j} +function oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j} +function V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n=a.b[e+1]){e+=2}else if(c0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.bv)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a} +function rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g} +function npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null} +function JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.dg.c&&f.c0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)} +function o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;da.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)} +function vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)} +function nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;rq.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(fh[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p} +function Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a0&&iCc(a,h,l)}for(e=new olb(l);e.a>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)} +function F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.cb.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}} +function XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;cOqe){f=b;g=0;while($wnd.Math.abs(b-f)0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))} +function AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.ag)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}} +function o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}} +function JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h} +function jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c} +function Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e} +function sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)} +function BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))} +function iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}} +function nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+11){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(iQie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)} +function sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}} +function Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.aa.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.aa.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)} +function fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)} +function xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))} +function sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.ah} +function k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}} +function Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb("Invalid value: '"+d+"' for datatype :"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)} +function zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f=97&&d<=122||d>=65&&d<=90){for(g=f+1;g=j){throw vbb(new Wdb("Missing trailing '"))}g+10&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.aJkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} +function wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}} +function wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a-1){for(f=new olb(h);f.a0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}} +function QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c} +function O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))} +function zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)} +function lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}} +function y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a=0){i=null;h=new Bib(k.a,j+1);while(h.bg?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f} +function z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p=0&&p=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.ad.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.aQje||b.o==cMc&&k0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}} +function _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}} +function $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))} +function LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)} +function Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)} +function Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'"'))}for(e=0;e0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'"'))}}return l} +function Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g=0&&g0&&(BD(Mpb(a.b,b),124).a.b=c)} +function b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)} +function f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)} +function mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true} +function z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} +function Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))} +function fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.ah?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return eh?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1} +function acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.bb.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}} +function QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;ee+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(gw&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}} +function rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a} +function iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)} +function Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;hB[i]&&(q=i);for(l=new olb(a.a.b);l.an){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(Fqme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)} +function KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.ah){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)} +function bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.aA.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.aj&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)} +function aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}} +function fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a0||c.o==dMc&&e0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(gg?Anc(a,b,c):Anc(a,c,b);return eg?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return df?1:0} +function u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k} +function AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j=c} +function ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)} +function f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.aj&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l} +function fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.ap){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.ae){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o="An edge must have a source node (edge id: '"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s="An edge must have a target node (edge id: '"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.ae.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.bf.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} +function WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)} +function lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.aD.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}} +function qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d=48&&b<=57){d=b-48;while(e=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f} +function $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):Hw+p?(r=w+p):Iv-u&&qw-p&&rH+G?(B=H+G):vI+A?(C=I+A):wH-G&&BI-A&&Cc&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}} +function Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc} +function shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k} +function $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a0?G+1:1}for(g=new olb(w.g);g.a0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;ja.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)} +function sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c} +function aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d} +function P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h} +function xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))} +function fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.al){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.aSLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true} +function X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p} +function yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)} +function Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true} +function wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')} +function jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc} +function S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)} +function KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;Jj.b&&(j.b=Z)}else if(U.i.c==bb){Zj.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u'?":dfb(wue,a)?"'(?<' or '(? toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{"\' \t\r\n',nne=')]}"\' \t\r\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne="Node '",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse="Couldn't clone property '",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite="The feature '",jte="' is not a valid changeable feature",kte='Expecting null',lte="' is not a valid feature",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte="The datatype '",ute="' is not a valid classifier",vte="The value '",wte={190:1,3:1,4:1},xte="The class '",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte="An edge must have at least one source and one target (edge id: '",$te="').",_te='Referenced edge section does not exist: ',aue=" (edge id: '",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue="Passed edge is not 'simple'.",jue='org.eclipse.elk.graph.util',kue="The 'no duplicates' constraint is violated",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve="The value of type '",Zve="' must be of type '",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\i\\c*',Zwe='[\\i-[:]][\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',txe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',uxe='Private Use',vxe='ASSIGNED',wxe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.lengthb&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.ad.d.c||d.d.c==f.d.c&&d.d.b0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.an){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a');a0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;gc)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;cc)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.lengthd&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.lengthh&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;ah&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+"'"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return ac*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\d';else if(this==sfe)c='\\w';else if(this==nfe)c='\\s';else{d=new Hfb;d.a+='[';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\D';else if(this==lfe)c='\\W';else if(this==kfe)c='\\S';else{d=new Hfb;d.a+='[^';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+HD(this.a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * 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. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 19487: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(87115); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(43349); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(91518); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(28734); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11__); + + + + + + + + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new (elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default())(); +const portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + const labelData = { width: 0, height: 0 }; + if ((0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.e)((0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)().flowchart.htmlLabels)) { + const node2 = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_13__/* .addHtmlLabel */ .a)(svg, node2).node(); + const bbox = vertexNode.getBBox(); + labelData.width = bbox.width; + labelData.height = bbox.height; + labelData.labelNode = vertexNode; + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles2.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.c.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + const bbox = vertexNode.getBBox(); + labelData.width = bbox.width; + labelData.height = bbox.height; + labelData.labelNode = vertexNode; + } + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles2.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.b)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + // labelStyle: styles.labelStyle, + // shape: _shape, + layoutOptions, + labelText: vertexText, + labelData, + // labels: [{ text: vertexText }], + // rx: radius, + // ry: radius, + // class: classStr, + // style: styles.style, + // link: vertex.link, + // linkTarget: vertex.linkTarget, + // tooltip: diagObj.db.getTooltip(vertex.id) || '', + domId: diagObj.db.lookUpDomId(vertex.id), + // haveCallback: vertex.haveCallback, + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + // dir: vertex.dir, + type: vertex.type, + // props: vertex.props, + // padding: getConfig().flowchart.padding, + // boundingBox, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + TB: { + in: { + north: "north" + }, + out: { + south: "west", + west: "east", + east: "south" + } + }, + LR: { + in: { + west: "west" + }, + out: { + east: "south", + south: "north", + north: "east" + } + }, + RL: { + in: { + east: "east" + }, + out: { + west: "north", + north: "south", + south: "west" + } + }, + BT: { + in: { + south: "south" + }, + out: { + north: "east", + east: "west", + west: "north" + } + } + }; + portPos2.TD = portPos2.TB; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc88", graphDirection, edgeDirection, position); + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + var linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.c.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + const labelEl = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.f)(labelsEl, edgeData); + const { source, target } = getEdgeStartEndPoint(edge, dir); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (edgeData.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edgeData.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } +}; +const getClasses = function(text, diagObj) { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Extracting classes"); + diagObj.db.clear("ver-2"); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + return {}; + } +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) { + const offset = calcOffset(edge.sources[0], edge.targets[0], parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path").attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + diagObj.db.clear(); + nodeDb = {}; + diagObj.db.setGen("gen-2"); + diagObj.parser.parse(text); + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + id: "root", + layoutOptions: { + "elk.hierarchyHandling": "INCLUDE_CHILDREN", + "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", + "elk.layered.spacing.edgeNodeBetweenLayers": "30", + // 'elk.layered.mergeEdges': 'true', + "elk.direction": "DOWN" + // 'elk.ports.sameLayerEdges': true, + // 'nodePlacement.strategy': 'SIMPLE', + }, + children: [], + edges: [] + }; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.i)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes, subG.dir); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb); + }); + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.s)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x}, ${node.labels[0].y + relY + node.y})` + ); + label.node().appendChild(node.labelData.labelNode); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.h, + renderer, + parser: _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.p, + styles +}; + +//# sourceMappingURL=flowchart-elk-definition-170a3958.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/4c4e9f30.f247e2b4.js b/assets/js/4c4e9f30.f247e2b4.js new file mode 100644 index 0000000..8e42c9d --- /dev/null +++ b/assets/js/4c4e9f30.f247e2b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7883],{7803:i=>{i.exports=JSON.parse('{"label":"exponential","permalink":"/ib002/tags/exponential","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4e286f4e.b0df1295.js b/assets/js/4e286f4e.b0df1295.js new file mode 100644 index 0000000..dc7a032 --- /dev/null +++ b/assets/js/4e286f4e.b0df1295.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1501],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=r,h=m["".concat(p,".").concat(d)]||m[d]||c[d]||o;return n?a.createElement(h,i(i({ref:t},u),{},{components:n})):a.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={id:"karel-1",title:"Recursion and backtracking with Robot Karel",description:"A problem with too many restrictions.\n",tags:["python","karel","recursion","backtracking"],last_update:{date:new Date("2022-11-29T00:00:00.000Z")}},i=void 0,l={unversionedId:"recursion/karel-1",id:"recursion/karel-1",title:"Recursion and backtracking with Robot Karel",description:"A problem with too many restrictions.\n",source:"@site/ib002/04-recursion/2022-11-29-karel-1.md",sourceDirName:"04-recursion",slug:"/recursion/karel-1",permalink:"/ib002/recursion/karel-1",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/04-recursion/2022-11-29-karel-1.md",tags:[{label:"python",permalink:"/ib002/tags/python"},{label:"karel",permalink:"/ib002/tags/karel"},{label:"recursion",permalink:"/ib002/tags/recursion"},{label:"backtracking",permalink:"/ib002/tags/backtracking"}],version:"current",lastUpdatedAt:166968e4,formattedLastUpdatedAt:"Nov 29, 2022",frontMatter:{id:"karel-1",title:"Recursion and backtracking with Robot Karel",description:"A problem with too many restrictions.\n",tags:["python","karel","recursion","backtracking"],last_update:{date:"2022-11-29T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Recursion",permalink:"/ib002/category/recursion"},next:{title:"Introduction to dynamic programming",permalink:"/ib002/recursion/pyramid-slide-down"}},p={},s=[{value:"Introduction",id:"introduction",level:2},{value:"Your environment and problem description",id:"your-environment-and-problem-description",level:2},{value:"Environment",id:"environment",level:3},{value:"Interface",id:"interface",level:3},{value:"Problem",id:"problem",level:3},{value:"Simple problem to get familiar with the robot",id:"simple-problem-to-get-familiar-with-the-robot",level:2},{value:"Brainstorm the idea",id:"brainstorm-the-idea",level:2},{value:"\xbbRough\xab pseudocode",id:"rough-pseudocode",level:2},{value:"\xbbProper\xab pseudocode",id:"proper-pseudocode",level:2},{value:"Library",id:"library",level:2},{value:"Solution",id:"solution",level:2}],u={toc:s},m="wrapper";function c(e){let{components:t,...o}=e;return(0,r.kt)(m,(0,a.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"pathname:///files/ib002/recursion/karel-1.tar.gz"},"Sources"))),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"In this exercise we will be working with a Robot Karel and with a \xbbvery\xab limited\nresources. The point of this exercise is to show how powerful recursion and\nbacktracking can be even without anything else at your hand."),(0,r.kt)("h2",{id:"your-environment-and-problem-description"},"Your environment and problem description"),(0,r.kt)("h3",{id:"environment"},"Environment"),(0,r.kt)("p",null,"You are given a robot that is present in a maze and is looking for an exit. Maze\nconsists of different walls and exit is marked with a single so-called \u201cbeeper\u201d."),(0,r.kt)("p",null,"Walking into a wall results in a permanent damage of the robot."),(0,r.kt)("h3",{id:"interface"},"Interface"),(0,r.kt)("p",null,"You can control the robot using the following interface:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"actions \u200b\xad\u2014 you can use them to change the current state of the robot and its\nsurroundings",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"robot.step()")," \u2014 moves robot one step further"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"robot.turn_left()")," \u2014 turns robot 90-degrees counter-clockwise",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"notice that you are not given ",(0,r.kt)("inlineCode",{parentName:"li"},"turn_right")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"turn_around"),", but feel free\nto implement them yourself"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"robot.pick_beeper()")," and opposite operation ",(0,r.kt)("inlineCode",{parentName:"li"},"robot.put_beeper()")," \u2014 that\nallows you to either pick or put \u201cbeeper\u201d from or onto the current position"))),(0,r.kt)("li",{parentName:"ul"},"queries \u2014 you can use them to check the current state of the robot and its\nsurroundings",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"robot.beepers_present()")," \u2014 to check if there are any beepers at the robot's\ncurrent location"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"robot.left_is_clear()")," \u2014 to check if you can step to the left",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"analogically for ",(0,r.kt)("inlineCode",{parentName:"li"},"front")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"right"))))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Helper functions / procedures are allowed. Return values are allowed."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"Variables are prohibited!"))),(0,r.kt)("h3",{id:"problem"},"Problem"),(0,r.kt)("p",null,"Your task is to decide whether there is an exit from the maze or not. You can see\nan example of a maze here:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Image of the maze",src:n(9857).Z,width:"770",height:"839"})),(0,r.kt)("h2",{id:"simple-problem-to-get-familiar-with-the-robot"},"Simple problem to get familiar with the robot"),(0,r.kt)("p",null,"If you feel completely lost after the previous description, let me start you off\nwith a simpler problem."),(0,r.kt)("p",null,"You are standing in front of the stairs, your task is to walk up the stairs."),(0,r.kt)("p",null,"You can see an example of such map here:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Image of the stairs",src:n(8617).Z,width:"1058",height:"1161"})),(0,r.kt)("h2",{id:"brainstorm-the-idea"},"Brainstorm the idea"),(0,r.kt)("p",null,"As a first step write down any ideas and things that you have noticed or came to\nyour mind. Ideally:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Write down a nested list of the problems, e.g."),(0,r.kt)("admonition",{parentName:"li",title:"Example ",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Problem: I want to find out whether the display on smartphone should rotate."),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Check if display has been rotated",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Read data from some sensor",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"From what sensor"))),(0,r.kt)("li",{parentName:"ul"},"In what format are the data I have read?"),(0,r.kt)("li",{parentName:"ul"},"How do I communicate with the sensor?"),(0,r.kt)("li",{parentName:"ul"},"What is the meaning of the data that I got?"),(0,r.kt)("li",{parentName:"ul"},"How can I process it?")))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Write down list of problems that can happen, e.g."),(0,r.kt)("admonition",{parentName:"li",title:"Example continued",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Following the same problem."),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"What if the sensor doesn't work?"),(0,r.kt)("li",{parentName:"ul"},"What if the data doesn't conform to the specification?"),(0,r.kt)("li",{parentName:"ul"},"What if my formulas are wrong?")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Write down ",(0,r.kt)("strong",{parentName:"p"},"anything")," you consider important to solving the problem, e.g."),(0,r.kt)("admonition",{parentName:"li",title:"Example continued once again",type:"info"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"I could probably use gyroscope."),(0,r.kt)("li",{parentName:"ul"},"I should probably look up the datasheet for that module."),(0,r.kt)("li",{parentName:"ul"},"I could write some tests to verify that my computations are correct."))))),(0,r.kt)("h2",{id:"rough-pseudocode"},"\xbbRough\xab pseudocode"),(0,r.kt)("p",null,"As a next step write a ",(0,r.kt)("strong",{parentName:"p"},"mock up")," of a pseudocode solving the problem, you are\nallowed to use comments as placeholders for bigger chunks of code."),(0,r.kt)("p",null,"Those comments are also a very good hints for decomposition and short, but\ndescriptive, commnets (if they are short enough and you decide not to factor them\nout to separate functions)."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"The smaller the function is, the easier it is to test it and argue about its\ncorrectness.")),(0,r.kt)("h2",{id:"proper-pseudocode"},"\xbbProper\xab pseudocode"),(0,r.kt)("p",null,"If you are satisfied with the ",(0,r.kt)("em",{parentName:"p"},"\xbbrough\xab pseudocode"),", it's time to convert it into\na proper one. Get rid of the uncertain pieces of functionality and replace them\nwith proper pseudocode, i.e. list of the things that should happen in its place."),(0,r.kt)("h2",{id:"library"},"Library"),(0,r.kt)("p",null,"If you got here, and you ",(0,r.kt)("strong",{parentName:"p"},"actually")," wrote down the pseudocode, you can try your\nsolution after downloading the sources linked at the beginning. If you download\nthe ZIP-file, you can there:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"generate_mazes.py")," - that was used to generate the same maze with beepers in\ndifferent locations")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"karel_tk.py")," - library which can run Karel given the his world"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"documentation can be found ",(0,r.kt)("a",{parentName:"li",href:"https://www.fi.muni.cz/~xfocko/ib111/10/docs/"},"here")),(0,r.kt)("li",{parentName:"ul"},"also requires Tk Python library to be installed (it should be included in\nmajority of Python installations)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"*.kw")," - which represent multiple worlds for Karel I have prepared")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"skeleton.py")," - skeleton for your solution, needs to be put in the same directory\nas ",(0,r.kt)("inlineCode",{parentName:"p"},"karel_tk.py")," and takes path to the world as a first argument, example usage:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"$ python3 skeleton.py stairs.kw\n")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"of course, this file can be renamed ;)")))),(0,r.kt)("h2",{id:"solution"},"Solution"),(0,r.kt)("p",null,"Solution to this problem will be released as a second part, so that you can try\nit out by yourself without any influence of \u201cexample solution\u201d."),(0,r.kt)("p",null,"If you want to get any feedback, feel free to mail me your solution (including\nall the steps that lead to your final solution, if you wish to get feedback on\nthose too)."))}c.isMDXComponent=!0},9857:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/maze-a374d908bc9445061e15faeddc71641e.png"},8617:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/stairs-5ee5d03905645aeb13eeaa7774451a64.png"}}]); \ No newline at end of file diff --git a/assets/js/4edd2021.47ff14e6.js b/assets/js/4edd2021.47ff14e6.js new file mode 100644 index 0000000..9d0f2e9 --- /dev/null +++ b/assets/js/4edd2021.47ff14e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5975],{1705:a=>{a.exports=JSON.parse('{"label":"cpp","permalink":"/blog/tags/cpp","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4ee12fa2.74d68d7b.js b/assets/js/4ee12fa2.74d68d7b.js new file mode 100644 index 0000000..f0db623 --- /dev/null +++ b/assets/js/4ee12fa2.74d68d7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7963],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),s=l(r),d=o,m=s["".concat(p,".").concat(d)]||s[d]||f[d]||i;return r?n.createElement(m,a(a({ref:t},u),{},{components:r})):n.createElement(m,a({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[s]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={id:"pb161-intro",title:"Introduction",slug:"/"},a=void 0,c={unversionedId:"pb161-intro",id:"pb161-intro",title:"Introduction",description:"",source:"@site/pb161/00-intro-pb161.md",sourceDirName:".",slug:"/",permalink:"/pb161/",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb161/00-intro-pb161.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",sidebarPosition:0,frontMatter:{id:"pb161-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Environment",permalink:"/pb161/environment"}},p={},l=[],u={toc:l},s="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/51624505.ab30cae6.js b/assets/js/51624505.ab30cae6.js new file mode 100644 index 0000000..f2d9206 --- /dev/null +++ b/assets/js/51624505.ab30cae6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3731],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},u),{},{components:n})):a.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const o={title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45",slug:"aoc-2022/intro",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,s={permalink:"/blog/aoc-2022/intro",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/00-intro.md",source:"@site/blog/aoc-2022/00-intro.md",title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45:00.000Z",formattedDate:"December 14, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:8.665,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45",slug:"aoc-2022/intro",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"1st week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/1st-week"}},l={authorsImageUrls:[void 0]},p=[{value:"Choosing a language",id:"choosing-a-language",level:2},{value:"Choosing libraries",id:"choosing-libraries",level:2},{value:"Preparations for Rust",id:"preparations-for-rust",level:2},{value:"Toolkit",id:"toolkit",level:3},{value:"Libraries",id:"libraries",level:3},{value:"My own \u201clibrary\u201d",id:"my-own-library",level:3},{value:"Skeleton",id:"skeleton",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Let's talk about the preparations for this year's ",(0,r.kt)("a",{parentName:"p",href:"https://adventofcode.com"},(0,r.kt)("em",{parentName:"a"},"Advent of Code")),"."),(0,r.kt)("h2",{id:"choosing-a-language"},"Choosing a language"),(0,r.kt)("p",null,"When choosing a language for AoC, you usually want a language that gives you a\nquick feedback which allows you to iterate quickly to the solution of the puzzle.\nOne of the most common choices is Python, many people also use JavaScript or Ruby."),(0,r.kt)("p",null,"Given the competitive nature of the AoC and popularity among competitive programming,\nC++ might be also a very good choice. Only if you are familiar with it, I guess\u2026"),(0,r.kt)("p",null,"If you want a challenge, you might also choose to rotate the languages each day.\nThough I prefer to use only one language."),(0,r.kt)("p",null,"For this year I have been deciding between ",(0,r.kt)("em",{parentName:"p"},"Rust"),", ",(0,r.kt)("em",{parentName:"p"},"C++")," and ",(0,r.kt)("em",{parentName:"p"},"Pascal")," or ",(0,r.kt)("em",{parentName:"p"},"Ada"),"."),(0,r.kt)("p",null,"I have tried Rust last year and have survived with it for 3 days and then gave\nup and switched to ",(0,r.kt)("em",{parentName:"p"},"Kotlin"),", which was pretty good given it is \u201cJava undercover\u201d.\nI pretty much like the ideas behind Rust, I am not sure about the whole cult and\nimplementation of those ideas though. After some years with C/C++, I would say\nthat Rust feels ",(0,r.kt)("em",{parentName:"p"},"too safe")," for my taste and tries to \u201c",(0,r.kt)("em",{parentName:"p"},"punish me"),"\u201d even for the\nmost trivial things."),(0,r.kt)("p",null,"C++ is a very robust, but also comes with a wide variety of options providing you\nthe ability to shoot yourself in the leg. I have tried to solve few days of previous\nAdvent of Code events, it was ",(0,r.kt)("em",{parentName:"p"},"relatively easy")," to solve the problems in C++, given\nthat I do not admit writing my own iterator for ",(0,r.kt)("inlineCode",{parentName:"p"},"enumerate"),"\u2026"),(0,r.kt)("p",null,"Pascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a\npretty nice standard library that offers enough to be able to quickly solve some\nproblems in it. However the toolkit is questionable :/"),(0,r.kt)("h2",{id:"choosing-libraries"},"Choosing libraries"),(0,r.kt)("h2",{id:"preparations-for-rust"},"Preparations for Rust"),(0,r.kt)("p",null,"All of the sources, later on including solutions, can be found at my\n",(0,r.kt)("a",{parentName:"p",href:"https://gitlab.com/mfocko/advent-of-code-2022"},"GitLab"),"."),(0,r.kt)("h3",{id:"toolkit"},"Toolkit"),(0,r.kt)("p",null,"Since we are using Rust, we are going to use a ",(0,r.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/cargo/"},"Cargo")," and more than likely VSCode\nwith ",(0,r.kt)("a",{parentName:"p",href:"https://rust-analyzer.github.io/"},(0,r.kt)("inlineCode",{parentName:"a"},"rust-analyzer")),". Because of my choice of libraries, we will also introduce\na ",(0,r.kt)("inlineCode",{parentName:"p"},".envrc")," file that can be used by ",(0,r.kt)("a",{parentName:"p",href:"https://direnv.net/"},(0,r.kt)("inlineCode",{parentName:"a"},"direnv")),", which allows you to set specific\nenvironment variables when you enter a directory. In our case, we will use"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# to show nice backtrace when using the color-eyre\nexport RUST_BACKTRACE=1\n\n# to catch logs generated by tracing\nexport RUST_LOG=trace\n")),(0,r.kt)("p",null,"And for the one of the most obnoxious things ever, we will use a script to download\nthe inputs instead of \u201c",(0,r.kt)("em",{parentName:"p"},"clicking, opening and copying to a file"),"\u201d",(0,r.kt)("sup",{parentName:"p",id:"fnref-1-793a30"},(0,r.kt)("a",{parentName:"sup",href:"#fn-1-793a30",className:"footnote-ref"},"1")),". There is\nno need to be ",(0,r.kt)("em",{parentName:"p"},"fancy"),", so we will adjust Python script by Martin",(0,r.kt)("sup",{parentName:"p",id:"fnref-2-793a30"},(0,r.kt)("a",{parentName:"sup",href:"#fn-2-793a30",className:"footnote-ref"},"2")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-py"},'#!/usr/bin/env python3\n\nimport datetime\nimport yaml\nimport requests\nimport sys\n\n\ndef load_config():\n with open("env.yaml", "r") as f:\n js = yaml.load(f, Loader=yaml.Loader)\n return js["session"], js["year"]\n\n\ndef get_input(session, year, day):\n return requests.get(\n f"https://adventofcode.com/{year}/day/{day}/input",\n cookies={"session": session},\n headers={\n "User-Agent": "{repo} by {mail}".format(\n repo="gitlab.com/mfocko/advent-of-code-2022",\n mail="me@mfocko.xyz",\n )\n },\n ).content.decode("utf-8")\n\n\ndef main():\n day = datetime.datetime.now().day\n if len(sys.argv) == 2:\n day = sys.argv[1]\n\n session, year = load_config()\n problem_input = get_input(session, year, day)\n\n with open(f"./inputs/day{day:>02}.txt", "w") as f:\n f.write(problem_input)\n\n\nif __name__ == "__main__":\n main()\n')),(0,r.kt)("p",null,"If the script is called without any arguments, it will deduce the day from the\nsystem, so we do not need to change the day every morning. It also requires a\nconfiguration file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"# env.yaml\nsession: \u2039your session cookie\u203a\nyear: 2022\n")),(0,r.kt)("h3",{id:"libraries"},"Libraries"),(0,r.kt)("p",null,"Looking at the list of the libraries, I have chosen \u201ca lot\u201d of them. Let's walk\nthrough each of them."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/tracing"},(0,r.kt)("inlineCode",{parentName:"a"},"tracing"))," and ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/tracing-subscriber"},(0,r.kt)("inlineCode",{parentName:"a"},"tracing-subscriber"))," are the crates that can be used for tracing\nand logging of your Rust programs, there are also other crates that can help you\nwith providing backtrace to the Sentry in case you have deployed your application\nsomewhere and you want to watch over it. In our use case we will just utilize the\nmacros for debugging in the terminal."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/thiserror"},(0,r.kt)("inlineCode",{parentName:"a"},"thiserror")),", ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/anyhow"},(0,r.kt)("inlineCode",{parentName:"a"},"anyhow"))," and ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/color-eyre"},(0,r.kt)("inlineCode",{parentName:"a"},"color-eyre"))," are used for error reporting.\n",(0,r.kt)("inlineCode",{parentName:"p"},"thiserror")," is a very good choice for libraries, cause it extends the ",(0,r.kt)("inlineCode",{parentName:"p"},"Error"),"\nfrom the ",(0,r.kt)("inlineCode",{parentName:"p"},"std")," and allows you to create more convenient error types. Next is\n",(0,r.kt)("inlineCode",{parentName:"p"},"anyhow")," which kinda builds on top of the ",(0,r.kt)("inlineCode",{parentName:"p"},"thiserror")," and provides you with simpler\nerror handling in binaries",(0,r.kt)("sup",{parentName:"p",id:"fnref-3-793a30"},(0,r.kt)("a",{parentName:"sup",href:"#fn-3-793a30",className:"footnote-ref"},"3")),". And finally we have ",(0,r.kt)("inlineCode",{parentName:"p"},"color-eyre")," which, as I found\nout later, is a colorful (",(0,r.kt)("em",{parentName:"p"},"wink wink"),") extension of ",(0,r.kt)("inlineCode",{parentName:"p"},"eyre")," which is fork of ",(0,r.kt)("inlineCode",{parentName:"p"},"anyhow"),"\nwhile supporting customized reports."),(0,r.kt)("p",null,"In the end I have decided to remove ",(0,r.kt)("inlineCode",{parentName:"p"},"thiserror")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"anyhow"),", since first one is\nsuitable for libraries and the latter was basically fully replaced by ",(0,r.kt)("inlineCode",{parentName:"p"},"{color-,}eyre"),"."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/regex"},(0,r.kt)("inlineCode",{parentName:"a"},"regex"))," and ",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/lazy_static"},(0,r.kt)("inlineCode",{parentName:"a"},"lazy_static"))," are a very good and also, I hope, self-explanatory\ncombination. ",(0,r.kt)("inlineCode",{parentName:"p"},"lazy_static")," allows you to have static variables that must be initialized\nduring runtime."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/itertools"},(0,r.kt)("inlineCode",{parentName:"a"},"itertools"))," provides some nice extensions to the iterators from the ",(0,r.kt)("inlineCode",{parentName:"p"},"std"),"."),(0,r.kt)("h3",{id:"my-own-library"},"My own \u201clibrary\u201d"),(0,r.kt)("p",null,"When creating the crate for this year's Advent of Code, I have chosen a library\ntype. Even though standard library is huge, some things might not be included and\nalso we can follow ",(0,r.kt)("em",{parentName:"p"},"KISS"),". I have 2 modules that my \u201clibrary\u201d exports, one for\nparsing and one for 2D vector (that gets used quite often during Advent of Code)."),(0,r.kt)("p",null,"Key part is, of course, processing the input and my library exports following\nfunctions that get used a lot:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"/// Reads file to the string.\npub fn file_to_string>(pathname: P) -> String;\n\n/// Reads file and returns it as a vector of characters.\npub fn file_to_chars>(pathname: P) -> Vec;\n\n/// Reads file and returns a vector of parsed structures. Expects each structure\n/// on its own line in the file. And `T` needs to implement `FromStr` trait.\npub fn file_to_structs, T: FromStr>(pathname: P) -> Vec\nwhere\n ::Err: Debug;\n\n/// Converts iterator over strings to a vector of parsed structures. `T` needs\n/// to implement `FromStr` trait and its error must derive `Debug` trait.\npub fn strings_to_structs(\n iter: impl Iterator\n) -> Vec\nwhere\n ::Err: std::fmt::Debug,\n U: Deref;\n\n/// Reads file and returns it as a vector of its lines.\npub fn file_to_lines>(pathname: P) -> Vec;\n")),(0,r.kt)("p",null,"As for the vector, I went with a rather simple implementation that allows only\naddition of the vectors for now and accessing the elements via functions ",(0,r.kt)("inlineCode",{parentName:"p"},"x()"),"\nand ",(0,r.kt)("inlineCode",{parentName:"p"},"y()"),". Also the vector is generic, so we can use it with any numeric type we\nneed."),(0,r.kt)("h3",{id:"skeleton"},"Skeleton"),(0,r.kt)("p",null,"We can also prepare a template to quickly bootstrap each of the days. We know\nthat each puzzle has 2 parts, which means that we can start with 2 functions that\nwill solve them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"fn part1(input: &Input) -> Output {\n todo!()\n}\n\nfn part2(input: &Input) -> Output {\n todo!()\n}\n")),(0,r.kt)("p",null,"Both functions take reference to the input and return some output (in majority\nof puzzles, it is the same type). ",(0,r.kt)("inlineCode",{parentName:"p"},"todo!()")," can be used as a nice placeholder,\nit also causes a panic when reached and we could also provide some string with\nan explanation, e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},'todo!("part 1")'),". We have not given functions a specific\ntype and to avoid as much copy-paste as possible, we will introduce type aliases."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"type Input = String;\ntype Output = i32;\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"This allows us to quickly adjust the types only in one place without the need to\ndo ",(0,r.kt)("em",{parentName:"p"},"regex-replace")," or replace them manually.")),(0,r.kt)("p",null,"For each day we get a personalized input that is provided as a text file. Almost\nall the time, we would like to get some structured type out of that input, and\ntherefore it makes sense to introduce a new function that will provide the parsing\nof the input."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},"fn parse_input(path: &str) -> Input {\n todo!()\n}\n")),(0,r.kt)("p",null,"This \u201cparser\u201d will take a path to the file, just in case we would like to run the\nsample instead of input."),(0,r.kt)("p",null,"OK, so now we can write a ",(0,r.kt)("inlineCode",{parentName:"p"},"main")," function that will take all of the pieces and\nrun them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'fn main() {\n let input = parse_input("inputs/dayXX.txt");\n\n println!("Part 1: {}", part_1(&input));\n println!("Part 2: {}", part_2(&input));\n}\n')),(0,r.kt)("p",null,"This would definitely do :) But we have installed a few libraries and we want to\nuse them. In this part we are going to utilize ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://crates.io/crates/tracing"},(0,r.kt)("inlineCode",{parentName:"a"},"tracing")))," (for tracing, duh\u2026)\nand ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://crates.io/crates/color-eyre"},(0,r.kt)("inlineCode",{parentName:"a"},"color-eyre")))," (for better error reporting, e.g. from parsing)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'fn main() -> Result<()> {\n tracing_subscriber::fmt()\n .with_env_filter(EnvFilter::from_default_env())\n .with_target(false)\n .with_file(true)\n .with_line_number(true)\n .without_time()\n .compact()\n .init();\n color_eyre::install()?;\n\n let input = parse_input("inputs/dayXX.txt");\n\n info!("Part 1: {}", part_1(&input));\n info!("Part 2: {}", part_2(&input));\n\n Ok(())\n}\n')),(0,r.kt)("p",null,"The first statement will set up tracing and configure it to print out the logs to\nterminal, based on the environment variable. We also change the formatting a bit,\nsince we do not need all the ",(0,r.kt)("em",{parentName:"p"},"fancy")," features of the logger. Pure initialization\nwould get us logs like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"2022-12-11T19:53:19.975343Z INFO day01: Part 1: 0\n")),(0,r.kt)("p",null,"However after running that command, we will get the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"}," INFO src/bin/day01.rs:35: Part 1: 0\n")),(0,r.kt)("p",null,"And the ",(0,r.kt)("inlineCode",{parentName:"p"},"color_eyre::install()?")," is quite straightforward. We just initialize the\nerror reporting by ",(0,r.kt)("em",{parentName:"p"},"color eyre"),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Notice that we had to add ",(0,r.kt)("inlineCode",{parentName:"p"},"Ok(())")," to the end of the function and adjust the\nreturn type of the ",(0,r.kt)("inlineCode",{parentName:"p"},"main")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"Result<()>"),". It is caused by the ",(0,r.kt)("em",{parentName:"p"},"color eyre")," that\ncan be installed only once and therefore it can fail, that is how we got the ",(0,r.kt)("inlineCode",{parentName:"p"},"?"),"\nat the end of the ",(0,r.kt)("inlineCode",{parentName:"p"},"::install")," which ",(0,r.kt)("em",{parentName:"p"},"unwraps")," the ",(0,r.kt)("strong",{parentName:"p"},"\xbbresult\xab")," of the installation.")),(0,r.kt)("p",null,"Overall we will get to a template like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'use aoc_2022::*;\n\nuse color_eyre::eyre::Result;\nuse tracing::info;\nuse tracing_subscriber::EnvFilter;\n\ntype Input = String;\ntype Output = i32;\n\nfn parse_input(path: &str) -> Input {\n todo!()\n}\n\nfn part1(input: &Input) -> Output {\n todo!()\n}\n\nfn part2(input: &Input) -> Output {\n todo!()\n}\n\nfn main() -> Result<()> {\n tracing_subscriber::fmt()\n .with_env_filter(EnvFilter::from_default_env())\n .with_target(false)\n .with_file(true)\n .with_line_number(true)\n .without_time()\n .compact()\n .init();\n color_eyre::install()?;\n\n let input = parse_input("inputs/dayXX.txt");\n\n info!("Part 1: {}", part_1(&input));\n info!("Part 2: {}", part_2(&input));\n\n Ok(())\n}\n')),(0,r.kt)("div",{className:"footnotes"},(0,r.kt)("hr",{parentName:"div"}),(0,r.kt)("ol",{parentName:"div"},(0,r.kt)("li",{parentName:"ol",id:"fn-1-793a30"},"Copy-pasting might be a relaxing thing to do, but you can also discover\nnasty stuff about your PC. See ",(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"},"this Reddit post and the comment"),".",(0,r.kt)("a",{parentName:"li",href:"#fnref-1-793a30",className:"footnote-backref"},"\u21a9")),(0,r.kt)("li",{parentName:"ol",id:"fn-2-793a30"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/martinjonas"},"GitHub profile"),(0,r.kt)("a",{parentName:"li",href:"#fnref-2-793a30",className:"footnote-backref"},"\u21a9")),(0,r.kt)("li",{parentName:"ol",id:"fn-3-793a30"},"Even though you can use it even for libraries, but handling errors from\nlibraries using ",(0,r.kt)("inlineCode",{parentName:"li"},"anyhow")," is nasty\u2026 You will be the stinky one ;)",(0,r.kt)("a",{parentName:"li",href:"#fnref-3-793a30",className:"footnote-backref"},"\u21a9")))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/52bff962.6e8cadd8.js b/assets/js/52bff962.6e8cadd8.js new file mode 100644 index 0000000..de24b66 --- /dev/null +++ b/assets/js/52bff962.6e8cadd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9710],{1193:a=>{a.exports=JSON.parse('[{"label":"python","permalink":"/ib002/tags/python","count":3},{"label":"testing","permalink":"/ib002/tags/testing","count":1},{"label":"postconditions","permalink":"/ib002/tags/postconditions","count":1},{"label":"sorting","permalink":"/ib002/tags/sorting","count":1},{"label":"graphs","permalink":"/ib002/tags/graphs","count":2},{"label":"bfs","permalink":"/ib002/tags/bfs","count":1},{"label":"csharp","permalink":"/ib002/tags/csharp","count":1},{"label":"iterators","permalink":"/ib002/tags/iterators","count":1},{"label":"iterative","permalink":"/ib002/tags/iterative","count":1},{"label":"balanced trees","permalink":"/ib002/tags/balanced-trees","count":2},{"label":"red-black trees","permalink":"/ib002/tags/red-black-trees","count":2},{"label":"applications","permalink":"/ib002/tags/applications","count":1},{"label":"karel","permalink":"/ib002/tags/karel","count":1},{"label":"recursion","permalink":"/ib002/tags/recursion","count":3},{"label":"backtracking","permalink":"/ib002/tags/backtracking","count":1},{"label":"java","permalink":"/ib002/tags/java","count":1},{"label":"exponential","permalink":"/ib002/tags/exponential","count":1},{"label":"greedy","permalink":"/ib002/tags/greedy","count":1},{"label":"dynamic-programming","permalink":"/ib002/tags/dynamic-programming","count":1},{"label":"top-down-dp","permalink":"/ib002/tags/top-down-dp","count":1},{"label":"bottom-up-dp","permalink":"/ib002/tags/bottom-up-dp","count":1},{"label":"c","permalink":"/ib002/tags/c","count":1},{"label":"dynamic array","permalink":"/ib002/tags/dynamic-array","count":1},{"label":"time complexity","permalink":"/ib002/tags/time-complexity","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/52f2a5bf.f6c9442b.js b/assets/js/52f2a5bf.f6c9442b.js new file mode 100644 index 0000000..ecc114b --- /dev/null +++ b/assets/js/52f2a5bf.f6c9442b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5430],{1387:a=>{a.exports=JSON.parse('{"label":"red-hat","permalink":"/blog/tags/red-hat","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/58dd4fbd.f45f89fa.js b/assets/js/58dd4fbd.f45f89fa.js new file mode 100644 index 0000000..6a1d36d --- /dev/null +++ b/assets/js/58dd4fbd.f45f89fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3340],{3047:e=>{e.exports=JSON.parse('{"label":"c","permalink":"/ib002/tags/c","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","permalink":"/ib002/time-complexity/extend"}]}')}}]); \ No newline at end of file diff --git a/assets/js/5af27364.400470ed.js b/assets/js/5af27364.400470ed.js new file mode 100644 index 0000000..ffca23a --- /dev/null +++ b/assets/js/5af27364.400470ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3502],{3162:e=>{e.exports=JSON.parse('{"label":"balanced trees","permalink":"/ib002/tags/balanced-trees","allTagsPath":"/ib002/tags","count":2,"items":[{"id":"rb-trees/rules","title":"On the rules of the red-black tree","description":"Shower thoughts on the rules of the red-black tree.\\n","permalink":"/ib002/rb-trees/rules"},{"id":"rb-trees/applications","title":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","description":"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\\n","permalink":"/ib002/rb-trees/applications"}]}')}}]); \ No newline at end of file diff --git a/assets/js/6048.83823b1f.js b/assets/js/6048.83823b1f.js new file mode 100644 index 0000000..3dcb0ab --- /dev/null +++ b/assets/js/6048.83823b1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6048],{9058:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(7294),r=a(6010),n=a(7452),o=a(7524),s=a(9960),i=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function c(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function d(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function g(e){return l.createElement(u.Zo,{component:d,props:e})}function p(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(g,{sidebar:t}):l.createElement(c,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:o,...s}=e,i=t&&t.items.length>0;return l.createElement(n.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(p,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},390:(e,t,a)=>{a.d(t,{Z:()=>A});var l=a(7294),r=a(6010),n=a(9460),o=a(4996);function s(e){let{children:t,className:a}=e;const{frontMatter:r,assets:s}=(0,n.C)(),{withBaseUrl:i}=(0,o.C)(),m=s.image??r.image;return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},m&&l.createElement("meta",{itemProp:"image",content:i(m,{absolute:!0})}),t)}var i=a(9960);const m={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,n.C)(),{permalink:s,title:c}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,r.Z)(m.title,t),itemProp:"headline"},o?c:l.createElement(i.Z,{itemProp:"url",to:s},c))}var u=a(5999),d=a(8824);const g={container:"container_mt6G"};function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function b(e){let{className:t}=e;const{metadata:a}=(0,n.C)(),{date:o,formattedDate:s,readingTime:i}=a;return l.createElement("div",{className:(0,r.Z)(g.container,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==i&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:i})))}function f(e){return e.href?l.createElement(i.Z,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:n,title:o,url:s,imageURL:i,email:m}=t,c=s||m&&`mailto:${m}`||void 0;return l.createElement("div",{className:(0,r.Z)("avatar margin-bottom--sm",a)},i&&l.createElement(f,{href:c,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:i,alt:n})),n&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(f,{href:c,itemProp:"url"},l.createElement("span",{itemProp:"name"},n))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const P={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,n.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",s?P.imageOnlyAuthorRow:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,r.Z)(!s&&"col col--6",s?P.imageOnlyAuthorCol:P.authorCol),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function _(){return l.createElement("header",null,l.createElement(c,null),l.createElement(b,null),l.createElement(N,null))}var Z=a(8780),k=a(1098);function I(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,n.C)();return l.createElement("div",{id:o?Z.blogPostContainerID:void 0,className:(0,r.Z)("markdown",a),itemProp:"articleBody"},l.createElement(k.Z,null,t))}var C=a(4881),w=a(1526),T=a(7462);function y(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function F(e){const{blogPostTitle:t,...a}=e;return l.createElement(i.Z,(0,T.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(y,null))}const L={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function B(){const{metadata:e,isBlogPostPage:t}=(0,n.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:i}=e,m=!t&&i,c=a.length>0;return c||m||s?l.createElement("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&L.blogPostFooterDetailsFull)},c&&l.createElement("div",{className:(0,r.Z)("col",{"col--9":m})},l.createElement(w.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(C.Z,{editUrl:s})),m&&l.createElement("div",{className:(0,r.Z)("col text--right",{"col--3":c})},l.createElement(F,{blogPostTitle:o,to:e.permalink}))):null}function A(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,n.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,r.Z)(o,a)},l.createElement(_,null),l.createElement(I,null,t),l.createElement(B,null))}},9460:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(7294),r=a(902);const n=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:r});return l.createElement(n.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(n);if(null===e)throw new r.i6("BlogPostProvider");return e}},8824:(e,t,a)=>{a.d(t,{c:()=>m});var l=a(7294),r=a(2263);const n=["zero","one","two","few","many","other"];function o(e){return n.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function m(){const e=i();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const r=a.select(t),n=a.pluralForms.indexOf(r);return l[Math.min(n,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/62d847b3.06e10519.js b/assets/js/62d847b3.06e10519.js new file mode 100644 index 0000000..e8788ce --- /dev/null +++ b/assets/js/62d847b3.06e10519.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8520],{1901:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/advent-of-code-2022","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6316.0ca4149a.js b/assets/js/6316.0ca4149a.js new file mode 100644 index 0000000..4a65df6 --- /dev/null +++ b/assets/js/6316.0ca4149a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6316],{6316:(t,e,n)=>{n.d(e,{diagram:()=>A});var i=n(6432),s=n(9373),r=n(1619),a=n(5920),o=n(7201),c=(n(7484),n(7967),n(7856),n(277),n(5625),n(9354),n(1518),n(9542),n(285),n(8734),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,26,27,28],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,23],h=[1,24],d=[1,27],u=[4,6,9,11,17,18,20,22,23,26,27,28],p={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 19:i.addTask(r[o],0,""),this.$=r[o];break;case 20:i.addEvent(r[o].substr(2)),this.$=r[o];break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(r[o],"type_directive");break;case 23:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","timeline")}},table:[{3:1,4:e,7:3,12:4,28:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,28:n},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},{1:[2,2]},{14:25,15:[1,26],31:d},t([15,31],[2,22]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:22,10:28,12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,29]},{21:[1,30]},t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(u,[2,9]),{14:34,31:d},{31:[2,23]},{11:[1,35]},t(u,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,k,x,v,S,w,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(w=void 0,"number"!=typeof(w=i.pop()||d.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),f=w),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(k in S=[],a[m])this.terminals_[k]&&k>2&&S.push("'"+this.terminals_[k]+"'");E=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:S})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,y=d.yylloc;break;case 2:if(x=this.productions_[_[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,u.yy,_[1],s,r].concat(h))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};function g(){this.yy={}}return p.lexer=y,g.prototype=p,p.Parser=g,new g}());c.parser=c;const l=c;let h="",d=0;const u=[],p=[],y=[],g=()=>i.j,f=(t,e,n)=>{(0,i.k)(globalThis,t,e,n)},m=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.m)()},_=function(t){h=t,u.push(t)},b=function(){return u},k=function(){let t=w();let e=0;for(;!t&&e<100;)t=w(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},v=function(t){y.find((t=>t.id===d-1)).events.push(t)},S=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},w=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},$={clear:m,getCommonDb:g,addSection:_,getSections:b,getTasks:k,addTask:x,addTaskOrg:S,addEvent:v,parseDirective:f},E=Object.freeze(Object.defineProperty({__proto__:null,addEvent:v,addSection:_,addTask:x,addTaskOrg:S,clear:m,default:$,getCommonDb:g,getSections:b,getTasks:k,parseDirective:f},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
"===t)&&(r.pop(),c.text(r.join(" ").trim()),r="
"===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const T=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},D=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},L=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),l=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),T(a,e,s),e},C=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},M=function(t,e,n,s,r,a,o,c,l,h,d){for(const u of e){const e={descr:u.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),p=L(c,e,n,o).height;if(i.l.debug("taskHeight after draw",p),c.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,p),u.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=O(t,u.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+l+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(0,i.g)().timeline.disableMulticolor&&n++}r-=10},O=function(t,e,n,s,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=L(c,e,n,a).height;o+=h,c.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=c,o},A={db:E,renderer:{setConf:function(t){Object.keys(t).forEach((function(e){conf[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.g)(),o=a.leftMargin?a.leftMargin:50;r.db.clear(),r.parser.parse(t+"\n"),i.l.debug("timeline",r.db);const c=a.securityLevel;let l;"sandbox"===c&&(l=(0,s.Ys)("#i"+e));const h=("sandbox"===c?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);h.append("g");const d=r.db.getTasks(),u=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",d),D(h);const p=r.db.getSections();i.l.debug("sections",p);let y=0,g=0,f=0,m=0,_=50+o,b=50;m=50;let k=0,x=!0;p.forEach((function(t){const e=C(h,{number:k,descr:t,section:k,width:150,padding:20,maxHeight:y},a);i.l.debug("sectionHeight before draw",e),y=Math.max(y,e+20)}));let v=0,S=0;i.l.debug("tasks.length",d.length);for(const[s,$]of d.entries()){const t={number:s,descr:$,section:$.section,width:150,padding:20,maxHeight:g},e=C(h,t,a);i.l.debug("taskHeight before draw",e),g=Math.max(g,e+20),v=Math.max(v,$.events.length);let n=0;for(let i=0;i<$.events.length;i++){const t={descr:$.events[i],section:$.section,number:$.section,width:150,padding:20,maxHeight:50};n+=C(h,t,a)}S=Math.max(S,n)}i.l.debug("maxSectionHeight before draw",y),i.l.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach((t=>{const e={number:k,descr:t,section:k,width:150,padding:20,maxHeight:y};i.l.debug("sectionNode",e);const n=h.append("g"),s=L(n,e,k,a);i.l.debug("sectionNode output",s),n.attr("transform",`translate(${_}, 50)`),b+=y+50;const r=d.filter((e=>e.section===t));r.length>0&&M(h,r,k,_,b,g,a,v,S,y,!1),_+=200*Math.max(r.length,1),b=50,k++})):(x=!1,M(h,d,k,_,b,g,a,v,S,y,!0));const w=h.node().getBBox();i.l.debug("bounds",w),u&&h.append("text").text(u).attr("x",w.width/2-o).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),f=x?y+g+150:g+100;h.append("g").attr("class","lineWrapper").append("line").attr("x1",o).attr("y1",f).attr("x2",w.width+3*o).attr("y2",f).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.s)(void 0,h,a.timeline.padding?a.timeline.padding:50,!!a.timeline.useMaxWidth&&a.timeline.useMaxWidth)}},parser:l,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{n.d(e,{Z:()=>o});var i=n(1691),s=n(1610);const r=t=>{const{r:e,g:n,b:r}=s.Z.parse(t),a=.2126*i.Z.channel.toLinear(e)+.7152*i.Z.channel.toLinear(n)+.0722*i.Z.channel.toLinear(r);return i.Z.lang.round(a)},a=t=>r(t)>=.5,o=t=>!a(t)}}]); \ No newline at end of file diff --git a/assets/js/66d5ef6c.fc107ca5.js b/assets/js/66d5ef6c.fc107ca5.js new file mode 100644 index 0000000..0d311cb --- /dev/null +++ b/assets/js/66d5ef6c.fc107ca5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9228],{4087:l=>{l.exports=JSON.parse('[{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed","count":1},{"label":"red-hat","permalink":"/blog/tags/red-hat","count":1},{"label":"copr","permalink":"/blog/tags/copr","count":1},{"label":"admin","permalink":"/blog/tags/admin","count":1},{"label":"vps","permalink":"/blog/tags/vps","count":1},{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code","count":5},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022","count":5},{"label":"rust","permalink":"/blog/tags/rust","count":5},{"label":"cpp","permalink":"/blog/tags/cpp","count":1},{"label":"leetcode","permalink":"/blog/tags/leetcode","count":1},{"label":"iterators","permalink":"/blog/tags/iterators","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.2d487359.js b/assets/js/6875c492.2d487359.js new file mode 100644 index 0000000..98d89c7 --- /dev/null +++ b/assets/js/6875c492.2d487359.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8610],{9703:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(5999),r=a(2244);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(9460),r=a(390);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},1714:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(7294),l=a(6010),r=a(5999),s=a(8824),o=a(833),i=a(5281),g=a(9960),c=a(9058),m=a(9703),p=a(197),u=a(9985);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function b(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=d(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(u.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function E(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/assets/js/6945.04a6ca6a.js b/assets/js/6945.04a6ca6a.js new file mode 100644 index 0000000..b40e21c --- /dev/null +++ b/assets/js/6945.04a6ca6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6945],{6945:(e,s,f)=>{f.r(s)}}]); \ No newline at end of file diff --git a/assets/js/713b7838.e5a05e06.js b/assets/js/713b7838.e5a05e06.js new file mode 100644 index 0000000..d3793b0 --- /dev/null +++ b/assets/js/713b7838.e5a05e06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2167],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>h});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function l(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=a.createContext({}),m=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):l(l({},e),t)),n},s=function(t){var e=m(t.components);return a.createElement(p.Provider,{value:e},t.children)},d="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,i=t.originalType,p=t.parentName,s=o(t,["components","mdxType","originalType","parentName"]),d=m(n),u=r,h=d["".concat(p,".").concat(u)]||d[u]||k[u]||i;return n?a.createElement(h,l(l({ref:e},s),{},{components:n})):a.createElement(h,l({ref:e},s))}));function h(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=n.length,l=new Array(i);l[0]=u;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[d]="string"==typeof t?t:r,l[1]=o;for(var m=2;m{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>k,frontMatter:()=>i,metadata:()=>o,toc:()=>m});var a=n(7462),r=(n(7294),n(3905));const i={id:"seminar-04",title:"4th seminar",description:"Robot in a maze.\n",last_update:{date:new Date("2023-03-13T00:00:00.000Z")}},l=void 0,o={unversionedId:"bonuses/seminar-04",id:"bonuses/seminar-04",title:"4th seminar",description:"Robot in a maze.\n",source:"@site/pb071/bonuses/04.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-04",permalink:"/pb071/bonuses/seminar-04",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/bonuses/04.md",tags:[],version:"current",lastUpdatedAt:1678665600,formattedLastUpdatedAt:"Mar 13, 2023",frontMatter:{id:"seminar-04",title:"4th seminar",description:"Robot in a maze.\n",last_update:{date:"2023-03-13T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"3rd seminar",permalink:"/pb071/bonuses/seminar-03"},next:{title:"5th and 6th seminar",permalink:"/pb071/bonuses/seminar-05-06"}},p={},m=[{value:"Introduction",id:"introduction",level:2},{value:"Hard requirement",id:"hard-requirement",level:2},{value:"Example of run",id:"example-of-run",level:2},{value:"Bonus part",id:"bonus-part",level:2},{value:"Easter eggs",id:"easter-eggs",level:2},{value:"Submitting",id:"submitting",level:2}],s={toc:m},d="wrapper";function k(t){let{components:e,...n}=t;return(0,r.kt)(d,(0,a.Z)({},s,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Deadline for the submission of the bonus is ",(0,r.kt)("strong",{parentName:"p"},"March 23th 24:00"),".")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"In case you have any questions, feel free to reach out either by email, Discord\nor just by submitting an issue ",(0,r.kt)("a",{parentName:"p",href:"https://gitlab.fi.muni.cz/xfocko/kb/-/issues/new"},"here"),".")),(0,r.kt)("p",null,"For this bonus you can get 3 K\u20a1 and another 0.5 K\u20a1 for the bonus part of it."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/04.tar.gz"},"Source")),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"In this task you are given a 2D map for a robot. The map contains multiple markers:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"^v<>")," - which denote the directions the robot will be facing when he steps into\nthe cell or starts on it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"K")," - denotes the key."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"T")," - denotes the treasure.")),(0,r.kt)("p",null,"In case robot lands at the beginning on unknown field, e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},".")," in the tests, he\nfaces the direction that is given through the parameter."),(0,r.kt)("p",null,"Your task is to write the ",(0,r.kt)("inlineCode",{parentName:"p"},"walk")," function that returns end result of the walk.\nWalk can end in multiple ways:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FOUND_TREASURE")," - when you find the treasure"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FOUND_KEY")," - when you find the key"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"OUT_OF_BOUNDS")," - when the robot falls off the map"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"INFINITE_LOOP")," - in case you will implement the bonus"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"NONE")," - which is used right now as a default return in the skeleton, has no meaning\nlater on")),(0,r.kt)("h2",{id:"hard-requirement"},"Hard requirement"),(0,r.kt)("p",null,"There is only one hard requirement that tests cannot check."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"You are not allowed to use any indexing related to map or your current position"),"\n",(0,r.kt)("strong",{parentName:"p"},"in your implementation.")),(0,r.kt)("p",null,"Reason for this requirement is for you to get used to working with pointers. And\nfor the implementation of this task it is much easier to use just the pointers."),(0,r.kt)("h2",{id:"example-of-run"},"Example of run"),(0,r.kt)("p",null,"For a better understanding of your task, I will describe a simple walk with corresponding\nfunction call."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},'const char *map = (\n ">.v"\n ".K<"\n "..."\n);\n\nwalk(map, &map[6], \'^\', 3, 3);\n')),(0,r.kt)("p",null,"For this call, you should return ",(0,r.kt)("inlineCode",{parentName:"p"},"FOUND_KEY"),". Let us walk through the walk ;)"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Robot is placed at the bottom left corner, there is no direction specified, so\nhe follows the direction given by parameter (upwards, denoted as ",(0,r.kt)("inlineCode",{parentName:"p"},"N"),"(orth),\nso that we can differentiate markers on the map with the robot when using printing\nfunction)."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">.v\n.K<\nN..\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves up:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">.v\nNK<\n...\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves up (now covers ",(0,r.kt)("inlineCode",{parentName:"p"},">"),"), changes direction to right:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"E.v\n.K<\n...\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves to right:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">Ev\n.K<\n...\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves to right, faces south:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">.S\n.K<\n...\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves down, faces west:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">.v\n.KW\n...\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Moves left, founds key, returns ",(0,r.kt)("inlineCode",{parentName:"p"},"FOUND_KEY"),":"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},">.v\n.W<\n...\n")))),(0,r.kt)("h2",{id:"bonus-part"},"Bonus part"),(0,r.kt)("p",null,"For the bonus part you are supposed to return ",(0,r.kt)("inlineCode",{parentName:"p"},"INFINITE_LOOP")," in case the robot\nis stuck in the infinite loop. There are three tests for it. If you pass only the\neasy and medium one, you can get 0.25 K\u20a1 for doing your best and trying it out. :)"),(0,r.kt)("h2",{id:"easter-eggs"},"Easter eggs"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Statistics"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Language"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Files"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Lines"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Blanks"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Comments"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"right"},"Complexity"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"C")),(0,r.kt)("td",{parentName:"tr",align:"right"},"4"),(0,r.kt)("td",{parentName:"tr",align:"right"},"458"),(0,r.kt)("td",{parentName:"tr",align:"right"},"34"),(0,r.kt)("td",{parentName:"tr",align:"right"},"58"),(0,r.kt)("td",{parentName:"tr",align:"right"},"366"),(0,r.kt)("td",{parentName:"tr",align:"right"},"33")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"test_maze.c")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"225"),(0,r.kt)("td",{parentName:"tr",align:"right"},"9"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0"),(0,r.kt)("td",{parentName:"tr",align:"right"},"216"),(0,r.kt)("td",{parentName:"tr",align:"right"},"4")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"sol.maze.c")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"141"),(0,r.kt)("td",{parentName:"tr",align:"right"},"15"),(0,r.kt)("td",{parentName:"tr",align:"right"},"28"),(0,r.kt)("td",{parentName:"tr",align:"right"},"98"),(0,r.kt)("td",{parentName:"tr",align:"right"},"24")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"maze.c")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"84"),(0,r.kt)("td",{parentName:"tr",align:"right"},"8"),(0,r.kt)("td",{parentName:"tr",align:"right"},"30"),(0,r.kt)("td",{parentName:"tr",align:"right"},"46"),(0,r.kt)("td",{parentName:"tr",align:"right"},"5")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"main.c")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"8"),(0,r.kt)("td",{parentName:"tr",align:"right"},"2"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0"),(0,r.kt)("td",{parentName:"tr",align:"right"},"6"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"C Header")),(0,r.kt)("td",{parentName:"tr",align:"right"},"1"),(0,r.kt)("td",{parentName:"tr",align:"right"},"33"),(0,r.kt)("td",{parentName:"tr",align:"right"},"3"),(0,r.kt)("td",{parentName:"tr",align:"right"},"19"),(0,r.kt)("td",{parentName:"tr",align:"right"},"11"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"maze.h")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"33"),(0,r.kt)("td",{parentName:"tr",align:"right"},"3"),(0,r.kt)("td",{parentName:"tr",align:"right"},"19"),(0,r.kt)("td",{parentName:"tr",align:"right"},"11"),(0,r.kt)("td",{parentName:"tr",align:"right"},"0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"CMake")),(0,r.kt)("td",{parentName:"tr",align:"right"},"1"),(0,r.kt)("td",{parentName:"tr",align:"right"},"25"),(0,r.kt)("td",{parentName:"tr",align:"right"},"4"),(0,r.kt)("td",{parentName:"tr",align:"right"},"6"),(0,r.kt)("td",{parentName:"tr",align:"right"},"15"),(0,r.kt)("td",{parentName:"tr",align:"right"},"2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"CMakeLists.txt")),(0,r.kt)("td",{parentName:"tr",align:"right"}),(0,r.kt)("td",{parentName:"tr",align:"right"},"25"),(0,r.kt)("td",{parentName:"tr",align:"right"},"4"),(0,r.kt)("td",{parentName:"tr",align:"right"},"6"),(0,r.kt)("td",{parentName:"tr",align:"right"},"15"),(0,r.kt)("td",{parentName:"tr",align:"right"},"2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Total")),(0,r.kt)("td",{parentName:"tr",align:"right"},"6"),(0,r.kt)("td",{parentName:"tr",align:"right"},"516"),(0,r.kt)("td",{parentName:"tr",align:"right"},"41"),(0,r.kt)("td",{parentName:"tr",align:"right"},"83"),(0,r.kt)("td",{parentName:"tr",align:"right"},"392"),(0,r.kt)("td",{parentName:"tr",align:"right"},"35"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Majority of the line count in solution is caused by the formatting :)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Included headers can be interpreted as hints, same goes for the unimplemented\n",(0,r.kt)("inlineCode",{parentName:"p"},"static")," functions which you can use, but ",(0,r.kt)("strong",{parentName:"p"},"are not required"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Given ",(0,r.kt)("inlineCode",{parentName:"p"},"CMakeLists.txt")," will generate 2 binaries, ",(0,r.kt)("inlineCode",{parentName:"p"},"test_maze")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"maze"),"."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"test_maze")," runs the tests you are given."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"maze")," runs the ",(0,r.kt)("inlineCode",{parentName:"li"},"main.c"),", where you can debug, print mazes and whatever else\nyou want."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"I keep only one copy of ",(0,r.kt)("inlineCode",{parentName:"p"},"cut.h")," in my repository, so you need to download it from\n",(0,r.kt)("a",{parentName:"p",href:"https://gitlab.fi.muni.cz/pb071/cut/-/jobs/159010/artifacts/file/1header/cut.h"},"here")," and place it into the directory where you have your source code."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Or you can use the one you have from the latest homework, git will keep it\nonly once, so it doesn't take up more space."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"I would recommend cloning this repository and copying the ",(0,r.kt)("inlineCode",{parentName:"p"},"maze")," directory to\nyour own repository, since there are multiple files and it may be easier for you."))),(0,r.kt)("p",null,"In case you have any questions, feel free to reach out to me."),(0,r.kt)("h2",{id:"submitting"},"Submitting"),(0,r.kt)("p",null,"For submitting the bonus assignment you can follow the same procedure as for\nsubmitting the homeworks, that is:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"On branch ",(0,r.kt)("inlineCode",{parentName:"li"},"main")," add the provided skeleton."),(0,r.kt)("li",{parentName:"ol"},"Checkout new branch ",(0,r.kt)("inlineCode",{parentName:"li"},"seminar-bonus-04"),"."),(0,r.kt)("li",{parentName:"ol"},"Add your solution to the newly created branch."),(0,r.kt)("li",{parentName:"ol"},"Create a MR to the ",(0,r.kt)("inlineCode",{parentName:"li"},"main")," branch with me (",(0,r.kt)("inlineCode",{parentName:"li"},"@xfocko"),") as the reviewer.")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/724.d7e60c08.js b/assets/js/724.d7e60c08.js new file mode 100644 index 0000000..51dcae6 --- /dev/null +++ b/assets/js/724.d7e60c08.js @@ -0,0 +1,41606 @@ +exports.id = 724; +exports.ids = [724]; +exports.modules = { + +/***/ 84182: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(82241)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(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, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 14607: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(84182)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(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, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 71377: +/***/ (function(module) { + +/** + * Copyright (c) 2016-2023, The Cytoscape Consortium. + * + * 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 (global, factory) { + true ? module.exports = factory() : + 0; +})(this, (function () { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(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); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + + function _defineProperty$1(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 _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : 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; + } + + 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 _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."); + } + + var _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + + var navigator = _window ? _window.navigator : null; + _window ? _window.document : null; + + var typeofstr = _typeof(''); + + var typeofobj = _typeof({}); + + var typeoffn = _typeof(function () {}); + + var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); + + var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; + }; + + var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; + }; + var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; + }; + var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); + }; + var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; + }; + var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; + }; + var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); + }; + var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; + }; + var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } + }; + var elementOrCollection = function elementOrCollection(obj) { + return element(obj) || collection(obj); + }; + var element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; + }; + var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; + }; + var core = function core(obj) { + return instanceStr(obj) === 'core'; + }; + var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; + }; + var event = function event(obj) { + return instanceStr(obj) === 'event'; + }; + var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got + }; + var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } + }; + var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); + }; + var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); + }; + var ms = function ms() { + return navigator && navigator.userAgent.match(/msie|trident|edge/i); + }; // probably a better way to detect this... + + var memoize$1 = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + + var args = []; + + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + + return args.join('$'); + }; + } + + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + + return ret; + }; + + memoizedFn.cache = {}; + return memoizedFn; + }; + + var camel2dash = memoize$1(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); + }); + var dash2camel = memoize$1(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); + }); + var prependCamel = memoize$1(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); + }, function (prefix, str) { + return prefix + '$' + str; + }); + var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + + return str.charAt(0).toUpperCase() + str.substring(1); + }; + + var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; + var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; + var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; + var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hex3 = '\\#[0-9a-fA-F]{3}'; + var hex6 = '\\#[0-9a-fA-F]{6}'; + + var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } + }; + var descending = function descending(a, b) { + return -1 * ascending(a, b); + }; + + var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + + if (obj == null) { + continue; + } + + var keys = Object.keys(obj); + + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + + return tgt; + }; + + var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + + return [r, g, b]; + }; // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) + + var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + + var m = new RegExp('^' + hsla + '$').exec(hsl); + + if (m) { + // get hue + h = parseInt(m[1]); + + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + + + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + + + l = l / 100; // normalise on [0, 1] + + a = m[4]; + + if (a !== undefined) { + a = parseFloat(a); + + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + + } // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + + + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + + ret = [r, g, b, a]; + } + + return ret; + }; // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) + + var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + + if (m) { + ret = []; + var isPct = []; + + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + + channel = parseFloat(channel); + + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + + ret.push(Math.floor(channel)); + } + + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + + var alpha = m[4]; + + if (alpha !== undefined) { + alpha = parseFloat(alpha); + + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + + ret.push(alpha); + } + } + + return ret; + }; + var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; + }; + var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); + }; + var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + // regular colours + 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], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + 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], + 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] + }; + + var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } + }; // gets the value in a map even if it's not built in places + + var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + + obj = obj[key]; + + if (obj == null) { + return obj; + } + } + + return obj; + }; // deletes the entry in the map + + /** + * 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'); + } + + var isObject_1 = isObject; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + var _freeGlobal = 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')(); + + var _root = 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(); + }; + + var now_1 = now; + + /** 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; + } + + var _trimmedEndIndex = 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; + } + + var _baseTrim = baseTrim; + + /** Built-in value references. */ + var Symbol$1 = _root.Symbol; + + var _Symbol = Symbol$1; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$5.toString; + + /** Built-in value references. */ + var symToStringTag$1 = _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$4.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + var _getRawTag = getRawTag; + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$4.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); + } + + var _objectToString = 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); + } + + var _baseGetTag = baseGetTag; + + /** + * 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'; + } + + var isObjectLike_1 = 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_1(value) && _baseGetTag(value) == symbolTag); + } + + var isSymbol_1 = 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_1(value)) { + return NAN; + } + if (isObject_1(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject_1(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); + } + + var toNumber_1 = toNumber; + + /** Error message constants. */ + var FUNC_ERROR_TEXT$1 = '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$1); + } + wait = toNumber_1(wait) || 0; + if (isObject_1(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber_1(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_1(); + 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_1()); + } + + function debounced() { + var time = now_1(), + 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; + } + + var debounce_1 = debounce; + + var performance = _window ? _window.performance : null; + var pnow = performance && performance.now ? function () { + return performance.now(); + } : function () { + return Date.now(); + }; + + var raf = function () { + if (_window) { + if (_window.requestAnimationFrame) { + return function (fn) { + _window.requestAnimationFrame(fn); + }; + } else if (_window.mozRequestAnimationFrame) { + return function (fn) { + _window.mozRequestAnimationFrame(fn); + }; + } else if (_window.webkitRequestAnimationFrame) { + return function (fn) { + _window.webkitRequestAnimationFrame(fn); + }; + } else if (_window.msRequestAnimationFrame) { + return function (fn) { + _window.msRequestAnimationFrame(fn); + }; + } + } + + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; + }(); + + var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); + }; + var performanceNow = pnow; + + var DEFAULT_HASH_SEED = 9261; + var K = 65599; // 37 also works pretty well + + var DEFAULT_HASH_SEED_ALT = 5381; + var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + + for (;;) { + entry = iterator.next(); + + if (entry.done) { + break; + } + + hash = hash * K + entry.value | 0; + } + + return hash; + }; + var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; + }; + var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; + }; + var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; + }; + var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; + }; + var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; + }; + var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashStrings = function hashStrings() { + return hashStringsArray(arguments); + }; + var hashStringsArray = function hashStringsArray(strs) { + var hash; + + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + + return hash; + }; + + /*global console */ + var warningsEnabled = true; + var warnSupported = console.warn != null; // eslint-disable-line no-console + + var traceSupported = console.trace != null; // eslint-disable-line no-console + + var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; + var trueify = function trueify() { + return true; + }; + var falsify = function falsify() { + return false; + }; + var zeroify = function zeroify() { + return 0; + }; + var noop$1 = function noop() {}; + var error = function error(msg) { + throw new Error(msg); + }; + var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } + }; + var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + + if (traceSupported) { + console.trace(); + } + } + }; + /* eslint-enable */ + + var clone = function clone(obj) { + return extend({}, obj); + }; // gets a shallow copy of the argument + + var copy = function copy(obj) { + if (obj == null) { + return obj; + } + + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } + }; + var copyArray$1 = function copyArray(arr) { + return arr.slice(); + }; + var uuid = function uuid(a, b + /* placeholders */ + ) { + for ( // loop :) + b = a = ''; // b - result , a - numeric letiable + a++ < 36; // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + + return b; + }; + var _staticEmptyObject = {}; + var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; + }; + var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + + return filledOpts; + }; + }; + var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + + if (oneCopy) { + break; + } + } + } + }; + var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); + }; + var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } + }; + var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; + }; + var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; + }; + + /* global Map */ + var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + + this._obj = {}; + } + + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + + return ObjectMap; + }(); + + var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap; + + /* global Set */ + var undef = "undefined" ; + + var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + + this._obj = Object.create(null); + this.size = 0; + + if (arrayOrObjectSet != null) { + var arr; + + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + + return ObjectSet; + }(); + + var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + + var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + + var group = params.group; // try to automatically infer the group if unspecified + + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } // validate group + + + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } // make the element array-like, just like a collection + + + this.length = 1; + this[0] = this; // NOTE: when something is added here, add also to ele.json() + + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + + if (_p.position.x == null) { + _p.position.x = 0; + } + + if (_p.position.y == null) { + _p.position.y = 0; + } // renderedPosition overrides if specified + + + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + + var classes = []; + + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + + if (!cls || cls === '') { + continue; + } + + _p.classes.add(cls); + } + + this.createEmitter(); + var bypass = params.style || params.css; + + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + + if (restore === undefined || restore) { + this.restore(); + } + }; + + var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; // from pseudocode on wikipedia + + return function searchFn(roots, fn, directed) { + var options; + + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; // enqueue v + + + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + + if (vi.isNode()) { + Q.unshift(vi); + + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + + id2depth[viId] = 0; + } + } + + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + + V[vId] = true; + connectedNodes.push(v); + } + + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + + if (ret === true) { + found = v; + return "break"; + } + + if (ret === false) { + return "break"; + } + + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + + while (Q.length !== 0) { + var _ret = _loop(); + + if (_ret === "continue") continue; + if (_ret === "break") break; + } + + var connectedEles = cy.collection(); + + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + + if (edge != null) { + connectedEles.push(edge); + } + + connectedEles.push(node); + } + + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; + }; // search, spanning trees, etc + + + var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) + }; // nice, short mathematical alias + + elesfn$v.bfs = elesfn$v.breadthFirstSearch; + elesfn$v.dfs = elesfn$v.depthFirstSearch; + + var heap$1 = createCommonjsModule(function (module, exports) { + // Generated by CoffeeScript 1.8.0 + (function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _len, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + { + return module.exports = factory(); + } + })(this, function() { + return Heap; + }); + + }).call(commonjsGlobal); + }); + + var heap = heap$1; + + var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + + var getDist = function getDist(node) { + return dist[node.id()]; + }; + + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + + var Q = new heap(function (a, b) { + return getDist(a) - getDist(b); + }); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + + var _weight = weightFn(edge); + + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + + if (smalletsDist === Infinity) { + continue; + } + + var neighbors = u.neighborhood().intersect(nodes); + + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + + } // while + + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + + if (target.length > 0) { + S.unshift(target); + + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + + return eles.spawn(S); + } + }; + } + }; + + var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + + if (eles.has(ele)) { + return i; + } + } + }; // start with one forest per node + + + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + + if (setUIndex !== setVIndex) { + A.merge(edge); // combine forests for u and v + + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + + return A; + } + }; + + var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false + }); + var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new heap(function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + + var cMin, cMinId; + + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); // Counter + + var steps = 0; // Main loop + + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; // If we've found our goal, then we are done + + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + + for (;;) { + path.unshift(pathNode); + + if (pathEdge != null) { + path.unshift(pathEdge); + } + + pathNode = cameFrom[pathNodeId]; + + if (pathNode == null) { + break; + } + + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } // Add cMin to processed nodes + + + closedSetIds[cMinId] = true; // Update scores for neighbors of cMin + // Take into account if graph is directed or not + + var vwEdges = cMin._private.edges; + + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; // edge must be in set of calling eles + + if (!this.hasElementWithId(e.id())) { + continue; + } // cMin must be the source of edge if directed + + + if (directed && e.data('source') !== cMinId) { + continue; + } + + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); // node must be in set of calling eles + + if (!this.hasElementWithId(wid)) { + continue; + } // if node is in closedSet, ignore it + + + if (closedSetIds[wid]) { + continue; + } // New tentative score for node w + + + var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + // w not in openSet + + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } // w already in openSet, but with greater gScore + + + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + + } // End of main loop + // If we've reached here, then we've not reached our goal + + + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } + }; // elesfn + + var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + + var weightFn = weight; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var N = nodes.length; + var Nsq = N * N; + + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + + var atIndex = function atIndex(i) { + return nodes[i]; + }; // Initialize distance matrix + + + var dist = new Array(Nsq); + + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } // Initialize matrix used for path reconstruction + // Initialize distance matrix + + + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); // Process edges + + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + + if (src === tgt) { + continue; + } // exclude loops + + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + + var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes + + + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } // If undirected graph, process 'reversed' edge + + + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } // Main loop + + + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + + if (i === j) { + return fromNode.collection(); + } + + if (next[i * N + j] == null) { + return cy.collection(); + } + + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + + return path; + } + }; + return res; + } // floydWarshall + + }; // elesfn + + var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null + }); + var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + + var weightFn = weight; + var eles = this; + var cy = this.cy(); + + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + + var numNodes = nodes.length; + var infoMap = new Map$2(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + + return obj; + }; + + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + + for (;;) { + if (node == null) { + return _this.spawn(); + } + + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + + path.unshift(node[0]); + + if (node.same(thisStart) && path.length > 0) { + break; + } + + if (edge != null) { + path.unshift(edge); + } + + node = pred; + } + + return eles.spawn(path); + }; // Initializations { dist, pred, edge } + + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + + info.pred = null; + info.edge = null; + } // Edges relaxation + + + var replacedEdge = false; + + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + + var _weight = weightFn(edge); + + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); // If undirected graph, we need to take into account the 'reverse' edge + + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + + if (!replacedEdge) { + break; + } + } + + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + + var _src = _edge.source(); + + var _tgt = _edge.target(); + + var _weight2 = weightFn(_edge); + + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + + var numNegativeNodes = negativeNodes.length; + + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord + + }; // elesfn + + var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one + // Updates the remaining edge lists + // Receives as a paramater the edge which causes the collapse + + var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + // Delete all edges between partition1 and partition2 + + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } // All edges pointing to partition2 should now point to partition1 + + + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][2] = partition1; + } + } // Move all nodes from partition2 to partition1 + + + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + + return newEdges; + }; // Contracts a graph until we reach a certain number of meta nodes + + + var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); // Collapse graph based on edge + + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + + return remainingEdges; + }; + + var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + + + var edgeIndexes = []; + + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } // We will store the best cut found here + + + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); // Initial meta node partition + + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; // Main loop + + + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } // Contract until stop point (stopSize nodes) + + + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + // Create a copy of the colapsed nodes state + + copyNodesMap(metaNodeMap, metaNodeMap2); // Run 2 iterations starting in the stop state + + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); // Is any of the 2 results the best cut so far? + + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + // Construct result + + + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); // traverse metaNodeMap for best cut + + var witnessNodePartition = minCutNodeMap[0]; + + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } // construct components corresponding to each disjoint subset of nodes + + + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } + }; // elesfn + + var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; + }; + var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; + }; + var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; + }; + var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; + }; + var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + min = Math.min(val, min); + } + } + + return min; + }; + var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + max = Math.max(val, max); + } + } + + return max; + }; + var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + total += val; + n++; + } + } + + return total / n; + }; + var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + + if (begin > 0) { + arr.splice(0, begin); + } + } // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + + + var off = 0; // offset from non-finite values + + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } + }; + var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; + }; + var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; + }; + var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); + }; + var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } + }; + var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); + }; + var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; + }; + var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; // First, get sum of all elements + + var total = 0; + + for (var i = 0; i < length; i++) { + total += v[i]; + } // Now, divide each by the sum of all elements + + + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + + return v; + }; + + var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; + }; + var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; + }; + var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; + }; + var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); + }; // makes a full bb (x1, y1, x2, y2, w, h) from implicit params + + var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } + }; + var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; + }; + var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; + }; + var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; + }; + var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; + }; + var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + + var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; + }; + var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + + if (bb2.x1 > bb1.x2) { + return false; + } // case: one bb to left of other + + + if (bb1.x2 < bb2.x1) { + return false; + } + + if (bb2.x2 < bb1.x1) { + return false; + } // case: one bb above other + + + if (bb1.y2 < bb2.y1) { + return false; + } + + if (bb2.y2 < bb1.y1) { + return false; + } // case: one bb below other + + + if (bb1.y1 > bb2.y2) { + return false; + } + + if (bb2.y1 > bb1.y2) { + return false; + } // otherwise, must have some overlap + + + return true; + }; + var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; + }; + var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); + }; + var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); + }; + var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var cornerRadius = getRoundRectangleRadius(width, height); + var halfWidth = width / 2; + var halfHeight = height / 2; // Check intersections with straight line segments + + var straightLineIntersections; // Top segment, left to right + + { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Right segment, top to bottom + + { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Bottom segment, left to right + + { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Left segment, top to bottom + + { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Check intersections with arc segments + + var arcIntersections; // Top Left + + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Top Right + + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Right + + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Left + + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing + }; + var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; + }; + var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; // if outside the rough bounding box for the bezier, then it can't be a hit + + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } + }; + var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + + if (r < 0) { + return []; + } + + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; + }; + var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + var epsilon = 0.00001; // avoid division by zero while keeping the overall expression close in value + + if (a === 0) { + a = epsilon; + } + + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + + result[5] = result[3] = 0; + + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; + }; + var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; // Use the cubic solving algorithm + + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + + return minDistanceSquared; + }; + var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + + if (dotProduct < 0) { + return hypSq; + } + + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + + return hypSq - adjSq; + }; + var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; // Intersect with vertical line through (x, y) + + var up = 0; // let down = 0; + + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + + if (y3 > y) { + up++; + } // if( y3 < y ){ + // down++; + // } + + } else { + continue; + } + } + + if (up % 2 === 0) { + return false; + } else { + return true; + } + }; + var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); // Gives negative angle + + var angle; + + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); // console.log("base: " + basePoints); + + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + + var points; + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + + return pointInsidePolygonPoints(x, y, points); + }; + var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { + var cutPolygonPoints = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + var squaredCornerRadius = cornerRadius * cornerRadius; + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + cutPolygonPoints[i * 4] = cp0x; + cutPolygonPoints[i * 4 + 1] = cp0y; + cutPolygonPoints[i * 4 + 2] = cp1x; + cutPolygonPoints[i * 4 + 3] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); + + if (squaredDistance <= squaredCornerRadius) { + return true; + } + } + + return pointInsidePolygonPoints(x, y, cutPolygonPoints); + }; + var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + + return vertices; + }; + var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + // Assume CCW polygon winding + + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); // Normalize + + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + + return expandedLineSet; + }; + var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + + if (newLength < 0) { + return []; + } + + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; + }; + var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; + }; // Returns intersections of increasing distance from line's start point + + var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + + if (discriminant < 0) { + return []; + } + + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + + if (inRangeParams.length === 0) { + return []; + } + + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } + }; + var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } + }; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) + + var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + + var _min = 0 - flptThreshold; + + var _max = 1 + flptThreshold; + + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } // Check start point of second line + + + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } // Endpoint of first line + + + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + + return []; + } else { + // Parallel, non-coincident + return []; + } + } + }; // math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) + // intersect a node polygon (pts transformed) + // + // math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) + // intersect the points (no transform) + + var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + + if (width == null) { + doTransform = false; + } + + var points; + + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + + var currentX, currentY, nextX, nextY; + + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + return intersections; + }; + var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + + if (i === 0) { + lines[basePoints.length - 2] = cp0x; + lines[basePoints.length - 1] = cp0y; + } else { + lines[i * 4 - 2] = cp0x; + lines[i * 4 - 1] = cp0y; + } + + lines[i * 4] = cp1x; + lines[i * 4 + 1] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + + for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { + var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); + + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i4 * 2]; + lowestIntersection[1] = intersections[_i4 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + + return lowestIntersection; + } + + return intersections; + }; + var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + + if (lenRatio < 0) { + lenRatio = 0.00001; + } + + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; + }; + var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; + }; + var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } // stretch factors + + + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + + for (var _i5 = 0; _i5 < sides; _i5++) { + x = points[2 * _i5] = points[2 * _i5] * sx; + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + if (minY < -1) { + for (var _i6 = 0; _i6 < sides; _i6++) { + y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); + } + } + + return points; + }; + var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; + }; // Set the default radius, unless half of width or height is smaller than default + + var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); + }; // Set the default radius + + var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); + }; + var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; + }; + var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; + }; // get curve width, height, and control point position offsets as a percentage of node height / width + + var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; + }; + + var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } + }); + var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + + var cy = this._private.cy; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; // Create null matrix + + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + + columnSum[i] = 0; + } // Now, process edges + + + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); // Don't include loops in the matrix + + if (srcId === tgtId) { + continue; + } + + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + + var _n = t * numNodes + s; // Update matrix + + + matrix[_n] += w; // Update column sum + + columnSum[s] += w; + } // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + + + var p = 1.0 / numNodes + additionalProb; // Shorthand + // Traverse matrix, column by column + + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } // Compute dominant eigenvector using power method + + + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } // Multiply matrix with previous result + + + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; // Compute difference (squared module) of both vectors + + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } // If difference is less than the desired threshold, stop iterating + + + if (diff < precision) { + break; + } + } // Construct result + + + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank + + }; // elesfn + + var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 + }); + var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; // add current node to the current options object and call degreeCentrality + + options.root = node; + var currDegree = this.degreeCentrality(options); + + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + + degrees[node.id()] = currDegree.degree; + } + + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + + var id = _node.id(); // add current node to the current options object and call degreeCentrality + + + options.root = _node; + + var _currDegree = this.degreeCentrality(options); + + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; // Now, sum edge weights + + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; // Now, sum incoming edge weights + + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } // Now, sum outgoing edge weights + + + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$n.dc = elesfn$n.degreeCentrality; + elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + + var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null + }); + var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); // Compute closeness for every node and find the maximum closeness + + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + + closenesses[node_i.id()] = currCloseness; + } + + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + + root = this.filter(root)[0]; // we need distance from this node to every other node + + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$m.cc = elesfn$m.closenessCentrality; + elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + + var defaults$d = defaults$g({ + weight: null, + directed: false + }); + var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + + var weighted = weight != null; + var cy = this.cy(); // starting + + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; // A contains the neighborhoods of every node + + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + + var P = {}; + var g = {}; + var d = {}; + var Q = new heap(function (a, b) { + return d[a] - d[b]; + }); // queue + // init dictionaries + + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + + g[sid] = 1; // sigma + + d[sid] = 0; // distance to s + + Q.push(sid); + + while (!Q.empty()) { + var _v = Q.pop(); + + S.push(_v); + + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + + var edgeWeight = weight(edge); + w = w.id(); + + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + + g[w] = 0; + P[w] = []; + } + + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + + P[_w].push(_v); + } + } + } + } + + var e = {}; + + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + + while (S.length > 0) { + var _w2 = S.pop(); + + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + + for (var s = 0; s < V.length; s++) { + _loop(s); + } + + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; // alias + + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$l.bc = elesfn$l.betweennessCentrality; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + /* eslint-disable no-unused-vars */ + + var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [// attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] + }); + /* eslint-enable */ + + var setOptions$3 = function setOptions(options) { + return defaults$c(options); + }; + /* eslint-enable */ + + + var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + + return total; + }; + + var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } + }; + + var normalize = function normalize(M, n) { + var sum; + + for (var col = 0; col < n; col++) { + sum = 0; + + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } + }; // TODO: blocked matrix multiplication? + + + var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + + return C; + }; + + var expand = function expand(M, n, expandFactor + /** power **/ + ) { + var _M = M.slice(0); + + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + + return M; + }; + + var inflate = function inflate(M, n, inflateFactor + /** r **/ + ) { + var _M = new Array(n * n); // M(i,j) ^ inflatePower + + + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + + normalize(_M, n); + return _M; + }; + + var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + + if (v1 !== v2) { + return false; + } + } + + return true; + }; + + var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var cluster = []; + + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + + return clusters; + }; + + var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + + return true; + }; + + var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + + return clusters; + }; + + var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); // Set parameters of algorithm: + + var opts = setOptions$3(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + + + var n = nodes.length, + n2 = n * n; + + var M = new Array(n2), + _M; + + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + + M[j * n + _i2] += sim; + } // Begin Markov cluster algorithm + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + + + addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M ); + + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 3: + + _M = expand(M, n, opts.expandFactor); // Step 4: + + M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached + + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + + iterations++; + } // Build clusters from matrix + + + var clusters = assign$2(M, n, nodes, cy); // Remove duplicate clusters due to symmetry of graph and M matrix + + clusters = removeDuplicates(clusters); + return clusters; + }; + + var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering + }; + + // Common distance metrics for clustering algorithms + + var identity = function identity(x) { + return x; + }; + + var absDiff = function absDiff(p, q) { + return Math.abs(q - p); + }; + + var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); + }; + + var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); + }; + + var sqrt = function sqrt(x) { + return Math.sqrt(x); + }; + + var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); + }; + + var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + + return post(ret); + }; + + var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } + }; // in case the user accidentally doesn't use camel case + + distances['squared-euclidean'] = distances['squaredEuclidean']; + distances['squaredeuclidean'] = distances['squaredEuclidean']; + function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } + } + + var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null + }); + + var setOptions$2 = function setOptions(options) { + return defaults$b(options); + }; + /* eslint-enable */ + + + var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + + var getQ = function getQ(i) { + return attributes[i](node); + }; + + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); + }; + + var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; // Find min, max values for each attribute dimension + + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } // Build k centroids, each represented as an n-dim feature vector + + + for (var c = 0; c < k; c++) { + centroid = []; + + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + + return centroids; + }; + + var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + + if (dist < min) { + min = dist; + index = i; + } + } + + return index; + }; + + var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + + return cluster; + }; + + var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; + }; + + var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + + if (diff > sensitivityThreshold) { + return false; + } + } + } + + return true; + }; + + var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + + return false; + }; + + var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + + return medoids; + }; + + var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + + return cost; + }; + + var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; // Set parameters of algorithm: # of clusters, distance metric, etc. + + var opts = setOptions$2(options); // Begin k-means algorithm + + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; // Step 1: Initialize centroid positions + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } // Step 3: For each of the k clusters, update its centroid + + + isStillMoving = false; + + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } // Update centroids by calculating avg of all nodes within the cluster. + + + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + + newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change + + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); // Begin k-medoids algorithm + + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + // Step 1: Initialize k medoids + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + + isStillMoving = false; // Step 3: For each medoid m, and for each node associated with mediod m, + // select the node with the lowest configuration cost as new medoid. + + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + // Select different medoid if its configuration has the lowest cost + + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + + clusters[m] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + + centroids[_c][dim] = numerator / denominator; + } + } + }; + + var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + + U[n][c] = 1 / sum; + } + } + }; + + var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + + var max; + var index; + + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; // Determine which cluster the node is most likely to belong in + + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + + clusters[index].push(nodes[n]); + } // Turn every array into a collection of nodes + + + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + + return clusters; + }; + + var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); // Begin fuzzy c-means algorithm + + var clusters; + var centroids; + var U; + + var _U; + + var weight; // Step 1: Initialize letiables. + + _U = new Array(nodes.length); + + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + + U = new Array(nodes.length); + + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + + centroids = new Array(opts.k); + + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + + weight = new Array(nodes.length); + + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } // end init FCM + + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 2: Calculate the centroids for each step. + + updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U. + + updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence. + + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + + iterations++; + } // Assign nodes to clusters with highest probability. + + + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; + }; + + var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions + + }); + var linkageAliases = { + 'single': 'min', + 'complete': 'max' + }; + + var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + + return opts; + }; + + var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + + if (_dist < min) { + minKey = key; + min = _dist; + } + } + + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; // Merge two closest clusters + + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; // Update distances with new merged cluster + + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } // Update cached mins + + + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + + mins[key1] = _min; + } + + clusters[_i2].index = _i2; + } // Clean up meta data used for clustering + + + c1.key = c2.key = c1.index = c2.index = null; + return true; + }; + + var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } + }; + + var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } + }; + + var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } + }; + /* eslint-enable */ + + + var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc. + + var opts = setOptions$1(options); + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; // Begin hierarchical algorithm + + + var clusters = []; + var dists = []; // distances between each pair of clusters + + var mins = []; // closest cluster for each cluster + + var index = []; // hash of all clusters by key + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } // Calculate the distance between each pair of clusters + + + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + + dists[i][j] = dist; + dists[j][i] = dist; + + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + + + var merged = mergeClosest(clusters, index, dists, mins, opts); + + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + + var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + + return retClusters; + }; + + var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] + }); + + var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + + var validPrefs = ['median', 'mean', 'min', 'max']; + + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + + return defaults$9(options); + }; + /* eslint-enable */ + + + var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; // nb negative because similarity should have an inverse relationship to distance + + + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); + }; + + var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + + return p; + }; + + var findExemplars = function findExemplars(n, R, A) { + var indices = []; + + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + + return indices; + }; + + var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + + if (index > 0) { + clusters.push(index); + } + } + + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + + return clusters; + }; + + var assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + + var maxI = -1; + var maxSum = -Infinity; + + for (var i = 0; i < ii.length; i++) { + var sum = 0; + + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + + exemplars[ei] = ii[maxI]; + } + + clusters = assignClusters(n, S, exemplars); + return clusters; + }; + + var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Begin affinity propagation algorithm + + + var n; // number of data points + + var n2; // size of matrices + + var S; // similarity matrix (1D array) + + var p; // preference/suitability of a data point to serve as an exemplar + + var R; // responsibility matrix (1D array) + + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; // Initialize and build S similarity matrix + + S = new Array(n2); + + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } // Place preferences on the diagonal of S + + + p = getPreference(S, opts.preference); + + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } // Initialize R responsibility matrix + + + R = new Array(n2); + + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } // Initialize A availability matrix + + + A = new Array(n2); + + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + + var e = new Array(n * opts.minIterations); + + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + + var iter; + + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } // Update A availability matrix + + + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } // Check for convergence + + + var K = 0; + + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + + if (_sum === n) { + // then we have convergence + break; + } + } + } // Identify exemplars (cluster centers) + + + var exemplarsIndices = findExemplars(n, R, A); // Assign nodes to clusters + + var clusterIndices = assign(n, S, exemplarsIndices); + var clusters = {}; + + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + + var clusterIndex = clusterIndices[pos]; + + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + + var retClusters = new Array(exemplarsIndices.length); + + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + + return retClusters; + }; + + var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation + }; + + var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false + }); + var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var d = ele.degree(true); + + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + + subtour.unshift(adj); + subtour.unshift(currentNode); + } + + return subtour; + }; + + var trail = []; + var subtour = []; + subtour = walk(startVertex); + + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } + }; + + var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + + if (otherNodeId !== parent) { + edgeId = edge.id(); + + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; + }; + + var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected + }; + + var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + + if (nodeId === sourceNodeId) { + break; + } + } + + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; + }; + + var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected + }; + + var elesfn$j = {}; + [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); + }); + + /*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + + /* promise states [Promises/A+ 2.1] */ + var STATE_PENDING = 0; + /* [Promises/A+ 2.1.1] */ + + var STATE_FULFILLED = 1; + /* [Promises/A+ 2.1.2] */ + + var STATE_REJECTED = 2; + /* [Promises/A+ 2.1.3] */ + + /* promise object constructor */ + + var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + /* initialize object */ + + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; + /* initial state */ + + this.fulfillValue = undefined; + /* initial value */ + + /* [Promises/A+ 1.3, 2.1.2.2] */ + + this.rejectReason = undefined; + /* initial reason */ + + /* [Promises/A+ 1.5, 2.1.3.2] */ + + this.onFulfilled = []; + /* initial handlers */ + + this.onRejected = []; + /* initial handlers */ + + /* provide optional information-hiding proxy */ + + this.proxy = { + then: this.then.bind(this) + }; + /* support optional executor function */ + + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); + }; + /* promise API methods */ + + + api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); + /* [Promises/A+ 2.2.7] */ + + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); + /* [Promises/A+ 2.2.2/2.2.6] */ + + curr.onRejected.push(resolver(onRejected, next, 'reject')); + /* [Promises/A+ 2.2.3/2.2.6] */ + + execute(curr); + return next.proxy; + /* [Promises/A+ 2.2.7, 3.3] */ + } + }; + /* deliver an action */ + + var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; + /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + + curr[name] = value; + /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + + execute(curr); + } + + return curr; + }; + /* execute all handlers */ + + + var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); + }; + /* execute particular set of handlers */ + + + var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + /* iterate over all handlers, exactly once */ + + var handlers = curr[name]; + curr[name] = []; + /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } + /* [Promises/A+ 2.2.5] */ + + }; + /* execute procedure asynchronously */ + + /* [Promises/A+ 2.2.4, 3.1] */ + + + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); + }; + /* generate a resolver function */ + + + var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') + /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); + /* [Promises/A+ 2.2.7.3, 2.2.7.4] */ + else { + var result; + + try { + result = cb(value); + } + /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ + catch (e) { + next.reject(e); + /* [Promises/A+ 2.2.7.2] */ + + return; + } + + resolve(next, result); + /* [Promises/A+ 2.2.7.1] */ + } + }; + }; + /* "Promise Resolution Procedure" */ + + /* [Promises/A+ 2.3] */ + + + var resolve = function resolve(promise, x) { + /* sanity check arguments */ + + /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + + + var then; + + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } + /* [Promises/A+ 2.3.3.1, 3.5] */ + catch (e) { + promise.reject(e); + /* [Promises/A+ 2.3.3.2] */ + + return; + } + } + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + + + if (typeof then === 'function') { + var resolved = false; + + try { + /* call retrieved "then" method */ + + /* [Promises/A+ 2.3.3.3] */ + then.call(x, + /* resolvePromise */ + + /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + if (y === x) + /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, + /* rejectPromise */ + + /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + promise.reject(r); + }); + } catch (e) { + if (!resolved) + /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); + /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + /* handle other values */ + + + promise.fulfill(x); + /* [Promises/A+ 2.3.4, 2.3.3.4] */ + }; // so we always have Promise.all() + + + api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); + }; + + api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); + }; + + api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); + }; + + var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + + var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } // for future timeline/animations impl + + + this.length = 1; + this[0] = this; + }; + + var anifn = Animation.prototype; + extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + + q.push(this); // add to the animation loop pool + + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + + _p.hooked = true; + } + + return this; + }, + play: function play() { + var _p = this._private; // autorewind + + if (_p.progress === 1) { + _p.progress = 0; + } + + _p.playing = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + + _p.progress = p; + _p.started = false; + + if (wasPlaying) { + this.play(); + } + } + + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + + if (wasPlaying) { + this.pause(); + } + + _p.progress = 1 - _p.progress; + _p.started = false; + + var swap = function swap(a, b) { + var _pa = _p[a]; + + if (_pa == null) { + return; + } + + _p[a] = _p[b]; + _p[b] = _pa; + }; + + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); // swap styles + + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + + if (wasPlaying) { + this.play(); + } + + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + + switch (type) { + case 'frame': + arr = _p.frames; + break; + + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } + }); + anifn.complete = anifn.completed; + anifn.run = anifn.play; + anifn.running = anifn.playing; + + var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return false; + } + + var ele = all[0]; + + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + + return this; + }; + }, + // clearQueue + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + + if (!cy.styleEnabled()) { + return this; + } + + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + + case 'fast': + properties.duration = 200; + break; + } + + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } // override pan w/ panBy if set + + + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } // override pan w/ center if set + + + var center = properties.center || properties.centre; + + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + + if (centerPan != null) { + properties.pan = centerPan; + } + } // override pan & zoom w/ fit if set + + + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } // override zoom (& potentially pan) w/ zoom obj if set + + + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + if (params) { + properties = extend({}, properties, params); + } // manually hook and run the animation + + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + + return this; // chaining + }; + }, + // animate + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } // clear the queue of future animations + + + if (clearQueue) { + _p.animation.queue = []; + } + + if (!jumpToEnd) { + _p.animation.current = []; + } + } // we have to notify (the animation loop doesn't do it for us on `stop`) + + + cy.notify('draw'); + return this; + }; + } // stop + + }; // define + + /** + * 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; + + var isArray_1 = isArray; + + /** 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_1(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol_1(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + var _isKey = isKey; + + /** `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_1(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; + } + + var isFunction_1 = isFunction; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = _root['__core-js_shared__']; + + var _coreJsData = 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); + } + + var _isMasked = isMasked; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.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$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + var _toSource = 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$3 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$3).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_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); + } + + var _baseIsNative = baseIsNative; + + /** + * 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$1(object, key) { + return object == null ? undefined : object[key]; + } + + var _getValue = getValue$1; + + /** + * 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; + } + + var _getNative = getNative; + + /* Built-in method references that are verified to be native. */ + var nativeCreate = _getNative(Object, 'create'); + + var _nativeCreate = nativeCreate; + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; + } + + var _hashClear = 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; + } + + var _hashDelete = hashDelete; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.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$1 ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; + } + + var _hashGet = hashGet; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.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$1.call(data, key); + } + + var _hashHas = hashHas; + + /** 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; + } + + var _hashSet = 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; + + var _Hash = Hash; + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + var _listCacheClear = listCacheClear; + + /** + * 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); + } + + var eq_1 = 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_1(array[length][0], key)) { + return length; + } + } + return -1; + } + + var _assocIndexOf = 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; + } + + var _listCacheDelete = listCacheDelete; + + /** + * 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]; + } + + var _listCacheGet = listCacheGet; + + /** + * 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; + } + + var _listCacheHas = listCacheHas; + + /** + * 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; + } + + var _listCacheSet = 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; + + var _ListCache = ListCache; + + /* Built-in method references that are verified to be native. */ + var Map$1 = _getNative(_root, 'Map'); + + var _Map = Map$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 + }; + } + + var _mapCacheClear = mapCacheClear; + + /** + * 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); + } + + var _isKeyable = 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; + } + + var _getMapData = 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; + } + + var _mapCacheDelete = mapCacheDelete; + + /** + * 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); + } + + var _mapCacheGet = mapCacheGet; + + /** + * 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); + } + + var _mapCacheHas = mapCacheHas; + + /** + * 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; + } + + var _mapCacheSet = 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; + + var _MapCache = 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; + + var memoize_1 = 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_1(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + var _memoizeCapped = 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; + }); + + var _stringToPath = stringToPath; + + /** + * 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; + } + + var _arrayMap = arrayMap; + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 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_1(value)) { + // Recursively convert values (susceptible to call stack limits). + return _arrayMap(value, baseToString) + ''; + } + if (isSymbol_1(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + var _baseToString = 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$1(value) { + return value == null ? '' : _baseToString(value); + } + + var toString_1 = toString$1; + + /** + * 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_1(value)) { + return value; + } + return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); + } + + var _castPath = castPath; + + /** 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_1(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + var _toKey = 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; + } + + var _baseGet = 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; + } + + var get_1 = get; + + var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + var _defineProperty = 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; + } + } + + var _baseAssignValue = baseAssignValue; + + /** 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_1(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } + } + + var _assignValue = assignValue; + + /** 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); + } + + var _isIndex = isIndex; + + /** + * 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_1(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_1(objValue) + ? objValue + : (_isIndex(path[index + 1]) ? [] : {}); + } + } + _assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + var _baseSet = 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); + } + + var set_1 = set; + + /** + * 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; + } + + var _copyArray = copyArray; + + /** + * 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_1(value)) { + return _arrayMap(value, _toKey); + } + return isSymbol_1(value) ? [value] : _copyArray(_stringToPath(toString_1(value))); + } + + var toPath_1 = toPath; + + var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...) + + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + + var path = isPathLike && toPath_1(name); // .data('foo') + + if (p.allowGetting && value === undefined) { + // get + var ret; + + if (single) { + p.beforeGet(single); // check if it's path and a field with the same name doesn't exist + + if (path && single._private[p.field][name] === undefined) { + ret = get_1(single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + + return ret; // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + + if (valid) { + var change = _defineProperty$1({}, name, value); + + p.beforeSet(self, change); + + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set_1(ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } // .data({ 'foo': 'bar' }) + + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + + var _valid = !p.immutableKeys[k]; + + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } // .data(function(){ ... }) + + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + + return _ret; + } + + return self; // maintain chainability + }; // function + }, + // data + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + + }; + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + // .removeData('foo bar') + + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + + if (emptyString(key)) { + continue; + } + + var valid = !p.immutableKeys[key]; // not valid if immutable + + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } // .removeData() + + } else if (names === undefined) { + // then delete all keys + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + + var _keys = Object.keys(_privateFields); + + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + + return self; // maintain chaining + }; // function + } // removeData + + }; // define + + var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; // this is just a wrapper alias of .on() + + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } + }; // define + + // use this module to cherry pick functions into your prototype + var define = {}; + [define$3, define$2, define$1].forEach(function (m) { + extend(define, m); + }); + + var elesfn$i = { + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop() + }; + + var elesfn$h = { + classes: function classes(_classes) { + var self = this; + + if (_classes === undefined) { + var ret = []; + + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + + var changed = []; + var classesSet = new Set$1(_classes); // check and update each ele + + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; // check if ele has all of the passed classes + + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + + if (!eleHasClass) { + changedEle = true; + break; + } + } // check if ele has classes outside of those passed + + + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + + } // for i eles + // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } + }; + elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + + var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' + }; + tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods + + tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name + + tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number + + tokens.id = tokens.variable; // an element id (follows variable conventions) + + (function () { + var ops, op, i; // add @ variants to comparatorOp + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } // add ! variants to comparatorOp + + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + + + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + + tokens.comparatorOp += '|\\!' + op; + } + })(); + + /** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ + var newQuery = function newQuery() { + return { + checks: [] + }; + }; + + /** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ + var Type = { + /** E.g. node */ + GROUP: 0, + + /** A collection of elements */ + COLLECTION: 1, + + /** A filter(ele) function */ + FILTER: 2, + + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + + /** E.g. [foo] */ + DATA_EXIST: 4, + + /** E.g. [?foo] */ + DATA_BOOL: 5, + + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + + /** E.g. :selected */ + STATE: 7, + + /** E.g. #foo */ + ID: 8, + + /** E.g. .foo */ + CLASS: 9, + + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + + /** E.g. #foo > #bar */ + CHILD: 15, + + /** E.g. #foo #bar */ + DESCENDANT: 16, + + /** E.g. $#foo > #bar */ + PARENT: 17, + + /** E.g. $#foo #bar */ + ANCESTOR: 18, + + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 + }; + + var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } + }, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } + }, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } + }, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } + }, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } + }, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } + }, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } + }, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } + }, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } + }, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } + }, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } + }, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } + }, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } + }, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } + }, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } + }, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } + }, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } + }, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } + }, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } + }, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } + }, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } + }, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } + }, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } + }, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } + }, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } + }, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } + }, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } + }].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); + }); + + var lookup = function () { + var selToFn = {}; + var s; + + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + + return selToFn; + }(); + + var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); + }; + var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; + }).join('|') + ')'; + + // so that values get compared properly in Selector.filter() + + var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); + }; + + var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; + }; // NOTE: add new expression syntax here to have it recognised by the parser; + // - a query contains all adjacent (i.e. no separator in between) expressions; + // - the current query is stored in selector[i] + // - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward + + + var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } + }, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + + query.checks.push({ + type: Type.STATE, + value: state + }); + } + }, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } + }, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } + }, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } + }, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } + }, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } + }, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } + }, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; // go on to next query + + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } + }, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + + var _target = newQuery(); + + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } + }, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } + }, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; // we're now populating the child query with expressions that follow + + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _child = newQuery(); + + var _parent = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + + + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + + var _child2 = newQuery(); + + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; // the parent-child query takes the place of the query previously being populated + + _parent2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } + }, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; // we're now populating the descendant query with expressions that follow + + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _descendant = newQuery(); + + var _ancestor = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + + + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + + var _descendant2 = newQuery(); + + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; // the parent-child query takes the place of the query previously being populated + + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } + }, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + + topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type + + topChk.nodes = null; + } + } + }]; + exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); + }); + + /** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ + + var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; + }; + /** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ + + + var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + + return remaining; + }; + /** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ + + + var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); // let the token populate the selector object in currentQuery + + var ret = exprInfo.expr.populate(self, currentQuery, args); + + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; // we're done when there's nothing left to parse + + if (remaining.match(/^\s*$/)) { + break; + } + } + + var lastQ = self[self.length - 1]; + + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + + for (var i = 0; i < self.length; i++) { + var q = self[i]; // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + + return true; // success + }; + /** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ + + + var toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + + var space = function space(val) { + return ' ' + val + ' '; + }; + + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + + case Type.STATE: + { + return value; + } + + case Type.ID: + { + return '#' + value; + } + + case Type.CLASS: + { + return '.' + value; + } + + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + + case Type.TRUE: + { + return ''; + } + } + }; + + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + + var str = ''; + + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + + this.toStringCache = str; + return str; + }; + var parse$1 = { + parse: parse, + toString: toString + }; + + var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + + + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + + case '=': + matches = fieldVal === value; + break; + + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + + default: + matches = false; + break; + } // apply the not op, but null vals for inequalities should always stay non-matching + + + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + + return matches; + }; + var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + + case '!': + return fieldVal ? false : true; + + case '^': + return fieldVal === undefined; + } + }; + var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; + }; + var data$1 = function data(ele, field) { + return ele.data(field); + }; + var meta = function meta(ele, field) { + return ele[field](); + }; + + /** A lookup of `match(check, ele)` functions by `Type` int */ + + var match = []; + /** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against + */ + + var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); + }; + + match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); + }; + + match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); + }; + + match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; + }; + + match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); + }; + + match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); + }; + + match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); + }; + + match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); + }; + + match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); + }; + + match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); + }; + + match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); + }; + + match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); + }; + + match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); + }; + + match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); + }; + + match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); + }; + + match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); + }; + + match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); + }; + + match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); + }; + + match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); + }; + + match[Type.TRUE] = function () { + return true; + }; + + match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); + }; + + match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); + }; + + var filter = function filter(collection) { + var self = this; // for 1 id #foo queries, just get the element + + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, element)) { + return true; + } + } + + return false; + }; + + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + + return collection.filter(selectorFunction); + }; // filter + // does selector match a single element? + + + var matches = function matches(ele) { + var self = this; + + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, ele)) { + return true; + } + } + + return false; + }; // matches + + + var matching = { + matches: matches, + filter: filter + }; + + var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } + }; + + var selfn = Selector.prototype; + [parse$1, matching].forEach(function (p) { + return extend(selfn, p); + }); + + selfn.text = function () { + return this.inputText; + }; + + selfn.size = function () { + return this.length; + }; + + selfn.eq = function (i) { + return this[i]; + }; + + selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); + }; + + selfn.addQuery = function (q) { + this[this.length++] = q; + }; + + selfn.selector = selfn.toString; + + var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (ret) { + return true; + } + } + + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (!ret) { + return false; + } + } + + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; // cheap length check + + if (thisLength !== collectionLength) { + return false; + } // cheap element ref check + + + if (thisLength === 1) { + return this[0] === collection[0]; + } + + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } + }; + elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; + elesfn$g.has = elesfn$g.contains; + elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + + var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; + }; + + var elesfn$f = { + parent: function parent(selector) { + var parents = []; // optimisation for single ele call + + if (this.length === 1) { + var parent = this[0]._private.parent; + + if (parent) { + return parent; + } + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + + if (_parent) { + parents.push(_parent); + } + } + + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + + eles = eles.parent(); + } + + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + + add(this.children()); + return this.spawn(elements, true).filter(selector); + } + }; + + function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + + while (q.length > 0) { + var _ele = q.shift(); + + fn(_ele); + did.add(_ele.id()); + + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + + return eles; + } + + function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (!did.has(child.id())) { + q.push(child); + } + } + } + } // very efficient version of eles.add( eles.descendants() ).forEach() + // for internal use + + + elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); + }; + + function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + + if (!did.has(parent.id())) { + q.push(parent); + } + } + } + + elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); + }; + + function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); + } + + elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); + }; // aliases + + + elesfn$f.ancestors = elesfn$f.parents; + + var fn$5, elesfn$e; + fn$5 = elesfn$e = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + + if (ele) { + return ele._private.data.id; + } + } + }; // aliases + + fn$5.attr = fn$5.data; + fn$5.removeAttr = fn$5.removeData; + var data = elesfn$e; + + var elesfn$d = {}; + + function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + + if (includeLoops === undefined) { + includeLoops = true; + } + + if (self.length === 0) { + return; + } + + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + + if (!includeLoops && edge.isLoop()) { + continue; + } + + degree += callback(node, edge); + } + + return degree; + } else { + return; + } + }; + } + + extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) + }); + + function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + + return ret; + }; + } + + extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) + }); + extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + + return total; + } + }); + + var fn$4, elesfn$c; + + var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + + ele.dirtyBoundingBoxCache(); + } + } + }; + + var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } + }; + fn$4 = elesfn$c = { + position: define.data(positionDef), + // position but no notification to renderer + silentPosition: define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + var _pos = void 0; + + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + + cy.endBatch(); + } + + return this; // chaining + }, + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; // exclude any node that is a descendant of the calling collection + + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + + cy.endBatch(); + } + + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + + if (hasParent) { + parent = parent[0]; + } + + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + + var _parent = hasCompoundNodes ? ele.parent() : null; + + var _hasParent = _parent && _parent.length > 0; + + var _relativeToParent = _hasParent; + + if (_hasParent) { + _parent = _parent[0]; + } + + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } + }; // aliases + + fn$4.modelPosition = fn$4.point = fn$4.position; + fn$4.modelPositions = fn$4.points = fn$4.positions; + fn$4.renderedPoint = fn$4.renderedPosition; + fn$4.relativePoint = fn$4.relativePosition; + var position = elesfn$c; + + var fn$3, elesfn$b; + fn$3 = elesfn$b = {}; + + elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; + }; + + elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; + }; + + elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); // not possible to do on non-compound graphs or with the style disabled + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } // save cycles when batching -- but bounds will be stale (or not exist yet) + + + if (!force && cy.batching()) { + return this; + } + + function update(parent) { + if (!parent.isParent()) { + return; + } + + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; // if children take up zero area then keep position and fall back on stylesheet w/h + + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + + var leftVal = min.width.left.value; + + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + + var rightVal = min.width.right.value; + + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + + var topVal = min.height.top.value; + + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + + var bottomVal = min.height.bottom.value; + + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.compoundBoundsClean || force) { + update(ele); + + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + + return this; + }; + + var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + + return x; + }; + + var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } // don't update with null dim + + + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + }; + + var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); + }; + + var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); + }; + + var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } // always store the individual arrow bounds + + + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } + }; + + var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } // shift by margin and expand by outline and border + + + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; // always store the unrotated label bounds separately + + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); // rotation point (default value for center-center) + + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + + case 'right': + xo = lx1; + break; + } + + switch (valign.value) { + case 'top': + yo = ly2; + break; + + case 'bottom': + yo = ly1; + break; + } + } + + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + + return bounds; + }; // get the bounding box of the elements (in raw model position) + + + var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + + var x, y; // node pos + + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + + var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + + var underlayOpacity = 0; + var underlayPadding = 0; + + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + + var _w = ele.outerWidth(); + + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); // take into account edge width + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { + var pts; + + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + + case 'segments': + case 'taxi': + pts = rstyle.linePts; + break; + } + + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + + } else { + // headless or style disabled + // fallback on source and target positions + ////////////////////////////////////////// + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } // take into account edge width + + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + + } // edges + // handle edge arrow size + ///////////////////////// + + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } // ghost + //////// + + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } // always store the body bounds separately from the labels + + + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } // always store the body bounds separately from the labels + + + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + + } // if displayed + + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + + expandBoundingBox(bounds, 1); + } + + return bounds; + }; + + var getKey = function getKey(opts) { + var i = 0; + + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + return key; + }; + + var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + + var r = function r(x) { + return Math.round(x); + }; + + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } + }; + + var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } // not using def opts => need to build up bb from combination of sub bbs + + + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + + return bb; + }; + + var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + useCache: true + }; + var defBbOptsKey = getKey(defBbOpts); + var filledBbOpts = defaults$g(defBbOpts); + + elesfn$b.boundingBox = function (options) { + var bounds; // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + + this.updateCompoundBounds(!options.useCache); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; + }; + + elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + + this.emitAndNotify('bounds'); + return this; + }; // private helper to get bounding box for custom node positions + // - good for perf in certain cases but currently requires dirtying the rendered style + // - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... + // - try to use for only things like discrete layouts where the node position would change anyway + + + elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + + if (plainObject(fn)) { + var obj = fn; + + fn = function fn() { + return obj; + }; + } + + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; + }; + + fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; + fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; + var bounds = elesfn$b; + + var fn$2, elesfn$a; + fn$2 = elesfn$a = {}; + + var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + + var d = ele.pstyle(opts.name); + + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; + }; + + defineDimFns({ + name: 'width' + }); + defineDimFns({ + name: 'height' + }); + + elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + + if (ele.isParent()) { + ele.updateCompoundBounds(); + + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } + }; + + elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); + }; + + elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); + }; + + var widthHeight = elesfn$a; + + var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } + }; + + var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } + }; + + var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } + }; + + var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); + }; + + var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); + }; + + var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); + }; + + var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); + }; + + var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); + }; + + var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } + }; + + var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); + }; + + var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + + obj[name] = function () { + return ifEdge(this, spec.get); + }; + + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + + return obj; + }, {}); + + var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + + /*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + */ + var Event = function Event(src, props) { + this.recycle(src, props); + }; + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + + + Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } // Put explicitly provided properties onto the event object + + + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } // Create a timestamp if incoming event doesn't have one + + + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if preventDefault exists run it on the original event + + + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if stopPropagation exists run it on the original event + + + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse + }; + + var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") + + var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + + var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function + /*context, listener, eventObj*/ + eventMatches() { + return true; + }, + addEventFields: function + /*context, evt*/ + addEventFields() {}, + callbackContext: function callbackContext(context + /*, listener, eventObj*/ + ) { + return context; + }, + beforeEmit: function + /* context, listener, eventObj */ + beforeEmit() {}, + afterEmit: function + /* context, listener, eventObj */ + afterEmit() {}, + bubble: function + /*context*/ + bubble() { + return false; + }, + parent: function + /*context*/ + parent() { + return null; + }, + context: null + }; + var defaultsKeys = Object.keys(defaults$8); + var emptyOpts = {}; + + function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; + } + + var p = Emitter.prototype; + + var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + + if (ret === false) { + break; + } // allow exiting early + + } + } + }; + + var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); + }; + + var forEachEventObj = function forEachEventObj(self, handler, events) { + if (event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } + }; + + p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; + }; + + p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); + }; + + p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + + if (this.emitting !== 0) { + this.listeners = copyArray$1(this.listeners); + } + + var listeners = this.listeners; + + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback + /*, conf*/ + ) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + + return this; + }; + + p.removeAllListeners = function () { + return this.removeListener('*'); + }; + + p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + + if (!array(extraParams)) { + extraParams = [extraParams]; + } + + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + + if (extraParams != null) { + push(args, extraParams); + } + + self.beforeEmit(self.context, listener, eventObj); + + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + + }; + + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; + }; + + var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener + /*, eventObj*/ + ) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } + }; + + var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + // notify renderer + + + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } + }; + define.eventAliasesOn(elesfn$9); + + var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + + if (include) { + filterEles.push(ele); + } + } + + return filterEles; + } + + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + + var elements = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + + if (!remove) { + elements.push(element); + } + } + + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + + if (colL.has(ele)) { + elements.push(ele); + } + } + + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (!inOther) { + elements.push(ele); + } + } + }; + + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + + if (!toAdd) { + return this; + } + + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var elements = this.spawnSelf(); + + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + + if (add) { + elements.push(ele); + } + } + + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + + if (!toAdd) { + return this; + } + + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var map = _p.map; + + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + + return this; // chaining + }, + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; // remove ele + + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; // replace empty spot with last ele in collection + + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } // the collection is now 1 ele smaller + + + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + + if (!toRemove) { + return this; + } + + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + + return this; // chaining + }, + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val > max) { + max = val; + maxEle = ele; + } + } + + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val < min) { + min = val; + minEle = ele; + } + } + + return { + value: min, + ele: minEle + }; + } + }; // aliases + + var fn$1 = elesfn$8; + fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; + fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; + fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; + fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; + fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; + fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + + var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + + if (ele) { + return ele._private.group; + } + } + }; + + /** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ + + var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } // 'orphan' + + + return 0; + } + + var depthDiff = getDepth(a) - getDepth(b); + + if (depthDiff !== 0) { + return depthDiff; + } + + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } // 'manual' + + + return 0; + } + + var eleDiff = getEleDepth(a) - getEleDepth(b); + + if (eleDiff !== 0) { + return eleDiff; + } + + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + + if (zDiff !== 0) { + return zDiff; + } // compare indices in the core (order added to graph w/ last on top) + + + return a.poolIndex() - b.poolIndex(); + }; + + var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + + if (ret === false) { + break; + } // exit each early on return false + + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + + if (end == null) { + end = thisSize; + } + + if (start == null) { + start = 0; + } + + if (start < 0) { + start = thisSize + start; + } + + if (end < 0) { + end = thisSize + end; + } + + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + + if (!ele) { + return undefined; + } // let cy = ele.cy(); + + + var _p = ele._private; + var group = _p.group; + + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } + }; + elesfn$6.each = elesfn$6.forEach; + + var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty$1({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } + }; + + defineSymbolIterator(); + + var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false + }); + var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } // sanitise the dimensions for external layouts (avoid division by zero) + + + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + + var fnMem = memoize$1(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + + var bb = makeBoundingBox(); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + + return bb; + }; + + var bb = spacingBb(); + var getFinalPos = memoize$1(function (node, i) { + var newPos = fnMem(node, i); + + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + + return newPos; + }, getMemoizeKey); + + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + + if (options.fit) { + cy.fit(options.eles, options.padding); + } + + if (options.zoom != null) { + cy.zoom(options.zoom); + } + + if (options.pan) { + cy.pan(options.pan); + } + + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + + return this; // chaining + }, + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } + }; // aliases: + + elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + + function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } + } + + function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; + } + + function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + + if (ele) { + return styleCache(key, selfFn, ele); + } + }; + } + + var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + + if (!cy.styleEnabled()) { + return this; + } + + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } // let changedEles = style.apply( updatedEles ); + + + var changedEles = updatedEles; + + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + + if (!cy.styleEnabled()) { + return; + } + + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var ele = this[0]; + + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + + return this; // chaining + }, + removeStyle: function removeStyle(names) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + var eles = this; + + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return 1; + } + + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + + if (!hasCompoundNodes) { + return parentOpacity; + } + + var parents = !_p.data.parent ? null : ele.parents(); + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } + }; + + function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + + if (!parentOk(parent)) { + return false; + } + } + } + + return true; + } + + function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return true; + } + + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele) { + var _p = ele._private; + + if (!ok(ele)) { + return false; + } + + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; + } + + var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); + }); + elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace + })); + var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); + }); + var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); + }); + elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace + })); + + elesfn$4.noninteractive = function () { + var ele = this[0]; + + if (ele) { + return !ele.interactive(); + } + }; + + var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); + }); + var edgeVisibleViaNode = eleTakesUpSpace; + elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode + })); + + elesfn$4.hidden = function () { + var ele = this[0]; + + if (ele) { + return !ele.visible(); + } + }; + + elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); + }); + elesfn$4.bypass = elesfn$4.css = elesfn$4.style; + elesfn$4.renderedCss = elesfn$4.renderedStyle; + elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; + elesfn$4.pstyle = elesfn$4.parsedStyle; + + var elesfn$3 = {}; + + function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; // e.g. cy.nodes().select( data, handler ) + + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + + if (overrideAble !== undefined) { + able = overrideAble; + + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + + } + } + + if (able) { + ele._private[params.field] = params.value; + + if (changed) { + changedEles.push(ele); + } + } + } + + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + + changedColl.emit(params.event); + + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + + return this; + }; + } + + function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + + if (val !== undefined) { + return val; + } + } + + return ele._private[params.field]; + } + }; + + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); + } + + defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' + }); + defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' + }); + defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' + }); + defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' + }); + elesfn$3.deselect = elesfn$3.unselect; + + elesfn$3.grabbed = function () { + var ele = this[0]; + + if (ele) { + return ele._private.grabbed; + } + }; + + defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' + }); + defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' + }); + + elesfn$3.inactive = function () { + var ele = this[0]; + + if (ele) { + return !ele._private.active; + } + }; + + var elesfn$2 = {}; // DAG functions + //////////////// + + var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var disqualified = false; + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + + if (!disqualified) { + ret.push(ele); + } + } + + return this.spawn(ret, true).filter(selector); + }; + }; + + var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + + return this.spawn(oEles, true).filter(selector); + }; + }; + + var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + + if (next.length === 0) { + break; + } // done if none left + + + var newNext = false; + + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + + if (!newNext) { + break; + } // done if touched all outgoers already + + + eles = next; + } + + return this.spawn(sEles, true).filter(selector); + }; + }; + + elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } + }; + + extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) + }); // Neighbourhood functions + ////////////////////////// + + extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); // for each connected edge, add the edge and the other node + + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; // need check in case of loop + + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } // add connected edge + + + elements.push(edge[0]); + } + } + + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } + }); // aliases + + elesfn$2.neighbourhood = elesfn$2.neighborhood; + elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; + elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions + ///////////////// + + extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) + }); + + function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + + if (src) { + sources.push(src); + } + } + + return this.spawn(sources, true).filter(selector); + }; + } + + extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') + }); + + function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; // get elements if a selector is specified + + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + + if (!edgeConnectsThisAndOther) { + continue; + } + + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + + elements.push(edge); + } + } + + return this.spawn(elements, true); + }; + } + + extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + + if (!node.isNode()) { + continue; + } + + var edges = node._private.edges; + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + + if (!edge.isEdge()) { + continue; + } + + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') + }); + + function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; // look at all the edges in the collection + + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; // look at edges connected to the src node of this edge + + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + + return this.spawn(elements, true).filter(selector); + }; + } // Misc functions + ///////////////// + + + extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + + if (unvisited.empty()) { + return self.spawn(); + } + + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + + do { + _loop(); + } while (unvisited.length > 0); + + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } + }); + elesfn$2.componentsOf = elesfn$2.components; + + var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + + var map = new Map$2(); + var createdElements = false; + + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { + createdElements = true; // make elements from json and restore all at once later + + var eles = []; + var elesIds = new Set$1(); + + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + + if (json.data == null) { + json.data = {}; + } + + var _data = json.data; // make sure newly created elements have valid ids + + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + + elements = eles; + } + + this.length = 0; + + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + + if (element$1 == null) { + continue; + } + + var id = element$1._private.data.id; + + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + + this[this.length] = element$1; + this.length++; + } + } + + this._private = { + eles: this, + cy: cy, + + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + + return this.lazyMap; + }, + + set map(m) { + this.lazyMap = m; + }, + + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$2(); + var eles = this.eles; + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + + if (unique) { + this._private.map = map; + } // restore the elements if we created them from json + + + if (createdElements && !removed) { + this.restore(); + } + }; // Functions + //////////////////////////////////////////////////////////////////////////////////////////////////// + // keep the prototypes in sync (an element has the same functions as a collection) + // and use elefn and elesfn as shorthands to the prototypes + + + var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); + + elesfn$1.instanceString = function () { + return 'collection'; + }; + + elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); + }; + + elesfn$1.spawnSelf = function () { + return this.spawn(this); + }; + + elesfn$1.cy = function () { + return this._private.cy; + }; + + elesfn$1.renderer = function () { + return this._private.cy.renderer(); + }; + + elesfn$1.element = function () { + return this[0]; + }; + + elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } + }; + + elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); + }; + + elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); + }; + + elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + + var entry = this._private.map.get(id); + + return entry ? entry.ele : new Collection(cy); // get ele or empty collection + }; + + elesfn$1.$id = elesfn$1.getElementById; + + elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; + }; + + elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; + }; + + elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; + }; + + elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + + if (ele == null && obj) { + return this; + } // can't set to no eles + + + if (ele == null) { + return undefined; + } // can't get from no eles + + + var p = ele._private; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + + move = true; + } + + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + + move = true; + } + + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + + if (obj.position) { + ele.position(obj.position); + } // ignore group -- immutable + + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + + if (obj.classes != null) { + ele.classes(obj.classes); + } + + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } + }; + + elesfn$1.jsons = function () { + var jsons = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + + return jsons; + }; + + elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + + return new Collection(cy, elesArr); + }; + + elesfn$1.copy = elesfn$1.clone; + + elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; // create arrays of nodes and edges, since we need to + // restore the nodes first + + var nodes = []; + var edges = []; + var elements; + + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } // keep nodes first in the array and edges after + + + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + + elements = nodes.concat(edges); + var i; + + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; // now, restore each element + + + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; // the traversal cache should start fresh when ele is added + + _ele2.clearTraversalCache(); // set id and validate + + + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); // can't create element if it has empty string as id or non-string id + + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); // can't create element if one already has that id + + removeFromElements(); + continue; + } + + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + + if (pos.y == null) { + pos.y = 0; + } + } + + if (_ele2.isEdge()) { + // extra checks for edges + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); // only one edge in node if loop + + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + + tgt._private.edges.push(edge); + } + + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + // create mock ids / indexes maps for element so it can be used like collections + + + _private.map = new Map$2(); + + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + + _private.removed = false; + + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + // do compound node sanity checks + + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + + var parentId = _data4.parent; + var specifiedParent = parentId != null; + + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + // exit or we loop forever + + break; + } + + ancestor = ancestor.parent(); + } + + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + + node._private.parent = parent[0]; // let the core know we have a compound graph + + cy_p.hasCompoundNodes = true; + } + } // else + + } // if specified parent + + } // for each node + + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + + if (_ele3.isNode()) { + continue; + } // adding an edge invalidates the traversal caches for the parallel edges + + + _ele3.parallelEdges().clearTraversalCache(); // adding an edge invalidates the traversal cache for the connected nodes + + + _ele3.source().clearTraversalCache(); + + _ele3.target().clearTraversalCache(); + } + + var toUpdateStyle; + + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + + return self; // chainability + }; + + elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; + }; + + elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; + }; + + elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; // add connected edges + + function addConnectedEdges(node) { + var edges = node._private.edges; + + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } // add descendant nodes + + + function addChildren(node) { + var children = node._private.children; + + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); // removing an edges invalidates the traversal cache for its nodes + + node.clearTraversalCache(); + } + + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + + var alteredParents = []; + alteredParents.ids = {}; + + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + + self.dirtyCompoundBoundsCache(); + + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + + var tgt = _ele4.target()[0]; + + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + + var pllEdges = _ele4.parallelEdges(); + + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } // check to see if we have a compound graph or not + + + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + + var removedElements = new Collection(this.cy(), elesToRemove); + + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } // the parents who were modified by the removal need their style updated + + + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + + return removedElements; + }; + + elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + + var notifyRenderer = false; + var modifyPool = false; + + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + eles.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + + if (tgtExists) { + _data5.target = tgtId; + } + } + } + + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + updated.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } + + return this; + }; + + [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); + }); + + var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; // add the elements + + if (elementOrCollection(opts)) { + var eles = opts; + + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + + elements = new Collection(cy, jsons); + } + } // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + + _jsons2.push(json); + } + } + } + + elements = new Collection(cy, _jsons2); + } // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + + return collection.remove(); + } + }; + + /* global Float32Array */ + + /*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + function generateCubicBezier(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 = typeof Float32Array !== 'undefined'; + /* 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 _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * 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 f(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; + } + + for (;;) { + /* 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]; + }; + }; + }(); + + var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; + }; + + var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier + }; + + function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + + if (start === end) { + return end; + } + + var val = easingFn(start, end, percent); + + if (type == null) { + return val; + } + + if (type.roundValue || type.color) { + val = Math.round(val); + } + + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + + return val; + } + + function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } + } + + function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + + return easedArr; + } + + return undefined; + } + + function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + + var name, args; + + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + + var easing = ani_p.easingImpl; + var percent; + + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + + if (ani_p.applying) { + percent = ani_p.progress; + } + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (ani_p.delay == null) { + // then update + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + + if (endPos && isEles && !self.locked()) { + var newPos = {}; + + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + + self.position(newPos); + } + + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + + self.emit('pan'); + } + + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + + self.emit('zoom'); + } + + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + + var props = ani_p.style; + + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + + self.emit('style'); + } // if + + } + + ani_p.progress = percent; + return percent; + } + + function valid(start, end) { + if (start == null || end == null) { + return false; + } + + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + + return false; + } + + function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; + } + + function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; // if nothing currently animating, get something from the queue + + if (current.length === 0) { + var next = queue.shift(); + + if (next) { + current.push(next); + } + } + + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + + _callbacks.splice(0, _callbacks.length); + }; // step and remove if done + + + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + + if (!ani_p.playing && !ani_p.applying) { + continue; + } // an apply() while playing shouldn't do anything + + + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + + step$1(ele, ani, now, isCore); + + if (ani_p.applying) { + ani_p.applying = false; + } + + callbacks(ani_p.frames); + + if (ani_p.step != null) { + ani_p.step(now); + } + + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + + ranAnis = true; + } + + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + + return ranAnis; + } // stepElement + // handle all eles + + + var ranEleAni = false; + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + + var ranCoreAni = stepOne(cy, true); // notify renderer + + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } // remove elements from list of currently animating if its queues are empty + + + eles.unmerge(doneEles); + cy.emit('step'); + } // stepAll + + var corefn$8 = { + // pull in animation functions + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + + var renderer = cy.renderer(); + + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } + }; + + var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } + }; + + var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } + }; + define.eventAliasesOn(elesfn); + + var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } + }; + corefn$7.jpeg = corefn$7.jpg; + + var corefn$6 = { + layout: function layout(options) { + var cy = this; + + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + + var name = options.name; + var Layout = cy.extension('layout', name); + + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + + var eles; + + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } + }; + corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + + var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + + if (eventEles != null) { + eles.merge(eventEles); + } + + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + + var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528 + + if (this.destroyed() || !renderer) { + return; + } + + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + + if (_p.batchCount == null) { + _p.batchCount = 0; + } + + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + + if (_p.batchCount === 0) { + return this; + } + + _p.batchCount--; + + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + + var renderer = this.renderer(); // notify the renderer of queued eles and event types + + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } + }; + + var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false + }); + var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + + if (domEle) { + domEle._cyreg = null; + + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + + cy._private.renderer = null; // to be extra safe, remove the ref + + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } + }; + corefn$4.invalidateDimensions = corefn$4.resize; + + var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + + return new Collection(this, eles, opts.unique, opts.removed); + } + + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + + if (selector) { + return nodes.filter(selector); + } + + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + + if (selector) { + return edges.filter(selector); + } + + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } + }; // aliases + + corefn$3.elements = corefn$3.filter = corefn$3.$; + + var styfn$8 = {}; // keys for style blocks, e.g. ttfftt + + var TRUE = 't'; + var FALSE = 'f'; // (potentially expensive calculation) + // apply the style to the element based on + // - its bypass + // - what selectors match it + + styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + + if (cxtMeta.empty) { + continue; + } + + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + + var hintsDiff = self.updateStyleHints(ele); + + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + + return updatedEles; + }; + + styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + + if (cachedVal) { + return cachedVal; + } + + var diffProps = []; + var addedProp = {}; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + + var laterCxtOverrides = false; + + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + + } // if + + } // for contexts + + + cache[dualCxtKey] = diffProps; + return diffProps; + }; + + styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; // get the cxt key + + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; + }; // gets a computed ele style object based on matched contexts + + + styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; // if already computed style, returned cached copy + + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + + var style = { + _private: { + key: cxtKey + } + }; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + + if (!hasCxt) { + continue; + } + + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + + cxtStyles[cxtKey] = style; + return style; + }; + + styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } // save cycles when the context prop doesn't need to be applied + + + if (eleProp === cxtProp) { + continue; + } // save cycles when a mapped context prop doesn't need to be applied + + + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + + return { + diffProps: retDiffProps + }; + }; + + styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + + var oldStyleKey = _p.styleKey; + + if (ele.removed()) { + return false; + } + + var isNode = _p.group === 'nodes'; // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + + + var N = 2000000000; + + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + + if (parsedProp == null) { + continue; + } + + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } // might not be a number if it allows enums + + + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } // overall style key + // + + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + + _p.styleKey = combineHashes(hash[0], hash[1]); // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } // node + // + + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + + return oldStyleKey !== _p.styleKey; + }; + + styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; + }; // apply a property to the style (for internal use) + // returns whether application was successful + // + // now, this function flattens the property, and here's how: + // + // for parsedProp:{ bypass: true, deleteBypass: true } + // no property is generated, instead the bypass property in the + // element's style is replaced by what's pointed to by the `bypassed` + // field in the bypass property (i.e. restoring the property the + // bypass was overriding) + // + // for parsedProp:{ mapped: truthy } + // the generated flattenedProp:{ mapping: prop } + // + // for parsedProp:{ bypass: true } + // the generated flattenedProp:{ bypassed: parsedProp } + + + styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + if (prop && prop.name.substr(0, 3) === 'pie') { + warn('The pie style properties are deprecated. Create charts using background images instead.'); + } // edge sanity checks to prevent the client from making serious mistakes + + + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } // check if we need to delete the current bypass + + + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; // put the property in the style objects + + + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + + if (fieldVal == null) { + printMappingErr(); + return false; + } + + var percent; + + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } // make sure to bound percent value + + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + // direct mapping + + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + + var _fieldVal = _p.data; + + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + + flatProp.mapping = copy(prop); // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } // if the property is a bypass property, then link the resultant property to the original one + + + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + + checkTriggers(); + return true; + }; + + styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } + }; // updates the visual style for all elements (useful for manual style modification after init) + + + styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); + }; // diffProps : { name => { prev, next } } + + + styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + + if (props.length > 0 && duration > 0) { + var style = {}; // build up the style to animate towards + + var anyPrev = false; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + + if (!diffProp) { + continue; + } + + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } // consider px values + + + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + + initVal = fromProp.pfValue + initDt * diff; // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + + initVal = fromProp.value + initDt * diff; // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } // the previous value is good for an animation only if it's different + + + if (diff) { + style[prop] = toProp.strValue; // to val + + this.applyBypass(ele, prop, initVal); // from val + + anyPrev = true; + } + } // end if props allow ani + // can't transition if there's nothing previous to transition from + + + if (!anyPrev) { + return; + } + + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } + }; + + styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } + }; + + styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); + }; + + styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + + if ( // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + }); + }; + + styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); + }; + + var styfn$7 = {}; // bypasses are applied to an existing style on an element, and just tacked on temporarily + // returns true iff application was successful for at least 1 specified property + + styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; // put all the properties (can specify one or many) in an array after parsing them + + if (name === '*' || name === '**') { + // apply to all property names + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } // we've failed if there are no valid properties + + + if (props.length === 0) { + return false; + } // now, apply the bypass properties on the elements + + + var ret = false; // return true if at least one succesful bypass applied + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + + if (ret) { + this.updateStyleHints(ele); + } + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + + return ret; + }; // only useful in specific cases like animation + + + styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + + if (prop.pfValue != null) { + prop.pfValue = value; + } + + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + + this.updateStyleHints(ele); + } + + this.checkTriggers(ele, name, oldValue, value); + } + }; + + styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); + }; + + styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + + var value = ''; // empty => remove bypass + + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + + this.updateStyleHints(ele); + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + }; + + var styfn$6 = {}; // gets what an em size corresponds to in pixels relative to a dom element + + styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } + }; // gets css property from the core container + + + styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + var containerWindow = cy.window(); + + if (containerWindow && domElement && containerWindow.getComputedStyle) { + return containerWindow.getComputedStyle(domElement).getPropertyValue(propName); + } + }; + + var styfn$5 = {}; // gets the rendered style for an element + + styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } + }; // gets the raw style for an element + + + styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + + return rstyle; + } + }; + + styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; + }; + + styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + + if (prop.alias) { + prop = prop.pointsTo; + } + + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + + return null; + } + }; + + styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + + if (styleProp) { + rstyle[name] = styleProp; + } + } + + return rstyle; + }; + + styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + + if (style) { + var names = Object.keys(style); + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + + if (styleProp) { + rstyle.push(styleProp); + } + } + } + + return rstyle; + }; + + styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + + return hash; + }; + + styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + + var styfn$4 = {}; + + styfn$4.appendFromJson = function (json) { + var style = this; + + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; + }; // accessible cy.style() function + + + styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; + }; // get json from cy.style() api + + + styfn$4.json = function () { + var json = []; + + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + + return json; + }; + + var styfn$3 = {}; + + styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; // remove comments from the style string + + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + + if (nothingLeftToParse) { + break; + } + + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + + selAndBlockStr = selAndBlock[0]; // parse the selector + + var selectorStr = selAndBlock[1]; + + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); // skip this selector and block + + removeSelAndBlockFromRemaining(); + continue; + } + } // parse the block of properties and values + + + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + + if (_nothingLeftToParse) { + break; + } + + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + var parsedProp = style.parse(propStr, valStr); + + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } // put the parsed block in the style + + + style.selector(selectorStr); + + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + + removeSelAndBlockFromRemaining(); + } + + return style; + }; + + styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; + }; + + var styfn$2 = {}; + + (function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it + + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials', 'null'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool + }, { + name: 'text-events', + type: t.bool + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.nonNegativeInt, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; // pie backgrounds for nodes + + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } // edge arrows + + + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); // define aliases + + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; // list of property names + + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); // allow access of properties by name ( e.g. style.properties.height ) + + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } // map aliases + + + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; // add alias prop for parsing + + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } + })(); + + styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; + }; + + styfn$2.getDefaultProperties = function () { + var _p = this._private; + + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'taxi-turn': '50%', + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + + if (prop.pointsTo) { + continue; + } + + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + + _p.defaultProperties = parsedProps; + return _p.defaultProperties; + }; + + styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; + }; + + var styfn$1 = {}; // a caching layer for property parsing + + styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + + + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; + }; + + styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + + return prop; + }; // parse a property; return null on invalid; return parsed property otherwise + // fields : + // - name : the name of the property + // - value : the parsed, native-typed value of the property + // - strValue : a string value that represents the property value in valid css + // - bypass : true iff the property is a bypass property + + + styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + + if (!property) { + return null; + } // return null on property of unknown name + + + if (value === undefined) { + return null; + } // can't assign undefined + // the property may be an alias + + + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + + var valueIsString = string(value); + + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + + var type = property.type; + + if (!type) { + return null; + } // no type, no luck + // check if bypass is null or empty string (i.e. indication to delete bypass property) + + + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } // check if value is a function used as a mapper + + + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } // check if value is mapped + + + var data, mapData; + + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + if (type.multiple) { + return false; + } // impossible to map to num + + + var _mapped = types.mapData; // we can map only if the type is a colour or a number + + if (!(type.color || type.number)) { + return false; + } + + var valueMin = this.parse(name, mapData[4]); // parse to validate + + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + + var valueMax = this.parse(name, mapData[5]); // parse to validate + + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + // check if valueMin and valueMax are the same + + + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } // several types also allow enums + + + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; + }; // check the type and return the appropriate object + + + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + + + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid + + if (isNaN(value) && type.enums === undefined) { + return null; + } // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + + + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } // check if value must be an integer + + + if (type.integer && !integer(value)) { + return null; + } // check value is within range + + + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; // normalise value in pixels + + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } // normalise value in ms + + + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } // normalise value in rad + + + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } // normalize value in % + + + if (units === '%') { + ret.pfValue = value / 100; + } + + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + + if (propsStr === 'none') ; else { + // go over each prop + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + + if (props.length === 0) { + return null; + } + } + + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + + if (!tuple) { + return null; + } + + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + + if (enumProp) { + return enumProp; + } + } + + var regexes = type.regexes ? type.regexes : [type.regex]; + + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + + var m = regex.exec(value); + + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } + }; + + var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); + }; + + var styfn = Style.prototype; + + styfn.instanceString = function () { + return 'style'; + }; // remove all contexts + + + styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining + }; + + styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; + }; // builds a style object for the 'core' selector + + + styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); + }; // create a new context from the specified selector string and switch to that context + + + styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining + }; // add one or many css rules to the current context + + + styfn.css = function () { + var self = this; + var args = arguments; + + if (args.length === 1) { + var map = args[0]; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } // do nothing if args are invalid + + + return this; // chaining + }; + + styfn.style = styfn.css; // add a single css rule to the current context + + styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); // add property to current context if valid + + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + + if (property.mapped) { + this[i].mappedProperties.push(property); + } // add to core style if necessary + + + var currentSelectorIsCore = !this[i].selector; + + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + + return this; // chaining + }; + + styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + + return this; + }; // static function + + + Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; + }; + + Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); + }; + + [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); + }); + Style.types = styfn.types; + Style.properties = styfn.properties; + Style.propertyGroups = styfn.propertyGroups; + Style.propertyGroupNames = styfn.propertyGroupNames; + Style.propertyGroupKeys = styfn.propertyGroupKeys; + + var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } + }; + + var defaultSelectionType = 'single'; + var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + + return this; // chaining + }, + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + + return this; // chaining + }, + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + + return this; // chaining + }, + selectionType: function selectionType(selType) { + var _p = this._private; + + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + + return this; // chaining + }, + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + + return this; // chaining + }, + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + + return this; // chaining + }, + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + + return this; // chaining + }, + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + + return this; // chaining + }, + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + switch (args.length) { + case 0: + // .pan() + return pan; + + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x = x; + } + + if (number$1(y)) { + pan.y = y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + + dim = args[0]; + val = args[1]; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + if (!this._private.panningEnabled) { + return this; + } + + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x += x; + } + + if (number$1(y)) { + pan.y += y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + + var bb; + + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); // crop zoom + + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + + var zoom; + var bail = false; + + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } // crop zoom + + + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params + + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + + if (vp == null || !vp.zoomed) { + return this; + } + + _p.zoom = vp.zoom; + + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + + var zoomFailed = false; + var panFailed = false; + + if (!opts) { + return this; + } + + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + + if (!plainObject(opts.pan)) { + panDefd = false; + } + + if (!zoomDefd && !panDefd) { + return this; + } + + if (zoomDefd) { + var z = opts.zoom; + + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + + if (!panFailed) { + events.push('pan'); + } + } + + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + + return this; // chaining + }, + center: function center(elements) { + var pan = this.getCenterPan(elements); + + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + var cy = this; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = cy.window().getComputedStyle(container); + + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } + }; // aliases + + corefn$1.centre = corefn$1.center; // backwards compatibility + + corefn$1.autolockNodes = corefn$1.autolock; + corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + + var fn = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) + }; // aliases + + fn.attr = fn.data; + fn.removeAttr = fn.removeData; + + var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + + reg = reg || {}; + + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + + + reg.cy = cy; + var head = _window !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + + this.createEmitter(); // set selection type + + this.selectionType(options.selectionType); // init zoom bounds + + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; // start with the default stylesheet so we have something before loading an external stylesheet + + + if (_p.styleEnabled) { + cy.setStyle([]); + } // create the renderer + + + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + + cy.initRenderer(rendererOptions); + + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); // remove old elements + + var oldEles = cy.mutableElements(); + + if (oldEles.length > 0) { + oldEles.remove(); + } + + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; // init style + + if (_p.styleEnabled) { + cy.style().append(initStyle); + } // initial load + + + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; // if a ready callback is specified as an option, the bind it + + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } // bind all the ready handlers registered before creating this instance + + + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + + cy.emit('ready'); + }, options.done); + }); + }; + + var corefn = Core.prototype; // short alias + + extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + + return this; // chaining + }, + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + + return this; + }, + container: function container() { + return this._private.container || null; + }, + window: function window() { + var container = this._private.container; + if (container == null) return _window; + var ownerDocument = this._private.container.ownerDocument; + + if (ownerDocument === undefined || ownerDocument == null) { + return _window; + } + + return ownerDocument.defaultView || _window; + }, + mount: function mount(container) { + if (container == null) { + return; + } + + var cy = this; + var _p = cy._private; + var options = _p.options; + + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.elements) { + var idInJson = {}; + + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + + var id = '' + json.data.id; // id must be string + + var ele = cy.getElementById(id); + idInJson[id] = true; + + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + + cy.add(toAdd); + + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + + _ele.json(_json); + } + }; + + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + + if (array(elements)) { + updateEles(elements, gr); + } + } + } + + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); // so that children are not removed w/parent + + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + + if (obj.style) { + cy.style(obj.style); + } + + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + + if (obj.data) { + cy.data(obj.data); + } + + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + + if (obj[f] != null) { + cy[f](obj[f]); + } + } + + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + + if (!json.elements[group]) { + json.elements[group] = []; + } + + json.elements[group].push(ele.json()); + }); + } + + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } + }); + corefn.$id = corefn.getElementById; + [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); + }); + + /* eslint-disable no-unused-vars */ + + var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + var deprecatedOptionDefaults = { + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also + acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops + + }; + /* eslint-enable */ + + var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); + }; + + var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); + }; + + function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); + } + + BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + + var depths = []; + var foundByBfs = {}; + + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; // find the depths of the nodes + + + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); // check for nodes not found by bfs + + var orphanNodes = []; + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } // assign the nodes a depth and index + + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + + if (eInfo.depth <= maxDepth) { + if (!options.acyclic && shifted[id]) { + return null; + } + + var newDepth = maxDepth + 1; + changeDepth(ele, newDepth); + shifted[id] = newDepth; + return true; + } + + return false; + }; // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + + + if (directed && maximal) { + var Q = []; + var shifted = {}; + + var enqueue = function enqueue(n) { + return Q.push(n); + }; + + var dequeue = function dequeue() { + return Q.shift(); + }; + + nodes.forEach(function (n) { + return Q.push(n); + }); + + while (Q.length > 0) { + var _ele3 = dequeue(); + + var didShift = adjustMaximally(_ele3, shifted); + + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + // find min distance we need to leave between nodes + + var minDistance = 0; + + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } // get the weighted percent for an element based on its connectivity to other levels + + + var cachedWeightedPercent = {}; + + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + + var bf = getInfo(neighbor); + + if (bf == null) { + continue; + } + + var index = bf.index; + var depth = bf.depth; // unassigned neighbours shouldn't affect the ordering + + if (index == null || depth == null) { + continue; + } + + var nDepth = depths[depth].length; + + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + + samples = Math.max(1, samples); + percent = percent / samples; + + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; // rearrange the indices in each depth level based on connectivity + + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } // sort each level to make connected nodes closer + + + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + + assignDepthsAt(_i6); + } // assign orphan nodes to a new top-level depth + + + var orphanDepth = []; + + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining + }; + + var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function CircleLayout(options) { + this.options = extend({}, defaults$6, options); + } + + CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } // calculate the radius + + + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); + } + + ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + + var maxNodeSize = 0; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; // calculate the node value + + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); // for style mapping + + node._private.scratch.concentric = value; + } // in case we used the `concentric` in style + + + nodes.updateStyle(); // calculate max size now based on potentially updated mappers + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + + var nbb = _node.layoutDimensions(options); + + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } // sort node values in descreasing order + + + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); // put the values into levels + + var levels = [[]]; + var currentLevel = levels[0]; + + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + + currentLevel.push(val); + } // create positions from levels + + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } // find the metrics for each level + + + var r = 0; + + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); // calculate the radius + + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + level.r = r; + r += minDist; + } + + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + + _r = 0; + + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + + if (_i5 === 0) { + _r = _level2.r; + } + + _level2.r = _r; + _r += rDeltaMax; + } + } // calculate the node positions + + + var pos = {}; // id => position + + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } // position the nodes + + + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining + }; + + /* + The CoSE layout was written by Gerardo Huck. + https://www.linkedin.com/in/gerardohuck/ + + Based on the following article: + http://dl.acm.org/citation.cfm?id=1498047 + + Modifications tracked on Github. + */ + var DEBUG; + /** + * @brief : default layout options + */ + + var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 + }; + /** + * @brief : constructor + * @arg options : object containing layout options + */ + + function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; + } + /** + * @brief : runs the layout + */ + + + CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } // Set DEBUG - Global variable + + + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } // Initialize layout info + + + var layoutInfo = createLayoutInfo(cy, layout, options); // Show LayoutInfo contents if debugging + + if (DEBUG) { + printLayoutInfo(layoutInfo); + } // If required, randomize node positions + + + if (options.randomize) { + randomizePositions(layoutInfo); + } + + var startTime = performanceNow(); + + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); // Fit the graph if necessary + + if (true === options.fit) { + cy.fit(options.padding); + } + }; + + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } // Do one step in the phisical simulation + + + step(layoutInfo, options); // Update temperature + + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + + return true; + }; + + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); // Layout has finished + + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + + var i = 0; + var loopRet = true; + + if (options.animate === true) { + var frame = function frame() { + var f = 0; + + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + + if (now - startTime >= options.animationThreshold) { + refresh(); + } + + requestAnimationFrame(frame); + } + }; + + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + + separateComponents(layoutInfo, options); + done(); + } + + return this; // chaining + }; + /** + * @brief : called on continuous layouts to stop them before they finish + */ + + + CoseLayout.prototype.stop = function () { + this.stopped = true; + + if (this.thread) { + this.thread.stop(); + } + + this.emit('layoutstop'); + return this; // chaining + }; + + CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + + return this; // chaining + }; + /** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ + + + var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: bb.w, + clientHeight: bb.h, + boundingBox: bb + }; + var components = options.eles.components(); + var id2cmptId = {}; + + for (var i = 0; i < components.length; i++) { + var component = components[i]; + + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } // Iterate over all nodes, creating layout nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); // forces + + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; // Add new node + + layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map + + layoutInfo.idToIndex[tempNode.id] = i; + } // Inline implementation of a queue, used for traversing the graph in BFS order + + + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + + var tempGraph = []; // Second pass to add child information and + // initialize queue for hierarchical traversal + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; // Check if node n has a parent node + + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } // Add root graph to graphSet + + + layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); // Add children to que queue to be visited + + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } // Create indexToGraph map + + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } // Iterate over all edges, creating Layout Edges + + + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); // Compute ideal length + + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; // Check if it's an inter graph edge + + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); // Compute sum of node depths, relative to lca graph + + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; // Source depth + + var tempNode = layoutInfo.layoutNodes[sourceIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // Target depth + + + tempNode = layoutInfo.layoutNodes[targetIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + // Update idealLength + + + idealLength *= depth * options.nestingFactor; + } + + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } // Finally, return layoutInfo object + + + return layoutInfo; + }; + /** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ + + + var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } + }; + /** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancestors (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ + + + var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx + + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } // Make recursive calls for all subgraphs + + + var c = 0; + + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it + + if (0 === children.length) { + continue; + } + + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + + return { + count: c, + graph: graphIx + }; + }; + /** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ + + +var printLayoutInfo; + /** + * @brief : Randomizes the position of all nodes + */ + + + var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; // No need to randomize compound nodes or locked nodes + + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } + }; + + var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; + }; + /** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); // Trigger layoutReady only on first call + + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } + }; + /** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ + // var logDebug = function(text) { + // if (DEBUG) { + // console.debug(text); + // } + // }; + + /** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); // Calculate edge forces + + calculateEdgeForces(layoutInfo); // Calculate gravity forces + + calculateGravityForces(layoutInfo, options); // Propagate forces from parent to child + + propagateForces(layoutInfo); // Update positions based on calculated forces + + updatePositions(layoutInfo); + }; + /** + * @brief : Computes the node repulsion forces + */ + + + var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } + }; + + var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); + }; + /** + * @brief : Compute the node repulsion forces between a pair of nodes + */ + + + var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } // Get direction of line connecting both node centers + + + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + // If both centers are the same, apply a random force + + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + + var overlap = nodesOverlap(node1, node2, directionX, directionY); + + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; // Compute the module and components of the force vector + + var distance = Math.sqrt(directionX * directionX + directionY * directionY); // s += "\nDistance: " + distance; + + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); // Use clipping points to compute distance + + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); // s += "\nDistance: " + distance; + // Compute the module and components of the force vector + + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } // Apply force + + + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + + return; + }; + /** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ + + + var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } + }; + /** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ + + + var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + + var res = {}; // Case: Vertical direction (up) + + if (0 === dX && 0 < dY) { + res.x = X; // s += "\nUp direction"; + + res.y = Y + H / 2; + return res; + } // Case: Vertical direction (down) + + + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; // s += "\nDown direction"; + + return res; + } // Case: Intersects the right border + + + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; // s += "\nRightborder"; + + return res; + } // Case: Intersects the left border + + + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; // s += "\nLeftborder"; + + return res; + } // Case: Intersects the top border + + + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; // s += "\nTop border"; + + return res; + } // Case: Intersects the bottom border + + + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; // s += "\nBottom border"; + + return res; + } // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + + + return res; + }; + /** + * @brief : Calculates all edge forces + */ + + + var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; // Get direction of line connecting both node centers + + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + + if (0 === directionX && 0 === directionY) { + continue; + } // Get clipping points for both nodes + + + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } // Add this force to target and source nodes + + + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + + } + }; + /** + * @brief : Computes gravity forces for all nodes + */ + + + var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + + var distThreshold = 1; // var s = 'calculateGravityForces'; + // logDebug(s); + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Compute graph center + + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + // Apply force to all nodes in graph + + + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; // s += ": Applied force: " + fx + ", " + fy; + } // logDebug(s); + + } + } + }; + /** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ + + + var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + // logDebug('propagateForces'); + // Start by visiting the nodes in the root graph + + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; // We only need to process the node if it's compound + + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; // Propagate offset + + childNode.offsetX += offX; + childNode.offsetY += offY; // Add children to queue to be visited + + queue[++end] = children[i]; + } // Reset parent offsets + + + node.offsetX = 0; + node.offsetY = 0; + } + } + }; + /** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ + + + var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + // Limit displacement in order to improve stability + + + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + // Update ancestry boudaries + + updateAncestryBoundaries(n, layoutInfo); + } // Update size, position of compund nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } + }; + /** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ + + + var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + + return res; + }; + /** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ + + + var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } // Get Parent Node + + + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; // MaxX + + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } // MinX + + + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } // MaxY + + + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } // MinY + + + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } // If updated boundaries, propagate changes upward + + + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + + + return; + }; + + var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + + var totalA = 0; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } + }; + + var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function GridLayout(options) { + this.options = extend({}, defaults$3, options); + } + + GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values + + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } // otherwise use the automatic values and adjust accordingly + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); // reducing the small side takes away the most cells, so try it first + + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + + var _lg = large(); // try to add to larger side first (adds less in multiplication) + + + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; // to keep track of current cell position + + + var row = 0; + var col = 0; + + var moveToNextCell = function moveToNextCell() { + col++; + + if (col >= cols) { + col = 0; + row++; + } + }; // get a cache of all the manual positions + + + var id2manPos = {}; + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + + var getPos = function getPos(element, i) { + var x, y; + + if (element.locked() || element.isParent()) { + return false; + } // see if we have a manual position set + + + var rcPos = id2manPos[element.id()]; + + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + while (used(row, col)) { + moveToNextCell(); + } + + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + + return { + x: x, + y: y + }; + }; + + nodes.layoutPositions(this, options, getPos); + } + + return this; // chaining + }; + + var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop + + }; // constructor + // options : object containing layout options + + function NullLayout(options) { + this.options = extend({}, defaults$2, options); + } // runs the layout + + + NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + + var layout = this; // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + + options.cy; + layout.emit('layoutstart'); // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); // trigger layoutready when each node has had its position set at least once + + layout.one('layoutready', options.ready); + layout.emit('layoutready'); // trigger layoutstop when the layout stops (e.g. finishes) + + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining + }; // called on continuous layouts to stop them before they finish + + + NullLayout.prototype.stop = function () { + return this; // chaining + }; + + var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function PresetLayout(options) { + this.options = extend({}, defaults$1, options); + } + + PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + + if (posIsFn) { + return options.positions(node); + } + + var pos = options.positions[node._private.data.id]; + + if (pos == null) { + return null; + } + + return pos; + } + + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + + if (node.locked() || position == null) { + return false; + } + + return position; + }); + return this; // chaining + }; + + var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function RandomLayout(options) { + this.options = extend({}, defaults, options); + } + + RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout + }, { + name: 'circle', + impl: CircleLayout + }, { + name: 'concentric', + impl: ConcentricLayout + }, { + name: 'cose', + impl: CoseLayout + }, { + name: 'grid', + impl: GridLayout + }, { + name: 'null', + impl: NullLayout + }, { + name: 'preset', + impl: PresetLayout + }, { + name: 'random', + impl: RandomLayout + }]; + + function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing + } + + var noop = function noop() {}; + + var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); + }; + + NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr + }; + + var BRp$f = {}; + BRp$f.arrowShapeWidth = 0.3; + + BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + + return retPts; + }; + + var pointsToArr = function pointsToArr(pts) { + var ret = []; + + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + + return ret; + }; + + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + }; + + var BRp$e = {}; // Project mouse + + BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; + }; + + BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = this.cy.window().getComputedStyle(container); + + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; + }; + + BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; + }; + + BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; + }; + + BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + + if (interactiveElementsOnly) { + eles = eles.interactive; + } + + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { + addEle(node, 0); + return true; + } + } + } + + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } // if we're close to the edge but didn't hit it, maybe we hit its arrows + + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + + + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + + if (!eventsEnabled || !text) { + return; + } + + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [// with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + + return near; + }; // 'Give me everything from this box' + + + BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + + return box; + }; + + var BRp$d = {}; + + BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; // Displacement gives direction for arrowhead orientation + + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + + midX = rs.midX; + midY = rs.midY; // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + + dispX = endX - startX; + dispY = endY - startY; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + var i3 = i2 + 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + + var p0 = ic - 2; // startpt + + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; // mid source + // + + dispX *= -1; + dispY *= -1; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) ; else { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); + }; + + BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + + if (cachedVal) { + return cachedVal; + } + + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; + }; + + var BRp$c = {}; + + BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; // always override as haystack in case set to different type previously + + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } + }; + + BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + var rs = edge._private.rscratch; + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var edgeDistances = edge.pstyle('edge-distances').value; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + rs.edgeType = 'segments'; + rs.segpts = []; + + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + } + }; + + BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; // increase by step size for overlapping loops, keyed on direction and sweep values + + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; + }; + + BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; // avoids cases with impossible beziers + + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; + }; + + BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + edge._private.rscratch.edgeType = 'straight'; + }; + + BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var vectorNormInverse = pairInfo.vectorNormInverse, + posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts; + var edgeDistances = edge.pstyle('edge-distances').value; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + + ctrlptWeight = ctrlptWs.value[b]; + } + + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } + }; + + BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; // take away the effective w/h from the magnitude of the delta value + + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + + var d; + + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } + }; + + BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; // can only correct beziers for now... + + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + + if (badStart || badAStart || closeStartACp) { + overlapping = true; // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); + + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + + + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + + var _radius = Math.max(srcW, srcH); + + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); + + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } + }; + + BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); // the midpt between ctrlpts as intermediate destination pts + + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; // default midpt for labels etc + + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } + } + }; + + BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } + }; + + BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + + if (!edges || edges.length === 0) { + return; + } + + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$2(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + + if (map2 == null) { + map2 = new Map$2(); + this.map.set(pairId[0], map2); + } + + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; // create a table of edge (src, tgt) => list of edges between them + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; // ignore edges who are not to be displayed + // they shouldn't take up space + + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + + tableEntry.eles.push(edge); + + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + + + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); // for each pair id, the edges should be sorted by index + + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); // make sure src/tgt distinction is consistent w.r.t. pairId + + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + + var _curveStyle = _edge.pstyle('curve-style').value; + + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order + + + var edgeIsSwapped = !src.same(_edge.source()); + + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; // pt outside src shape to calc distance/displacement from src to tgt + + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); + var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt + + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; // if node shapes overlap, then no ctrl pts to draw + + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle === 'segments') { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'taxi') { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + + _this.findEndpoints(_edge); + + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + + _this.checkForInvalidEdgeWarning(_edge); + + _this.storeAllpts(_edge); + + _this.storeEdgeProjections(_edge); + + _this.calculateArrowAngles(_edge); + + _this.recalculateEdgeLabelProjections(_edge); + + _this.calculateLabelAngles(_edge); + } // for pair edges + + }; + + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + + + this.findHaystackPoints(haystackEdges); + }; + + function getPts(pts) { + var retPts = []; + + if (pts == null) { + return; + } + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + + return retPts; + } + + BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } + }; + + BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } + }; + + BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; + }; + + var BRp$b = {}; + + BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); + } + }; + + BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); + + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + + var ha = target.pstyle('text-halign').value; + + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); + + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + + var _lw2 = _lw / 2; + + var _lh2 = _lh / 2; + + var _va = source.pstyle('text-valign').value; + + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + + var _ha = source.pstyle('text-halign').value; + + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + + var _intSqdist = sqdist(_refPt, array2point(intersect)); + + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + + var _minSqDist = _intSqdist; + + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } + }; + + BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } + }; + + BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } + }; + + var BRp$a = {}; + + function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } + } + + BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; // clear the cached points state + + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + }; + + BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); + }; + + /* global document */ + + var BRp$9 = {}; + + BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + + if (emptyString(content)) { + return; + } + + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + + default: + // e.g. center + textX = nodePos.x; + } + + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + + default: + // e.g. middle + textY = nodePos.y; + } + + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); + }; + + var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + + return angle; + }; + + var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); + }; + + var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); + }; + + BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } // add center point to style so bounding box calculations can use it + // + + + p = { + x: rs.midX, + y: rs.midY + }; + + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + + var ctrlpts = []; // store each ctrlpt info init + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } // update each ctrlpt with segment info + + + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + + if (!content[prefix]) { + return; + } + + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; // find the segment we're on + + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + + if (selected) { + break; + } + } + + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + + di = dist(p0, p1); + d0 = d; + d += di; + + if (d >= offset) { + break; + } + } + + var pD = offset - d0; + + var _t = pD / di; + + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); + }; + + BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } + }; + + BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); + }; + + BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; // for empty text, skip all processing + + + if (!text) { + return ''; + } + + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + + var wrapStyle = ele.pstyle('text-wrap').value; + + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); // save recalc if the label is the same as before + + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + + subline = word + wordSeparator; + } + } // if there's remaining text, put it in a wrapped line + + + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + + if (widthWithNextCh > _maxW) { + break; + } + + ellipsized += text[i]; + + if (i === text.length - 1) { + incLastCh = true; + } + } + + if (!incLastCh) { + ellipsized += ellipsis; + } + + return ellipsized; + } // if ellipsize + + + return text; + }; + + BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + + case 'right': + return 'left'; + + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } + }; + + BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + + if (existingVal != null) { + return existingVal; + } + + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; + }; + + BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } + }; + + BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } + }; + + var BRp$8 = {}; + var TOO_SMALL_CUT_RECT = 28; + var warnedCutRect = false; + + BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + + return 'rectangle'; + } + + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + + return shape; + }; + + var BRp$7 = {}; + + BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + + elesToUpdate.cleanStyle(); + + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); + }; + + BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); + }; + + BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + + var edges = []; + var nodes = []; // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + + if (this.destroyed) { + return; + } // use cache by default for perf + + + if (useCache === undefined) { + useCache = true; + } + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } // only update if dirty and in graph + + + if (useCache && rstyle.clean || ele.removed()) { + continue; + } // only update if not display: none + + + if (ele.pstyle('display').value === 'none') { + continue; + } + + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + + rstyle.clean = true; + } // update node data from projections + + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + + var pos = _ele.position(); + + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + + this.recalculateEdgeProjections(edges); // update edge data from projections + + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; // update rstyle positions + + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } + }; + + var BRp$6 = {}; + + BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } // put the grab target nodes last so it's on top of its neighbourhood + + + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } + }; + + BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; + }; + + BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + + return eles; + }; + + var BRp$5 = {}; + [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); + }); + + var BRp$4 = {}; + + BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + + if (!isDataUri) { + // if crossorigin is 'null'(stringified), then manually set it to null + crossOrigin = crossOrigin === 'null' ? null : crossOrigin; + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } + }; + + var BRp$3 = {}; + /* global document, window, ResizeObserver, MutationObserver */ + + BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + + var b = this.binder(target); + return b.on.apply(b, args); + }; + + BRp$3.binder = function (tgt) { + var r = this; + var containerWindow = r.cy.window(); + var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt); + + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + containerWindow.addEventListener('test', null, opts); + } catch (err) {// not supported + } + + r.supportsPassiveEvents = supportsPassive; + } + + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; + }; + + BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); + }; + + BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); + }; + + BRp$3.load = function () { + var r = this; + var containerWindow = r.cy.window(); + + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; //if any parent node in event hierarchy isn't pannable, reject passthrough + + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + + return allowPassthrough; + }; + + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + + + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + var innerNodes = node.descendants(); + + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; // adds the given nodes and its neighbourhood to the drag layer + + + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + + addDescendantsToDrag(nodes, opts); // always add to drag + // also add nodes and edges related to the topmost ancestor + + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + + var addNodeToDrag = addNodesToDrag; + + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } // just go over all elements rather than doing a bunch of (possibly expensive) traversals + + + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + + + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + if (!node.cy().hasCompoundNodes()) { + return; + } // find top-level parent + + + var parent = node.ancestors().orphans(); // no parent node: no nodes to add to the drag layer + + if (parent.same(node)) { + return; + } + + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; // watch for when the cy container is removed from the dom + + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + + var onResize = debounce_1(function () { + r.cy.resize(); + }, 100); + + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } // auto resize + + + r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); // stop right click menu from appearing on cy + + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + + if (!atLeastOnePosInside) { + return false; + } + + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + + tParent = tParent.parentNode; + } + + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + + return true; + }; // Primary key + + + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; // Right click button + + + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } // Element dragging + + + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + + setGrabTarget(near); + + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } // Initialize selection box coordinates + + + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(containerWindow, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + + var multSelKeyDown = isMultSelKeyDown(e); + + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; // trigger context drag if rmouse down + + + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + r.hoverData.cxtDragged = true; + + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + r.hoverData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } // Check if we are drag panning the entire graph + + } else if (r.hoverData.dragging) { + preventDefault = true; + + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } // Needs reproject due to pan changing viewport + + + pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + + r.hoverData.last = near; + } + + if (down) { + if (isOverThresholdDrag) { + // then we can take action + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + r.redrawHint('eles', true); + } + + r.dragData.didDrag = true; // indicate that we actually did drag the node + // now, add the elements to the drag layer if not done already + + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } // prevent the dragging from triggering text selection on the page + + + preventDefault = true; + } + + select[2] = pos[0]; + select[3] = pos[1]; + + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture) { + return; + } + + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + + if (!r.dragData.didDrag && // didn't move a node around + !r.hoverData.dragged && // didn't pan + !r.hoverData.selecting && // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + + + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } // Single selection + + + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + } + + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + + if (box.length > 0) { + r.redrawHint('eles', true); + } + + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } // always need redraw in case eles unselectable + + + r.redraw(); + } // Cancel drag pan + + + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + + var newZoom = cy.zoom() * Math.pow(10, diff); + + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; // Functions to help with whether mouse wheel should trigger zooming + // -- + + + r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); // desktop safari pinch to zoom start + + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + + var center1, modelCenter1; // center point on start pinch to zoom + + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + + if (!eventInContainer(e)) { + return; + } + + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } // record starting points for pinch-to-zoom + + + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; // consider context tap + + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + + if (e.touches[2]) { + // ignore + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + + if (near.selected()) { + // reset drag elements, since near will be added again + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + + setGrabTarget(near); + + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + + near.emit(makeEvent('grabon')); + + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } // Tap, taphold + // ----- + + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = [null, null, null, null, null, null]; + + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + + if (capture && e.touches[0] && startGPos) { + var disp = []; + + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } // context swipe cancelling + + + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; // cancel ctx gestures if the distance b/t the fingers increases + + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } // context swipe + + + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } // box selection + + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + + r.redrawHint('select', true); + r.redraw(); // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (draggedEles) { + r.redrawHint('drag', true); + + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + + var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2 + + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + + var factor = distance2 / distance1; + + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; // delta finger 2 + + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; // now calculate the zoom + + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); // the model center point converted to the current rendered pos + + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; // remove dragged eles + + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + _start.unactivate().emit('freeon'); + + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + + draggedEles.emit('dragfree'); + } + } + + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } // Re-project + + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + + if (capture && start != null) { + e.preventDefault(); + } // dragging nodes + + + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + + r.redraw(); + } else { + // otherwise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } // touchmove + + + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + r.touchData.last = near; + } // check to cancel taphold + + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } // panning + + + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + + if (allowPassthrough) { + e.preventDefault(); + + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } // Re-project + + + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + + + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + + e.preventDefault(); + } else { + return; + } + + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + if (start) { + start.unactivate(); + } + + var ctxTapend; + + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } // no more box selection if we don't have three fingers + + + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + + if (box.nonempty()) { + r.redrawHint('eles', true); + } + + r.redraw(); + } + + if (start != null) { + start.unactivate(); + } + + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; // Tap event, roughly same as mouse click event for touch + + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + + + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + + r.touchData.singleTouchMoved = true; + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = [null, null, null, null, null, null]; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } //r.redraw(); + + }, false); // fallback compatibility layer for ms pointer events + + if (typeof TouchEvent === 'undefined') { + var pointers = []; + + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } + }; + + var BRp$2 = {}; + + BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; + }; + + BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; + }; + + BRp$2.generateRoundPolygon = function (name, points) { + // Pre-compute control points + // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute + // the unit vectors. + // For simplicity the layout will be: + // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] + var allPoints = new Array(points.length * 2); + + for (var i = 0; i < points.length / 2; i++) { + var sourceIndex = i * 2; + var destIndex = void 0; + + if (i < points.length / 2 - 1) { + destIndex = (i + 1) * 2; + } else { + destIndex = 0; + } + + allPoints[i * 4] = points[sourceIndex]; + allPoints[i * 4 + 1] = points[sourceIndex + 1]; + var xDest = points[destIndex] - points[sourceIndex]; + var yDest = points[destIndex + 1] - points[sourceIndex + 1]; + var norm = Math.sqrt(xDest * xDest + yDest * yDest); + allPoints[i * 4 + 2] = xDest / norm; + allPoints[i * 4 + 3] = yDest / norm; + } + + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: allPoints, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); + } + }; + }; + + BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = cornerRadius * 2; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // Check top left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check top right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { + var cl = this.cornerLength; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { + return true; + } + + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; + }; + + BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + // use two fixed t values for the bezier curve approximation + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; // points are in clockwise order, inner (imaginary) control pt on [4, 5] + + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; // var y1 = curvePts[ 3 ]; + + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + + if (validRoots.length > 0) { + return validRoots[0]; + } + } + + return null; + }; + + var curveRegions = Object.keys(barrelCurvePts); + + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + + if (t == null) { + continue; + } + + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + + if (cornerPts.isTop && bezY <= y) { + return true; + } + + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + + return false; + } + }; + }; + + BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (topIntersections.length > 0) { + return topIntersections; + } + + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = 2 * cornerRadius; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // check non-rounded top side + + + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); // Outer radius is 1; inner radius of star is smaller + + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + + if (shape = this[name]) { + // got cached shape + return shape; + } // create and cache new shape + + + return renderer.generatePolygon(name, points); + }; + }; + + var BRp$1 = {}; + + BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; + }; + + BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + + r.requestedFrame = true; + r.renderOptions = options; + }; + + BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); // higher priority callbacks executed first + + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); + }; + + var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } + }; + + BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + + r.redrawCount++; + + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; // use a weighted average with a bias from the previous average so we don't spike so easily + + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + + requestAnimationFrame(renderFn); + }; + + var BaseRenderer = function BaseRenderer(options) { + this.init(options); + }; + + var BR = BaseRenderer; + var BRp = BR.prototype; + BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; + + BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); + var containerWindow = r.cy.window(); // prepend a stylesheet in the head such that + + if (containerWindow) { + var document = containerWindow.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.textContent = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = containerWindow.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; //--Pointer-related data + + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); + }; + + BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; // the renderer can't be notified after it's destroyed + + if (this.destroyed) { + return; + } + + if (eventName === 'init') { + r.load(); + return; + } + + if (eventName === 'destroy') { + r.destroy(); + return; + } + + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); + }; + + BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) {// ie10 issue #1014 + } + } + }; + + BRp.isHeadless = function () { + return false; + }; + + [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); + }); + + var fullFpsTime = 1000 / 60; // assume 60 frames per second + + var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + + var queueRedraw = debounce_1(function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + + var thisDeqd = opts.deq(self, pixelRatio, extent); + + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } // callbacks on dequeue + + + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } + }; + + // Uses keys so elements may share the same cache. + + var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + + _classCallCheck(this, ElementTextureCacheLookup); + + this.idsByKey = new Map$2(); + this.keyForId = new Map$2(); + this.cachesByLvl = new Map$2(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + + if (!caches) { + caches = new Map$2(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); // getting for an element may need to add to the id list b/c eles can share keys + + if (cache != null) { + this.updateKeyMappingFor(ele); + } + + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + + return ElementTextureCacheLookup; + }(); + + var minTxrH = 25; // the size of the texture cache for small height eles (special case) + + var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up + + var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used + + var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps + + var defTxrWidth = 1024; // default/minimum texture width + + var maxTxrW = 1024; // the maximum width of a texture + + var maxTxrH = 1024; // the maximum height of a texture + + var minUtility = 0.2; // if usage of texture is less than this, it is retired + + var maxFullness = 0.8; // fullness of texture after which queue removal is checked + + var maxFullnessChecks = 10; // dequeued after this many checks + + var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps + + var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + + var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' + }; + var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true + }); + + var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); + }; + + var ETCp = ElementTextureCache.prototype; + ETCp.reasons = getTxrReasons; // the list of textures in which new subtextures for elements can be placed + + ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; + }; // the list of usused textures which can be recycled (in use in texture queue) + + + ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; + }; // queue of element draw requests at different scale levels + + + ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new heap(function (a, b) { + return b.reqs - a.reqs; + }); + return q; + }; // queue of element draw requests at different scale levels (element id lookup) + + + ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; + }; + + ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + + var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric + + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + + if (eleCache) { + return eleCache; + } + + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); // first try the second last one in case it has space at the end + + var txr = txrQ[txrQ.length - 2]; + + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; // try the last one if there is no second last one + + + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } // if the last one doesn't exist, we need a first one + + + if (!txr) { + txr = addNewTxr(); + } // if there's no room in the current texture, we need a new one + + + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + + if (c) { + higherCache = c; + break; + } + } + + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; // reset ele area in texture + + + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + + if (_c) { + lowerCache = _c; + break; + } + } + } + + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + self.queueElement(ele, lvl); + return lowerCache; + } + + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; + }; + + ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } + }; + + ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + + if (cache) { + caches.push(cache); + } + } + + var noOtherElesUseCache = lookup.invalidate(ele); + + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; // remove space from the texture it belongs to + + txr.invalidatedWidth += _cache.width; // mark the cache as invalidated + + _cache.invalidated = true; // retire the texture if its utility is low + + self.checkTextureUtility(txr); + } + } // remove from queue since the old req was for the old state + + + self.removeFromQueue(ele); + }; + + ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } + }; + + ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + var self = this; + var txrQ = self.getTextureQueue(txr.height); + + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } + }; + + ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + + clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); + }; + + ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; + }; + + ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } + }; + + ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } + }; + + ETCp.dequeue = function (pxRatio + /*, extent*/ + ) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + + var cacheExists = lookup.hasCache(ele, req.level); // clear out the key to req lookup + + k2q[key] = null; // dequeueing isn't necessary with an existing cache + + if (cacheExists) { + continue; + } + + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + + return dequeued; + }; + + ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } + }; + + ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); + }; + + ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); + }; + + ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } + }); + + var defNumLayers = 1; // default number of layers to use + + var minLvl = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom = 3.99; // beyond this zoom level, layered textures are not used + + var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates + + var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost = 0.9; // % of frame time to be used when >60fps + + var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch + + var invalidThreshold = 250; // time threshold for disabling b/c of invalidations + + var maxLayerArea = 4000 * 4000; // layers can't be bigger than this + + var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) + // var log = function(){ console.log.apply( console, arguments ); }; + + var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce_1(function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + + self.layersQueue = new heap(qSort); + self.setupDequeueing(); + }; + + var LTCp = LayeredTextureCache.prototype; + var layerIdPool = 0; + var MAX_INT = Math.pow(2, 53) - 1; + + LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; // do the transform on creation to save cycles (it's the same for all eles) + + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; + }; + + LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + + checkLvls(+1); + checkLvls(-1); // remove the invalid layers; they will be replaced as needed later in this function + + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + + return bb; + }; + + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + + if (area > maxLayerArea) { + return null; + } + + var layer = self.makeLayer(bb, lvl); + + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + + return layer; + }; + + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } // log('do layers'); + + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + layer = makeLayer({ + insert: true, + after: layer + }); // if now layer can be built then we can't use layers at this level + + if (!layer) { + return null; + } // log('new layer with id %s', layer.id); + + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + + layer.eles.push(ele); + caches[lvl] = layer; + } // log('--'); + + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + + return layers; + }; // a layer may want to use an ele cache of a higher level to avoid blurriness + // so the layer level might not equal the ele level + + + LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; + }; + + LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + + { + r.setImgSmoothing(context, false); + } + + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + + { + r.setImgSmoothing(context, true); + } + }; + + LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + + if (!layers || layers.length === 0) { + return false; + } + + var numElesInLayers = 0; + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; // if there are any eles needed to be drawn yet, the level is not complete + + if (layer.reqs > 0) { + return false; + } // if the layer is invalid, the level is not complete + + + if (layer.invalid) { + return false; + } + + numElesInLayers += layer.eles.length; + } // we should have exactly the number of eles passed in to be complete + + + if (numElesInLayers !== eles.length) { + return false; + } + + return true; + }; + + LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + + if (!layers) { + return; + } // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; // find the offset + + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + + if (offset < 0) { + // then the layer has nonexistent elements and is invalid + this.invalidateLayer(layer); + continue; + } // the eles in the layer must be in the same continuous order, else the layer is invalid + + + var o = offset; + + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + this.invalidateLayer(layer); + break; + } + } + } + }; + + LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + + if (!layer) { + continue; + } // if update is a request from the ele cache, then it affects only + // the matching level + + + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + + update(layer, ele, req); + } + } + }; + + LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + + return haveLayers; + }; + + LTCp.invalidateElements = function (eles) { + var self = this; + + if (eles.length === 0) { + return; + } + + self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); + }; + + LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + this.lastInvalidationTime = performanceNow(); + + if (layer.invalid) { + return; + } // save cycles + + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + + if (layer.replacement) { + layer.replacement.invalid = true; + } + + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + + if (caches) { + caches[lvl] = null; + } + } + }; + + LTCp.refineElementTextures = function (eles) { + var self = this; // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } // log('queue replacement layer refinement', rLyr.id); + + } + }); + }; + + LTCp.enqueueElementRefinement = function (ele) { + + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); + }; + + LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; // if a layer is going to be replaced, queuing is a waste of time + + if (layer.replacement) { + return; + } + + if (ele) { + if (hasId[ele.id()]) { + return; + } + + elesQ.push(ele); + hasId[ele.id()] = true; + } + + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } + }; + + LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + + var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it + + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } // if this is a replacement layer that has been superceded, then forget it + + + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + + var ele = layer.elesQueue.shift(); + + if (ele) { + // log('dequeue layer %s', layer.id); + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } // if the layer has all its eles done, then remove from the queue + + + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; // log('dequeue of layer %s complete', layer.id); + // when a replacement layer is dequeued, it replaces the old layer in the level + + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + + self.requestRedraw(); + } + } + + return deqd; + }; + + LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + + layersInLevel[index] = layer; // replace level ref + // replace refs in eles + + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + + if (cache) { + cache[layer.level] = layer; + } + } // log('apply replacement layer %s over %s', layer.id, replaced.id); + + + self.requestRedraw(); + }; + + LTCp.requestRedraw = debounce_1(function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, 100); + LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } + }); + + var CRp$a = {}; + var impl; + + function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } + } + + function triangleBackcurve(context, points, controlPoint) { + var firstPt; + + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + + if (i === 0) { + firstPt = pt; + } + + context.lineTo(pt.x, pt.y); + } + + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); + } + + function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + + var triPts = trianglePoints; + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); + } + + CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; + }; + + var CRp$9 = {}; + + CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } + }; + + CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } + }; + + CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } + }; + + CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + + if (eleCache != null) { + var opacity = getOpacity(r, ele); + + if (opacity === 0) { + return; + } + + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + + if (!smooth) { + r.setImgSmoothing(context, true); + } + + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + + var oldGlobalAlpha; + + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } + }; + + var getZeroRotation = function getZeroRotation() { + return 0; + }; + + var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); + }; + + var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); + }; + + var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); + }; + + var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); + }; + + var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); + }; + + CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + + var badLine = ele.element()._private.rscratch.badLine; + + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + + r.drawElementOverlay(context, ele); + } + }; + + CRp$9.drawElements = function (context, eles) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } + }; + + CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + + if (bb.w === 0 || bb.h === 0) { + continue; + } + + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } + }; + + /* global Path2D */ + var CRp$8 = {}; + + CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + + if (shouldDrawOpacity && !edge.visible()) { + return; + } // if bezier ctrl pts can not be calculated, then die + + + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; // separate arrow opacity would require arrow-opacity property + + var effectiveArrowOpacity = opacity * lineOpacity; + + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeOverlay(context, edge); + }; + + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeUnderlay(context, edge); + }; + + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, edge) { + if (!edge.visible()) { + return; + } + + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + + if (opacity === 0) { + return; + } + + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; + }; + + CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); + CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); + + CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(pts[0], pts[1]); + + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + + break; + + case 'straight': + case 'segments': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + + break; + } + } + + context = canvasCxt; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } // reset any line dashes + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + }; + + CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } + }; + + CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } + }; + + CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + + if (arrowShape === 'none') { + return; + } + + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var edgeOpacity = edge.pstyle('opacity').value; + + if (opacity === undefined) { + opacity = edgeOpacity; + } + + var gco = context.globalCompositeOperation; + + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, x, y, angle); + }; + + CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + + if (context.closePath) { + context.closePath(); + } + } + + context = canvasContext; + + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1); + context.lineJoin = 'miter'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } + }; + + var CRp$7 = {}; + + CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } + }; + + CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; // workaround for broken browsers like ie + + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + + var x = nodeX - nodeTW / 2; // left + + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + + var y = nodeY - nodeTH / 2; // top + + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.clip(); + } + } + + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + + context.globalAlpha = gAlpha; + + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } + }; + + var CRp$6 = {}; + + CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + + if (computedSize < minSize) { + return false; + } + + return true; + }; + + CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + + if (ele.isNode()) { + var label = ele.pstyle('label'); + + if (!label || !label.value) { + return; + } + + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + + var _label = ele.pstyle('label'); + + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + + var applyRotation = !shiftToOriginWithBb; + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + + if (cache.context === context) { + return cache; + } + } + + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; + }; // set up canvas context with font + // returns transformed text string + + + CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); + }; // TODO ensure re-used + + + function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + ctx.fill(); + } + + CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + + return theta; + }; + + CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } // use 'main' as an alias for the main label (i.e. null prefix) + + + if (prefix === 'main') { + prefix = null; + } + + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + + var text = this.getLabelText(ele, prefix); + + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + + textX += marginX; + textY += marginY; + var theta; + + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + + switch (valign) { + case 'top': + break; + + case 'center': + textY += textH / 2; + break; + + case 'bottom': + textY += textH; + break; + } + + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + + switch (halign) { + case 'left': + bgX -= textW; + break; + + case 'center': + bgX -= textW / 2; + break; + } + + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + var styleShape = ele.pstyle('text-background-shape').strValue; + + if (styleShape.indexOf('round') === 0) { + roundRect(context, bgX, bgY, bgW, bgH, 2); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + + context.fillStyle = textFill; + } + + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + + context.setLineDash([]); + break; + + case 'solid': + context.setLineDash([]); + break; + } + } + + context.strokeRect(bgX, bgY, bgW, bgH); + + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + + context.fillText(text, textX, textY); + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } + }; + + /* global Path2D */ + var CRp$5 = {}; + + CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; // + // setup shift + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } // + // load bg image + + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; // get image, and if not loaded then ask to redraw when later loaded + + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } // + // setup styles + + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + context.lineJoin = 'miter'; // so borders are square with the node shape + + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; // + // setup shape + + + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + + if (usePaths) { + context.translate(pos.x, pos.y); + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth); + var cachedPath = pathCache[key]; + + if (cachedPath != null) { + path = cachedPath; + pathCacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + } + + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); + } + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + + _p.backgrounding = !(totalCompleted === numImages); + + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); // redraw/restore path if steps after pie need it + + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); + } + } + } + }; + + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = 'butt'; + + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + context.globalCompositeOperation = gco; + } // reset in case we changed the border style + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + + var ghost = node.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawUnderlay(); + + if (usePaths) { + context.translate(pos.x, pos.y); + } + + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawText(); + drawOverlay(); // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + + if (!node.visible()) { + return; + } + + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + + if (opacity > 0) { + pos = pos || node.position(); + + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); + context.fill(); + } + }; + }; + + CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); + CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece? + + CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; + }; + + CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + + var usePaths = this.usePaths(); + + if (usePaths) { + x = 0; + y = 0; + } + + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + // percent can't push beyond 1 + + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } + }; + + var CRp$4 = {}; + var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined'; + + CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef + }; + + CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + + return cache; + }; + + CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + + var direction = ele.pstyle('background-gradient-direction').value; + + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + + return gradientStyle; + }; + + CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.fillStyle = gradientStyle; + }; + + CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } + }; + + CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } + }; + + CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.strokeStyle = gradientStyle; + }; + + CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } + }; + + CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } + }; // Resize canvas + + + CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + r.textureMult = 1; + + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; + }; + + CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); + }; + + CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + + r.prevPxRatio = pixelRatio; + } + + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + + r.mbFrames++; + + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + + + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + + + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + + if (forcedPan) { + effectivePan = forcedPan; + } // apply pixel ratio + + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + + context.setTransform(1, 0, 0, 1, 0, 0); + + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + + if (textureDraw) { + r.textureDrawLastFrame = true; + + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + + var timeToRender = r.lastRedrawTime; + + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } // motionblur: blit rendered blurry frames + + + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + + var pxr = mbPxRatio; + cxt.drawImage(txt, // img + 0, 0, // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh + 0, 0, // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + + r.prevViewport = vp; + + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + + if (!forcedContext) { + cy.emit('render'); + } + }; + + var CRp$3 = {}; // @O Polygon drawing + + CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + + context.closePath(); + }; + + CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } + + for (var _i = 0; _i < points.length / 4; _i++) { + var sourceUv = void 0, + destUv = void 0; + + if (_i === 0) { + sourceUv = points.length - 2; + } else { + sourceUv = _i * 4 - 2; + } + + destUv = _i * 4 + 2; + var px = x + halfW * points[_i * 4]; + var py = y + halfH * points[_i * 4 + 1]; + var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * points[sourceUv]; + var cp0y = py - offset * points[sourceUv + 1]; + var cp1x = px + offset * points[destUv]; + var cp1y = py + offset * points[destUv + 1]; + + if (_i === 0) { + context.moveTo(cp0x, cp0y); + } else { + context.lineTo(cp0x, cp0y); + } + + context.arcTo(px, py, cp1x, cp1y, cornerRadius); + } + + context.closePath(); + }; // Round rectangle drawing + + + CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); // Arc from middle top to right side + + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); // Arc from right side to bottom + + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); // Arc from bottom to left side + + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); // Arc from left side to topBorder + + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); // Join line + + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = getCutRectangleCornerLength(); + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); + }; + + CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); + }; + + var sin0 = Math.sin(0); + var cos0 = Math.cos(0); + var sin = {}; + var cos = {}; + var ellipseStepSize = Math.PI / 40; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); + } + + CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + + context.closePath(); + }; + + /* global atob, ArrayBuffer, Uint8Array, Blob */ + var CRp$2 = {}; + + CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; + }; + + CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); // Rasterize the layers, but only if container has nonzero size + + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + + + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + + return buffCanvas; + }; + + function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + + return new Blob([buff], { + type: mimeType + }); + } + + function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); + } + + function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + + case 'base64': + return b64UriToB64(getB64Uri()); + + case 'base64uri': + default: + return getB64Uri(); + } + } + + CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); + }; + + CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); + }; + + var CRp$1 = {}; + + CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); + + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height); + + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height); + + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); + + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } + }; + + var CR = CanvasRenderer; + var CRp = CanvasRenderer.prototype; + CRp.CANVAS_LAYERS = 3; // + + CRp.SELECT_BOX = 0; + CRp.DRAG = 1; + CRp.NODE = 2; + CRp.BUFFER_COUNT = 3; // + + CRp.TEXTURE_BUFFER = 0; + CRp.MOTIONBLUR_BUFFER_NODE = 1; + CRp.MOTIONBLUR_BUFFER_DRAG = 2; + + function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + + case 'right': + p.x = 0; + break; + } + + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + + case 'bottom': + p.y = 0; + break; + } + } + + return p; + }; + + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); // any change invalidates the layers + + lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches + + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); + } + + CRp.redrawHint = function (group, bool) { + var r = this; + + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } + }; // whether to use Path2D caching for drawing + + + var pathsImpld = typeof Path2D !== 'undefined'; + + CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + + this.pathsEnabled = on ? true : false; + }; + + CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; + }; + + CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } + }; + + CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } + }; + + CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + + canvas.width = width; + canvas.height = height; + } + + return canvas; + }; + + [CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); + }); + + var renderer = [{ + name: 'null', + impl: NullRenderer + }, { + name: 'base', + impl: BR + }, { + name: 'canvas', + impl: CR + }]; + + var incExts = [{ + type: 'layout', + extensions: layout + }, { + type: 'renderer', + extensions: renderer + }]; + + var extensions = {}; // registered modules for extensions, indexed by name + + var modules = {}; + + function setExtension(type, name, registrant) { + var ext = registrant; + + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); // make sure layout has _private for use w/ std apis like .on() + + if (!plainObject(this._private)) { + this._private = {}; + } + + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } // either .start() or .run() is defined, so autogen the other + + + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + + var regStop = registrant.prototype.stop; + + layoutProto.stop = function () { + var opts = this.options; + + if (opts && opts.animate) { + var anis = this.animations; + + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + + return this; + }; + + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + + layoutProto.cy = function () { + return this._private.cy; + }; + + var getCy = function getCy(layout) { + return layout._private.cy; + }; + + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + + var proto = Renderer.prototype; + + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + + if (existsInR) { + return overrideErr(pName); + } + + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); + } + + function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); + } + + function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); + } + + function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); + } + + var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } + }; // allows a core instance to access extensions internally + + + Core.prototype.extension = extension; // included extensions + + incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); + }); + + // (useful for init) + + var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + + this.length = 0; + }; + + var sheetfn = Stylesheet.prototype; + + sheetfn.instanceString = function () { + return 'stylesheet'; + }; // just store the selector to be parsed later + + + sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining + }; // just store the property to be parsed later + + + sheetfn.css = function (name, value) { + var i = this.length - 1; + + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + + if (mapVal == null) { + continue; + } + + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + + if (prop == null) { + continue; + } + + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + + return this; // chaining + }; + + sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet + + sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); + }; // append a dummy stylesheet object on a real style object + + + sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; + }; + + var version = "3.26.0"; + + var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } // create instance + + + if (plainObject(options)) { + return new Core(options); + } // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } + }; // e.g. cytoscape.use( require('cytoscape-foo'), bar ) + + + cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; + }; + + cytoscape.warnings = function (bool) { + return warnings(bool); + }; // replaced by build system + + + cytoscape.version = version; // expose public apis (mostly for extensions) + + cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + + return cytoscape; + +})); + + +/***/ }), + +/***/ 82241: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(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, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 47724: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(87115); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71377); +/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14607); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(7201); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70277); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(39354); +/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(91518); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(28734); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12__); + + + + + + + + + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError2(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError2(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + break; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 22: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 25: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 26: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 27: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 32: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 33: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\-\)\{\}]+)/i, /^(?:$)/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR": { "rules": [22, 23], "inclusive": false }, "NODE": { "rules": [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const mindmapParser = parser; +const sanitizeText = (text) => (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.n)(text, (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)()); +let nodes = []; +let cnt = 0; +let elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("addNode", level, id, descr, type); + const conf = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)(); + const node = { + id: cnt++, + nodeId: sanitizeText(id), + level, + descr: sanitizeText(descr), + type, + children: [], + width: (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)().mindmap.maxNodeWidth + }; + switch (node.type) { + case nodeType.ROUNDED_RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.HEXAGON: + node.padding = 2 * conf.mindmap.padding; + break; + default: + node.padding = conf.mindmap.padding; + } + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + let error = new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + elements[id] = element; +}; +const decorateNode = (decoration) => { + const node = nodes[nodes.length - 1]; + if (decoration && decoration.icon) { + node.icon = sanitizeText(decoration.icon); + } + if (decoration && decoration.class) { + node.class = sanitizeText(decoration.class); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +let parseError; +const setErrorHandler = (handler) => { + parseError = handler; +}; +const getLogger = () => _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l; +const getNodeById = (id) => nodes[id]; +const getElementById = (id) => elements[id]; +const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addNode, + clear, + decorateNode, + getElementById, + getLogger, + getMindmap, + getNodeById, + getType, + nodeType, + get parseError() { + return parseError; + }, + sanitizeText, + setElementForId, + setErrorHandler, + type2Str +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|
)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "
") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "
") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + } + switch (node.type) { + case nodeType.DEFAULT: + defaultBkg(bkgElem, node, section); + break; + case nodeType.ROUNDED_RECT: + roundedRectBkg(bkgElem, node); + break; + case nodeType.RECT: + rectBkg(bkgElem, node); + break; + case nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(bkgElem, node); + break; + case nodeType.CLOUD: + cloudBkg(bkgElem, node); + break; + case nodeType.BANG: + bangBkg(bkgElem, node); + break; + case nodeType.HEXAGON: + hexagonBkg(bkgElem, node); + break; + } + setElementForId(node.id, nodeElem); + return node.height; +}; +const drawEdge = function drawEdge2(edgesElem, mindmap, parent, depth, fullSection) { + const section = fullSection % (MAX_SECTIONS - 1); + const sx = parent.x + parent.width / 2; + const sy = parent.y + parent.height / 2; + const ex = mindmap.x + mindmap.width / 2; + const ey = mindmap.y + mindmap.height / 2; + const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2; + const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2; + const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx; + const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy; + edgesElem.append("path").attr( + "d", + parent.direction === "TB" || parent.direction === "BT" ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}` + ).attr("class", "edge section-edge-" + section + " edge-depth-" + depth); +}; +const positionNode = function(node) { + const nodeElem = getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +const svgDraw = { drawNode, positionNode, drawEdge }; +cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default().use((cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default())); +function drawNodes(svg, mindmap, section, conf) { + svgDraw.drawNode(svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id, + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default()({ + container: document.getElementById("cy"), + // container to render in + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + quality: "proof", + // headless: true, + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + svgDraw.positionNode(data); + const el = getElementById(data.nodeId); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, version, diagObj) => { + const conf = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)(); + diagObj.db.clear(); + diagObj.parser.parse(text); + _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.debug("Renering info diagram\n" + text); + const securityLevel = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const mm = diagObj.db.getMindmap(); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(cy); + (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.s)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); +}; +const mindmapRenderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } +`; +const mindmapStyles = getStyles; +const diagram = { + db: mindmapDb, + renderer: mindmapRenderer, + parser: mindmapParser, + styles: mindmapStyles +}; + +//# sourceMappingURL=mindmap-definition-44684416.js.map + + +/***/ }), + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default */.Z.parse(color); + const luminance = .2126 * utils/* default */.Z.channel.toLinear(r) + .7152 * utils/* default */.Z.channel.toLinear(g) + .0722 * utils/* default */.Z.channel.toLinear(b); + return utils/* default */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/73d5f13d.2c8e245a.js b/assets/js/73d5f13d.2c8e245a.js new file mode 100644 index 0000000..34eb8f8 --- /dev/null +++ b/assets/js/73d5f13d.2c8e245a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7555],{3974:t=>{t.exports=JSON.parse('{"label":"iterators","permalink":"/ib002/tags/iterators","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"graphs/iterative-and-iterators","title":"Iterative algorithms via iterators","description":"Iterative DFS using iterators.\\n","permalink":"/ib002/graphs/iterative-and-iterators"}]}')}}]); \ No newline at end of file diff --git a/assets/js/74c2e0e9.fc48acce.js b/assets/js/74c2e0e9.fc48acce.js new file mode 100644 index 0000000..086643c --- /dev/null +++ b/assets/js/74c2e0e9.fc48acce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3528],{2235:i=>{i.exports=JSON.parse('{"label":"backtracking","permalink":"/ib002/tags/backtracking","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/karel-1","title":"Recursion and backtracking with Robot Karel","description":"A problem with too many restrictions.\\n","permalink":"/ib002/recursion/karel-1"}]}')}}]); \ No newline at end of file diff --git a/assets/js/7515.45da5915.js b/assets/js/7515.45da5915.js new file mode 100644 index 0000000..4d47702 --- /dev/null +++ b/assets/js/7515.45da5915.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7515],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(5999),o=n(833),r=n(7452);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/75316eff.a7b24a88.js b/assets/js/75316eff.a7b24a88.js new file mode 100644 index 0000000..f045c6f --- /dev/null +++ b/assets/js/75316eff.a7b24a88.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4287],{5603:i=>{i.exports=JSON.parse('{"label":"python","permalink":"/ib002/tags/python","allTagsPath":"/ib002/tags","count":3,"items":[{"id":"recursion/karel-1","title":"Recursion and backtracking with Robot Karel","description":"A problem with too many restrictions.\\n","permalink":"/ib002/recursion/karel-1"},{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","permalink":"/ib002/time-complexity/extend"},{"id":"algorithms-correctness/postcondition-ambiguity","title":"Vague postconditions and proving correctness of algorithms","description":"Debugging and testing with precise postconditions.\\n","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"}]}')}}]); \ No newline at end of file diff --git a/assets/js/75cccf44.5b6f1b34.js b/assets/js/75cccf44.5b6f1b34.js new file mode 100644 index 0000000..0f2a841 --- /dev/null +++ b/assets/js/75cccf44.5b6f1b34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4256],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>u});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),s=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=s(r),f=n,u=m["".concat(c,".").concat(f)]||m[f]||d[f]||a;return r?o.createElement(u,l(l({ref:t},p),{},{components:r})):o.createElement(u,l({ref:t},p))}));function u(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=f;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[m]="string"==typeof e?e:n,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(7462),n=(r(7294),r(3905));const a={title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15",slug:"leetcode/sort-diagonally",authors:"mf",tags:["cpp","leetcode","iterators"],hide_table_of_contents:!1},l=void 0,i={permalink:"/blog/leetcode/sort-diagonally",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/leetcode/sort-matrix-diagonally.md",source:"@site/blog/leetcode/sort-matrix-diagonally.md",title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15:00.000Z",formattedDate:"March 4, 2023",tags:[{label:"cpp",permalink:"/blog/tags/cpp"},{label:"leetcode",permalink:"/blog/tags/leetcode"},{label:"iterators",permalink:"/blog/tags/iterators"}],readingTime:16.99,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15",slug:"leetcode/sort-diagonally",authors:"mf",tags:["cpp","leetcode","iterators"],hide_table_of_contents:!1},prevItem:{title:"3rd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/3rd-week"},nextItem:{title:"2nd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/2nd-week"}},c={authorsImageUrls:[void 0]},s=[],p={toc:s},m="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Let's try to solve one of the LeetCode challenges in easy and hard mode at the\nsame time."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/765ea78b.eff9c6dc.js b/assets/js/765ea78b.eff9c6dc.js new file mode 100644 index 0000000..be23db0 --- /dev/null +++ b/assets/js/765ea78b.eff9c6dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3039],{3010:a=>{a.exports=JSON.parse('{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/7724.0fff5da7.js b/assets/js/7724.0fff5da7.js new file mode 100644 index 0000000..ea3c90d --- /dev/null +++ b/assets/js/7724.0fff5da7.js @@ -0,0 +1,2 @@ +/*! For license information please see 7724.0fff5da7.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7724],{4182:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get: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=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n1)for(s=0;sr&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var T=(n+p*x)%360,_=(T+x)%360;m.branchRadialLayout(E,e,T,_,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;nt&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;rl&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;rn&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.widtha&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;so&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(4182))},1377:function(e,t,n){e.exports=function(){"use strict";function e(t){return e="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},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nt?1:0},Z=function(e,t){return-1*K(e,t)},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+H+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t},te=function(e){var t,n=new RegExp("^"+U+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t},ne=function(e){return ie[e.toLowerCase()]},re=function(e){return(w(e)?e:null)||ne(e)||J(e)||te(e)||ee(e)},ie={transparent:[0,0,0,0],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],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],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],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]},ae=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i=t||n<0||h&&e-u>=a}function y(){var e=ge();if(v(e))return m(e);s=setTimeout(y,f(e))}function m(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function b(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0}function x(){return void 0===s?o:m(ge())}function w(){var e=ge(),n=v(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return g(l);if(h)return clearTimeout(s),s=setTimeout(y,t),p(l)}return void 0===s&&(s=setTimeout(y,t)),o}return t=qe(t)||0,le(n)&&(c=!!n.leading,a=(h="maxWait"in n)?$e(qe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),w.cancel=b,w.flush=x,w}var Qe=Ze,Je=d?d.performance:null,et=Je&&Je.now?function(){return Je.now()}:function(){return Date.now()},tt=function(){if(d){if(d.requestAnimationFrame)return function(e){d.requestAnimationFrame(e)};if(d.mozRequestAnimationFrame)return function(e){d.mozRequestAnimationFrame(e)};if(d.webkitRequestAnimationFrame)return function(e){d.webkitRequestAnimationFrame(e)};if(d.msRequestAnimationFrame)return function(e){d.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(et())}),1e3/60)}}(),nt=function(e){return tt(e)},rt=et,it=9261,at=65599,ot=5381,st=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:it;!(t=e.next()).done;)n=n*at+t.value|0;return n},lt=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:it)*at+e|0},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ot;return(t<<5)+t+e|0},ct=function(e,t){return 2097152*e+t},ht=function(e){return 2097152*e[0]+e[1]},dt=function(e,t){return[lt(e[0],t[0]),ut(e[1],t[1])]},pt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Rt=function(e){e.splice(0,e.length)},Bt=function(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&S(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ut,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];w(t.classes)?l=t.classes:b(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?1:0},u=function(e,t,i,a,o){var s;if(null==i&&(i=0),null==o&&(o=n),i<0)throw new Error("lo must be non-negative");for(null==a&&(a=e.length);in;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;af;0<=f?++d:--d)v.push(a(e,r));return v},g=function(e,t,r,i){var a,o,s;for(null==i&&(i=n),a=e[r];r>t&&i(a,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=a},f=function(e,t,r){var i,a,o,s,l;for(null==r&&(r=n),a=e.length,l=t,o=e[t],i=2*t+1;i0;){var T=y.pop(),_=f(T),D=T.id();if(h[D]=_,_!==1/0)for(var C=T.neighborhood().intersect(p),N=0;N0)for(n.unshift(t);c[i];){var a=c[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Qt={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t0;){if(x(),E++,u===h){for(var T=[],_=i,D=h,C=m[D];T.unshift(_),null!=C&&T.unshift(C),null!=(_=y[D]);)C=m[D=_.id()];return{found:!0,distance:d[u],path:this.spawn(T),steps:E}}g[u]=!0;for(var N=l._private.edges,A=0;AN&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+_;!i&&p[A]>N&&(p[A]=N,y[A]=_,m[A]=w)}}}for(var L=0;L1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},E=0;E=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;pr;){var i=Math.floor(Math.random()*t.length);t=sn(i,e,t),n--}return t},un={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/on);if(!(i<2)){for(var l=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2},mn=function(e){return Math.PI*e/180},bn=function(e,t){return Math.atan2(t,e)-Math.PI/2},xn=Math.log2||function(e){return Math.log(e)/Math.log(2)},wn=function(e){return e>0?1:e<0?-1:0},En=function(e,t){return Math.sqrt(Tn(e,t))},Tn=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},_n=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Sn=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},On=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},In=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},kn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},Mn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Pn=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var s=o(a,4);t=s[0],n=s[1],r=s[2],i=s[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Rn=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},Bn=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2t.y2||t.y1>e.y2)},Fn=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},zn=function(e,t){return Fn(e,t.x,t.y)},Gn=function(e,t){return Fn(e,t.x1,t.y1)&&Fn(e,t.x2,t.y2)},Yn=function(e,t,n,r,i,a,o){var s,l=cr(i,a),u=i/2,c=a/2,h=r-c-o;if((s=rr(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=rr(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=rr(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=rr(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=tr(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=tr(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=tr(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,T=r+c-l;return(g=tr(e,t,n,r,E,T,l+o)).length>0&&g[0]<=E&&g[1]>=T?[g[0],g[1]]:[]},Xn=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},Vn=function(e,t,n,r,i,a,o,s,l){var u={x1:Math.min(n,o,i)-l,x2:Math.max(n,o,i)+l,y1:Math.min(r,s,a)-l,y2:Math.max(r,s,a)+l};return!(eu.x2||tu.y2)},Un=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]},jn=function(e,t,n,r,i){var a,o,s,l,u,c,h,d;return 0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,void(i[5]=-h)):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,void(i[4]=i[2]=-(d+h))):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),void(i[4]=-h+d*Math.cos((l+4*Math.PI)/3))))},Hn=function(e,t,n,r,i,a,o,s){var l=[];jn(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=1e-7,c=[],h=0;h<6;h+=2)Math.abs(l[h+1])=0&&l[h]<=1&&c.push(l[h]);c.push(1),c.push(0);for(var d,p,g,f=-1,v=0;v=0?gl?(e-i)*(e-i)+(t-a)*(t-a):u-h},Wn=function(e,t,n){for(var r,i,a,o,s=0,l=0;l=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},$n=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g0){var f=Qn(c,-l);h=Zn(f)}else h=c;return Wn(e,t,h)},Kn=function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=hr(a,o),h=c*c,d=0;d=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},nr=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},rr=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=.001,w=0-x,E=1+x;return w<=m&&m<=E&&w<=b&&b<=E||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?nr(e,n,o)===o?[o,s]:nr(e,n,i)===i?[i,a]:nr(i,o,n)===n?[n,r]:[]:[]},ir=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y0){var m=Qn(f,-s);u=Zn(m)}else u=f}else u=n;for(var b=0;b2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),S=1;Su&&(u=t)},get:function(e){return l[e]}},h=0;h0?m.edgesTo(y)[0]:y.edgesTo(m)[0];var x=r(b);y=y.id(),h[y]>h[f]+x&&(h[y]=h[f]+x,d.nodes.indexOf(y)<0?d.push(y):d.updateItem(y),u[y]=0,l[y]=[]),h[y]==h[f]+x&&(u[y]=u[y]+u[f],l[y].push(f))}else for(var w=0;w0;){for(var D=n.pop(),C=0;C0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i},kr=function(e,t){for(var n=0;n5&&void 0!==arguments[5]?arguments[5]:Br,o=r,s=0;s=2?Vr(e,t,n,0,Gr,Yr):Vr(e,t,n,0,zr)},squaredEuclidean:function(e,t,n){return Vr(e,t,n,0,Gr)},manhattan:function(e,t,n){return Vr(e,t,n,0,zr)},max:function(e,t,n){return Vr(e,t,n,-1/0,Xr)}};function jr(e,t,n,r,i,a){var o;return o=x(e)?e:Ur[e]||Ur.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}Ur["squared-euclidean"]=Ur.squaredEuclidean,Ur.squaredeuclidean=Ur.squaredEuclidean;var Hr=Mt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),qr=function(e){return Hr(e)},Wr=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=function(e){return r[e](t)},s=n,l=t;return jr(e,r.length,a,o,s,l)},$r=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;ln)return!1;return!0},ei=function(e,t,n){for(var r=0;ri&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;vn[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]0&&r.push(i);return r},Ei=function(e,t,n){for(var r=[],i=0;io&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;ul&&(s=u,l=c)}n[i]=a[s]}return r=Ei(e,t,n)},_i=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=mi(e),c={},h=0;h=C?(N=C,C=L,A=S):L>N&&(N=L);for(var O=0;O0?1:0;T[E%u.minIterations*t+B]=F,R+=F}if(R>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var z=0,G=0;G1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},Ai=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)},l=function l(u,c,h){u===h&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,g,f,v=e.getElementById(c).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(c))):v.forEach((function(e){d=e.source().id(),p=e.target().id(),(g=d===c?p:d)!==h&&(f=e.id(),o[f]||(o[f]=!0,a.push({x:c,y:g,edge:e})),g in t?t[c].low=Math.min(t[c].low,t[g].id):(l(u,g,c),t[c].low=Math.min(t[c].low,t[g].low),t[c].id<=t[g].low&&(t[c].cutVertex=!0,s(c,g))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,l(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Li=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Si={};[qt,Zt,Qt,en,nn,an,un,vr,mr,xr,Er,Rr,si,vi,Di,Ni,{hopcroftTarjanBiconnected:Ai,htbc:Ai,htb:Ai,hopcroftTarjanBiconnectedComponents:Ai},{tarjanStronglyConnected:Li,tsc:Li,tscc:Li,tarjanStronglyConnectedComponents:Li}].forEach((function(e){Q(Si,e)}));var Oi=0,Ii=1,ki=2,Mi=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=Oi,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Mi.prototype={fulfill:function(e){return Pi(this,Ii,"fulfillValue",e)},reject:function(e){return Pi(this,ki,"rejectReason",e)},then:function(e,t){var n=this,r=new Mi;return n.onFulfilled.push(Fi(e,r,"fulfill")),n.onRejected.push(Fi(t,r,"reject")),Ri(n),r.proxy}};var Pi=function(e,t,n,r){return e.state===Oi&&(e.state=t,e[n]=r,Ri(e)),e},Ri=function(e){e.state===Ii?Bi(e,"onFulfilled",e.fulfillValue):e.state===ki&&Bi(e,"onRejected",e.rejectReason)},Bi=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n-1}var Za=Ka;function Qa(e,t){var n=this.__data__,r=Ua(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Ja=Qa;function eo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){w(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};ps.className=ps.classNames=ps.classes;var gs={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:V,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};gs.variable="(?:[\\w-.]|(?:\\\\"+gs.metaChar+"))+",gs.className="(?:[\\w-]|(?:\\\\"+gs.metaChar+"))+",gs.value=gs.string+"|"+gs.number,gs.id=gs.variable,function(){var e,t,n;for(e=gs.comparatorOp.split("|"),n=0;n=0||"="!==t&&(gs.comparatorOp+="|\\!"+t)}();var fs=function(){return{checks:[]}},vs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ys=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return Z(e.selector,t.selector)})),ms=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return Nt("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Nt("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Nt("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return b(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case vs.GROUP:var l=e(s);return l.substring(0,l.length-1);case vs.DATA_COMPARE:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case vs.DATA_BOOL:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case vs.DATA_EXIST:return"["+r.field+"]";case vs.META_COMPARE:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case vs.STATE:return s;case vs.ID:return"#"+s;case vs.CLASS:return"."+s;case vs.PARENT:case vs.CHILD:return i(r.parent,a)+n(">")+i(r.child,a);case vs.ANCESTOR:case vs.DESCENDANT:return i(r.ancestor,a)+" "+i(r.descendant,a);case vs.COMPOUND_SPLIT:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case vs.TRUE:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o1&&o=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Vs(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1],Vs)},Ys.forEachUp=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Us)},Ys.forEachUpAndDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],js)},Ys.ancestors=Ys.parents,(Fs=zs={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:hs.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:hs.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Fs.data,Fs.removeAttr=Fs.removeData;var Hs,qs,Ws=zs,$s={};function Ks(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;ot})),minIndegree:Zs("indegree",(function(e,t){return et})),minOutdegree:Zs("outdegree",(function(e,t){return et}))}),Q($s,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}}).modelPosition=Hs.point=Hs.position,Hs.modelPositions=Hs.points=Hs.positions,Hs.renderedPoint=Hs.renderedPosition,Hs.relativePoint=Hs.relativePosition;var el,tl,nl=qs;el=tl={},tl.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},tl.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},tl.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=m(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}function m(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},al=function(e,t){return null==t?e:il(e,t.x1,t.y1,t.x2,t.y2)},ol=function(e,t,n){return Ft(e,t,n)},sl=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,Mn(u,1),il(e,u.x1,u.y1,u.x2,u.y2)}}},ll=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=ol(a,"labelWidth",n),p=ol(a,"labelHeight",n),g=ol(a,"labelX",n),f=ol(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,T=2,_=p,D=d,C=D/2,N=_/2;if(m)o=g-C,s=g+C,l=f-N,u=f+N;else{switch(c.value){case"left":o=g-D,s=g;break;case"center":o=g-C,s=g+C;break;case"right":o=g,s=g+D}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-N,u=f+N;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-T,s+=v+Math.max(x,w)+E+T,l+=y-Math.max(x,w)-E-T,u+=y+Math.max(x,w)+E+T;var A=n||"main",L=i.labelBounds,S=L[A]=L[A]||{};S.x1=o,S.y1=l,S.x2=s,S.y2=u,S.w=s-o,S.h=u-l;var O=m&&"autorotate"===b.strValue,I=null!=b.pfValue&&0!==b.pfValue;if(O||I){var k=O?ol(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(k),P=Math.sin(k),R=(o+s)/2,B=(l+u)/2;if(!m){switch(c.value){case"left":R=s;break;case"right":R=o}switch(h.value){case"top":B=u;break;case"bottom":B=l}}var F=function(e,t){return{x:(e-=R)*M-(t-=B)*P+R,y:e*P+t*M+B}},z=F(o,l),G=F(o,u),Y=F(s,l),X=F(s,u);o=Math.min(z.x,G.x,Y.x,X.x),s=Math.max(z.x,G.x,Y.x,X.x),l=Math.min(z.y,G.y,Y.y,X.y),u=Math.max(z.y,G.y,Y.y,X.y)}var V=A+"Rot",U=L[V]=L[V]||{};U.x1=o,U.y1=l,U.x2=s,U.y2=u,U.w=s-o,U.h=u-l,il(e,o,l,s,u),il(i.labelBounds.all,o,l,s,u)}return e}},ul=function(e,t){var n,r,i,a,o,s,l=e._private.cy,u=l.styleEnabled(),c=l.headless(),h=Ln(),d=e._private,p=e.isNode(),g=e.isEdge(),f=d.rstyle,v=p&&u?e.pstyle("bounds-expansion").pfValue:[0],y=function(e){return"none"!==e.pstyle("display").value},m=!u||y(e)&&(!g||y(e.source())&&y(e.target()));if(m){var b=0;u&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(b=e.pstyle("overlay-padding").value);var x=0;u&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(x=e.pstyle("underlay-padding").value);var w=Math.max(b,x),E=0;if(u&&(E=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var _=e.outerWidth()/2,D=e.outerHeight()/2;il(h,n=o-_,i=s-D,r=o+_,a=s+D)}else if(g&&t.includeEdges)if(u&&!c){var C=e.pstyle("curve-style").strValue;if(n=Math.min(f.srcX,f.midX,f.tgtX),r=Math.max(f.srcX,f.midX,f.tgtX),i=Math.min(f.srcY,f.midY,f.tgtY),a=Math.max(f.srcY,f.midY,f.tgtY),il(h,n-=E,i-=E,r+=E,a+=E),"haystack"===C){var N=f.haystackPts;if(N&&2===N.length){if(n=N[0].x,i=N[0].y,n>(r=N[1].x)){var A=n;n=r,r=A}if(i>(a=N[1].y)){var L=i;i=a,a=L}il(h,n-E,i-E,r+E,a+E)}}else if("bezier"===C||"unbundled-bezier"===C||"segments"===C||"taxi"===C){var S;switch(C){case"bezier":case"unbundled-bezier":S=f.bezierPts;break;case"segments":case"taxi":S=f.linePts}if(null!=S)for(var O=0;O(r=M.x)){var P=n;n=r,r=P}if((i=k.y)>(a=M.y)){var R=i;i=a,a=R}il(h,n-=E,i-=E,r+=E,a+=E)}if(u&&t.includeEdges&&g&&(sl(h,e,"mid-source"),sl(h,e,"mid-target"),sl(h,e,"source"),sl(h,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,F=e.pstyle("ghost-offset-y").pfValue;il(h,h.x1+B,h.y1+F,h.x2+B,h.y2+F)}var z=d.bodyBounds=d.bodyBounds||{};Rn(z,h),Pn(z,v),Mn(z,1),u&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,il(h,n-w,i-w,r+w,a+w));var G=d.overlayBounds=d.overlayBounds||{};Rn(G,h),Pn(G,v),Mn(G,1);var Y=d.labelBounds=d.labelBounds||{};null!=Y.all?On(Y.all):Y.all=Ln(),u&&t.includeLabels&&(t.includeMainLabels&&ll(h,e,null),g&&(t.includeSourceLabels&&ll(h,e,"source"),t.includeTargetLabels&&ll(h,e,"target")))}return h.x1=rl(h.x1),h.y1=rl(h.y1),h.x2=rl(h.x2),h.y2=rl(h.y2),h.w=rl(h.x2-h.x1),h.h=rl(h.y2-h.y1),h.w>0&&h.h>0&&m&&(Pn(h,v),Mn(h,1)),h},cl=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:Pl,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},Bl.removeAllListeners=function(){return this.removeListener("*")},Bl.emit=Bl.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Gl(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||i.namespace===Il)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&Bt(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--)e(this[t])&&this.unmergeAt(t);return this},map:function(e,t){for(var n=[],r=this,i=0;ir&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a=0&&i1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,i=n.style();if(E(e)){var a=e;i.applyBypass(this,a,r),this.emitAndNotify("style")}else if(b(e)){if(void 0===t){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}i.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?i.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),i=this;if(void 0===e)for(var a=0;a0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),du.neighbourhood=du.neighborhood,du.closedNeighbourhood=du.closedNeighborhood,du.openNeighbourhood=du.openNeighborhood,Q(du,{source:Gs((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Gs((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:vu({attr:"source"}),targets:vu({attr:"target"})}),Q(du,{edgesWith:Gs(yu(),"edgesWith"),edgesTo:Gs(yu({thisIsSrc:!0}),"edgesTo")}),Q(du,{connectedEdges:Gs((function(e){for(var t=[],n=this,r=0;r0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),du.componentsOf=du.components;var bu=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Yt,a=!1;if(t){if(t.length>0&&E(t[0])&&!A(t[0])){a=!0;for(var o=[],s=new Ut,l=0,u=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u0){for(var B=e.length===i.length?i:new bu(a,e),F=0;F0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n0&&(e?D.emitAndNotify("remove"):t&&D.emit("remove"));for(var C=0;C0?i=l:r=l}while(Math.abs(a)>o&&++u=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function T(){E=!0,e===t&&n===r||b()}var _=function(i){return E||T(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return D},_}var Tu=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4,d=.016;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*d:d;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),_u=function(e,t,n,r){var i=Eu(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Du={linear:function(e,t,n){return e+(t-e)*n},ease:_u(.25,.1,.25,1),"ease-in":_u(.42,0,1,1),"ease-out":_u(0,0,.58,1),"ease-in-out":_u(.42,0,.58,1),"ease-in-sine":_u(.47,0,.745,.715),"ease-out-sine":_u(.39,.575,.565,1),"ease-in-out-sine":_u(.445,.05,.55,.95),"ease-in-quad":_u(.55,.085,.68,.53),"ease-out-quad":_u(.25,.46,.45,.94),"ease-in-out-quad":_u(.455,.03,.515,.955),"ease-in-cubic":_u(.55,.055,.675,.19),"ease-out-cubic":_u(.215,.61,.355,1),"ease-in-out-cubic":_u(.645,.045,.355,1),"ease-in-quart":_u(.895,.03,.685,.22),"ease-out-quart":_u(.165,.84,.44,1),"ease-in-out-quart":_u(.77,0,.175,1),"ease-in-quint":_u(.755,.05,.855,.06),"ease-out-quint":_u(.23,1,.32,1),"ease-in-out-quint":_u(.86,0,.07,1),"ease-in-expo":_u(.95,.05,.795,.035),"ease-out-expo":_u(.19,1,.22,1),"ease-in-out-expo":_u(1,0,0,1),"ease-in-circ":_u(.6,.04,.98,.335),"ease-out-circ":_u(.075,.82,.165,1),"ease-in-out-circ":_u(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Du.linear;var r=Tu(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_u};function Cu(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Nu(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Au(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Nu(e,i),s=Nu(t,i);if(_(o)&&_(s))return Cu(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u0?("spring"===h&&d.push(o.duration),o.easingImpl=Du[h].apply(null,d)):o.easingImpl=Du[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};Su(f.x,v.x)&&(y.x=Au(f.x,v.x,p,g)),Su(f.y,v.y)&&(y.y=Au(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(Su(m.x,x.x)&&(w.x=Au(m.x,x.x,p,g)),Su(m.y,x.y)&&(w.y=Au(m.y,x.y,p,g)),e.emit("pan"));var T=o.startZoom,_=o.zoom,D=null!=_&&r;D&&(Su(T,_)&&(a.zoom=An(a.minZoom,Au(T,_,p,g),a.maxZoom)),e.emit("zoom")),(E||D)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var N=0;N=0;t--)(0,e[t])();e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ou(t,h,e),Lu(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var ku={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Iu(n,e)}),t.beforeRenderPriorities.animations):n()}function n(){e._private.animationsRunning&&nt((function(t){Iu(t,e),n()}))}}},Mu={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Pu=function(e){return b(e)?new Ps(e):e},Ru={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Rl(Mu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Pu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Pu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},once:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};hs.eventAliasesOn(Ru);var Bu={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Bu.jpeg=Bu.jpg;var Fu={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=b(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(Q({},e,{cy:t,eles:i}));return a}Dt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Dt("A `name` must be specified to make a layout");else Dt("Layout options must be specified to make a layout")}};Fu.createLayout=Fu.makeLayout=Fu.layout;var zu={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Yu.invalidateDimensions=Yu.resize;var Xu={collection:function(e,t){return b(e)?this.$(e):N(e)?e.collection():w(e)?(t||(t={}),new bu(this,e,t.unique,t.removed)):new bu(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Xu.elements=Xu.filter=Xu.$;var Vu={},Uu="t",ju="f";Vu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],T=i.valueMin[1],D=i.valueMax[1],C=i.valueMin[2],N=i.valueMax[2],A=null==i.valueMin[3]?1:i.valueMin[3],L=null==i.valueMax[3]?1:i.valueMax[3],S=[Math.round(w+(E-w)*v),Math.round(T+(D-T)*v),Math.round(C+(N-C)*v),Math.round(A+(L-A)*v)];n={bypass:i.bypass,name:i.name,value:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,O,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var I=i.field.split("."),k=h.data,M=0;M0&&a>0){for(var s={},l=!1,u=0;u0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Vu.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Vu.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Vu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Vu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Hu={applyBypass:function(e,t,n,r){var i=this,a=[],o=!0;if("*"===t||"**"===t){if(void 0!==n)for(var s=0;st.length?o.substr(t.length):""}function l(){n=n.length>r.length?n.substr(r.length):""}for(o=o.replace(/[/][*](\s|.)+?[*][/]/g,"");!o.match(/^\s*$/);){var u=o.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Nt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+o);break}t=u[0];var c=u[1];if("core"!==c&&new Ps(c).invalid)Nt("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),s();else{var h=u[2],d=!1;n=h;for(var p=[];!n.match(/^\s*$/);){var g=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Nt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}r=g[0];var f=g[1],v=g[2];i.properties[f]?a.parse(f,v)?(p.push({name:f,val:v}),l()):(Nt("Skipping property: Invalid property definition in: "+r),l()):(Nt("Skipping property: Invalid property name in: "+r),l())}if(d){s();break}a.selector(c);for(var y=0;y=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return Nt("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):w(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var E=[],T=[],_=[],C="",N=!1,A=0;A0?" ":"")+L.strValue}return h.validate&&!h.validate(E,T)?null:h.singleEnum&&N?1===E.length&&b(E[0])?{name:e,value:E[0],strValue:E[0],bypass:n}:null:{name:e,value:E,pfValue:_,strValue:C,bypass:n,units:T}}var S=function(){for(var r=0;rh.max||h.strictMax&&t===h.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:mn(t)),"%"===O&&(P.pfValue=t/100),P}if(h.propList){var R=[],B=""+t;if("none"===B);else{for(var F=B.split(/\s*,\s*|\s+/),G=0;G0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((o-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:a)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),_(e)?n=e:E(e)&&(n=e.level,null!=e.position?t=hn(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;_(l.x)&&(t.pan.x=l.x,o=!1),_(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(b(e)){var n=e;e=this.mutableElements().filter(n)}else N(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};rc.centre=rc.center,rc.autolockNodes=rc.autolock,rc.autoungrabifyNodes=rc.autoungrabify;var ic={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ic.attr=ic.data,ic.removeAttr=ic.removeData;var ac=function(e){var t=this,n=(e=Q({},e)).container;n&&!C(n)&&C(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==d&&void 0!==n&&!e.headless,o=e;o.layout=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new bu(this),listeners:[],aniEles:new bu(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:_(o.zoom)?o.zoom:1,pan:{x:E(o.pan)&&_(o.pan.x)?o.pan.x:0,y:E(o.pan)&&_(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var u=function(e,t){if(e.some(R))return Gi.all(e).then(t);t(e)};l.styleEnabled&&t.setStyle([]);var c=Q({},o,o.renderer);t.initRenderer(c);var h=function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(E(e)||w(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()};u([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),h(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,u=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(N(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h0;){var M=k(),P=L(M,O);if(P)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(I);else if(null===P){Nt("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var R=0;if(n.avoidOverlap)for(var B=0;B0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:$.x+c*Math.cos(h),y:$.y+c*Math.sin(h)}}return{x:$.x+(i+1-(a+1)/2)*o,y:(r+1)*s}};return i.nodes().layoutPositions(this,n,Q),this};var dc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function pc(e){this.options=Q({},dc,e)}pc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),c=0,h=0;h1&&t.avoidOverlap){c*=1.75;var f=Math.cos(u)-Math.cos(0),v=Math.sin(u)-Math.sin(0),y=Math.sqrt(c*c/(f*f+v*v));o=Math.max(y,o)}var m=function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l.x+a,y:l.y+s}};return r.nodes().layoutPositions(this,t,m),this};var gc,fc={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vc(e){this.options=Q({},fc,e)}vc.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s={x:o.x1+o.w/2,y:o.y1+o.h/2},l=[],u=0,c=0;c0&&Math.abs(y[0].value-b.value)>=f&&(y=[],v.push(y)),y.push(b)}var x=u+t.minNodeSpacing;if(!t.avoidOverlap){var w=v.length>0&&v[0].length>1,E=(Math.min(o.w,o.h)/2-x)/(v.length+w?1:0);x=Math.min(x,E)}for(var T=0,_=0;_1&&t.avoidOverlap){var A=Math.cos(N)-Math.cos(0),L=Math.sin(N)-Math.sin(0),S=Math.sqrt(x*x/(A*A+L*L));T=Math.max(S,T)}D.r=T,T+=x}if(t.equidistant){for(var O=0,I=0,k=0;k=e.numIter||(Cc(r,e),r.temperature=r.temperature*e.coolingFactor,r.temperature=e.animationThreshold&&a(),nt(t)):(Fc(r,e),s())}();else{for(;u;)u=o(l),l++;Fc(r,e),s()}return this},mc.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},mc.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var bc,xc=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u0)for(o.graphSet.push(E),u=0;ur.count?0:r.graph},Ec=function e(t,n,r,i){var a=i.graphSet[r];if(-10)var l=(c=r.nodeOverlap*s)*i/(v=Math.sqrt(i*i+a*a)),u=c*a/v;else{var c,h=Oc(e,i,a),d=Oc(t,-1*i,-1*a),p=d.x-h.x,g=d.y-h.y,f=p*p+g*g,v=Math.sqrt(f);l=(c=(e.nodeRepulsion+t.nodeRepulsion)/f)*p/v,u=c*g/v}e.isLocked||(e.offsetX-=l,e.offsetY-=u),t.isLocked||(t.offsetX+=l,t.offsetY+=u)}},Sc=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Oc=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0n?(u.x=r,u.y=i+a/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ic=function(e,t){for(var n=0;nn){var f=t.gravity*d/g,v=t.gravity*p/g;h.offsetX+=f,h.offsetY+=v}}}}},Mc=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Bc=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLefti.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTopg&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},zc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Gc(e){this.options=Q({},zc,e)}Gc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x=u&&(O=0,S++)},k={},M=0;M(r=qn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5(r=Hn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),T=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w0&&(y(m),y(b))}function b(e,t,n){return Ft(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),T=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},_=T(f,m),D=T(f,x),C=T(y,m),N=T(y,x),A=[_.x+d,_.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Wn(e,t,A))return v(n),!0}else if(Fn(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i=this.getCachedZSortedEles().interactive,a=[],o=Math.min(e,n),s=Math.max(e,n),l=Math.min(t,r),u=Math.max(t,r),c=Ln({x1:e=o,y1:t=l,x2:n=s,y2:r=u}),h=0;h0?Math.max(e-t,0):Math.min(e+t,0)},A=N(D,T),L=N(C,_),S=!1;y===u?v=Math.abs(A)>Math.abs(L)?i:r:y===l||y===s?(v=r,S=!0):y!==a&&y!==o||(v=i,S=!0);var O,I=v===r,k=I?L:A,M=I?C:D,P=wn(M),R=!1;S&&(b||w)||!(y===s&&M<0||y===l&&M>0||y===a&&M>0||y===o&&M<0)||(k=(P*=-1)*Math.abs(k),R=!0);var B=function(e){return Math.abs(e)=Math.abs(k)},F=B(O=b?(x<0?1+x:x)*k:(x<0?k:0)+x*P),z=B(Math.abs(k)-Math.abs(O));if(!F&&!z||R)if(I){var G=c.y1+O+(f?d/2*P:0),Y=c.x1,X=c.x2;n.segpts=[Y,G,X,G]}else{var V=c.x1+O+(f?h/2*P:0),U=c.y1,j=c.y2;n.segpts=[V,U,V,j]}else if(I){var H=Math.abs(M)<=d/2,q=Math.abs(D)<=p/2;if(H){var W=(c.x1+c.x2)/2,$=c.y1,K=c.y2;n.segpts=[W,$,W,K]}else if(q){var Z=(c.y1+c.y2)/2,Q=c.x1,J=c.x2;n.segpts=[Q,Z,J,Z]}else n.segpts=[c.x1,c.y2]}else{var ee=Math.abs(M)<=h/2,te=Math.abs(C)<=g/2;if(ee){var ne=(c.y1+c.y2)/2,re=c.x1,ie=c.x2;n.segpts=[re,ne,ie,ne]}else if(te){var ae=(c.x1+c.x2)/2,oe=c.y1,se=c.y2;n.segpts=[ae,oe,ae,se]}else n.segpts=[c.x2,c.y1]}},eh.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=!_(n.startX)||!_(n.startY),d=!_(n.arrowStartX)||!_(n.arrowStartY),p=!_(n.endX)||!_(n.endY),g=!_(n.arrowEndX)||!_(n.arrowEndY),f=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth*3,v=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=vd.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E0){var X=u,V=Tn(X,pn(t)),U=Tn(X,pn(Y)),j=V;U2&&Tn(X,{x:Y[2],y:Y[3]})0){var ie=c,ae=Tn(ie,pn(t)),oe=Tn(ie,pn(re)),se=ae;oe2&&Tn(ie,{x:re[2],y:re[3]})=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,T=s?x.t0+E*w:x.t1-E*w;T=An(0,T,1),t=Cn(b.p0,b.p1,b.p2,T),i=lh(b.p0,b.p1,b.p2,T);break;case"straight":case"segments":case"haystack":for(var _,D,C,N,A=0,L=r.allpts.length,S=0;S+3=u));S+=2);var O=(u-D)/_;O=An(0,O,1),t=Nn(C,N,O),i=sh(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},ah.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ah.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Ft(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;zt(n.rstyle,"labelWidth",t,h),zt(n.rscratch,"labelWidth",t,h),zt(n.rstyle,"labelHeight",t,d),zt(n.rscratch,"labelHeight",t,d),zt(n.rscratch,"labelLineHeight",t,c)},ah.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(zt(n.rscratch,e,t,r),r):Ft(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u="\u200b",c=i.split("\n"),h=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+/,f=d?"":" ",v=0;vh){for(var x=y.split(g),w="",E=0;ED);L++)C+=i[L],L===i.length-1&&(A=!0);return A||(C+=N),C}return i},ah.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},ah.calculateLabelDimensions=function(e,t){var n=this,r=gt(t,e._private.labelDimsKey),i=n.labelDimCache||(n.labelDimCache=[]),a=i[r];if(null!=a)return a;var o=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=document.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var p=h.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(c," ").concat(l,"px ").concat(u);for(var g=0,f=0,v=t.split("\n"),y=0;y1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var C=i(t);f&&(e.hoverData.tapholdCancelled=!0);var N=function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])};n=!0,r(p,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var A=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),d[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(f){var S={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(S):o.emit(S),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&p===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=p,p&&p.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var O;if(e.hoverData.justStartedPan){var I=e.hoverData.mdownPos;O={x:(u[0]-I[0])*s,y:(u[1]-I[1])*s},e.hoverData.justStartedPan=!1}else O={x:b[0]*s,y:b[1]*s};o.panBy(O),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=d[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||p==y||(y&&r(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),p&&r(p,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=p),m)if(f){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(v(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),A();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var k=!e.dragData.didDrag;k&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||g(x,{inDragLayer:!0});var M={x:0,y:0};if(_(b[0])&&_(b[1])&&(M.x+=b[0],M.y+=b[1],k)){var P=e.hoverData.dragDelta;P&&_(P[0])&&_(P[1])&&(M.x+=P[0],M.y+=P[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else N();n=!0}else f&&(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()?!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()&&a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,d[4]=0,e.data.bgActivePosistion=pn(c),e.redrawHint("select",!0),e.redraw()):A(),m&&m.pannable()&&m.active()&&m.unactivate());return d[2]=u[0],d[3]=u[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var d={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):a.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),C=!1,t.timeStamp-N<=a.multiClickDebounceTime()?(D&&clearTimeout(D),C=!0,N=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(D=setTimeout((function(){C||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),N=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var f=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(n).unmerge(g).unselect(),g.emit("box").stdFilter(f).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();v(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var S,O,I,k,M,P,R,B,F,z,G,Y,X,V=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||A())t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",V,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||V(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var U,j,H,q,W,$,K,Z=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Q=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",U=function(t){if(e.hasTouchStarted=!0,L(t)){m(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]&&(o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),i[2]=o[0],i[3]=o[1]),t.touches[2]&&(o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),i[4]=o[0],i[5]=o[1]),t.touches[1]){e.touchData.singleTouchMoved=!0,v(e.dragData.touchDragEles);var s=e.findContainerClientCoords();F=s[0],z=s[1],G=s[2],Y=s[3],S=t.touches[0].clientX-F,O=t.touches[0].clientY-z,I=t.touches[1].clientX-F,k=t.touches[1].clientY-z,X=0<=S&&S<=G&&0<=I&&I<=G&&0<=O&&O<=Y&&0<=k&&k<=Y;var l=n.pan(),u=n.zoom();M=Z(S,O,I,k),P=Q(S,O,I,k),B=[((R=[(S+I)/2,(O+k)/2])[0]-l.x)/u,(R[1]-l.y)/u];var h=200;if(P=1){for(var T=e.touchData.startPosition=[null,null,null,null,null,null],_=0;_=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-F,w=t.touches[0].clientY-z,E=t.touches[1].clientX-F,T=t.touches[1].clientY-z,D=Q(x,w,E,T),C=150,N=1.5;if(D/P>=N*N||D>=C*C){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var A={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(A),e.touchData.start=null):o.emit(A)}}if(n&&e.touchData.cxt){A={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}},e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(A):o.emit(A),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var R=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&R===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=R,R&&R.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ne=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var G=0;G0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",H=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",q=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(t.touches[1]&&(h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),u[2]=h[0],u[3]=h[1]),t.touches[2]&&(h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),u[4]=h[0],u[5]=h[1]),i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var d={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(d):s.emit(d)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:u[0],y:u[1]}});var g=function(e){return e.selectable()&&!e.selected()};p.emit("box").stdFilter(g).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var f=e.dragData.touchDragEles;if(null!=i){var y=i._private.grabbed;v(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(i.emit("freeon"),f.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),f.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(u[0],u[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var b=e.touchData.startPosition[0]-u[0],x=b*b,w=e.touchData.startPosition[1]-u[1],E=(x+w*w)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),W=!1,t.timeStamp-K<=s.multiClickDebounceTime()?($&&clearTimeout($),W=!0,K=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):($=setTimeout((function(){W||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),K=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E0)return p[0]}return null},d=Object.keys(c),p=0;p0?l:Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;if($n(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Wn(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||!!er(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!er(e,t,l,l,a-r/2+s,o+i/2-s,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",sr(3,0)),this.generateRoundPolygon("round-triangle",sr(3,0)),this.generatePolygon("rectangle",sr(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",sr(5,0)),this.generateRoundPolygon("round-pentagon",sr(5,0)),this.generatePolygon("hexagon",sr(6,0)),this.generateRoundPolygon("round-hexagon",sr(6,0)),this.generatePolygon("heptagon",sr(7,0)),this.generateRoundPolygon("round-heptagon",sr(7,0)),this.generatePolygon("octagon",sr(8,0)),this.generateRoundPolygon("round-octagon",sr(8,0));var r=new Array(20),i=ur(5,0),a=ur(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Eh)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())},a=e.priority||_t;n.beforeRender(i,a(t))}}}},_h=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Et;t(this,e),this.idsByKey=new Yt,this.keyForId=new Yt,this.cachesByLvl=new Yt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}return i(e,[{key:"getIdsFor",value:function(e){null==e&&Dt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ut,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Yt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Dh=25,Ch=50,Nh=-4,Ah=3,Lh=7.99,Sh=8,Oh=1024,Ih=1024,kh=1024,Mh=.2,Ph=.8,Rh=10,Bh=.15,Fh=.1,zh=.9,Gh=.9,Yh=100,Xh=1,Vh={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Uh=Mt({getKey:null,doesEleInvalidateKey:Et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:wt,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jh=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Uh(t);Q(n,r),n.lookup=new _h(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Hh=jh.prototype;Hh.reasons=Vh,Hh.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Hh.getRetiredTextureQueue=function(e){var t=this,n=t.eleImgCaches.retired=t.eleImgCaches.retired||{};return n[e]=n[e]||[]},Hh.getElementQueue=function(){var e=this;return e.eleCacheQueue=e.eleCacheQueue||new $t((function(e,t){return t.reqs-e.reqs}))},Hh.getElementKeyToQueue=function(){var e=this;return e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{}},Hh.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(xn(s*n))),r=Lh||r>Ah)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=Dh?Dh:c<=Ch?Ch:Math.ceil(c/Ch)*Ch,c>kh||h>Ih)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidthr;N--)D=a.getElement(e,t,n,N,Vh.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=Nh;L--){var S=l.get(e,L);if(S){A=S;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+Sh),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Hh.invalidateElements=function(e){for(var t=0;t=Mh*e.width&&this.retireTexture(e)},Hh.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>Ph&&e.fullnessChecks>=Rh?Pt(t,e):e.fullnessChecks++},Hh.retireTexture=function(e){var t=this,n=e.height,r=t.getTextureQueue(n),i=this.lookup;Pt(r,e),e.retired=!0;for(var a=e.eleCaches,o=0;o=t)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,Rt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),Pt(i,o),r.push(o),o}},Hh.queueElement=function(e,t){var n=this,r=n.getElementQueue(),i=n.getElementKeyToQueue(),a=this.getKey(e),o=i[a];if(o)o.level=Math.max(o.level,t),o.eles.merge(e),o.reqs++,r.updateItem(o);else{var s={eles:e.spawn().merge(e),level:t,reqs:1,key:a};r.push(s),i[a]=s}},Hh.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Vh.dequeue)}}return i},Hh.removeFromQueue=function(e){var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=this.getKey(e),a=r[i];null!=a&&(1===a.eles.length?(a.reqs=xt,n.updateItem(a),n.pop(),r[i]=null):a.eles.unmerge(e))},Hh.onDequeue=function(e){this.onDequeues.push(e)},Hh.offDequeue=function(e){Pt(this.onDequeues,e)},Hh.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Yh,deqCost:Bh,deqAvgCost:Fh,deqNoDrawCost:zh,deqFastCost:Gh,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=Kh||n>$h)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[],h=function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;Wh<=r&&r<=$h&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Pt(c,o)}};if(r.levelIsComplete(n,e))return c;h();var d=function(){if(!o){o=Ln();for(var t=0;tad)return null;var i=r.makeLayer(o,n);if(null!=t){var a=c.indexOf(t)+1;c.splice(a,0,i)}else(void 0===e.insert||e.insert)&&c.unshift(i);return i};if(r.skipping&&!a)return null;for(var g=null,f=e.length/qh,v=!a,y=0;y=f||!Gn(g.bb,m.boundingBox()))&&!(g=p({insert:!0,after:g})))return null;s||v?r.queueLayer(g,m):r.drawEleInLayer(g,m,n,t),g.eles.push(m),x[n]=g}}return s||(v?null:c)},ld.getEleLevelForLayerLevel=function(e,t){return e},ld.drawEleInLayer=function(e,t,n,r){var i=this,a=this.renderer,o=e.context,s=t.boundingBox();0!==s.w&&0!==s.h&&t.visible()&&(n=i.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(o,!1),a.drawCachedElement(o,t,null,null,n,od),a.setImgSmoothing(o,!0))},ld.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},ld.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){t=!0;break}}return t},ld.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=rt(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},ld.invalidateLayer=function(e){if(this.lastInvalidationTime=rt(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Pt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var E=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,D=f*_;e.translate(E,T),y(D),x(D),e.translate(-E,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Cd=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};Dd.drawEdgeOverlay=Cd("overlay"),Dd.drawEdgeUnderlay=Cd("underlay"),Dd.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+35&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Ad.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(xn(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},Ad.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Ad.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ft(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Ad.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=Ft(a,"labelX",n),c=Ft(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=Ft(a,"labelWidth",n),f=Ft(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,_=t.pstyle("text-background-padding").pfValue;if(w>0||T>0&&E>0){var D=u-_;switch(b){case"left":D-=g;break;case"center":D-=g/2}var C=c-f-_,N=g+2*_,A=f+2*_;if(w>0){var L=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",0===t.pstyle("text-background-shape").strValue.indexOf("round")?Ld(e,D,C,N,A,2):e.fillRect(D,C,N,A),e.fillStyle=L}if(T>0&&E>0){var O=e.strokeStyle,I=e.lineWidth,k=t.pstyle("text-border-color").value,M=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+k[0]+","+k[1]+","+k[2]+","+E*o+")",e.lineWidth=T,e.setLineDash)switch(M){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(D,C,N,A),"double"===M){var P=T/2;e.strokeRect(D+P,C+P,N-2*P,A-2*P)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=O}}var R=2*t.pstyle("text-outline-width").pfValue;if(R>0&&(e.lineWidth=R),"wrap"===t.pstyle("text-wrap").value){var B=Ft(a,"labelWrapCachedLines",n),F=Ft(a,"labelLineHeight",n),z=g/2,G=this.getLabelJustification(t);switch("auto"===G||("left"===b?"left"===G?u+=-g:"center"===G&&(u+=-z):"center"===b?"left"===G?u+=-z:"right"===G&&(u+=z):"right"===b&&("center"===G?u+=z:"right"===G&&(u+=g))),x){case"top":case"center":case"bottom":c-=(B.length-1)*F}for(var Y=0;Y0&&e.strokeText(B[Y],u,c),e.fillText(B[Y],u,c),c+=F}else R>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var Sd={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(_(h.x)&&_(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},k=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},M=t.pstyle("shape").strValue,P=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var R=l.nodePathCache=l.nodePathCache||[],B=ft("polygon"===M?M+","+P.join(","):M,""+i,""+r),F=R[B];null!=F?(d=F,v=!0,c.pathCache=d):(d=new Path2D,R[B]=c.pathCache=d)}var z=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},G=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i)))},X=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},V=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},U=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},j=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},H=function(){l.drawElementText(e,t,null,a)};if("yes"===t.pstyle("ghost").value){var q=t.pstyle("ghost-offset-x").pfValue,W=t.pstyle("ghost-offset-y").pfValue,$=t.pstyle("ghost-opacity").value,K=$*g;e.translate(q,W),I($*A),z(),G(K,!0),k($*O),V(),Y(0!==C||0!==N),G(K,!1),X(K),e.translate(-q,-W)}f&&e.translate(-h.x,-h.y),j(),f&&e.translate(h.x,h.y),I(),z(),G(g,!0),k(),V(),Y(0!==C||0!==N),G(g,!1),X(),f&&e.translate(-h.x,-h.y),H(),U(),n&&e.translate(p.x1,p.y1)}}},Od=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){var o=this;if(n.visible()){var s=n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(l>0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}o.colorFillStyle(t,u[0],u[1],u[2],l),o.nodeShapes[c].draw(t,r.x,r.y,i+2*s,a+2*s),t.fill()}}}};Sd.drawNodeOverlay=Od("overlay"),Sd.drawNodeUnderlay=Od("underlay"),Sd.hasPie=function(e){return(e=e[0])._private.hasPie},Sd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var Id={},kd=100;Id.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},Id.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;io.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},T={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||T.zoom!==_.zoom||T.pan.x!==_.pan.x||T.pan.y!==_.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],S=o.textureCache.texture;T=o.textureCache.viewport,L.setTransform(1,0,0,1,0,0),d?C(L,0,0,T.width,T.height):L.clearRect(0,0,T.width,T.height);var O=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,O[0],O[1],O[2],I),L.fillRect(0,0,T.width,T.height),b=l.zoom(),N(L,!1),L.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),L.drawImage(S,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var k=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,k):o.drawLayeredElements(L,D.nondrag,s,k),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])&&(B=d&&!R[o.DRAG]&&1!==p,N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,k):o.drawCachedElements(L,D.drag,s,k),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)),o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);var X=60;L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/X,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],U=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],j=u.contexts[o.DRAG],H=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(V,U,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(j,H,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=T,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),kd)),t||l.emit("render")};for(var Md={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},Yd.png=function(e){return Ud(e,this.bufferCanvasImage(e),"image/png")},Yd.jpg=function(e){return Ud(e,this.bufferCanvasImage(e),"image/jpeg")};var jd={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Hd=Wd,qd=Wd.prototype;function Wd(e){var t=this;t.data={canvases:new Array(qd.CANVAS_LAYERS),contexts:new Array(qd.CANVAS_LAYERS),canvasNeedsRedraw:new Array(qd.CANVAS_LAYERS),bufferCanvases:new Array(qd.BUFFER_COUNT),bufferContexts:new Array(qd.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};B()&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;st&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(ia)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(ra?(n[0]=c,n[1]=h,T=!0):(n[0]=u,n[1]=l,T=!0):D===N&&(r>a?(n[0]=s,n[1]=l,T=!0):(n[0]=d,n[1]=h,T=!0)),-C===N?a>r?(n[2]=m,n[3]=b,_=!0):(n[2]=y,n[3]=v,_=!0):C===N&&(a>r?(n[2]=f,n[3]=v,_=!0):(n[2]=x,n[3]=b,_=!0)),T&&_)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!T)switch(A){case 1:O=l,S=r+-g/N,n[0]=S,n[1]=O;break;case 2:S=d,O=i+p*N,n[0]=S,n[1]=O;break;case 3:O=h,S=r+g/N,n[0]=S,n[1]=O;break;case 4:S=c,O=i+-p*N,n[0]=S,n[1]=O}if(!_)switch(L){case 1:k=v,I=a+-E/N,n[2]=I,n[3]=k;break;case 2:I=x,k=o+w*N,n[2]=I,n[3]=k;break;case 3:k=b,I=a+E/N,n[2]=I,n[3]=k;break;case 4:I=m,k=o+-w*N,n[2]=I,n[3]=k}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i0){for(var i=this.edgeToDummyNodes.get(n),a=0;a=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;ui.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement=s.length||u>=s[0].length))for(var c=0;ce}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n{"use strict";n.d(t,{diagram:()=>S});var r=n(6432),i=n(9373),a=n(1377),o=n.n(a),s=n(4607),l=n.n(s),u=n(1619),c=n(5920),h=n(7201),d=(n(7484),n(7967),n(7856),n(277),n(5625),n(9354),n(1518),n(9542),n(285),n(8734),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,T,_,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=t.symbols_[_]||_),v=_),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in T=[],o[y])this.terminals_[x]&&x>2&&T.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:T})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;at[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:e.getLogger().trace("Found comment",t.yytext);break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 22:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 24:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 25:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 26:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 27:case 30:case 31:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 28:case 29:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 32:case 33:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\-\)\{\}]+)/i,/^(?:$)/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR:{rules:[22,23],inclusive:!1},NODE:{rules:[21,24,25,26,27,28,29,30,31,32,33],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());d.parser=d;const p=d,g=e=>(0,r.n)(e,(0,r.g)());let f=[],v=0,y={};const m={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},b=(e,t)=>{y[e]=t},x=e=>{switch(e){case m.DEFAULT:return"no-border";case m.RECT:return"rect";case m.ROUNDED_RECT:return"rounded-rect";case m.CIRCLE:return"circle";case m.CLOUD:return"cloud";case m.BANG:return"bang";case m.HEXAGON:return"hexgon";default:return"no-border"}};let w;const E=e=>y[e],T=Object.freeze(Object.defineProperty({__proto__:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.g)(),o={id:v++,nodeId:g(t),level:e,descr:g(n),type:i,children:[],width:(0,r.g)().mindmap.maxNodeWidth};switch(o.type){case m.ROUNDED_RECT:case m.RECT:case m.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=f.length-1;t>=0;t--)if(f[t].level{f=[],v=0,y={}},decorateNode:e=>{const t=f[f.length-1];e&&e.icon&&(t.icon=g(e.icon)),e&&e.class&&(t.class=g(e.class))},getElementById:E,getLogger:()=>r.l,getMindmap:()=>f.length>0?f[0]:null,getNodeById:e=>f[e],getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return m.RECT;case"(":return")"===t?m.ROUNDED_RECT:m.CLOUD;case"((":return m.CIRCLE;case")":return m.CLOUD;case"))":return m.BANG;case"{{":return m.HEXAGON;default:return m.DEFAULT}},nodeType:m,get parseError(){return w},sanitizeText:g,setElementForId:b,setErrorHandler:e=>{w=e},type2Str:x},Symbol.toStringTag,{value:"Module"}));function _(e,t){e.each((function(){var e,n=(0,i.Ys)(this),r=n.text().split(/(\s+|
)/).reverse(),a=[],o=n.attr("y"),s=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",o).attr("dy",s+"em");for(let i=0;it||"
"===e)&&(a.pop(),l.text(a.join(" ").trim()),a="
"===e?[""]:[e],l=n.append("tspan").attr("x",0).attr("y",o).attr("dy","1.1em").text(e))}))}const D=function(e,t,n,r){const i=n%11,a=e.append("g");t.section=i;let o="section-"+i;i<0&&(o+=" section-root"),a.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+o);const s=a.append("g"),l=a.append("g"),u=l.append("text").text(t.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(_,t.width).node().getBBox(),c=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=u.height+1.1*c*.5+t.padding,t.width=u.width+2*t.padding,t.icon)if(t.type===m.CIRCLE){t.height+=50,t.width+=50;a.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);a.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else l.attr("transform","translate("+t.width/2+", "+t.padding/2+")");switch(t.type){case m.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(s,t,i);break;case m.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(s,t);break;case m.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("width",t.width)}(s,t);break;case m.CIRCLE:s.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("r",t.width/2)}(s,t);break;case m.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(s,t);break;case m.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(s,t);break;case m.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(s,t)}return b(t.id,a),t.height},C=function(e){const t=E(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function N(e,t,n,r){D(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{N(e,t,n<0?i:n,r)}))}function A(e,t,n,r){t.add({group:"nodes",data:{id:e.id,labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{A(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function L(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=o()({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),A(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}o().use(l());const S={db:T,renderer:{draw:async(e,t,n,a)=>{const o=(0,r.g)();a.db.clear(),a.parser.parse(e),r.l.debug("Renering info diagram\n"+e);const s=(0,r.g)().securityLevel;let l;"sandbox"===s&&(l=(0,i.Ys)("#i"+t));const u=("sandbox"===s?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);u.append("g");const c=a.db.getMindmap(),h=u.append("g");h.attr("class","mindmap-edges");const d=u.append("g");d.attr("class","mindmap-nodes"),N(d,c,-1,o);const p=await L(c,o);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(h,p),function(e){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,C(n);const i=E(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(p),(0,r.s)(void 0,u,o.mindmap.padding,o.mindmap.useMaxWidth)}},parser:p,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n{"use strict";n.d(t,{Z:()=>s});var r=n(1691),i=n(1610);const a=e=>{const{r:t,g:n,b:a}=i.Z.parse(e),o=.2126*r.Z.channel.toLinear(t)+.7152*r.Z.channel.toLinear(n)+.0722*r.Z.channel.toLinear(a);return r.Z.lang.round(o)},o=e=>a(e)>=.5,s=e=>!o(e)}}]); \ No newline at end of file diff --git a/assets/js/7724.0fff5da7.js.LICENSE.txt b/assets/js/7724.0fff5da7.js.LICENSE.txt new file mode 100644 index 0000000..a58daed --- /dev/null +++ b/assets/js/7724.0fff5da7.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/assets/js/788cc978.4f78c34d.js b/assets/js/788cc978.4f78c34d.js new file mode 100644 index 0000000..56b6c68 --- /dev/null +++ b/assets/js/788cc978.4f78c34d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9157],{3905:(e,a,t)=>{t.d(a,{Zo:()=>o,kt:()=>h});var n=t(7294);function m(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function s(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(m[t]=e[t]);return m}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(m[t]=e[t])}return m}var i=n.createContext({}),l=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},o=function(e){var a=l(e.components);return n.createElement(i.Provider,{value:a},e.children)},c="mdxType",N={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,m=e.mdxType,s=e.originalType,i=e.parentName,o=p(e,["components","mdxType","originalType","parentName"]),c=l(t),k=m,h=c["".concat(i,".").concat(k)]||c[k]||N[k]||s;return t?n.createElement(h,r(r({ref:a},o),{},{components:t})):n.createElement(h,r({ref:a},o))}));function h(e,a){var t=arguments,m=a&&a.mdxType;if("string"==typeof e||m){var s=t.length,r=new Array(s);r[0]=k;var p={};for(var i in a)hasOwnProperty.call(a,i)&&(p[i]=a[i]);p.originalType=e,p[c]="string"==typeof e?e:m,r[1]=p;for(var l=2;l{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>r,default:()=>N,frontMatter:()=>s,metadata:()=>p,toc:()=>l});var n=t(7462),m=(t(7294),t(3905));const s={id:"extend",title:"Time complexity of \u2039extend\u203a",description:"How to make inefficient algorithm unknowingly.\n",tags:["c","python","dynamic array","time complexity","recursion"],last_update:{date:new Date("2021-03-31T00:00:00.000Z")}},r=void 0,p={unversionedId:"time-complexity/extend",id:"time-complexity/extend",title:"Time complexity of \u2039extend\u203a",description:"How to make inefficient algorithm unknowingly.\n",source:"@site/ib002/03-time-complexity/2021-03-31-extend.md",sourceDirName:"03-time-complexity",slug:"/time-complexity/extend",permalink:"/ib002/time-complexity/extend",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/03-time-complexity/2021-03-31-extend.md",tags:[{label:"c",permalink:"/ib002/tags/c"},{label:"python",permalink:"/ib002/tags/python"},{label:"dynamic array",permalink:"/ib002/tags/dynamic-array"},{label:"time complexity",permalink:"/ib002/tags/time-complexity"},{label:"recursion",permalink:"/ib002/tags/recursion"}],version:"current",lastUpdatedAt:1617148800,formattedLastUpdatedAt:"Mar 31, 2021",frontMatter:{id:"extend",title:"Time complexity of \u2039extend\u203a",description:"How to make inefficient algorithm unknowingly.\n",tags:["c","python","dynamic array","time complexity","recursion"],last_update:{date:"2021-03-31T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Asymptotic Notation and Time Complexity",permalink:"/ib002/category/asymptotic-notation-and-time-complexity"},next:{title:"Recursion",permalink:"/ib002/category/recursion"}},i={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Technicalities",id:"technicalities",level:2},{value:"Example #1",id:"example-1",level:2},{value:"Example #2",id:"example-2",level:2},{value:"Implementation of extend",id:"implementation-of-extend",level:2}],o={toc:l},c="wrapper";function N(e){let{components:a,...s}=e;return(0,m.kt)(c,(0,n.Z)({},o,s,{components:a,mdxType:"MDXLayout"}),(0,m.kt)("h2",{id:"introduction"},"Introduction"),(0,m.kt)("p",null,"Each year there is a lot of confusion regarding time complexity of the ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," operation on the lists in Python. I will introduce two specific examples from previous year and also will try to explain it on one of the possible implementations of ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," operation."),(0,m.kt)("h2",{id:"technicalities"},"Technicalities"),(0,m.kt)("p",null,"At the beginning we should clear some of the \u201cmyths\u201d regarding extending of the lists. There is a common misunderstanding regarding differences between ",(0,m.kt)("inlineCode",{parentName:"p"},"a += b"),", ",(0,m.kt)("inlineCode",{parentName:"p"},"a.extend(b)")," and ",(0,m.kt)("inlineCode",{parentName:"p"},"a + b"),"."),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("inlineCode",{parentName:"p"},"a.extend(b)")," - adds all elements from ",(0,m.kt)("inlineCode",{parentName:"p"},"b")," to ",(0,m.kt)("inlineCode",{parentName:"p"},"a"),"."),(0,m.kt)("p",{parentName:"li"},"Time complexity: ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," denotes the length of ",(0,m.kt)("inlineCode",{parentName:"p"},"b"),".")),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("inlineCode",{parentName:"p"},"a += b")," - equivalent to ",(0,m.kt)("inlineCode",{parentName:"p"},"a.extend(b)"))),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("inlineCode",{parentName:"p"},"a + b")," - constructs a new list that contains elements from ",(0,m.kt)("inlineCode",{parentName:"p"},"a")," followed by\nelements from ",(0,m.kt)("inlineCode",{parentName:"p"},"b"),"."),(0,m.kt)("p",{parentName:"li"},"Time complexity: ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(m + n)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m, n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," denote the length of\n",(0,m.kt)("inlineCode",{parentName:"p"},"a")," and ",(0,m.kt)("inlineCode",{parentName:"p"},"b")," respectively."),(0,m.kt)("p",{parentName:"li"},"Space complexity: ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(m + n)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m, n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," denote the length of\n",(0,m.kt)("inlineCode",{parentName:"p"},"a")," and ",(0,m.kt)("inlineCode",{parentName:"p"},"b")," respectively, since we construct new list."))),(0,m.kt)("h2",{id:"example-1"},"Example #1"),(0,m.kt)("p",null,"Let us assume function that uses divide & conquer strategy to return indices at which we can find specific element in any list."),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"def recursive_find_in_list(\n values: List[Any], key: Any, lower: int, upper: int\n) -> List[int]:\n if lower == upper:\n return [lower] if values[lower] == key else []\n\n indices = []\n mid = (lower + upper) // 2\n\n indices.extend(recursive_find_in_list(values, key, lower, mid))\n indices.extend(recursive_find_in_list(values, key, mid + 1, upper))\n\n return indices\n\n\ndef find_in_list(values: List[Any], key: Any) -> List[int]:\n return recursive_find_in_list(values, key, 0, len(values) - 1)\n")),(0,m.kt)("p",null,"This implementation works nicely, ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," is linear (with the respect to the length of the list that is being appended)."),(0,m.kt)("p",null,"Let us try to dissect the way this function works on some specific input (that will be pushed to the extreme, ",(0,m.kt)("em",{parentName:"p"},"just in case")," ;)"),(0,m.kt)("p",null,(0,m.kt)("inlineCode",{parentName:"p"},"find_in_list([1] * 5000, 1)"),". What shall be the result of this? Since we have ",(0,m.kt)("inlineCode",{parentName:"p"},"key = 1")," and the list contains only ",(0,m.kt)("inlineCode",{parentName:"p"},"1"),"s, we should get list of ",(0,m.kt)("strong",{parentName:"p"},"all")," indices."),(0,m.kt)("p",null,"If we were to draw a tree of call hierarchy of ",(0,m.kt)("inlineCode",{parentName:"p"},"recursive_find_in_list"),", we would notice that in sum it is still linear to the length. ",(0,m.kt)("strong",{parentName:"p"},"However we use ",(0,m.kt)("inlineCode",{parentName:"strong"},"extend"),"!")),(0,m.kt)("p",null,"In the leaves of the tree we return lists of length 1. In this case it means calling ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," 5000-times at the second-to-last level of the tree on the 1-element long lists, next level 2500 calls on 2-elements long lists, next one 1250 on 4-elements long lists, etc. At the top-level we get 2 calls on 5000/2-element long lists."),(0,m.kt)("p",null,"A lot of ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," calls, right? And the lengths of the lists are growing (in this example, second call happens on 2500-elements long lists)."),(0,m.kt)("p",null,"Because of the ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," in each level of the tree (call hierarchy) we traverse all of the elements. That means:"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,m.kt)("mi",{parentName:"mrow"},"log"),(0,m.kt)("mo",{parentName:"mrow"},"\u2061"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n \\cdot \\log n)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},"lo",(0,m.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("p",null,"because we have ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"log"),(0,m.kt)("mo",{parentName:"mrow"},"\u2061"),(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\log n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},"lo",(0,m.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," levels in the tree and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," elements at each level."),(0,m.kt)("h2",{id:"example-2"},"Example #2"),(0,m.kt)("p",null,"As we could observe in the example above, ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," iterates over all of the elements that it adds. In case of recursive calls, it results in iterating over the same elements multiple times."),(0,m.kt)("p",null,"Consider constructing of this list:"),(0,m.kt)("p",null,(0,m.kt)("img",{alt:"Rendered construction of the list",src:t(5304).Z+"#gh-light-mode-only",width:"851",height:"276"}),"\n",(0,m.kt)("img",{alt:"Rendered construction of the list",src:t(5890).Z+"#gh-dark-mode-only",width:"851",height:"276"})),(0,m.kt)("p",null,"Let us assume that you extend the result with the list that you get from the recursive call."),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},"B iterates through 1, 2 and 3; returns ",(0,m.kt)("inlineCode",{parentName:"p"},"[1, 2, 3]"))),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},"C iterates through 4, 5 and 6; returns ",(0,m.kt)("inlineCode",{parentName:"p"},"[4, 5, 6]"))),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},"D iterates through 7, 8 and 9; returns ",(0,m.kt)("inlineCode",{parentName:"p"},"[7, 8, 9]"))),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("p",{parentName:"li"},"now we return those lists to the calls from A), so each of the ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," calls iterates through:"),(0,m.kt)("ul",{parentName:"li"},(0,m.kt)("li",{parentName:"ul"},"1, 2, 3 that was returned from B"),(0,m.kt)("li",{parentName:"ul"},"4, 5, 6 that was returned from C"),(0,m.kt)("li",{parentName:"ul"},"7, 8, 9 that was returned from D")),(0,m.kt)("p",{parentName:"li"},"and returns ",(0,m.kt)("inlineCode",{parentName:"p"},"[1, 2, 3, 4, 5, 6, 7, 8, 9]")))),(0,m.kt)("p",null,"If the recursion had bigger depth and/or more elements, it would iterate through them more than twice, therefore it does not take constant time to do nor some constant multiple of the input, since it traverses all of the elements in each of the levels."),(0,m.kt)("h2",{id:"implementation-of-extend"},"Implementation of ",(0,m.kt)("inlineCode",{parentName:"h2"},"extend")),(0,m.kt)("p",null,"There is an example of dynamic array:"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("a",{parentName:"li",href:"pathname:///files/ib002/time-complexity/extend/dynlist.h"},"interface (",(0,m.kt)("inlineCode",{parentName:"a"},"dynlist.h"),")")),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("a",{parentName:"li",href:"pathname:///files/ib002/time-complexity/extend/dynlist.c"},"implementation (",(0,m.kt)("inlineCode",{parentName:"a"},"dynlist.c"),")"))),(0,m.kt)("p",null,"For the sake of ",(0,m.kt)("em",{parentName:"p"},"Algorithms and Data Structures I")," we consider ",(0,m.kt)("inlineCode",{parentName:"p"},"APPEND")," operation, i.e. adding the element to the end of the list, to have time complexity ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mn",{parentName:"mrow"},"1"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(1)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," (",(0,m.kt)("strong",{parentName:"p"},"amortized"),"; which is out of the scope of IB002)."),(0,m.kt)("p",null,"If we have a look at the ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," implementation in this dynamic array example:"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-c",metastring:"showLineNumbers",showLineNumbers:!0},"void dynamic_array_extend(struct dynamic_array_t *arr, struct dynamic_array_t *src)\n{\n if (arr == NULL || src == NULL)\n {\n return;\n }\n\n for (size_t i = 0; i < src->count; i++)\n {\n dynamic_array_push_back(arr, dynamic_array_at(src, i));\n }\n}\n")),(0,m.kt)("p",null,"Apart from checking edge cases, we can notice that we run ",(0,m.kt)("inlineCode",{parentName:"p"},"for"),"-loop over the elements from the other array and add them one-by-one to the ",(0,m.kt)("inlineCode",{parentName:"p"},"arr"),". Time complexity of this operation is time dependant on the ",(0,m.kt)("inlineCode",{parentName:"p"},"src")," array."),(0,m.kt)("p",null,"In this specific implementation, you could also resize the memory allocated for the array in one go and copy ",(0,m.kt)("em",{parentName:"p"},"whole")," ",(0,m.kt)("inlineCode",{parentName:"p"},"src")," array in one go. However even if you did so, it would be still dependant on the size of the ",(0,m.kt)("inlineCode",{parentName:"p"},"src")," array. Cause you still need to copy ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mtext",{parentName:"mrow",mathvariant:"monospace"},"count"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,m.kt)("mtext",{parentName:"mrow",mathvariant:"monospace"},"elementSize"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\texttt{count}(src) \\cdot \\texttt{elementSize}(src)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord texttt"},"count")),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"src"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord texttt"},"elementSize")),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"src"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," bytes. From that we can assume that for specific instance of array the ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mtext",{parentName:"mrow",mathvariant:"monospace"},"elementSize"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\texttt{elementSize}(src)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord texttt"},"elementSize")),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"src"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," is fixed, therefore we consider it a constant. That way we are getting ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mtext",{parentName:"mrow",mathvariant:"monospace"},"count"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(\\texttt{count}(src))")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord texttt"},"count")),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"src"),(0,m.kt)("span",{parentName:"span",className:"mclose"},"))")))))," as a time complexity of our ",(0,m.kt)("inlineCode",{parentName:"p"},"extend")," operation."))}N.isMDXComponent=!0},5890:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/construction_dark-fcb91acb746c787329bf9bd3cb54c5b7.png"},5304:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/construction_light-dda6c5aa625d6e6c14c01589117281c2.png"}}]); \ No newline at end of file diff --git a/assets/js/7cf94373.f790d5a8.js b/assets/js/7cf94373.f790d5a8.js new file mode 100644 index 0000000..8d919bc --- /dev/null +++ b/assets/js/7cf94373.f790d5a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3095],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=r,k=m["".concat(l,".").concat(d)]||m[d]||c[d]||i;return n?a.createElement(k,o(o({ref:t},u),{},{components:n})):a.createElement(k,o({ref:t},u))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:r,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const i={id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},o=void 0,s={unversionedId:"bonuses/seminar-10",id:"bonuses/seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n",source:"@site/pb071/bonuses/10.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-10",permalink:"/pb071/bonuses/seminar-10",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/bonuses/10.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",frontMatter:{id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},sidebar:"autogeneratedBar",previous:{title:"8th seminar",permalink:"/pb071/bonuses/seminar-08"},next:{title:"Practice Exams",permalink:"/pb071/category/practice-exams"}},l={},p=[{value:"Introduction",id:"introduction",level:2},{value:"Project",id:"project",level:2},{value:"Summary of the gameplay",id:"summary-of-the-gameplay",level:3},{value:"Suggested workflow",id:"suggested-workflow",level:2},{value:"Tasks",id:"tasks",level:2},{value:"Dictionary",id:"dictionary",level:2},{value:"Submitting",id:"submitting",level:2}],u={toc:p},m="wrapper";function c(e){let{components:t,...i}=e;return(0,r.kt)(m,(0,a.Z)({},u,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/10.tar.gz"},"Source")),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"For this bonus you are given almost finished project - The Hangman Game. Your\ntask is to try the game, in case you find any bugs point them out and cover as\nmuch of the game as possible with tests."),(0,r.kt)("p",null,"For this bonus you can get at maximum 2 K\u20a1."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Item"),(0,r.kt)("th",{parentName:"tr",align:null},"Bonus"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Fixing bugs from failing tests"),(0,r.kt)("td",{parentName:"tr",align:null},"0.25")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"word_guessed")),(0,r.kt)("td",{parentName:"tr",align:null},"0.50")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Hidden bug"),(0,r.kt)("td",{parentName:"tr",align:null},"0.50")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Extending tests, undetectable bugs or evil bug"),(0,r.kt)("td",{parentName:"tr",align:null},"0.37")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Refactor"),(0,r.kt)("td",{parentName:"tr",align:null},"0.38")))),(0,r.kt)("h2",{id:"project"},"Project"),(0,r.kt)("p",null,"Project consists of 2 source files - ",(0,r.kt)("inlineCode",{parentName:"p"},"hangman.c")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"main.c"),"."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"main.c")," is quite short and concise, there is nothing for you to do."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"hangman.c")," contains implementation of the game. In case you feel lost, consult\nthe documentation in ",(0,r.kt)("inlineCode",{parentName:"p"},"hangman.h")," that represents an interface that can be used\nfor implementing the game."),(0,r.kt)("p",null,"Apart from those sources this project is a bit more complicated. ",(0,r.kt)("em",{parentName:"p"},"Game loop")," is\nrealised via single encapsulated function that complicates the testing. Because\nof that, there are 2 kinds of tests:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("em",{parentName:"p"},"Unit tests")," - that are present in ",(0,r.kt)("inlineCode",{parentName:"p"},"test_hangman.c")," and can be run via:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"$ make check-unit\n")),(0,r.kt)("p",{parentName:"li"},"They cover majorly functions that can be tested easily via testing framework.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("em",{parentName:"p"},"Functional tests")," - same as in ",(0,r.kt)("inlineCode",{parentName:"p"},"seminar-08")," and are focused on testing the\nprogram as whole. Basic smoke test is already included in ",(0,r.kt)("inlineCode",{parentName:"p"},"usage")," test case."),(0,r.kt)("p",{parentName:"li"},"They can be run via:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"$ make check-functional\n")),(0,r.kt)("p",{parentName:"li"},"When testing ",(0,r.kt)("inlineCode",{parentName:"p"},"hangman")," function (the game loop), it is suggested to create\nfunctional tests."),(0,r.kt)("p",{parentName:"li"},"When submitting the files for review, please leave out functional tests that\nwere given as a part of the assignment, so that it is easier to navigate, I\nwill drag the common files myself. :)"))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Whole test suite can be run via:"),(0,r.kt)("pre",{parentName:"blockquote"},(0,r.kt)("code",{parentName:"pre"},"$ make check\n"))),(0,r.kt)("h3",{id:"summary-of-the-gameplay"},"Summary of the gameplay"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Secret word gets chosen from the file that's path is given as an argument."),(0,r.kt)("li",{parentName:"ol"},"You get 8 guesses."),(0,r.kt)("li",{parentName:"ol"},"Invalid characters don't count."),(0,r.kt)("li",{parentName:"ol"},"Already guessed characters don't count, even if not included in the secret."),(0,r.kt)("li",{parentName:"ol"},"You can guess the whole word at once",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"If you get it right, you won, game ends."),(0,r.kt)("li",{parentName:"ul"},"If you don't get it right, you get to see the secret, game ends."))),(0,r.kt)("li",{parentName:"ol"},"In case of end of input, game finishes via force."),(0,r.kt)("li",{parentName:"ol"},"In case of invalid input, no guesses are subtracted, game carries on."),(0,r.kt)("li",{parentName:"ol"},"Letters and words are not case sensitive.")),(0,r.kt)("h2",{id:"suggested-workflow"},"Suggested workflow"),(0,r.kt)("p",null,"As we have talked about on the seminar, I suggest you to follow\n",(0,r.kt)("em",{parentName:"p"},"Test-Driven Development"),"\nin this case."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"TDD workflow",src:n(1530).Z,width:"2814",height:"1652"})),(0,r.kt)("p",null,"In our current scenario we are already in the stage of refactoring and fixing the\nbugs. Therefore try to follow this succession of steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Try to reproduce the bug."),(0,r.kt)("li",{parentName:"ol"},"Create a test that proves the presence of the bug."),(0,r.kt)("li",{parentName:"ol"},"Fix the bug.")),(0,r.kt)("p",null,"In case you are submitting the bonus via GitLab, it is helpful to commit tests\nbefore commiting the fixes, so that it is apparent that the bug is manifested.\nExample of ",(0,r.kt)("inlineCode",{parentName:"p"},"git log")," (notice that the first line represents latest commit):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"feat: Implement fizz_buzzer\ntest: Add tests for fizz_buzzer\nfix: Fix NULL-check in print_name\ntest: Add test for NULL in print_name\n")),(0,r.kt)("h2",{id:"tasks"},"Tasks"),(0,r.kt)("p",null,"As to your tasks, there are multiple things wrong in this project."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'There are 2 "bugs" that cannot be detected via tests, i.e. they are not bugs\nthat affect functionality of the game.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"There is one evil bug in ",(0,r.kt)("inlineCode",{parentName:"p"},"get_word"),". It is not required to be fixed ;) Assign\nit the lowest priority.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"There are some tests failing. Please try to figure it out, so you have green\ntests for the rest :)")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"We have gotten a bug report for ",(0,r.kt)("inlineCode",{parentName:"p"},"word_guessed"),", all we got is"),(0,r.kt)("blockquote",{parentName:"li"},(0,r.kt)("p",{parentName:"blockquote"},"doesn't work when there are too many ",(0,r.kt)("inlineCode",{parentName:"p"},"a"),"s")),(0,r.kt)("p",{parentName:"li"},"Please try to replicate the bug and create a tests, so we don't get any\nregression later on.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"One hidden bug :) Closely non-specified, we cannot reproduce it and we were\ndrunk while playing the game, so we don't remember a thing. :/")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Try to cover as much code via the tests as possible. We are not going to look\nat the metrics, but DRY is violated a lot, so as a last task try to remove as\nmuch of the duplicit code as possible."),(0,r.kt)("p",{parentName:"li"},"Tests should help you a lot in case there are some regressions."))),(0,r.kt)("hr",null),(0,r.kt)("p",null,"In case you wonder why there are always 3 same words in the file with words, it\nis because of the ",(0,r.kt)("inlineCode",{parentName:"p"},"get_word")," bug. It is not a bug that can be easily fixed, so\nit is a not requirement at all and you can still get all points for the bonus ;)"),(0,r.kt)("h2",{id:"dictionary"},"Dictionary"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Functional_testing"},"Functional tests")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Smoke_testing_%28software%29"},"Smoke test")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"},"DRY"))),(0,r.kt)("h2",{id:"submitting"},"Submitting"),(0,r.kt)("p",null,"In case you have any questions, feel free to reach out to me."),(0,r.kt)("hr",null),(0,r.kt)("p",null,"Ideally submit the assignment through the merge request. Step-by-step tutorial\nis present ",(0,r.kt)("a",{parentName:"p",href:"../mr"},"here"),". For setting assignee my xlogin is ",(0,r.kt)("inlineCode",{parentName:"p"},"xfocko"),"."),(0,r.kt)("p",null,"In case you do not want to experiment on GitLab, send me the source code via\nemail, but please prefix subject with: ",(0,r.kt)("inlineCode",{parentName:"p"},"[PB071/14][seminar-10]")),(0,r.kt)("p",null,"Deadline for the submission of the bonus is ",(0,r.kt)("strong",{parentName:"p"},"May 17 24:00"),"."))}c.isMDXComponent=!0},1530:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/tdd_lifecycle-327ad9ee0ed8318ed11e19a28e02b2cc.png"}}]); \ No newline at end of file diff --git a/assets/js/7d580cdb.71718a61.js b/assets/js/7d580cdb.71718a61.js new file mode 100644 index 0000000..1a660e5 --- /dev/null +++ b/assets/js/7d580cdb.71718a61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8442],{3905:(a,e,t)=>{t.d(e,{Zo:()=>o,kt:()=>h});var n=t(7294);function s(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,n)}return t}function p(a){for(var e=1;e=0||(s[t]=a[t]);return s}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(s[t]=a[t])}return s}var l=n.createContext({}),i=function(a){var e=n.useContext(l),t=e;return a&&(t="function"==typeof a?a(e):p(p({},e),a)),t},o=function(a){var e=i(a.components);return n.createElement(l.Provider,{value:e},a.children)},N="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(a,e){var t=a.components,s=a.mdxType,m=a.originalType,l=a.parentName,o=r(a,["components","mdxType","originalType","parentName"]),N=i(t),k=s,h=N["".concat(l,".").concat(k)]||N[k]||c[k]||m;return t?n.createElement(h,p(p({ref:e},o),{},{components:t})):n.createElement(h,p({ref:e},o))}));function h(a,e){var t=arguments,s=e&&e.mdxType;if("string"==typeof a||s){var m=t.length,p=new Array(m);p[0]=k;var r={};for(var l in e)hasOwnProperty.call(e,l)&&(r[l]=e[l]);r.originalType=a,r[N]="string"==typeof a?a:s,p[1]=r;for(var i=2;i{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>m,metadata:()=>r,toc:()=>i});var n=t(7462),s=(t(7294),t(3905));const m={id:"pyramid-slide-down",title:"Introduction to dynamic programming",description:"Solving a problem in different ways.\n",tags:["java","recursion","exponential","greedy","dynamic-programming","top-down-dp","bottom-up-dp"],last_updated:{date:new Date("2023-08-17T00:00:00.000Z")}},p=void 0,r={unversionedId:"recursion/pyramid-slide-down",id:"recursion/pyramid-slide-down",title:"Introduction to dynamic programming",description:"Solving a problem in different ways.\n",source:"@site/ib002/04-recursion/2023-08-17-pyramid-slide-down.md",sourceDirName:"04-recursion",slug:"/recursion/pyramid-slide-down",permalink:"/ib002/recursion/pyramid-slide-down",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/04-recursion/2023-08-17-pyramid-slide-down.md",tags:[{label:"java",permalink:"/ib002/tags/java"},{label:"recursion",permalink:"/ib002/tags/recursion"},{label:"exponential",permalink:"/ib002/tags/exponential"},{label:"greedy",permalink:"/ib002/tags/greedy"},{label:"dynamic-programming",permalink:"/ib002/tags/dynamic-programming"},{label:"top-down-dp",permalink:"/ib002/tags/top-down-dp"},{label:"bottom-up-dp",permalink:"/ib002/tags/bottom-up-dp"}],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",frontMatter:{id:"pyramid-slide-down",title:"Introduction to dynamic programming",description:"Solving a problem in different ways.\n",tags:["java","recursion","exponential","greedy","dynamic-programming","top-down-dp","bottom-up-dp"],last_updated:{date:"2023-08-17T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Recursion and backtracking with Robot Karel",permalink:"/ib002/recursion/karel-1"},next:{title:"Red-Black Trees",permalink:"/ib002/category/red-black-trees"}},l={},i=[{value:"Problem",id:"problem",level:2},{value:"Solving the problem",id:"solving-the-problem",level:2},{value:"Na\xefve solution",id:"na\xefve-solution",level:2},{value:"Time complexity",id:"time-complexity",level:3},{value:"Greedy solution",id:"greedy-solution",level:2},{value:"Time complexity",id:"time-complexity-1",level:3},{value:"Running the tests",id:"running-the-tests",level:3},{value:"Top-down DP",id:"top-down-dp",level:2},{value:"Time complexity",id:"time-complexity-2",level:3},{value:"Memory complexity",id:"memory-complexity",level:3},{value:"Bottom-up DP",id:"bottom-up-dp",level:2},{value:"Time complexity",id:"time-complexity-3",level:3},{value:"Memory complexity",id:"memory-complexity-1",level:3},{value:"Summary",id:"summary",level:2}],o={toc:i},N="wrapper";function c(a){let{components:e,...t}=a;return(0,s.kt)(N,(0,n.Z)({},o,t,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"In this post we will try to solve one problem in different ways."),(0,s.kt)("h2",{id:"problem"},"Problem"),(0,s.kt)("p",null,"The problem we are going to solve is one of ",(0,s.kt)("em",{parentName:"p"},"CodeWars")," katas and is called\n",(0,s.kt)("a",{parentName:"p",href:"https://www.codewars.com/kata/551f23362ff852e2ab000037"},"Pyramid Slide Down"),"."),(0,s.kt)("p",null,"We are given a 2D array of integers and we are to find the ",(0,s.kt)("em",{parentName:"p"},"slide down"),".\n",(0,s.kt)("em",{parentName:"p"},"Slide down")," is a maximum sum of consecutive numbers from the top to the bottom."),(0,s.kt)("p",null,"Let's have a look at few examples. Consider the following pyramid:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"}," 3\n 7 4\n 2 4 6\n8 5 9 3\n")),(0,s.kt)("p",null,"This pyramid has following slide down:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"}," *3\n *7 4\n 2 *4 6\n8 5 *9 3\n")),(0,s.kt)("p",null,"And its value is ",(0,s.kt)("inlineCode",{parentName:"p"},"23"),"."),(0,s.kt)("p",null,"We can also have a look at a ",(0,s.kt)("em",{parentName:"p"},"bigger")," example:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"}," 75\n 95 64\n 17 47 82\n 18 35 87 10\n 20 4 82 47 65\n 19 1 23 3 34\n 88 2 77 73 7 63 67\n 99 65 4 28 6 16 70 92\n 41 41 26 56 83 40 80 70 33\n 41 48 72 33 47 32 37 16 94 29\n 53 71 44 65 25 43 91 52 97 51 14\n 70 11 33 28 77 73 17 78 39 68 17 57\n 91 71 52 38 17 14 91 43 58 50 27 29 48\n 63 66 4 68 89 53 67 30 73 16 69 87 40 31\n 4 62 98 27 23 9 70 98 73 93 38 53 60 4 23\n")),(0,s.kt)("p",null,"Slide down in this case is equal to ",(0,s.kt)("inlineCode",{parentName:"p"},"1074"),"."),(0,s.kt)("h2",{id:"solving-the-problem"},"Solving the problem"),(0,s.kt)("admonition",{type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"I will describe the following ways you can approach this problem and implement\nthem in ",(0,s.kt)("em",{parentName:"p"},"Java"),(0,s.kt)("sup",{parentName:"p",id:"fnref-1"},(0,s.kt)("a",{parentName:"sup",href:"#fn-1",className:"footnote-ref"},"1")),".")),(0,s.kt)("p",null,"For all of the following solutions I will be using basic ",(0,s.kt)("inlineCode",{parentName:"p"},"main")," function that\nwill output ",(0,s.kt)("inlineCode",{parentName:"p"},"true"),"/",(0,s.kt)("inlineCode",{parentName:"p"},"false")," based on the expected output of our algorithm. Any\nother differences will lie only in the solutions of the problem. You can see the\n",(0,s.kt)("inlineCode",{parentName:"p"},"main")," here:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},'public static void main(String[] args) {\n System.out.print("Test #1: ");\n System.out.println(longestSlideDown(new int[][] {\n { 3 },\n { 7, 4 },\n { 2, 4, 6 },\n { 8, 5, 9, 3 }\n }) == 23 ? "passed" : "failed");\n\n System.out.print("Test #2: ");\n System.out.println(longestSlideDown(new int[][] {\n { 75 },\n { 95, 64 },\n { 17, 47, 82 },\n { 18, 35, 87, 10 },\n { 20, 4, 82, 47, 65 },\n { 19, 1, 23, 75, 3, 34 },\n { 88, 2, 77, 73, 7, 63, 67 },\n { 99, 65, 4, 28, 6, 16, 70, 92 },\n { 41, 41, 26, 56, 83, 40, 80, 70, 33 },\n { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 },\n { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 },\n { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 },\n { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 },\n { 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 },\n { 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 },\n }) == 1074 ? "passed" : "failed");\n}\n')),(0,s.kt)("h2",{id:"na\xefve-solution"},"Na\xefve solution"),(0,s.kt)("p",null,"Our na\xefve solution consists of trying out all the possible slides and finding\nthe one with maximum sum."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"public static int longestSlideDown(int[][] pyramid, int row, int col) {\n if (row >= pyramid.length || col < 0 || col >= pyramid[row].length) {\n // BASE: We have gotten out of bounds, there's no reasonable value to\n // return, so we just return the \u2039MIN_VALUE\u203a to ensure that it cannot\n // be maximum.\n return Integer.MIN_VALUE;\n }\n\n if (row == pyramid.length - 1) {\n // BASE: Bottom of the pyramid, we just return the value, there's\n // nowhere to slide anymore.\n return pyramid[row][col];\n }\n\n // Otherwise we account for the current position and return maximum of the\n // available \u201cslides\u201d.\n return pyramid[row][col] + Math.max(\n longestSlideDown(pyramid, row + 1, col),\n longestSlideDown(pyramid, row + 1, col + 1));\n}\n\npublic static int longestSlideDown(int[][] pyramid) {\n // We start the slide in the top cell of the pyramid.\n return longestSlideDown(pyramid, 0, 0);\n}\n")),(0,s.kt)("p",null,"As you can see, we have 2 overloads:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"int longestSlideDown(int[][] pyramid);\nint longestSlideDown(int[][] pyramid, int row, int col);\n")),(0,s.kt)("p",null,"First one is used as a ",(0,s.kt)("em",{parentName:"p"},"public interface")," to the solution, you just pass in the\npyramid itself. Second one is the recursive \u201calgorithm\u201d that finds the slide\ndown."),(0,s.kt)("p",null,"It is a relatively simple solution\u2026 There's nothing to do at the bottom of the\npyramid, so we just return the value in the ",(0,s.kt)("em",{parentName:"p"},"cell"),". Otherwise we add it and try\nto slide down the available cells below the current row."),(0,s.kt)("h3",{id:"time-complexity"},"Time complexity"),(0,s.kt)("p",null,"If you get the source code and run it yourself, it runs rather fine\u2026 I hope you\nare wondering about the time complexity of the proposed solution and, since it\nreally is a na\xefve solution, the time complexity is pretty bad. Let's find the\nworst case scenario."),(0,s.kt)("p",null,"Let's start with the first overload:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"public static int longestSlideDown(int[][] pyramid) {\n return longestSlideDown(pyramid, 0, 0);\n}\n")),(0,s.kt)("p",null,"There's not much to do here, so we can safely say that the time complexity of\nthis function is bounded by ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T(n)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"T")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T")))))," is our second overload. This\ndoesn't tell us anything, so let's move on to the second overload where we are\ngoing to define the ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T(n)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))," function."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"public static int longestSlideDown(int[][] pyramid, int row, int col) {\n if (row >= pyramid.length || col < 0 || col >= pyramid[row].length) {\n // BASE: We have gotten out of bounds, there's no reasonable value to\n // return, so we just return the \u2039MIN_VALUE\u203a to ensure that it cannot\n // be maximum.\n return Integer.MIN_VALUE;\n }\n\n if (row == pyramid.length - 1) {\n // BASE: Bottom of the pyramid, we just return the value, there's\n // nowhere to slide anymore.\n return pyramid[row][col];\n }\n\n // Otherwise we account for the current position and return maximum of the\n // available \u201cslides\u201d.\n return pyramid[row][col] + Math.max(\n longestSlideDown(pyramid, row + 1, col),\n longestSlideDown(pyramid, row + 1, col + 1));\n}\n")),(0,s.kt)("p",null,"Fun fact is that the whole \u201calgorithm\u201d consists of just 2 ",(0,s.kt)("inlineCode",{parentName:"p"},"return")," statements\nand nothing else. Let's dissect them!"),(0,s.kt)("p",null,"First ",(0,s.kt)("inlineCode",{parentName:"p"},"return")," statement is the base case, so it has a constant time complexity."),(0,s.kt)("p",null,"Second one a bit tricky. We add two numbers together, which we'll consider as\nconstant, but for the right part of the expression we take maximum from the left\nand right paths. OK\u2026 So what happens? We evaluate the ",(0,s.kt)("inlineCode",{parentName:"p"},"longestSlideDown")," while\nchoosing the under and right both. They are separate computations though, so we\nare branching from each call of ",(0,s.kt)("inlineCode",{parentName:"p"},"longestSlideDown"),", unless it's a base case."),(0,s.kt)("p",null,"What does that mean for us then? We basically get"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mo",{parentName:"mrow",fence:"true"},"{"),(0,s.kt)("mtable",{parentName:"mrow",rowspacing:"0.36em",columnalign:"left left",columnspacing:"1em"},(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,s.kt)("mn",{parentName:"mstyle"},"1"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mtext",{parentName:"mrow"},",\xa0if\xa0"),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"))))),(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mn",{parentName:"mrow"},"1"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"1"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,s.kt)("mtext",{parentName:"mstyle"},",\xa0otherwise"))))))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T(y) = \\begin{cases} 1 & \\text{, if } y = rows \\\\ 1 + 2 \\cdot T(y + 1) & \\text{, otherwise} \\end{cases}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"3em",verticalAlign:"-1.25em"}}),(0,s.kt)("span",{parentName:"span",className:"minner"},(0,s.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},(0,s.kt)("span",{parentName:"span",className:"delimsizing size4"},"{")),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mtable"},(0,s.kt)("span",{parentName:"span",className:"col-align-l"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.69em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.69em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.008em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"},"1"))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.25em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.008em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"},"1"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.19em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"arraycolsep",style:{width:"1em"}}),(0,s.kt)("span",{parentName:"span",className:"col-align-l"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.69em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.69em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.008em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord text"},(0,s.kt)("span",{parentName:"span",className:"mord"},",\xa0if\xa0")),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.25em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.008em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord text"},(0,s.kt)("span",{parentName:"span",className:"mord"},",\xa0otherwise"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.19em"}},(0,s.kt)("span",{parentName:"span"}))))))),(0,s.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,s.kt)("p",null,"That looks rather easy to compute, isn't it? If you sum it up, you'll get:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,s.kt)("mo",{parentName:"mrow"},"\u2208"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("msup",{parentName:"mrow"},(0,s.kt)("mn",{parentName:"msup"},"2"),(0,s.kt)("mrow",{parentName:"msup"},(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"))),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T(rows) \\in \\mathcal{O}(2^{rows})")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7144em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.113em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"))))))))),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,"If you wonder why, I'll try to describe it intuitively:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"In each call to ",(0,s.kt)("inlineCode",{parentName:"li"},"longestSlideDown")," we do some work in constant time,\nregardless of being in the base case. Those are the ",(0,s.kt)("inlineCode",{parentName:"li"},"1"),"s in both cases."),(0,s.kt)("li",{parentName:"ol"},"If we are not in the base case, we move one row down ",(0,s.kt)("strong",{parentName:"li"},"twice"),". That's how we\nobtained ",(0,s.kt)("inlineCode",{parentName:"li"},"2 *")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"y + 1")," in the ",(0,s.kt)("em",{parentName:"li"},"otherwise")," case."),(0,s.kt)("li",{parentName:"ol"},"We move row-by-row, so we move down ",(0,s.kt)("inlineCode",{parentName:"li"},"y"),"-times and each call splits to two\nsubtrees."),(0,s.kt)("li",{parentName:"ol"},"Overall, if we were to represent the calls as a tree, we would get a full\nbinary tree of height ",(0,s.kt)("inlineCode",{parentName:"li"},"y"),", in each node we do some work in constant time,\ntherefore we can just sum the ones.")),(0,s.kt)("admonition",{type:"warning"},(0,s.kt)("p",{parentName:"admonition"},"It would've been more complicated to get an exact result. In the equation above\nwe are assuming that the width of the pyramid is bound by the height.")),(0,s.kt)("p",null,"Hopefully we can agree that this is not the best we can do. \ud83d\ude09"),(0,s.kt)("h2",{id:"greedy-solution"},"Greedy solution"),(0,s.kt)("p",null,"We will try to optimize it a bit. Let's start with a relatively simple ",(0,s.kt)("em",{parentName:"p"},"greedy"),"\napproach."),(0,s.kt)("admonition",{title:"Greedy algorithms",type:"info"},(0,s.kt)("p",{parentName:"admonition"},(0,s.kt)("em",{parentName:"p"},"Greedy algorithms")," can be described as algorithms that decide the action on the\noptimal option at the moment.")),(0,s.kt)("p",null,"We can try to adjust the na\xefve solution. The most problematic part are the\nrecursive calls. Let's apply the greedy approach there:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"public static int longestSlideDown(int[][] pyramid, int row, int col) {\n if (row == pyramid.length - 1) {\n // BASE: We're at the bottom\n return pyramid[row][col];\n }\n\n if (col + 1 >= pyramid[row + 1].length\n || pyramid[row + 1][col] > pyramid[row + 1][col + 1]) {\n // If we cannot go right or it's not feasible, we continue to the left.\n return pyramid[row][col] + longestSlideDown(pyramid, row + 1, col);\n }\n\n // Otherwise we just move to the right.\n return pyramid[row][col] + longestSlideDown(pyramid, row + 1, col + 1);\n}\n")),(0,s.kt)("p",null,"OK, if we cannot go right ",(0,s.kt)("strong",{parentName:"p"},"or")," the right path adds smaller value to the sum,\nwe simply go left."),(0,s.kt)("h3",{id:"time-complexity-1"},"Time complexity"),(0,s.kt)("p",null,"We have switched from ",(0,s.kt)("em",{parentName:"p"},"adding the maximum")," to ",(0,s.kt)("em",{parentName:"p"},"following the \u201cbigger\u201d path"),", so\nwe improved the time complexity tremendously. We just go down the pyramid all\nthe way to the bottom. Therefore we are getting:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(rows)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,"We have managed to convert our exponential solution into a linear one."),(0,s.kt)("h3",{id:"running-the-tests"},"Running the tests"),(0,s.kt)("p",null,"However, if we run the tests, we notice that the second test failed:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"Test #1: passed\nTest #2: failed\n")),(0,s.kt)("p",null,"What's going on? Well, we have improved the time complexity, but greedy\nalgorithms are not the ideal solution to ",(0,s.kt)("strong",{parentName:"p"},"all")," problems. In this case there\nmay be a solution that is bigger than the one found using the greedy algorithm."),(0,s.kt)("p",null,"Imagine the following pyramid:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"}," 1\n 2 3\n 5 6 7\n 8 9 10 11\n99 13 14 15 16\n")),(0,s.kt)("p",null,"We start at the top:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"Current cell: ",(0,s.kt)("inlineCode",{parentName:"li"},"1"),", we can choose from ",(0,s.kt)("inlineCode",{parentName:"li"},"2")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"3"),", ",(0,s.kt)("inlineCode",{parentName:"li"},"3")," looks better, so we\nchoose it."),(0,s.kt)("li",{parentName:"ol"},"Current cell: ",(0,s.kt)("inlineCode",{parentName:"li"},"3"),", we can choose from ",(0,s.kt)("inlineCode",{parentName:"li"},"6")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"7"),", ",(0,s.kt)("inlineCode",{parentName:"li"},"7")," looks better, so we\nchoose it."),(0,s.kt)("li",{parentName:"ol"},"Current cell: ",(0,s.kt)("inlineCode",{parentName:"li"},"7"),", we can choose from ",(0,s.kt)("inlineCode",{parentName:"li"},"10")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"11"),", ",(0,s.kt)("inlineCode",{parentName:"li"},"11")," looks better, so we\nchoose it."),(0,s.kt)("li",{parentName:"ol"},"Current cell: ",(0,s.kt)("inlineCode",{parentName:"li"},"11"),", we can choose from ",(0,s.kt)("inlineCode",{parentName:"li"},"15")," and ",(0,s.kt)("inlineCode",{parentName:"li"},"16"),", ",(0,s.kt)("inlineCode",{parentName:"li"},"16")," looks better, so\nwe choose it.")),(0,s.kt)("p",null,"Our final sum is: ",(0,s.kt)("inlineCode",{parentName:"p"},"1 + 3 + 7 + 11 + 16 = 38"),", but in the bottom left cell we\nhave a ",(0,s.kt)("inlineCode",{parentName:"p"},"99")," that is bigger than our whole sum."),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Dijkstra's algorithm is a greedy algorithm too, try to think why it is correct.")),(0,s.kt)("h2",{id:"top-down-dp"},"Top-down DP"),(0,s.kt)("p",null,(0,s.kt)("em",{parentName:"p"},"Top-down dynamic programming")," is probably the most common approach, since (at\nleast looks like) is the easiest to implement. The whole point is avoiding the\nunnecessary computations that we have already done."),(0,s.kt)("p",null,"In our case, we can use our na\xefve solution and put a ",(0,s.kt)("em",{parentName:"p"},"cache")," on top of it that\nwill make sure, we don't do unnecessary calculations."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"// This \u201cstructure\u201d is required, since I have decided to use \u2039TreeMap\u203a which\n// requires the ordering on the keys. It represents one position in the pyramid.\nrecord Position(int row, int col) implements Comparable {\n public int compareTo(Position r) {\n if (row != r.row) {\n return Integer.valueOf(row).compareTo(r.row);\n }\n\n if (col != r.col) {\n return Integer.valueOf(col).compareTo(r.col);\n }\n\n return 0;\n }\n}\n\npublic static int longestSlideDown(\n int[][] pyramid,\n TreeMap cache,\n Position position) {\n int row = position.row;\n int col = position.col;\n\n if (row >= pyramid.length || col < 0 || col >= pyramid[row].length) {\n // BASE: out of bounds\n return Integer.MIN_VALUE;\n }\n\n if (row == pyramid.length - 1) {\n // BASE: bottom of the pyramid\n return pyramid[position.row][position.col];\n }\n\n if (!cache.containsKey(position)) {\n // We haven't computed the position yet, so we run the same \u201cformula\u201d as\n // in the na\xefve version \xbband\xab we put calculated slide into the cache.\n // Next time we want the slide down from given position, it will be just\n // retrieved from the cache.\n int slideDown = Math.max(\n longestSlideDown(pyramid, cache, new Position(row + 1, col)),\n longestSlideDown(pyramid, cache, new Position(row + 1, col + 1)));\n cache.put(position, pyramid[row][col] + slideDown);\n }\n\n return cache.get(position);\n}\n\npublic static int longestSlideDown(int[][] pyramid) {\n // At the beginning we need to create a cache and share it across the calls.\n TreeMap cache = new TreeMap<>();\n return longestSlideDown(pyramid, cache, new Position(0, 0));\n}\n")),(0,s.kt)("p",null,"You have probably noticed that ",(0,s.kt)("inlineCode",{parentName:"p"},"record Position")," have appeared. Since we are\ncaching the already computed values, we need a \u201creasonable\u201d key. In this case we\nshare the cache only for one ",(0,s.kt)("em",{parentName:"p"},"run")," (i.e. pyramid) of the ",(0,s.kt)("inlineCode",{parentName:"p"},"longestSlideDown"),", so\nwe can cache just with the indices within the pyramid, i.e. the ",(0,s.kt)("inlineCode",{parentName:"p"},"Position"),"."),(0,s.kt)("admonition",{title:"Record",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},(0,s.kt)("em",{parentName:"p"},"Record")," is relatively new addition to the Java language. It is basically an\nimmutable structure with implicitly defined ",(0,s.kt)("inlineCode",{parentName:"p"},".equals()"),", ",(0,s.kt)("inlineCode",{parentName:"p"},".hashCode()"),",\n",(0,s.kt)("inlineCode",{parentName:"p"},".toString()")," and getters for the attributes.")),(0,s.kt)("p",null,"Because of the choice of ",(0,s.kt)("inlineCode",{parentName:"p"},"TreeMap"),", we had to additionally define the ordering\non it."),(0,s.kt)("p",null,"In the ",(0,s.kt)("inlineCode",{parentName:"p"},"longestSlideDown")," you can notice that the computation which used to be\nat the end of the na\xefve version above, is now wrapped in an ",(0,s.kt)("inlineCode",{parentName:"p"},"if")," statement that\nchecks for the presence of the position in the cache and computes the slide down\njust when it's needed."),(0,s.kt)("h3",{id:"time-complexity-2"},"Time complexity"),(0,s.kt)("p",null,"If you think that evaluating time complexity for this approach is a bit more\ntricky, you are right. Keeping the cache in mind, it is not the easiest thing\nto do. However there are some observations that might help us figure this out:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"Slide down from each position is calculated only once."),(0,s.kt)("li",{parentName:"ol"},"Once calculated, we use the result from the cache.")),(0,s.kt)("p",null,"Knowing this, we still cannot, at least easily, describe the time complexity of\nfinding the best slide down from a specific position, ",(0,s.kt)("strong",{parentName:"p"},"but")," we can bound it\nfrom above for the ",(0,s.kt)("strong",{parentName:"p"},"whole")," run from the top. Now the question is how we can do\nthat!"),(0,s.kt)("p",null,"Overall we are doing the same things for almost",(0,s.kt)("sup",{parentName:"p",id:"fnref-2"},(0,s.kt)("a",{parentName:"sup",href:"#fn-2",className:"footnote-ref"},"2"))," all of the positions within\nthe pyramid:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},(0,s.kt)("p",{parentName:"li"},"We calculate and store it (using the partial results stored in cache). This\nis done only once."),(0,s.kt)("p",{parentName:"li"},"For each calculation we take 2 values from the cache and insert one value.\nBecause we have chosen ",(0,s.kt)("inlineCode",{parentName:"p"},"TreeMap"),", these 3 operations have logarithmic time\ncomplexity and therefore this step is equivalent to ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"3"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061")),(0,s.kt)("mn",{parentName:"msub"},"2")),(0,s.kt)("mi",{parentName:"mrow"},"n")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"3 \\cdot \\log_2{n}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9386em",verticalAlign:"-0.2441em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.207em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.4559em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2441em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))),"."),(0,s.kt)("p",{parentName:"li"},"However for the sake of simplicity, we are going to account only for the\ninsertion, the reason is rather simple, if we include the 2 retrievals here,\nit will be interleaved with the next step, therefore it is easier to keep the\nretrievals in the following point."),(0,s.kt)("admonition",{parentName:"li",type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"You might have noticed it's still not that easy, cause we're not having full\ncache right from the beginning, but the sum of those logarithms cannot be\nexpressed in a nice way, so taking the upper bound, i.e. expecting the cache\nto be full at all times, is the best option for nice and readable complexity\nof the whole approach.")),(0,s.kt)("p",{parentName:"li"},"Our final upper bound of this work is therefore ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061")),(0,s.kt)("mn",{parentName:"msub"},"2")),(0,s.kt)("mi",{parentName:"mrow"},"n")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\log_2{n}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9386em",verticalAlign:"-0.2441em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.207em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.4559em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2441em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))),".")),(0,s.kt)("li",{parentName:"ol"},(0,s.kt)("p",{parentName:"li"},"We retrieve it from the cache. Same as in first point, but only twice, so we\nget ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061")),(0,s.kt)("mn",{parentName:"msub"},"2")),(0,s.kt)("mi",{parentName:"mrow"},"n")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2 \\cdot \\log_2{n}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9386em",verticalAlign:"-0.2441em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.207em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.4559em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2441em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))),". "),(0,s.kt)("admonition",{parentName:"li",type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"It's done twice because of the ",(0,s.kt)("inlineCode",{parentName:"p"},".containsKey()")," in the ",(0,s.kt)("inlineCode",{parentName:"p"},"if")," condition.")))),(0,s.kt)("p",null,"Okay, we have evaluated work done for each of the cells in the pyramid and now\nwe need to put it together."),(0,s.kt)("p",null,"Let's split the time complexity of our solution into two operands:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(r + s)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"r")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"r")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r")))))," will represent the ",(0,s.kt)("em",{parentName:"p"},"actual")," calculation of the cells and ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"s")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s")))))," will represent\nthe additional retrievals on top of the calculation."),(0,s.kt)("p",null,"We calculate the values only ",(0,s.kt)("strong",{parentName:"p"},"once"),", therefore we can safely agree on:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mtable",{parentName:"semantics",rowspacing:"0.25em",columnalign:"right left",columnspacing:"0em"},(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mi",{parentName:"mstyle"},"r"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mrow",{parentName:"mrow"}),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n")))))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\begin{align*} r &= n \\cdot \\log{n} \\\\ \\end{align*}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.5em",verticalAlign:"-0.5em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mtable"},(0,s.kt)("span",{parentName:"span",className:"col-align-r"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.16em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.5em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"col-align-l"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.16em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"}),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.5em"}},(0,s.kt)("span",{parentName:"span"})))))))))))),(0,s.kt)("p",null,"What about the ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"s")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s")))))," though? Key observation here is the fact that we have 2\nlookups on the tree in each of them ",(0,s.kt)("strong",{parentName:"p"},"and")," we do it twice, cause each cell has\nat most 2 parents:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mtable",{parentName:"semantics",rowspacing:"0.25em",columnalign:"right left",columnspacing:"0em"},(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mi",{parentName:"mstyle"},"s"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mrow",{parentName:"mrow"}),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",fence:"true"},")")))))),(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mi",{parentName:"mstyle"},"s"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mrow",{parentName:"mrow"}),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"4"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n")))))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\begin{align*} s &= n \\cdot 2 \\cdot \\left( 2 \\cdot \\log{n} \\right) \\\\ s &= 4 \\cdot n \\cdot \\log{n} \\end{align*}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"3em",verticalAlign:"-1.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mtable"},(0,s.kt)("span",{parentName:"span",className:"col-align-r"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.75em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.91em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.41em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.25em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"col-align-l"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.75em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.91em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"}),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"minner"},(0,s.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},"("),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")),(0,s.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},")")))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.41em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"}),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.25em"}},(0,s.kt)("span",{parentName:"span"})))))))))))),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"You might've noticed that lookups actually take more time than the construction\nof the results. This is not entirely true, since we have included the\n",(0,s.kt)("inlineCode",{parentName:"p"},".containsKey()")," and ",(0,s.kt)("inlineCode",{parentName:"p"},".get()")," from the ",(0,s.kt)("inlineCode",{parentName:"p"},"return")," statement in the second part."),(0,s.kt)("p",{parentName:"admonition"},"If we were to represent this more precisely, we could've gone with:"),(0,s.kt)("div",{parentName:"admonition",className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mtable",{parentName:"semantics",rowspacing:"0.25em",columnalign:"right left",columnspacing:"0em"},(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mi",{parentName:"mstyle"},"r"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mrow",{parentName:"mrow"}),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"3"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"))))),(0,s.kt)("mtr",{parentName:"mtable"},(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mi",{parentName:"mstyle"},"s"))),(0,s.kt)("mtd",{parentName:"mtr"},(0,s.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"true"},(0,s.kt)("mrow",{parentName:"mstyle"},(0,s.kt)("mrow",{parentName:"mrow"}),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n")))))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\begin{align*} r &= 3 \\cdot n \\cdot \\log{n} \\\\ s &= 2 \\cdot n \\cdot \\log{n} \\end{align*}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"3em",verticalAlign:"-1.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mtable"},(0,s.kt)("span",{parentName:"span",className:"col-align-r"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.75em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.91em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.41em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s")))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.25em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"col-align-l"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.75em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.91em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"}),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.41em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"}),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.25em"}},(0,s.kt)("span",{parentName:"span"})))))))))))),(0,s.kt)("p",{parentName:"admonition"},"On the other hand we are summing both numbers together, therefore in the end it\ndoesn't really matter."),(0,s.kt)("p",{parentName:"admonition"},"(",(0,s.kt)("em",{parentName:"p"},"Feel free to compare the sums of both \u201csplits\u201d."),")")),(0,s.kt)("p",null,"And so our final time complexity for the whole ",(0,s.kt)("em",{parentName:"p"},"top-down dynamic programming"),"\napproach is:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,s.kt)("mspace",{parentName:"mrow",linebreak:"newline"}),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"4"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,s.kt)("mspace",{parentName:"mrow",linebreak:"newline"}),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mn",{parentName:"mrow"},"5"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,s.kt)("mspace",{parentName:"mrow",linebreak:"newline"}),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mi",{parentName:"mrow"},"log"),(0,s.kt)("mo",{parentName:"mrow"},"\u2061"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(r + s) \\\\ \\mathcal{O}(n \\cdot \\log{n} + 4 \\cdot n \\cdot \\log{n}) \\\\ \\mathcal{O}(5 \\cdot n \\cdot \\log{n}) \\\\ \\mathcal{O}(n \\cdot \\log{n})")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")),(0,s.kt)("span",{parentName:"span",className:"mspace newline"}),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4445em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")),(0,s.kt)("span",{parentName:"span",className:"mspace newline"}),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord"},"5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4445em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")),(0,s.kt)("span",{parentName:"span",className:"mspace newline"}),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mop"},"lo",(0,s.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,"As you can see, this is worse than our ",(0,s.kt)("em",{parentName:"p"},"greedy")," solution that was incorrect, but\nit's better than the ",(0,s.kt)("em",{parentName:"p"},"na\xefve")," one."),(0,s.kt)("h3",{id:"memory-complexity"},"Memory complexity"),(0,s.kt)("p",null,"With this approach we need to talk about the memory complexity too, because we\nhave introduced cache. If you think that the memory complexity is linear to the\ninput, you are right. We start at the top and try to find each and every slide\ndown. At the end we get the final result for ",(0,s.kt)("inlineCode",{parentName:"p"},"new Position(0, 0)"),", so we need to\ncompute everything below."),(0,s.kt)("p",null,"That's how we obtain:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"n")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," represents the total amount of cells in the pyramid, i.e."),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("munderover",{parentName:"mrow"},(0,s.kt)("mo",{parentName:"munderover"},"\u2211"),(0,s.kt)("mrow",{parentName:"munderover"},(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"0")),(0,s.kt)("mrow",{parentName:"munderover"},(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"p"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"y"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"r"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"m"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"d"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"."),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"l"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"e"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"n"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"g"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"t"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"h")),(0,s.kt)("mo",{parentName:"mrow"},"\u2212"),(0,s.kt)("mn",{parentName:"mrow"},"1"))),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"p"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"y"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"r"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"m"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"d")),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mo",{parentName:"mrow",fence:"true"},"["),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow",fence:"true"},"]")),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"."),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"l"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"e"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"n"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"g"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"t"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"h"))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sum_{y=0}^{\\mathtt{pyramid.length} - 1} \\mathtt{pyramid}\\left[y\\right]\\mathtt{.length}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"3.2709em",verticalAlign:"-1.4032em"}}),(0,s.kt)("span",{parentName:"span",className:"mop op-limits"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.8677em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-1.8829em",marginLeft:"0em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.05em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mrel mtight"},"="),(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"0")))),(0,s.kt)("span",{parentName:"span",style:{top:"-3.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.05em"}}),(0,s.kt)("span",{parentName:"span"},(0,s.kt)("span",{parentName:"span",className:"mop op-symbol large-op"},"\u2211"))),(0,s.kt)("span",{parentName:"span",style:{top:"-4.3666em",marginLeft:"0em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.05em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathtt mtight"},"pyramid.length")),(0,s.kt)("span",{parentName:"span",className:"mbin mtight"},"\u2212"),(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.4032em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathtt"},"pyramid")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"minner"},(0,s.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},"["),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},"]")),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathtt"},".length"))))))),(0,s.kt)("admonition",{type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"If you're wondering whether it's correct because of the second ",(0,s.kt)("inlineCode",{parentName:"p"},"if")," in our\nfunction, your guess is right. However we are expressing the complexity in the\nBachmann-Landau notation, so we care about the ",(0,s.kt)("strong",{parentName:"p"},"upper bound"),", not the exact\nnumber.")),(0,s.kt)("admonition",{title:"Can this be optimized?",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Yes, it can! Try to think about a way, how can you minimize the memory\ncomplexity of this approach. I'll give you a hint:"),(0,s.kt)("div",{parentName:"admonition",className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(rows)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,s.kt)("h2",{id:"bottom-up-dp"},"Bottom-up DP"),(0,s.kt)("p",null,"If you try to think in depth about the top-down DP solution, you might notice\nthat the ",(0,s.kt)("em",{parentName:"p"},"core")," of it stands on caching the calculations that have been already\ndone on the lower \u201clevels\u201d of the pyramid. Our bottom-up implementation will be\nusing this fact!"),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"As I have said in the ",(0,s.kt)("em",{parentName:"p"},"top-down DP")," section, it is the easiest way to implement\nDP (unless the cached function has complicated parameters, in that case it might\nget messy)."),(0,s.kt)("p",{parentName:"admonition"},"Bottom-up dynamic programming can be more effective, but may be more complicated\nto implement right from the beginning.")),(0,s.kt)("p",null,"Let's see how we can implement it:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-java"},"public static int longestSlideDown(int[][] pyramid) {\n // In the beginning we declare new array. At this point it is easier to just\n // work with the one dimension, i.e. just allocating the space for the rows.\n int[][] slideDowns = new int[pyramid.length][];\n\n // Bottom row gets just copied, there's nothing else to do\u2026 It's the base\n // case.\n slideDowns[pyramid.length - 1] = Arrays.copyOf(pyramid[pyramid.length - 1],\n pyramid[pyramid.length - 1].length);\n\n // Then we need to propagate the found slide downs for each of the levels\n // above.\n for (int y = pyramid.length - 2; y >= 0; --y) {\n // We start by copying the values lying in the row we're processing.\n // They get included in the final sum and we need to allocate the space\n // for the precalculated slide downs anyways.\n int[] row = Arrays.copyOf(pyramid[y], pyramid[y].length);\n\n // At this we just need to \u201cfetch\u201d the partial results from \u201cneighbours\u201d\n for (int x = 0; x < row.length; ++x) {\n // We look under our position, since we expect the rows to get\n // shorter, we can safely assume such position exists.\n int under = slideDowns[y + 1][x];\n\n // Then we have a look to the right, such position doesn't have to\n // exist, e.g. on the right edge, so we validate the index, and if\n // it doesn't exist, we just assign minimum of the \u2039int\u203a which makes\n // sure that it doesn't get picked in the \u2039Math.max()\u203a call.\n int toRight = x + 1 < slideDowns[y + 1].length\n ? slideDowns[y + 1][x + 1]\n : Integer.MIN_VALUE;\n\n // Finally we add the best choice at this point.\n row[x] += Math.max(under, toRight);\n }\n\n // And save the row we've just calculated partial results for to the\n // \u201ctable\u201d.\n slideDowns[y] = row;\n }\n\n // At the end we can find our seeked slide down at the top cell.\n return slideDowns[0][0];\n}\n")),(0,s.kt)("p",null,"I've tried to explain the code as much as possible within the comments, since it\nmight be more beneficial to see right next to the \u201coffending\u201d lines."),(0,s.kt)("p",null,"As you can see, in this approach we go from the other side",(0,s.kt)("sup",{parentName:"p",id:"fnref-3"},(0,s.kt)("a",{parentName:"sup",href:"#fn-3",className:"footnote-ref"},"3")),", the bottom of\nthe pyramid and propagate the partial results up."),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"How is this different from the ",(0,s.kt)("em",{parentName:"mdxAdmonitionTitle"},"greedy")," solution???"),(0,s.kt)("p",{parentName:"admonition"},"If you try to compare them, you might find a very noticable difference. The\ngreedy approach is going from the top to the bottom without ",(0,s.kt)("strong",{parentName:"p"},"any")," knowledge of\nwhat's going on below. On the other hand, bottom-up DP is going from the bottom\n(",(0,s.kt)("em",{parentName:"p"},"DUH\u2026"),") and ",(0,s.kt)("strong",{parentName:"p"},"propagates")," the partial results to the top. The propagation is\nwhat makes sure that at the top I don't choose the best ",(0,s.kt)("strong",{parentName:"p"},"local")," choice, but\nthe best ",(0,s.kt)("strong",{parentName:"p"},"overall")," result I can achieve.")),(0,s.kt)("h3",{id:"time-complexity-3"},"Time complexity"),(0,s.kt)("p",null,"Time complexity of this solution is rather simple. We allocate an array for the\nrows and then for each row, we copy it and adjust the partial results. Doing\nthis we get:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"2"),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(rows + 2n)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"2"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("p",null,"Of course, this is an upper bound, since we iterate through the bottom row only\nonce."),(0,s.kt)("h3",{id:"memory-complexity-1"},"Memory complexity"),(0,s.kt)("p",null,"We're allocating an array for the pyramid ",(0,s.kt)("strong",{parentName:"p"},"again")," for our partial results, so\nwe get:"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,s.kt)("mi",{parentName:"mrow"},"n"),(0,s.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n)")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,s.kt)("span",{parentName:"span",className:"mopen"},"("),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,s.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"If we were writing this in C++ or Rust, we could've avoided that, but not\nreally."),(0,s.kt)("p",{parentName:"admonition"},"C++ would allow us to ",(0,s.kt)("strong",{parentName:"p"},"copy")," the pyramid rightaway into the parameter, so we\nwould be able to directly change it. However it's still a copy, even though we\ndon't need to allocate anything ourselves. It's just implicitly done for us."),(0,s.kt)("p",{parentName:"admonition"},"Rust is more funny in this case. If the pyramids weren't used after the call of\n",(0,s.kt)("inlineCode",{parentName:"p"},"longest_slide_down"),", it would simply ",(0,s.kt)("strong",{parentName:"p"},"move")," them into the functions. If they\nwere used afterwards, the compiler would force you to either borrow it, or\n",(0,s.kt)("em",{parentName:"p"},"clone-and-move")," for the function."),(0,s.kt)("hr",{parentName:"admonition"}),(0,s.kt)("p",{parentName:"admonition"},"Since we're doing it in Java, we get a reference to the ",(0,s.kt)("em",{parentName:"p"},"original")," array and we\ncan't do whatever we want with it.")),(0,s.kt)("h2",{id:"summary"},"Summary"),(0,s.kt)("p",null,"And we've finally reached the end. We have seen 4 different \u201csolutions\u201d",(0,s.kt)("sup",{parentName:"p",id:"fnref-4"},(0,s.kt)("a",{parentName:"sup",href:"#fn-4",className:"footnote-ref"},"4"))," of\nthe same problem using different approaches. Different approaches follow the\norder in which you might come up with them, each approach influences its\nsuccessor and represents the way we can enhance the existing implementation."),(0,s.kt)("hr",null),(0,s.kt)("admonition",{title:"source",type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You can find source code referenced in the text\n",(0,s.kt)("a",{parentName:"p",href:"pathname:///files/ib002/recursion/pyramid-slide-down.tar.gz"},"here"),".")),(0,s.kt)("div",{className:"footnotes"},(0,s.kt)("hr",{parentName:"div"}),(0,s.kt)("ol",{parentName:"div"},(0,s.kt)("li",{parentName:"ol",id:"fn-1"},"cause why not, right!?",(0,s.kt)("a",{parentName:"li",href:"#fnref-1",className:"footnote-backref"},"\u21a9")),(0,s.kt)("li",{parentName:"ol",id:"fn-2"},"except the bottom row",(0,s.kt)("a",{parentName:"li",href:"#fnref-2",className:"footnote-backref"},"\u21a9")),(0,s.kt)("li",{parentName:"ol",id:"fn-3"},"definitely not an RHCP reference \ud83d\ude09",(0,s.kt)("a",{parentName:"li",href:"#fnref-3",className:"footnote-backref"},"\u21a9")),(0,s.kt)("li",{parentName:"ol",id:"fn-4"},"one was not correct, thus the quotes",(0,s.kt)("a",{parentName:"li",href:"#fnref-4",className:"footnote-backref"},"\u21a9")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/82b3b723.fdccb1de.js b/assets/js/82b3b723.fdccb1de.js new file mode 100644 index 0000000..7c8c23d --- /dev/null +++ b/assets/js/82b3b723.fdccb1de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5787],{6564:i=>{i.exports=JSON.parse('{"label":"dynamic-programming","permalink":"/ib002/tags/dynamic-programming","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/834ed470.690ec9f0.js b/assets/js/834ed470.690ec9f0.js new file mode 100644 index 0000000..8e5c00a --- /dev/null +++ b/assets/js/834ed470.690ec9f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3223],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),d=o,m=p["".concat(c,".").concat(d)]||p[d]||f[d]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={id:"ib002-intro",title:"Introduction",slug:"/"},i=void 0,s={unversionedId:"ib002-intro",id:"ib002-intro",title:"Introduction",description:"In this part you can find \u201crandom\u201d additional materials I have written over the",source:"@site/ib002/00-intro-ib002.md",sourceDirName:".",slug:"/",permalink:"/ib002/",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/00-intro-ib002.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",sidebarPosition:0,frontMatter:{id:"ib002-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Algorithms and Correctness",permalink:"/ib002/category/algorithms-and-correctness"}},c={},l=[],u={toc:l},p="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this part you can find \u201crandom\u201d additional materials I have written over the\ncourse of teaching ",(0,o.kt)("em",{parentName:"p"},"Algorithms and data structures I"),"."),(0,o.kt)("p",null,"It is a various mix of stuff that may have been produced as a follow-up on some\nquestion asked at the seminar or spontanously."),(0,o.kt)("p",null,"If you have some ideas for posts, please do not hesitate to submit them as issues\nin the linked ",(0,o.kt)("a",{parentName:"p",href:"https://gitlab.fi.muni.cz/xfocko/kb/issues"},"GitLab"),"."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/83bf91d3.21975b05.js b/assets/js/83bf91d3.21975b05.js new file mode 100644 index 0000000..ef97441 --- /dev/null +++ b/assets/js/83bf91d3.21975b05.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7823],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(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 i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=p(n),h=a,d=m["".concat(l,".").concat(h)]||m[h]||c[h]||o;return n?r.createElement(d,i(i({ref:t},u),{},{components:n})):r.createElement(d,i({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:a,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const o={title:"Submitting merge requests"},i="Submitting merge requests for review",s={unversionedId:"mr",id:"mr",title:"Submitting merge requests",description:"This tutorial aims to show you how to follow basic git workflow and submit changes",source:"@site/pb071/mr.md",sourceDirName:".",slug:"/mr",permalink:"/pb071/mr",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/mr.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",frontMatter:{title:"Submitting merge requests"},sidebar:"autogeneratedBar",previous:{title:"Practice exam C",permalink:"/pb071/pexam/cams"}},l={},p=[{value:"Tutorial",id:"tutorial",level:2},{value:"Step #1 - Starting from the clean repository",id:"step-1---starting-from-the-clean-repository",level:3},{value:"Step #2 - Create new branch",id:"step-2---create-new-branch",level:3},{value:"Step #3 - Do the assignment",id:"step-3---do-the-assignment",level:3},{value:"Step #4 - Commit and upload the changes to GitLab",id:"step-4---commit-and-upload-the-changes-to-gitlab",level:3},{value:"Step #5 - Creating a merge request manually",id:"step-5---creating-a-merge-request-manually",level:3},{value:"Step #6 - Set assignees",id:"step-6---set-assignees",level:3},{value:"Step #7 - Return to default branch",id:"step-7---return-to-default-branch",level:3}],u={toc:p},m="wrapper";function c(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"submitting-merge-requests-for-review"},"Submitting merge requests for review"),(0,a.kt)("p",null,"This tutorial aims to show you how to follow basic git workflow and submit changes\nthrough ",(0,a.kt)("em",{parentName:"p"},"Merge Requests")," for review."),(0,a.kt)("p",null,"The rudimentary idea behind aims for changes to be present on a separate branch\nthat is supposedly ",(0,a.kt)("em",{parentName:"p"},"merged")," into the default branch. Till then changes can be reviewed\non ",(0,a.kt)("em",{parentName:"p"},"Merge Request")," and additional changes may be made based on the reviews. Once\nthe changes satisfy requirements, the merge request is merged."),(0,a.kt)("h2",{id:"tutorial"},"Tutorial"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Use this tutorial only for bonus assignments ",(0,a.kt)("strong",{parentName:"p"},"made by your tutors")," or in case\nyou need to make up for the absence.")),(0,a.kt)("h3",{id:"step-1---starting-from-the-clean-repository"},"Step #1 - Starting from the clean repository"),(0,a.kt)("p",null,"In your repository (either locally or on aisa) type ",(0,a.kt)("inlineCode",{parentName:"p"},"git status")," and check if your\nrepository is clean and you are present on the main branch (",(0,a.kt)("inlineCode",{parentName:"p"},"master"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"main")," or\n",(0,a.kt)("inlineCode",{parentName:"p"},"trunk"),"). If you do not know what your default branch is, it is probably ",(0,a.kt)("inlineCode",{parentName:"p"},"master"),"\nand you should not be on any other branch."),(0,a.kt)("p",null,"Output of the command should look like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"aisa$ git status\nOn branch master # Or main or trunk.\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"In case you are on different branch or there are uncommitted changes,\n",(0,a.kt)("strong",{parentName:"p"},"do not continue!!!")," Clean your repository (commit the changes or discard\nthem), before you continue.")),(0,a.kt)("h3",{id:"step-2---create-new-branch"},"Step #2 - Create new branch"),(0,a.kt)("p",null,"In your repository write command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"aisa$ git checkout -b BRANCH\nSwitched to a new branch 'BRANCH'\n")),(0,a.kt)("p",null,"Instead of ",(0,a.kt)("inlineCode",{parentName:"p"},"BRANCH")," use some reasonable name for the branch. For example if you\nare working on the seminar from 3rd week, name the branch ",(0,a.kt)("inlineCode",{parentName:"p"},"seminar-03"),"."),(0,a.kt)("h3",{id:"step-3---do-the-assignment"},"Step #3 - Do the assignment"),(0,a.kt)("p",null,"Download the skeleton for the seminar assignment, extract and program. For example\nif you are working on 3rd seminar, you can do so by:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"aisa$ wget https://www.fi.muni.cz/pb071/seminars/seminar-03/pb071-seminar-03.zip\naisa$ unzip pb071-seminar-03.zip\n# Now you should have directory 'seminar-03'.\naisa$ rm pb071-seminar-03.zip\naisa$ cd seminar-03\n# You can work on the assignment.\n")),(0,a.kt)("h3",{id:"step-4---commit-and-upload-the-changes-to-gitlab"},"Step #4 - Commit and upload the changes to GitLab"),(0,a.kt)("p",null,"The same way you ",(0,a.kt)("em",{parentName:"p"},"add")," and ",(0,a.kt)("em",{parentName:"p"},"commit")," files for the homework assignments, you do for\nthe seminar."),(0,a.kt)("p",null,"Now you can upload the changes to GitLab. ",(0,a.kt)("inlineCode",{parentName:"p"},"git push")," is not enough, since repository\non GitLab does not know your new branch. You can solve this by adding arguments:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"aisa$ git push origin BRANCH\n...\nremote: To create a merge request for BRANCH, visit:\nremote: https://gitlab.fi.muni.cz/login/pb071/merge_requests/new?merge_request%5Bsource_branch%5D=BRANCH\n...\n")),(0,a.kt)("p",null,"In the output you should have a link for creating a merge request. If you see this\nlink, open it and skip next step."),(0,a.kt)("h3",{id:"step-5---creating-a-merge-request-manually"},"Step #5 - Creating a merge request manually"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open your repository on GitLab."),(0,a.kt)("li",{parentName:"ol"},"On the left panel click on ",(0,a.kt)("em",{parentName:"li"},"Merge Requests"),"."),(0,a.kt)("li",{parentName:"ol"},"Click on ",(0,a.kt)("em",{parentName:"li"},"New Merge Request"),"."),(0,a.kt)("li",{parentName:"ol"},"In ",(0,a.kt)("em",{parentName:"li"},"Source branch")," select ",(0,a.kt)("inlineCode",{parentName:"li"},"login/pb071")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"BRANCH"),", which you created."),(0,a.kt)("li",{parentName:"ol"},"In ",(0,a.kt)("em",{parentName:"li"},"Target branch")," select ",(0,a.kt)("inlineCode",{parentName:"li"},"login/pb071")," and your default branch you have seen\nin the output of the first command. (most likely ",(0,a.kt)("inlineCode",{parentName:"li"},"master"),")"),(0,a.kt)("li",{parentName:"ol"},"Click on ",(0,a.kt)("em",{parentName:"li"},"Compare branches and continue"),".")),(0,a.kt)("h3",{id:"step-6---set-assignees"},"Step #6 - Set assignees"),(0,a.kt)("p",null,"On the page that is opened, please check at the top that you are creating merge\nrequest ",(0,a.kt)("strong",{parentName:"p"},"from")," your new branch ",(0,a.kt)("strong",{parentName:"p"},"to")," your default branch (one of ",(0,a.kt)("inlineCode",{parentName:"p"},"master"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"main"),"\nor ",(0,a.kt)("inlineCode",{parentName:"p"},"trunk"),")."),(0,a.kt)("p",null,"Then in the field ",(0,a.kt)("em",{parentName:"p"},"Assignees")," set your tutors based on the seminar group. You can\nuse login for a quick look up."),(0,a.kt)("p",null,"In the end click on ",(0,a.kt)("em",{parentName:"p"},"Submit merge request"),"."),(0,a.kt)("h3",{id:"step-7---return-to-default-branch"},"Step #7 - Return to default branch"),(0,a.kt)("p",null,"Homework assignments can be submitted only from branches specified in the rules\nfor the course. Because of that, before you do anything else, you should switch\nback to your default branch."),(0,a.kt)("p",null,"First of all, same as in step #1, check that your repository is clean with ",(0,a.kt)("inlineCode",{parentName:"p"},"git status"),".\nFor the sake of safety, do not continue without clean repository. Then with command\n",(0,a.kt)("inlineCode",{parentName:"p"},"git checkout BRANCH")," switch to your default branch ",(0,a.kt)("inlineCode",{parentName:"p"},"BRANCH"),"."),(0,a.kt)("p",null,"If you do not know which branch is your default, try ",(0,a.kt)("inlineCode",{parentName:"p"},"git branch")," that outputs all branches in your repository. Default branch is typically ",(0,a.kt)("inlineCode",{parentName:"p"},"master"),", but can\nbe ",(0,a.kt)("inlineCode",{parentName:"p"},"main")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"trunk"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"aisa$ git status\n# Check if repository is clean\n\n# If you know, what is your default branch, you can skip next command.\naisa$ git branch\n# Find the default branch in the list; should be one of the `master`, `main` or\n# `trunk` and you should not have more than one of those.\n# In case the list clears the terminal and you cannot see shell prompt, you can\n# press `q` to quit the pager.\n\naisa$ git checkout master\n")),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Adapted from: ",(0,a.kt)("a",{parentName:"p",href:"https://www.fi.muni.cz/~xlacko1/pb071/mr.html"},"https://www.fi.muni.cz/~xlacko1/pb071/mr.html")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8418981c.3eb99a51.js b/assets/js/8418981c.3eb99a51.js new file mode 100644 index 0000000..6855762 --- /dev/null +++ b/assets/js/8418981c.3eb99a51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5383],{1930:i=>{i.exports=JSON.parse('{"label":"recursion","permalink":"/ib002/tags/recursion","allTagsPath":"/ib002/tags","count":3,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"},{"id":"recursion/karel-1","title":"Recursion and backtracking with Robot Karel","description":"A problem with too many restrictions.\\n","permalink":"/ib002/recursion/karel-1"},{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","permalink":"/ib002/time-complexity/extend"}]}')}}]); \ No newline at end of file diff --git a/assets/js/86cd1460.733128af.js b/assets/js/86cd1460.733128af.js new file mode 100644 index 0000000..e267839 --- /dev/null +++ b/assets/js/86cd1460.733128af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1235],{8968:e=>{e.exports=JSON.parse('{"label":"leetcode","permalink":"/blog/tags/leetcode","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/8894.de4803df.js b/assets/js/8894.de4803df.js new file mode 100644 index 0000000..981fb12 --- /dev/null +++ b/assets/js/8894.de4803df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8894],{8894:(e,s,f)=>{f.r(s)}}]); \ No newline at end of file diff --git a/assets/js/8954.296edd99.js b/assets/js/8954.296edd99.js new file mode 100644 index 0000000..64d4492 --- /dev/null +++ b/assets/js/8954.296edd99.js @@ -0,0 +1,2 @@ +/*! For license information please see 8954.296edd99.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8954],{7967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,i=/&#(\w+)(^\w|;)?/g,r=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,s=/^.+(:|:)/gim,o=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var c,l=(c=t,c.replace(a,"").replace(i,(function(t,e){return String.fromCharCode(e)}))).replace(r,"").replace(a,"").trim();if(!l)return e.Rq;if(function(t){return o.indexOf(t[0])>-1}(l))return l;var h=l.match(s);if(!h)return l;var u=h[0];return n.test(u)?e.Rq:l}},3905:(t,e,n)=>{"use strict";n.d(e,{Zo:()=>h,kt:()=>f});var i=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function s(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var c=i.createContext({}),l=function(t){var e=i.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},h=function(t){var e=l(t.components);return i.createElement(c.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return i.createElement(i.Fragment,{},e)}},p=i.forwardRef((function(t,e){var n=t.components,r=t.mdxType,a=t.originalType,c=t.parentName,h=o(t,["components","mdxType","originalType","parentName"]),u=l(n),p=r,f=u["".concat(c,".").concat(p)]||u[p]||d[p]||a;return n?i.createElement(f,s(s({ref:e},h),{},{components:n})):i.createElement(f,s({ref:e},h))}));function f(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var a=n.length,s=new Array(a);s[0]=p;var o={};for(var c in e)hasOwnProperty.call(e,c)&&(o[c]=e[c]);o.originalType=t,o[u]="string"==typeof t?t:r,s[1]=o;for(var l=2;l{"use strict";n.d(e,{Z:()=>h});var i=n(7294),r=n(5999),a=n(5281),s=n(7462),o=n(6010);const c={iconEdit:"iconEdit_Z9Sw"};function l(t){let{className:e,...n}=t;return i.createElement("svg",(0,s.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(c.iconEdit,e),"aria-hidden":"true"},n),i.createElement("g",null,i.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function h(t){let{editUrl:e}=t;return i.createElement("a",{href:e,target:"_blank",rel:"noreferrer noopener",className:a.k.common.editThisPage},i.createElement(l,null),i.createElement(r.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},7955:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var i=n(7462),r=n(7294),a=n(6010),s=n(5999),o=n(6668),c=n(9960);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function h(t){let{as:e,id:n,...h}=t;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===e||!n)return r.createElement(e,(0,i.Z)({},h,{id:void 0}));const d=(0,s.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof h.children?h.children:n});return r.createElement(e,(0,i.Z)({},h,{className:(0,a.Z)("anchor",u?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,h.className),id:n}),h.children,r.createElement(c.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d},"\u200b"))}},1098:(t,e,n)=>{"use strict";n.d(e,{Z:()=>kt});var i=n(7294),r=n(3905),a=n(7462),s=n(5742);var o=n(2389),c=n(6010),l=n(2949),h=n(6668);function u(){const{prism:t}=(0,h.L)(),{colorMode:e}=(0,l.I)(),n=t.theme,i=t.darkTheme||n;return"dark"===e?i:n}var d=n(5281),p=n(7594),f=n.n(p);const g=/title=(?["'])(?.*?)\1/,y=/\{(?<range>[\d,-]+)\}/,m={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function b(t,e){const n=t.map((t=>{const{start:n,end:i}=m[t];return`(?:${n}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${i})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function _(t,e){let n=t.replace(/\n$/,"");const{language:i,magicComments:r,metastring:a}=e;if(a&&y.test(a)){const t=a.match(y).groups.range;if(0===r.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=r[0].className,i=f()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(i),code:n}}if(void 0===i)return{lineClassNames:{},code:n};const s=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],e);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],e);case"html":return b(["js","jsBlock","html"],e);case"python":case"py":case"bash":return b(["bash"],e);case"markdown":case"md":return b(["html","jsx","bash"],e);default:return b(Object.keys(m),e)}}(i,r),o=n.split("\n"),c=Object.fromEntries(r.map((t=>[t.className,{start:0,range:""}]))),l=Object.fromEntries(r.filter((t=>t.line)).map((t=>{let{className:e,line:n}=t;return[n,e]}))),h=Object.fromEntries(r.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.start,e]}))),u=Object.fromEntries(r.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.end,e]})));for(let p=0;p<o.length;){const t=o[p].match(s);if(!t){p+=1;continue}const e=t.slice(1).find((t=>void 0!==t));l[e]?c[l[e]].range+=`${p},`:h[e]?c[h[e]].start=p:u[e]&&(c[u[e]].range+=`${c[u[e]].start}-${p-1},`),o.splice(p,1)}n=o.join("\n");const d={};return Object.entries(c).forEach((t=>{let[e,{range:n}]=t;f()(n).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:n}}const x={codeBlockContainer:"codeBlockContainer_Ckt0"};function v(t){let{as:e,...n}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(t.plain).forEach((t=>{let[i,r]=t;const a=e[i];a&&"string"==typeof r&&(n[a]=r)})),n}(u());return i.createElement(e,(0,a.Z)({},n,{style:r,className:(0,c.Z)(n.className,x.codeBlockContainer,d.k.common.codeBlock)}))}const k={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function w(t){let{children:e,className:n}=t;return i.createElement(v,{as:"pre",tabIndex:0,className:(0,c.Z)(k.codeBlockStandalone,"thin-scrollbar",n)},i.createElement("code",{className:k.codeBlockLines},e))}var C=n(902);const T={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(t,e){const[n,r]=(0,i.useState)(),a=(0,i.useCallback)((()=>{r(t.current?.closest("[role=tabpanel][hidden]"))}),[t,r]);(0,i.useEffect)((()=>{a()}),[a]),function(t,e,n){void 0===n&&(n=T);const r=(0,C.zX)(e),a=(0,C.Ql)(n);(0,i.useEffect)((()=>{const e=new MutationObserver(r);return t&&e.observe(t,a),()=>e.disconnect()}),[t,r,a])}(n,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const S={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var A={Prism:n(7410).Z,theme:S};function L(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function B(){return B=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},B.apply(this,arguments)}var N=/\r\n|\r|\n/,D=function(t){0===t.length?t.push({types:["plain"],content:"\n",empty:!0}):1===t.length&&""===t[0].content&&(t[0].content="\n",t[0].empty=!0)},O=function(t,e){var n=t.length;return n>0&&t[n-1]===e?t:t.concat(e)};function M(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&-1===e.indexOf(i)&&(n[i]=t[i]);return n}var I=function(t){function e(){for(var e=this,n=[],i=arguments.length;i--;)n[i]=arguments[i];t.apply(this,n),L(this,"getThemeDict",(function(t){if(void 0!==e.themeDict&&t.theme===e.prevTheme&&t.language===e.prevLanguage)return e.themeDict;e.prevTheme=t.theme,e.prevLanguage=t.language;var n=t.theme?function(t,e){var n=t.plain,i=Object.create(null),r=t.styles.reduce((function(t,n){var i=n.languages,r=n.style;return i&&!i.includes(e)||n.types.forEach((function(e){var n=B({},t[e],r);t[e]=n})),t}),i);return r.root=n,r.plain=B({},n,{backgroundColor:null}),r}(t.theme,t.language):void 0;return e.themeDict=n})),L(this,"getLineProps",(function(t){var n=t.key,i=t.className,r=t.style,a=B({},M(t,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),s=e.getThemeDict(e.props);return void 0!==s&&(a.style=s.plain),void 0!==r&&(a.style=void 0!==a.style?B({},a.style,r):r),void 0!==n&&(a.key=n),i&&(a.className+=" "+i),a})),L(this,"getStyleForToken",(function(t){var n=t.types,i=t.empty,r=n.length,a=e.getThemeDict(e.props);if(void 0!==a){if(1===r&&"plain"===n[0])return i?{display:"inline-block"}:void 0;if(1===r&&!i)return a[n[0]];var s=i?{display:"inline-block"}:{},o=n.map((function(t){return a[t]}));return Object.assign.apply(Object,[s].concat(o))}})),L(this,"getTokenProps",(function(t){var n=t.key,i=t.className,r=t.style,a=t.token,s=B({},M(t,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:e.getStyleForToken(a),key:void 0});return void 0!==r&&(s.style=void 0!==s.style?B({},s.style,r):r),void 0!==n&&(s.key=n),i&&(s.className+=" "+i),s})),L(this,"tokenize",(function(t,e,n,i){var r={code:e,grammar:n,language:i,tokens:[]};t.hooks.run("before-tokenize",r);var a=r.tokens=t.tokenize(r.code,r.grammar,r.language);return t.hooks.run("after-tokenize",r),a}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.render=function(){var t=this.props,e=t.Prism,n=t.language,i=t.code,r=t.children,a=this.getThemeDict(this.props),s=e.languages[n];return r({tokens:function(t){for(var e=[[]],n=[t],i=[0],r=[t.length],a=0,s=0,o=[],c=[o];s>-1;){for(;(a=i[s]++)<r[s];){var l=void 0,h=e[s],u=n[s][a];if("string"==typeof u?(h=s>0?h:["plain"],l=u):(h=O(h,u.type),u.alias&&(h=O(h,u.alias)),l=u.content),"string"==typeof l){var d=l.split(N),p=d.length;o.push({types:h,content:d[0]});for(var f=1;f<p;f++)D(o),c.push(o=[]),o.push({types:h,content:d[f]})}else s++,e.push(h),n.push(l),i.push(0),r.push(l.length)}s--,e.pop(),n.pop(),i.pop(),r.pop()}return D(o),c}(void 0!==s?this.tokenize(e,i,s,n):[i]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},e}(i.Component);const F=I,$={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function R(t){let{line:e,classNames:n,showLineNumbers:r,getLineProps:s,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=s({line:e,className:(0,c.Z)(n,r&&$.codeLine)}),h=e.map(((t,e)=>i.createElement("span",(0,a.Z)({key:e},o({token:t,key:e})))));return i.createElement("span",l,r?i.createElement(i.Fragment,null,i.createElement("span",{className:$.codeLineNumber}),i.createElement("span",{className:$.codeLineContent},h)):h,i.createElement("br",null))}var Z=n(5999);function P(t){return i.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},t),i.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function j(t){return i.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},t),i.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const Y={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function z(t){let{code:e,className:n}=t;const[r,a]=(0,i.useState)(!1),s=(0,i.useRef)(void 0),o=(0,i.useCallback)((()=>{!function(t,e){let{target:n=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const i=document.createElement("textarea"),r=document.activeElement;i.value=t,i.setAttribute("readonly",""),i.style.contain="strict",i.style.position="absolute",i.style.left="-9999px",i.style.fontSize="12pt";const a=document.getSelection(),s=a.rangeCount>0&&a.getRangeAt(0);n.append(i),i.select(),i.selectionStart=0,i.selectionEnd=t.length;let o=!1;try{o=document.execCommand("copy")}catch{}i.remove(),s&&(a.removeAllRanges(),a.addRange(s)),r&&r.focus()}(e),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),i.createElement("button",{type:"button","aria-label":r?(0,Z.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,Z.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",n,Y.copyButton,r&&Y.copyButtonCopied),onClick:o},i.createElement("span",{className:Y.copyButtonIcons,"aria-hidden":"true"},i.createElement(P,{className:Y.copyButtonIcon}),i.createElement(j,{className:Y.copyButtonSuccessIcon})))}function U(t){return i.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},t),i.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const W={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function q(t){let{className:e,onClick:n,isEnabled:r}=t;const a=(0,Z.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return i.createElement("button",{type:"button",onClick:n,className:(0,c.Z)("clean-btn",e,r&&W.wordWrapButtonEnabled),"aria-label":a,title:a},i.createElement(U,{className:W.wordWrapButtonIcon,"aria-hidden":"true"}))}function H(t){let{children:e,className:n="",metastring:r,title:s,showLineNumbers:o,language:l}=t;const{prism:{defaultLanguage:d,magicComments:p}}=(0,h.L)(),f=l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(n)??d,y=u(),m=function(){const[t,e]=(0,i.useState)(!1),[n,r]=(0,i.useState)(!1),a=(0,i.useRef)(null),s=(0,i.useCallback)((()=>{const n=a.current.querySelector("code");t?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),e((t=>!t))}),[a,t]),o=(0,i.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=a.current,n=t>e||a.current.querySelector("code").hasAttribute("style");r(n)}),[a]);return E(a,o),(0,i.useEffect)((()=>{o()}),[t,o]),(0,i.useEffect)((()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)})),[o]),{codeBlockRef:a,isEnabled:t,isCodeScrollable:n,toggle:s}}(),b=function(t){return t?.match(g)?.groups.title??""}(r)||s,{lineClassNames:x,code:w}=_(e,{metastring:r,language:f,magicComments:p}),C=o??function(t){return Boolean(t?.includes("showLineNumbers"))}(r);return i.createElement(v,{as:"div",className:(0,c.Z)(n,f&&!n.includes(`language-${f}`)&&`language-${f}`)},b&&i.createElement("div",{className:k.codeBlockTitle},b),i.createElement("div",{className:k.codeBlockContent},i.createElement(F,(0,a.Z)({},A,{theme:y,code:w,language:f??"text"}),(t=>{let{className:e,tokens:n,getLineProps:r,getTokenProps:a}=t;return i.createElement("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,k.codeBlock,"thin-scrollbar")},i.createElement("code",{className:(0,c.Z)(k.codeBlockLines,C&&k.codeBlockLinesWithNumbering)},n.map(((t,e)=>i.createElement(R,{key:e,line:t,getLineProps:r,getTokenProps:a,classNames:x[e],showLineNumbers:C})))))})),i.createElement("div",{className:k.buttonGroup},(m.isEnabled||m.isCodeScrollable)&&i.createElement(q,{className:k.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),i.createElement(z,{className:k.codeButton,code:w}))))}function V(t){let{children:e,...n}=t;const r=(0,o.Z)(),s=function(t){return i.Children.toArray(t).some((t=>(0,i.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),c="string"==typeof s?H:w;return i.createElement(c,(0,a.Z)({key:String(r)},n),s)}var G=n(9960);var X=n(6043);const Q={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function K(t){return!!t&&("SUMMARY"===t.tagName||K(t.parentElement))}function J(t,e){return!!t&&(t===e||J(t.parentElement,e))}function tt(t){let{summary:e,children:n,...r}=t;const s=(0,o.Z)(),l=(0,i.useRef)(null),{collapsed:h,setCollapsed:u}=(0,X.u)({initialState:!r.open}),[d,p]=(0,i.useState)(r.open),f=i.isValidElement(e)?e:i.createElement("summary",null,e??"Details");return i.createElement("details",(0,a.Z)({},r,{ref:l,open:d,"data-collapsed":h,className:(0,c.Z)(Q.details,s&&Q.isBrowser,r.className),onMouseDown:t=>{K(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;K(e)&&J(e,l.current)&&(t.preventDefault(),h?(u(!1),p(!0)):u(!0))}}),f,i.createElement(X.z,{lazy:!1,collapsed:h,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{u(t),p(!t)}},i.createElement("div",{className:Q.collapsibleContent},n)))}const et={details:"details_b_Ee"},nt="alert alert--info";function it(t){let{...e}=t;return i.createElement(tt,(0,a.Z)({},e,{className:(0,c.Z)(nt,et.details,e.className)}))}var rt=n(7955);function at(t){return i.createElement(rt.Z,t)}const st={containsTaskList:"containsTaskList_mC6p"};const ot={img:"img_ev3q"};const ct="admonition_LlT9",lt="admonitionHeading_tbUL",ht="admonitionIcon_kALy",ut="admonitionContent_S0QG";const dt={note:{infimaClassName:"secondary",iconComponent:function(){return i.createElement("svg",{viewBox:"0 0 14 16"},i.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:i.createElement(Z.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return i.createElement("svg",{viewBox:"0 0 12 16"},i.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:i.createElement(Z.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return i.createElement("svg",{viewBox:"0 0 12 16"},i.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:i.createElement(Z.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return i.createElement("svg",{viewBox:"0 0 14 16"},i.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:i.createElement(Z.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return i.createElement("svg",{viewBox:"0 0 16 16"},i.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:i.createElement(Z.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},pt={secondary:"note",important:"info",success:"tip",warning:"danger"};function ft(t){const{mdxAdmonitionTitle:e,rest:n}=function(t){const e=i.Children.toArray(t),n=e.find((t=>i.isValidElement(t)&&"mdxAdmonitionTitle"===t.props?.mdxType)),r=i.createElement(i.Fragment,null,e.filter((t=>t!==n)));return{mdxAdmonitionTitle:n,rest:r}}(t.children);return{...t,title:t.title??e,children:n}}function gt(t){let{children:e,fallback:n}=t;return(0,o.Z)()?i.createElement(i.Fragment,null,e?.()):n??null}var yt=n(6432);const mt="docusaurus-mermaid-container";function bt(){const{colorMode:t}=(0,l.I)(),e=(0,h.L)().mermaid,n=e.theme[t],{options:r}=e;return(0,i.useMemo)((()=>({startOnLoad:!1,...r,theme:n})),[n,r])}const _t={container:"container_lyt7"};function xt(t){let{value:e}=t;const n=function(t,e){const n=bt(),r=e??n;return(0,i.useMemo)((()=>{yt.o.mermaidAPI.initialize(r);const e=`mermaid-svg-${Math.round(1e7*Math.random())}`;return yt.o.render(e,t)}),[t,r])}(e);return i.createElement("div",{className:`${mt} ${_t.container}`,dangerouslySetInnerHTML:{__html:n}})}const vt={head:function(t){const e=i.Children.map(t.children,(t=>i.isValidElement(t)?function(t){if(t.props?.mdxType&&t.props.originalType){const{mdxType:e,originalType:n,...r}=t.props;return i.createElement(t.props.originalType,r)}return t}(t):t));return i.createElement(s.Z,t,e)},code:function(t){const e=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return i.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")||(0,i.isValidElement)(t)&&e.includes(t.props?.mdxType)))?i.createElement("code",t):i.createElement(V,t)},a:function(t){return i.createElement(G.Z,t)},pre:function(t){return i.createElement(V,(0,i.isValidElement)(t.children)&&"code"===t.children.props?.originalType?t.children.props:{...t})},details:function(t){const e=i.Children.toArray(t.children),n=e.find((t=>i.isValidElement(t)&&"summary"===t.props?.mdxType)),r=i.createElement(i.Fragment,null,e.filter((t=>t!==n)));return i.createElement(it,(0,a.Z)({},t,{summary:n}),r)},ul:function(t){return i.createElement("ul",(0,a.Z)({},t,{className:(e=t.className,(0,c.Z)(e,e?.includes("contains-task-list")&&st.containsTaskList))}));var e},img:function(t){return i.createElement("img",(0,a.Z)({loading:"lazy"},t,{className:(e=t.className,(0,c.Z)(e,ot.img))}));var e},h1:t=>i.createElement(at,(0,a.Z)({as:"h1"},t)),h2:t=>i.createElement(at,(0,a.Z)({as:"h2"},t)),h3:t=>i.createElement(at,(0,a.Z)({as:"h3"},t)),h4:t=>i.createElement(at,(0,a.Z)({as:"h4"},t)),h5:t=>i.createElement(at,(0,a.Z)({as:"h5"},t)),h6:t=>i.createElement(at,(0,a.Z)({as:"h6"},t)),admonition:function(t){const{children:e,type:n,title:r,icon:a}=ft(t),s=function(t){const e=pt[t]??t,n=dt[e];return n||(console.warn(`No admonition config found for admonition type "${e}". Using Info as fallback.`),dt.info)}(n),o=r??s.label,{iconComponent:l}=s,h=a??i.createElement(l,null);return i.createElement("div",{className:(0,c.Z)(d.k.common.admonition,d.k.common.admonitionType(t.type),"alert",`alert--${s.infimaClassName}`,ct)},i.createElement("div",{className:lt},i.createElement("span",{className:ht},h),o),i.createElement("div",{className:ut},e))},mermaid:function(t){return i.createElement(gt,null,(()=>i.createElement(xt,t)))}};function kt(t){let{children:e}=t;return i.createElement(r.Zo,{components:vt},e)}},2244:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(7294),r=n(6010),a=n(9960);function s(t){const{permalink:e,title:n,subLabel:s,isNext:o}=t;return i.createElement(a.Z,{className:(0,r.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e},s&&i.createElement("div",{className:"pagination-nav__sublabel"},s),i.createElement("div",{className:"pagination-nav__label"},n))}},3008:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(7294),r=n(6010),a=n(9960);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function o(t){let{permalink:e,label:n,count:o}=t;return i.createElement(a.Z,{href:e,className:(0,r.Z)(s.tag,o?s.tagWithCount:s.tagRegular)},n,o&&i.createElement("span",null,o))}},1526:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(7294),r=n(6010),a=n(5999),s=n(3008);const o={tags:"tags_jXut",tag:"tag_QGVx"};function c(t){let{tags:e}=t;return i.createElement(i.Fragment,null,i.createElement("b",null,i.createElement(a.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),i.createElement("ul",{className:(0,r.Z)(o.tags,"padding--none","margin-left--sm")},e.map((t=>{let{label:e,permalink:n}=t;return i.createElement("li",{key:n,className:o.tag},i.createElement(s.Z,{label:e,permalink:n}))}))))}},7484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,n=36e5,i="millisecond",r="second",a="minute",s="hour",o="day",c="week",l="month",h="quarter",u="year",d="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,y={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var i=String(t);return!i||i.length>=e?t:""+Array(e+1-i.length).join(n)+t},b={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),i=Math.floor(n/60),r=n%60;return(e<=0?"+":"-")+m(i,2,"0")+":"+m(r,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var i=12*(n.year()-e.year())+(n.month()-e.month()),r=e.clone().add(i,l),a=n-r<0,s=e.clone().add(i+(a?-1:1),l);return+(-(i+(n-r)/(a?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:l,y:u,w:c,d:o,D:d,h:s,m:a,s:r,ms:i,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},_="en",x={};x[_]=y;var v=function(t){return t instanceof T},k=function t(e,n,i){var r;if(!e)return _;if("string"==typeof e){var a=e.toLowerCase();x[a]&&(r=a),n&&(x[a]=n,r=a);var s=e.split("-");if(!r&&s.length>1)return t(s[0])}else{var o=e.name;x[o]=e,r=o}return!i&&r&&(_=r),r||!i&&_},w=function(t,e){if(v(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new T(n)},C=b;C.l=k,C.i=v,C.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var T=function(){function y(t){this.$L=k(t.locale,null,!0),this.parse(t)}var m=y.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(C.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var i=e.match(f);if(i){var r=i[2]-1||0,a=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],r,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)):new Date(i[1],r,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return C},m.isValid=function(){return!(this.$d.toString()===p)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return C.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,i=!!C.u(e)||e,h=C.p(t),p=function(t,e){var r=C.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return i?r:r.endOf(o)},f=function(t,e){return C.w(n.toDate()[t].apply(n.toDate("s"),(i?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},g=this.$W,y=this.$M,m=this.$D,b="set"+(this.$u?"UTC":"");switch(h){case u:return i?p(1,0):p(31,11);case l:return i?p(1,y):p(0,y+1);case c:var _=this.$locale().weekStart||0,x=(g<_?g+7:g)-_;return p(i?m-x:m+(6-x),y);case o:case d:return f(b+"Hours",0);case s:return f(b+"Minutes",1);case a:return f(b+"Seconds",2);case r:return f(b+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,c=C.p(t),h="set"+(this.$u?"UTC":""),p=(n={},n[o]=h+"Date",n[d]=h+"Date",n[l]=h+"Month",n[u]=h+"FullYear",n[s]=h+"Hours",n[a]=h+"Minutes",n[r]=h+"Seconds",n[i]=h+"Milliseconds",n)[c],f=c===o?this.$D+(e-this.$W):e;if(c===l||c===u){var g=this.clone().set(d,1);g.$d[p](f),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else p&&this.$d[p](f);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[C.p(t)]()},m.add=function(i,h){var d,p=this;i=Number(i);var f=C.p(h),g=function(t){var e=w(p);return C.w(e.date(e.date()+Math.round(t*i)),p)};if(f===l)return this.set(l,this.$M+i);if(f===u)return this.set(u,this.$y+i);if(f===o)return g(1);if(f===c)return g(7);var y=(d={},d[a]=e,d[s]=n,d[r]=t,d)[f]||1,m=this.$d.getTime()+i*y;return C.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var i=t||"YYYY-MM-DDTHH:mm:ssZ",r=C.z(this),a=this.$H,s=this.$m,o=this.$M,c=n.weekdays,l=n.months,h=n.meridiem,u=function(t,n,r,a){return t&&(t[n]||t(e,i))||r[n].slice(0,a)},d=function(t){return C.s(a%12||12,t,"0")},f=h||function(t,e,n){var i=t<12?"AM":"PM";return n?i.toLowerCase():i};return i.replace(g,(function(t,i){return i||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return C.s(e.$y,4,"0");case"M":return o+1;case"MM":return C.s(o+1,2,"0");case"MMM":return u(n.monthsShort,o,l,3);case"MMMM":return u(l,o);case"D":return e.$D;case"DD":return C.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(n.weekdaysMin,e.$W,c,2);case"ddd":return u(n.weekdaysShort,e.$W,c,3);case"dddd":return c[e.$W];case"H":return String(a);case"HH":return C.s(a,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return f(a,s,!0);case"A":return f(a,s,!1);case"m":return String(s);case"mm":return C.s(s,2,"0");case"s":return String(e.$s);case"ss":return C.s(e.$s,2,"0");case"SSS":return C.s(e.$ms,3,"0");case"Z":return r}return null}(t)||r.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(i,d,p){var f,g=this,y=C.p(d),m=w(i),b=(m.utcOffset()-this.utcOffset())*e,_=this-m,x=function(){return C.m(g,m)};switch(y){case u:f=x()/12;break;case l:f=x();break;case h:f=x()/3;break;case c:f=(_-b)/6048e5;break;case o:f=(_-b)/864e5;break;case s:f=_/n;break;case a:f=_/e;break;case r:f=_/t;break;default:f=_}return p?f:C.a(f)},m.daysInMonth=function(){return this.endOf(l).$D},m.$locale=function(){return x[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),i=k(t,e,!0);return i&&(n.$L=i),n},m.clone=function(){return C.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},y}(),E=T.prototype;return w.prototype=E,[["$ms",i],["$s",r],["$m",a],["$H",s],["$W",o],["$M",l],["$y",u],["$D",d]].forEach((function(t){E[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,T,w),t.$i=!0),w},w.locale=k,w.isDayjs=v,w.unix=function(t){return w(1e3*t)},w.en=x[_],w.Ls=x,w.p={},w}()},8734:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var r=this.$utils(),a=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return r.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return r.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return r.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(a)}}}()},285:function(t){t.exports=function(){"use strict";var t={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"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,r=/\d*[^-_:/,()\s\d]+/,a={},s=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=a[t];return e&&(e.indexOf?e:e.s.concat(e.f))},h=function(t,e){var n,i=a.meridiem;if(i){for(var r=1;r<=24;r+=1)if(t.indexOf(i(r,0,e))>-1){n=r>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[r,function(t){this.afternoon=h(t,!1)}],a:[r,function(t){this.afternoon=h(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[r,function(t){var e=a.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[r,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[r,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=s(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function d(n){var i,r;i=n,r=a&&a.formats;for(var s=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var a=i&&i.toUpperCase();return n||r[i]||t[i]||r[a].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=s.length,c=0;c<o;c+=1){var l=s[c],h=u[l],d=h&&h[0],p=h&&h[1];s[c]=p?{regex:d,parser:p}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var r=s[n];if("string"==typeof r)i+=r.length;else{var a=r.regex,c=r.parser,l=t.slice(i),h=a.exec(l)[0];c.call(e,h),t=t.replace(h,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(s=t.parseTwoDigitYear);var i=e.prototype,r=i.parse;i.parse=function(t){var e=t.date,i=t.utc,s=t.args;this.$u=i;var o=s[1];if("string"==typeof o){var c=!0===s[2],l=!0===s[3],h=c||l,u=s[2];l&&(u=s[2]),a=this.$locale(),!c&&u&&(a=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=d(e)(t),r=i.year,a=i.month,s=i.day,o=i.hours,c=i.minutes,l=i.seconds,h=i.milliseconds,u=i.zone,p=new Date,f=s||(r||a?1:p.getDate()),g=r||p.getFullYear(),y=0;r&&!a||(y=a>0?a-1:p.getMonth());var m=o||0,b=c||0,_=l||0,x=h||0;return u?new Date(Date.UTC(g,y,f,m,b,_,x+60*u.offset*1e3)):n?new Date(Date.UTC(g,y,f,m,b,_,x)):new Date(g,y,f,m,b,_,x)}catch(t){return new Date("")}}(e,o,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),h&&e!=this.format(o)&&(this.$d=new Date("")),a={}}else if(o instanceof Array)for(var p=o.length,f=1;f<=p;f+=1){s[1]=o[f-1];var g=n.apply(this,s);if(g.isValid()){this.$d=g.$d,this.$L=g.$L,this.init();break}f===p&&(this.$d=new Date(""))}else r.call(this,t)}}}()},9542:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var r=function(e){return e.add(4-e.isoWeekday(),t)},a=n.prototype;a.isoWeekYear=function(){return r(this).year()},a.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,a,s,o=r(this),c=(n=this.isoWeekYear(),s=4-(a=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),a.isoWeekday()>4&&(s+=7),a.add(s,t));return o.diff(c,"week")+1},a.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var s=a.startOf;a.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(t,e)}}}()},7856:function(t){t.exports=function(){"use strict";function t(e){return t="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(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function i(t,r,a){return i=n()?Reflect.construct:function(t,n,i){var r=[null];r.push.apply(r,n);var a=new(Function.bind.apply(t,r));return i&&e(a,i.prototype),a},i.apply(null,arguments)}function r(t){return a(t)||s(t)||o(t)||l()}function a(t){if(Array.isArray(t))return c(t)}function s(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function o(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 c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var h=Object.hasOwnProperty,u=Object.setPrototypeOf,d=Object.isFrozen,p=Object.getPrototypeOf,f=Object.getOwnPropertyDescriptor,g=Object.freeze,y=Object.seal,m=Object.create,b="undefined"!=typeof Reflect&&Reflect,_=b.apply,x=b.construct;_||(_=function(t,e,n){return t.apply(e,n)}),g||(g=function(t){return t}),y||(y=function(t){return t}),x||(x=function(t,e){return i(t,r(e))});var v=D(Array.prototype.forEach),k=D(Array.prototype.pop),w=D(Array.prototype.push),C=D(String.prototype.toLowerCase),T=D(String.prototype.toString),E=D(String.prototype.match),S=D(String.prototype.replace),A=D(String.prototype.indexOf),L=D(String.prototype.trim),B=D(RegExp.prototype.test),N=O(TypeError);function D(t){return function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];return _(t,e,i)}}function O(t){return function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return x(t,n)}}function M(t,e,n){n=n||C,u&&u(t,null);for(var i=e.length;i--;){var r=e[i];if("string"==typeof r){var a=n(r);a!==r&&(d(e)||(e[i]=a),r=a)}t[r]=!0}return t}function I(t){var e,n=m(null);for(e in t)!0===_(h,t,[e])&&(n[e]=t[e]);return n}function F(t,e){for(;null!==t;){var n=f(t,e);if(n){if(n.get)return D(n.get);if("function"==typeof n.value)return D(n.value)}t=p(t)}function i(t){return console.warn("fallback value for",t),null}return i}var $=g(["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"]),R=g(["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"]),Z=g(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),P=g(["animate","color-profile","cursor","discard","fedropshadow","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"]),j=g(["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"]),Y=g(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),z=g(["#text"]),U=g(["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","nonce","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"]),W=g(["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","transform-origin","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"]),q=g(["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"]),H=g(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),V=y(/\{\{[\w\W]*|[\w\W]*\}\}/gm),G=y(/<%[\w\W]*|[\w\W]*%>/gm),X=y(/\${[\w\W]*}/gm),Q=y(/^data-[\-\w.\u00B7-\uFFFF]/),K=y(/^aria-[\-\w]+$/),J=y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),tt=y(/^(?:\w+script|data):/i),et=y(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),nt=y(/^html$/i),it=function(){return"undefined"==typeof window?null:window},rt=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var i=null,r="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(r)&&(i=n.currentScript.getAttribute(r));var a="dompurify"+(i?"#"+i:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(s){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};function at(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:it(),n=function(t){return at(t)};if(n.version="2.4.3",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var i=e.document,a=e.document,s=e.DocumentFragment,o=e.HTMLTemplateElement,c=e.Node,l=e.Element,h=e.NodeFilter,u=e.NamedNodeMap,d=void 0===u?e.NamedNodeMap||e.MozNamedAttrMap:u,p=e.HTMLFormElement,f=e.DOMParser,y=e.trustedTypes,m=l.prototype,b=F(m,"cloneNode"),_=F(m,"nextSibling"),x=F(m,"childNodes"),D=F(m,"parentNode");if("function"==typeof o){var O=a.createElement("template");O.content&&O.content.ownerDocument&&(a=O.content.ownerDocument)}var st=rt(y,i),ot=st?st.createHTML(""):"",ct=a,lt=ct.implementation,ht=ct.createNodeIterator,ut=ct.createDocumentFragment,dt=ct.getElementsByTagName,pt=i.importNode,ft={};try{ft=I(a).documentMode?a.documentMode:{}}catch(De){}var gt={};n.isSupported="function"==typeof D&<&&void 0!==lt.createHTMLDocument&&9!==ft;var yt,mt,bt=V,_t=G,xt=X,vt=Q,kt=K,wt=tt,Ct=et,Tt=J,Et=null,St=M({},[].concat(r($),r(R),r(Z),r(j),r(z))),At=null,Lt=M({},[].concat(r(U),r(W),r(q),r(H))),Bt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Nt=null,Dt=null,Ot=!0,Mt=!0,It=!1,Ft=!1,$t=!1,Rt=!1,Zt=!1,Pt=!1,jt=!1,Yt=!1,zt=!0,Ut=!1,Wt="user-content-",qt=!0,Ht=!1,Vt={},Gt=null,Xt=M({},["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"]),Qt=null,Kt=M({},["audio","video","img","source","image","track"]),Jt=null,te=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ee="http://www.w3.org/1998/Math/MathML",ne="http://www.w3.org/2000/svg",ie="http://www.w3.org/1999/xhtml",re=ie,ae=!1,se=null,oe=M({},[ee,ne,ie],T),ce=["application/xhtml+xml","text/html"],le="text/html",he=null,ue=a.createElement("form"),de=function(t){return t instanceof RegExp||t instanceof Function},pe=function(e){he&&he===e||(e&&"object"===t(e)||(e={}),e=I(e),yt=yt=-1===ce.indexOf(e.PARSER_MEDIA_TYPE)?le:e.PARSER_MEDIA_TYPE,mt="application/xhtml+xml"===yt?T:C,Et="ALLOWED_TAGS"in e?M({},e.ALLOWED_TAGS,mt):St,At="ALLOWED_ATTR"in e?M({},e.ALLOWED_ATTR,mt):Lt,se="ALLOWED_NAMESPACES"in e?M({},e.ALLOWED_NAMESPACES,T):oe,Jt="ADD_URI_SAFE_ATTR"in e?M(I(te),e.ADD_URI_SAFE_ATTR,mt):te,Qt="ADD_DATA_URI_TAGS"in e?M(I(Kt),e.ADD_DATA_URI_TAGS,mt):Kt,Gt="FORBID_CONTENTS"in e?M({},e.FORBID_CONTENTS,mt):Xt,Nt="FORBID_TAGS"in e?M({},e.FORBID_TAGS,mt):{},Dt="FORBID_ATTR"in e?M({},e.FORBID_ATTR,mt):{},Vt="USE_PROFILES"in e&&e.USE_PROFILES,Ot=!1!==e.ALLOW_ARIA_ATTR,Mt=!1!==e.ALLOW_DATA_ATTR,It=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ft=e.SAFE_FOR_TEMPLATES||!1,$t=e.WHOLE_DOCUMENT||!1,Pt=e.RETURN_DOM||!1,jt=e.RETURN_DOM_FRAGMENT||!1,Yt=e.RETURN_TRUSTED_TYPE||!1,Zt=e.FORCE_BODY||!1,zt=!1!==e.SANITIZE_DOM,Ut=e.SANITIZE_NAMED_PROPS||!1,qt=!1!==e.KEEP_CONTENT,Ht=e.IN_PLACE||!1,Tt=e.ALLOWED_URI_REGEXP||Tt,re=e.NAMESPACE||ie,e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Bt.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Bt.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Bt.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ft&&(Mt=!1),jt&&(Pt=!0),Vt&&(Et=M({},r(z)),At=[],!0===Vt.html&&(M(Et,$),M(At,U)),!0===Vt.svg&&(M(Et,R),M(At,W),M(At,H)),!0===Vt.svgFilters&&(M(Et,Z),M(At,W),M(At,H)),!0===Vt.mathMl&&(M(Et,j),M(At,q),M(At,H))),e.ADD_TAGS&&(Et===St&&(Et=I(Et)),M(Et,e.ADD_TAGS,mt)),e.ADD_ATTR&&(At===Lt&&(At=I(At)),M(At,e.ADD_ATTR,mt)),e.ADD_URI_SAFE_ATTR&&M(Jt,e.ADD_URI_SAFE_ATTR,mt),e.FORBID_CONTENTS&&(Gt===Xt&&(Gt=I(Gt)),M(Gt,e.FORBID_CONTENTS,mt)),qt&&(Et["#text"]=!0),$t&&M(Et,["html","head","body"]),Et.table&&(M(Et,["tbody"]),delete Nt.tbody),g&&g(e),he=e)},fe=M({},["mi","mo","mn","ms","mtext"]),ge=M({},["foreignobject","desc","title","annotation-xml"]),ye=M({},["title","style","font","a","script"]),me=M({},R);M(me,Z),M(me,P);var be=M({},j);M(be,Y);var _e=function(t){var e=D(t);e&&e.tagName||(e={namespaceURI:re,tagName:"template"});var n=C(t.tagName),i=C(e.tagName);return!!se[t.namespaceURI]&&(t.namespaceURI===ne?e.namespaceURI===ie?"svg"===n:e.namespaceURI===ee?"svg"===n&&("annotation-xml"===i||fe[i]):Boolean(me[n]):t.namespaceURI===ee?e.namespaceURI===ie?"math"===n:e.namespaceURI===ne?"math"===n&&ge[i]:Boolean(be[n]):t.namespaceURI===ie?!(e.namespaceURI===ne&&!ge[i])&&!(e.namespaceURI===ee&&!fe[i])&&!be[n]&&(ye[n]||!me[n]):!("application/xhtml+xml"!==yt||!se[t.namespaceURI]))},xe=function(t){w(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(De){try{t.outerHTML=ot}catch(De){t.remove()}}},ve=function(t,e){try{w(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(De){w(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!At[t])if(Pt||jt)try{xe(e)}catch(De){}else try{e.setAttribute(t,"")}catch(De){}},ke=function(t){var e,n;if(Zt)t="<remove></remove>"+t;else{var i=E(t,/^[\r\n\t ]+/);n=i&&i[0]}"application/xhtml+xml"===yt&&re===ie&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var r=st?st.createHTML(t):t;if(re===ie)try{e=(new f).parseFromString(r,yt)}catch(De){}if(!e||!e.documentElement){e=lt.createDocument(re,"template",null);try{e.documentElement.innerHTML=ae?ot:r}catch(De){}}var s=e.body||e.documentElement;return t&&n&&s.insertBefore(a.createTextNode(n),s.childNodes[0]||null),re===ie?dt.call(e,$t?"html":"body")[0]:$t?e.documentElement:s},we=function(t){return ht.call(t.ownerDocument||t,t,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT,null,!1)},Ce=function(t){return t instanceof p&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof d)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},Te=function(e){return"object"===t(c)?e instanceof c:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Ee=function(t,e,i){gt[t]&&v(gt[t],(function(t){t.call(n,e,i,he)}))},Se=function(t){var e;if(Ee("beforeSanitizeElements",t,null),Ce(t))return xe(t),!0;if(B(/[\u0080-\uFFFF]/,t.nodeName))return xe(t),!0;var i=mt(t.nodeName);if(Ee("uponSanitizeElement",t,{tagName:i,allowedTags:Et}),t.hasChildNodes()&&!Te(t.firstElementChild)&&(!Te(t.content)||!Te(t.content.firstElementChild))&&B(/<[/\w]/g,t.innerHTML)&&B(/<[/\w]/g,t.textContent))return xe(t),!0;if("select"===i&&B(/<template/i,t.innerHTML))return xe(t),!0;if(!Et[i]||Nt[i]){if(!Nt[i]&&Le(i)){if(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,i))return!1;if(Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(i))return!1}if(qt&&!Gt[i]){var r=D(t)||t.parentNode,a=x(t)||t.childNodes;if(a&&r)for(var s=a.length-1;s>=0;--s)r.insertBefore(b(a[s],!0),_(t))}return xe(t),!0}return t instanceof l&&!_e(t)?(xe(t),!0):"noscript"!==i&&"noembed"!==i||!B(/<\/no(script|embed)/i,t.innerHTML)?(Ft&&3===t.nodeType&&(e=t.textContent,e=S(e,bt," "),e=S(e,_t," "),e=S(e,xt," "),t.textContent!==e&&(w(n.removed,{element:t.cloneNode()}),t.textContent=e)),Ee("afterSanitizeElements",t,null),!1):(xe(t),!0)},Ae=function(t,e,n){if(zt&&("id"===e||"name"===e)&&(n in a||n in ue))return!1;if(Mt&&!Dt[e]&&B(vt,e));else if(Ot&&B(kt,e));else if(!At[e]||Dt[e]){if(!(Le(t)&&(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,t)||Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(t))&&(Bt.attributeNameCheck instanceof RegExp&&B(Bt.attributeNameCheck,e)||Bt.attributeNameCheck instanceof Function&&Bt.attributeNameCheck(e))||"is"===e&&Bt.allowCustomizedBuiltInElements&&(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,n)||Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(n))))return!1}else if(Jt[e]);else if(B(Tt,S(n,Ct,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==A(n,"data:")||!Qt[t])if(It&&!B(wt,S(n,Ct,"")));else if(n)return!1;return!0},Le=function(t){return t.indexOf("-")>0},Be=function(e){var i,r,a,s;Ee("beforeSanitizeAttributes",e,null);var o=e.attributes;if(o){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:At};for(s=o.length;s--;){var l=i=o[s],h=l.name,u=l.namespaceURI;if(r="value"===h?i.value:L(i.value),a=mt(h),c.attrName=a,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=void 0,Ee("uponSanitizeAttribute",e,c),r=c.attrValue,!c.forceKeepAttr&&(ve(h,e),c.keepAttr))if(B(/\/>/i,r))ve(h,e);else{Ft&&(r=S(r,bt," "),r=S(r,_t," "),r=S(r,xt," "));var d=mt(e.nodeName);if(Ae(d,a,r)){if(!Ut||"id"!==a&&"name"!==a||(ve(h,e),r=Wt+r),st&&"object"===t(y)&&"function"==typeof y.getAttributeType)if(u);else switch(y.getAttributeType(d,a)){case"TrustedHTML":r=st.createHTML(r);break;case"TrustedScriptURL":r=st.createScriptURL(r)}try{u?e.setAttributeNS(u,h,r):e.setAttribute(h,r),k(n.removed)}catch(De){}}}}Ee("afterSanitizeAttributes",e,null)}},Ne=function t(e){var n,i=we(e);for(Ee("beforeSanitizeShadowDOM",e,null);n=i.nextNode();)Ee("uponSanitizeShadowNode",n,null),Se(n)||(n.content instanceof s&&t(n.content),Be(n));Ee("afterSanitizeShadowDOM",e,null)};return n.sanitize=function(r){var a,o,l,h,u,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ae=!r)&&(r="\x3c!--\x3e"),"string"!=typeof r&&!Te(r)){if("function"!=typeof r.toString)throw N("toString is not a function");if("string"!=typeof(r=r.toString()))throw N("dirty is not a string, aborting")}if(!n.isSupported){if("object"===t(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof r)return e.toStaticHTML(r);if(Te(r))return e.toStaticHTML(r.outerHTML)}return r}if(Rt||pe(d),n.removed=[],"string"==typeof r&&(Ht=!1),Ht){if(r.nodeName){var p=mt(r.nodeName);if(!Et[p]||Nt[p])throw N("root node is forbidden and cannot be sanitized in-place")}}else if(r instanceof c)1===(o=(a=ke("\x3c!----\x3e")).ownerDocument.importNode(r,!0)).nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?a=o:a.appendChild(o);else{if(!Pt&&!Ft&&!$t&&-1===r.indexOf("<"))return st&&Yt?st.createHTML(r):r;if(!(a=ke(r)))return Pt?null:Yt?ot:""}a&&Zt&&xe(a.firstChild);for(var f=we(Ht?r:a);l=f.nextNode();)3===l.nodeType&&l===h||Se(l)||(l.content instanceof s&&Ne(l.content),Be(l),h=l);if(h=null,Ht)return r;if(Pt){if(jt)for(u=ut.call(a.ownerDocument);a.firstChild;)u.appendChild(a.firstChild);else u=a;return At.shadowroot&&(u=pt.call(i,u,!0)),u}var g=$t?a.outerHTML:a.innerHTML;return $t&&Et["!doctype"]&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&B(nt,a.ownerDocument.doctype.name)&&(g="<!DOCTYPE "+a.ownerDocument.doctype.name+">\n"+g),Ft&&(g=S(g,bt," "),g=S(g,_t," "),g=S(g,xt," ")),st&&Yt?st.createHTML(g):g},n.setConfig=function(t){pe(t),Rt=!0},n.clearConfig=function(){he=null,Rt=!1},n.isValidAttribute=function(t,e,n){he||pe({});var i=mt(t),r=mt(e);return Ae(i,r,n)},n.addHook=function(t,e){"function"==typeof e&&(gt[t]=gt[t]||[],w(gt[t],e))},n.removeHook=function(t){if(gt[t])return k(gt[t])},n.removeHooks=function(t){gt[t]&&(gt[t]=[])},n.removeAllHooks=function(){gt={}},n}return at()}()},6432:(t,e,n)=>{"use strict";n.d(e,{a:()=>Un,b:()=>qs,c:()=>jt,d:()=>Yn,e:()=>Zt,f:()=>Ks,g:()=>gi,h:()=>Sc,i:()=>xs,j:()=>Xi,k:()=>Ki,l:()=>Bt,m:()=>Yi,n:()=>It,o:()=>Np,p:()=>Ao,s:()=>wi});const i=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var i=Array.from("string"==typeof t?[t]:t);i[i.length-1]=i[i.length-1].replace(/\r?\n([\t ]*)$/,"");var r=i.reduce((function(t,e){var n=e.match(/\n([\t ]+|(?!\s).)/g);return n?t.concat(n.map((function(t){var e,n;return null!==(n=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==n?n:0}))):t}),[]);if(r.length){var a=new RegExp("\n[\t ]{"+Math.min.apply(Math,r)+"}","g");i=i.map((function(t){return t.replace(a,"\n")}))}i[0]=i[0].replace(/^\r?\n/,"");var s=i[0];return e.forEach((function(t,e){var n=s.match(/(?:^|\n)( *)$/),r=n?n[1]:"",a=t;"string"==typeof t&&t.includes("\n")&&(a=String(t).split("\n").map((function(t,e){return 0===e?t:""+r+t})).join("\n")),s+=a+i[e+1]})),s};var r=n(7484),a=n.n(r),s=n(7967),o=n(9373),l=n(7856),h=n.n(l),u=n(1610),d=n(1691);const p=(t,e)=>{const n=u.Z.parse(t);for(const i in e)n[i]=d.Z.channel.clamp[i](e[i]);return u.Z.stringify(n)},f=(t,e)=>{const n=u.Z.parse(t),i={};for(const r in e)e[r]&&(i[r]=n[r]+e[r]);return p(t,i)};var g=n(1883);const y=(t,e,n=0,i=1)=>{if("number"!=typeof t)return p(t,{a:e});const r=g.Z.set({r:d.Z.channel.clamp.r(t),g:d.Z.channel.clamp.g(e),b:d.Z.channel.clamp.b(n),a:d.Z.channel.clamp.a(i)});return u.Z.stringify(r)},m=(t,e,n=50)=>{const{r:i,g:r,b:a,a:s}=u.Z.parse(t),{r:o,g:c,b:l,a:h}=u.Z.parse(e),d=n/100,p=2*d-1,f=s-h,g=((p*f==-1?p:(p+f)/(1+p*f))+1)/2,m=1-g;return y(i*g+o*m,r*g+c*m,a*g+l*m,s*d+h*(1-d))},b=(t,e=100)=>{const n=u.Z.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,m(n,t,e)};var _=n(7201),x=n(5920),v=n(2454),k="comm",w="rule",C="decl",T=Math.abs,E=String.fromCharCode;Object.assign;function S(t){return t.trim()}function A(t,e,n){return t.replace(e,n)}function L(t,e){return t.indexOf(e)}function B(t,e){return 0|t.charCodeAt(e)}function N(t,e,n){return t.slice(e,n)}function D(t){return t.length}function O(t,e){return e.push(t),t}function M(t,e){for(var n="",i=0;i<t.length;i++)n+=e(t[i],i,t,e)||"";return n}function I(t,e,n,i){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case C:return t.return=t.return||t.value;case k:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,i)+"}";case w:if(!D(t.value=t.props.join(",")))return""}return D(n=M(t.children,i))?t.return=t.value+"{"+n+"}":""}var F=1,$=1,R=0,Z=0,P=0,j="";function Y(t,e,n,i,r,a,s,o){return{value:t,root:e,parent:n,type:i,props:r,children:a,line:F,column:$,length:s,return:"",siblings:o}}function z(){return P=Z>0?B(j,--Z):0,$--,10===P&&($=1,F--),P}function U(){return P=Z<R?B(j,Z++):0,$++,10===P&&($=1,F++),P}function W(){return B(j,Z)}function q(){return Z}function H(t,e){return N(j,t,e)}function V(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function G(t){return F=$=1,R=D(j=t),Z=0,[]}function X(t){return j="",t}function Q(t){return S(H(Z-1,tt(91===t?t+2:40===t?t+1:t)))}function K(t){for(;(P=W())&&P<33;)U();return V(t)>2||V(P)>3?"":" "}function J(t,e){for(;--e&&U()&&!(P<48||P>102||P>57&&P<65||P>70&&P<97););return H(t,q()+(e<6&&32==W()&&32==U()))}function tt(t){for(;U();)switch(P){case t:return Z;case 34:case 39:34!==t&&39!==t&&tt(P);break;case 40:41===t&&tt(t);break;case 92:U()}return Z}function et(t,e){for(;U()&&t+P!==57&&(t+P!==84||47!==W()););return"/*"+H(e,Z-1)+"*"+E(47===t?t:U())}function nt(t){for(;!V(W());)U();return H(t,Z)}function it(t){return X(rt("",null,null,null,[""],t=G(t),0,[0],t))}function rt(t,e,n,i,r,a,s,o,c){for(var l=0,h=0,u=s,d=0,p=0,f=0,g=1,y=1,m=1,b=0,_="",x=r,v=a,k=i,w=_;y;)switch(f=b,b=U()){case 40:if(108!=f&&58==B(w,u-1)){-1!=L(w+=A(Q(b),"&","&\f"),"&\f")&&(m=-1);break}case 34:case 39:case 91:w+=Q(b);break;case 9:case 10:case 13:case 32:w+=K(f);break;case 92:w+=J(q()-1,7);continue;case 47:switch(W()){case 42:case 47:O(st(et(U(),q()),e,n,c),c);break;default:w+="/"}break;case 123*g:o[l++]=D(w)*m;case 125*g:case 59:case 0:switch(b){case 0:case 125:y=0;case 59+h:-1==m&&(w=A(w,/\f/g,"")),p>0&&D(w)-u&&O(p>32?ot(w+";",i,n,u-1,c):ot(A(w," ","")+";",i,n,u-2,c),c);break;case 59:w+=";";default:if(O(k=at(w,e,n,l,h,r,o,_,x=[],v=[],u,a),a),123===b)if(0===h)rt(w,e,k,k,x,a,u,o,v);else switch(99===d&&110===B(w,3)?100:d){case 100:case 108:case 109:case 115:rt(t,k,k,i&&O(at(t,k,k,0,0,r,o,_,r,x=[],u,v),v),r,v,u,o,i?x:v);break;default:rt(w,k,k,k,[""],v,0,o,v)}}l=h=p=0,g=m=1,_=w="",u=s;break;case 58:u=1+D(w),p=f;default:if(g<1)if(123==b)--g;else if(125==b&&0==g++&&125==z())continue;switch(w+=E(b),b*g){case 38:m=h>0?1:(w+="\f",-1);break;case 44:o[l++]=(D(w)-1)*m,m=1;break;case 64:45===W()&&(w+=Q(U())),d=W(),h=u=D(_=w+=nt(q())),b++;break;case 45:45===f&&2==D(w)&&(g=0)}}return a}function at(t,e,n,i,r,a,s,o,c,l,h,u){for(var d=r-1,p=0===r?a:[""],f=function(t){return t.length}(p),g=0,y=0,m=0;g<i;++g)for(var b=0,_=N(t,d+1,d=T(y=s[g])),x=t;b<f;++b)(x=S(y>0?p[b]+" "+_:A(_,/&\f/g,p[b])))&&(c[m++]=x);return Y(t,e,n,0===r?w:o,c,l,h,u)}function st(t,e,n,i){return Y(t,e,n,k,E(P),N(t,2,-2),0,i)}function ot(t,e,n,i,r){return Y(t,e,n,C,N(t,0,i),N(t,i+1,-1),i,r)}var ct=n(277),lt=n(5625),ht=n(9354);const ut=[];for(let c=0;c<256;++c)ut.push((c+256).toString(16).slice(1));function dt(t,e=0){return(ut[t[e+0]]+ut[t[e+1]]+ut[t[e+2]]+ut[t[e+3]]+"-"+ut[t[e+4]]+ut[t[e+5]]+"-"+ut[t[e+6]]+ut[t[e+7]]+"-"+ut[t[e+8]]+ut[t[e+9]]+"-"+ut[t[e+10]]+ut[t[e+11]]+ut[t[e+12]]+ut[t[e+13]]+ut[t[e+14]]+ut[t[e+15]]).toLowerCase()}const pt=/^(?:[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;const ft=function(t){return"string"==typeof t&&pt.test(t)};const gt=function(t){if(!ft(t))throw TypeError("Invalid UUID");let e;const n=new Uint8Array(16);return n[0]=(e=parseInt(t.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(t.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(t.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(t.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(t.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 yt(t,e,n,i){switch(t){case 0:return e&n^~e&i;case 1:case 3:return e^n^i;case 2:return e&n^e&i^n&i}}function mt(t,e){return t<<e|t>>>32-e}const bt=function(t){const e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const i=t.length/4+2,r=Math.ceil(i/16),a=new Array(r);for(let s=0;s<r;++s){const e=new Uint32Array(16);for(let n=0;n<16;++n)e[n]=t[64*s+4*n]<<24|t[64*s+4*n+1]<<16|t[64*s+4*n+2]<<8|t[64*s+4*n+3];a[s]=e}a[r-1][14]=8*(t.length-1)/Math.pow(2,32),a[r-1][14]=Math.floor(a[r-1][14]),a[r-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<r;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=a[s][e];for(let e=16;e<80;++e)t[e]=mt(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let i=n[0],r=n[1],o=n[2],c=n[3],l=n[4];for(let n=0;n<80;++n){const a=Math.floor(n/20),s=mt(i,5)+yt(a,r,o,c)+l+e[a]+t[n]>>>0;l=c,c=o,o=mt(r,30)>>>0,r=i,i=s}n[0]=n[0]+i>>>0,n[1]=n[1]+r>>>0,n[2]=n[2]+o>>>0,n[3]=n[3]+c>>>0,n[4]=n[4]+l>>>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]]},_t=function(t,e,n){function i(t,i,r,a){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n));return e}(t)),"string"==typeof i&&(i=gt(i)),16!==(null===(s=i)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(i),o.set(t,i.length),o=n(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,r){a=a||0;for(let t=0;t<16;++t)r[a+t]=o[t];return r}return dt(o)}try{i.name=t}catch(r){}return i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",i}("v5",80,bt),xt=_t;n(1518),n(6225);var vt=n(3349),kt=(n(3352),n(2930),n(9542)),wt=n.n(kt),Ct=n(285),Tt=n.n(Ct),Et=n(8734),St=n.n(Et),At=n(9697);const Lt={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Bt={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},Nt=function(t="fatal"){let e=Lt.fatal;"string"==typeof t?(t=t.toLowerCase())in Lt&&(e=Lt[t]):"number"==typeof t&&(e=t),Bt.trace=()=>{},Bt.debug=()=>{},Bt.info=()=>{},Bt.warn=()=>{},Bt.error=()=>{},Bt.fatal=()=>{},e<=Lt.fatal&&(Bt.fatal=console.error?console.error.bind(console,Dt("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",Dt("FATAL"))),e<=Lt.error&&(Bt.error=console.error?console.error.bind(console,Dt("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",Dt("ERROR"))),e<=Lt.warn&&(Bt.warn=console.warn?console.warn.bind(console,Dt("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",Dt("WARN"))),e<=Lt.info&&(Bt.info=console.info?console.info.bind(console,Dt("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",Dt("INFO"))),e<=Lt.debug&&(Bt.debug=console.debug?console.debug.bind(console,Dt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Dt("DEBUG"))),e<=Lt.trace&&(Bt.trace=console.debug?console.debug.bind(console,Dt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Dt("TRACE")))},Dt=t=>`%c${a()().format("ss.SSS")} : ${t} : `,Ot=t=>h().sanitize(t),Mt=(t,e)=>{var n;if(!1!==(null==(n=e.flowchart)?void 0:n.htmlLabels)){const n=e.securityLevel;"antiscript"===n||"strict"===n?t=Ot(t):"loose"!==n&&(t=(t=(t=Rt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=$t(t))}return t},It=(t,e)=>t?t=e.dompurifyConfig?h().sanitize(Mt(t,e),e.dompurifyConfig).toString():h().sanitize(Mt(t,e),{FORBID_TAGS:["style"]}).toString():t,Ft=/<br\s*\/?>/gi,$t=t=>t.replace(/#br#/g,"<br/>"),Rt=t=>t.replace(Ft,"#br#"),Zt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),Pt=function(t){let e=t;if(t.split("~").length-1>=2){let t=e;do{e=t,t=e.replace(/~([^\s,:;]+)~/,"<$1>")}while(t!=e);return Pt(t)}return e},jt={getRows:t=>{if(!t)return[""];return Rt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:It,sanitizeTextOrArray:(t,e)=>"string"==typeof t?It(t,e):t.flat().map((t=>It(t,e))),hasBreaks:t=>Ft.test(t),splitBreaks:t=>t.split(Ft),lineBreakRegex:Ft,removeScript:Ot,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:Zt},Yt=(t,e)=>f(t,e?{s:-40,l:10}:{s:-40,l:-10}),zt="#ffffff",Ut="#f2f2f2";let Wt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||f(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||f(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Yt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Yt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||b(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||b(this.tertiaryColor),this.lineColor=this.lineColor||b(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,_.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,_.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||b(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,x.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,_.Z)(this["cScale"+e],75);else for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,_.Z)(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||b(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||(0,x.Z)(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||(0,_.Z)(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;const t=this.darkMode?-4:-1;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||f(this.mainBkg,{h:180,s:-15,l:t*(5+3*e)}),this["surfacePeer"+e]=this["surfacePeer"+e]||f(this.mainBkg,{h:180,s:-15,l:t*(8+3*e)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||f(this.primaryColor,{h:64}),this.fillType3=this.fillType3||f(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||f(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||f(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||f(this.primaryColor,{h:128}),this.fillType7=this.fillType7||f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||f(this.primaryColor,{l:-10}),this.pie5=this.pie5||f(this.secondaryColor,{l:-10}),this.pie6=this.pie6||f(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||f(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,_.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let qt=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,x.Z)(this.primaryColor,16),this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=b(this.background),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,x.Z)(b("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=y(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,_.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=y(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=y(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,x.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,x.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,x.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||b(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScalePeer"+t]=this["cScalePeer"+t]||(0,x.Z)(this["cScale"+t],10);for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,s:-30,l:-(4*t-10)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,s:-30,l:-(4*t-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,_.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,x.Z)(this.secondaryColor,20),this.git1=(0,x.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,x.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,x.Z)(this.pie4||f(this.primaryColor,{h:-30}),20),this.git4=(0,x.Z)(this.pie5||f(this.primaryColor,{h:-60}),20),this.git5=(0,x.Z)(this.pie6||f(this.primaryColor,{h:-90}),10),this.git6=(0,x.Z)(this.pie7||f(this.primaryColor,{h:60}),10),this.git7=(0,x.Z)(this.pie8||f(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,x.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,x.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Ht=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=f(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=y(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,_.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,_.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,_.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t],{h:180});for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,l:-(7+5*t)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||b(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||b(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,x.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||f(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||f(this.primaryColor,{l:-10}),this.pie5=this.pie5||f(this.secondaryColor,{l:-30}),this.pie6=this.pie6||f(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||f(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,_.Z)(b(this.git0),25),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||b(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||b(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Vt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,x.Z)("#cde498",10),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.primaryColor),this.lineColor=b(this.background),this.textColor=b(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,_.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,_.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,_.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,s:-30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,s:-30,l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=(0,_.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||f(this.primaryColor,{l:-30}),this.pie5=this.pie5||f(this.secondaryColor,{l:-30}),this.pie6=this.pie6||f(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||f(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class Gt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,x.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,x.Z)(this.contrast,55),this.border2=this.contrast,this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||b(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this.darkMode?this["cScalePeer"+t]=this["cScalePeer"+t]||(0,x.Z)(this["cScale"+t],10):this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=(0,x.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=(0,x.Z)(this.contrast,30),this.sectionBkgColor2=(0,x.Z)(this.contrast,30),this.taskBorderColor=(0,_.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,x.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,_.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,_.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||f(this.primaryColor,{h:-30}),this.git4=this.pie5||f(this.primaryColor,{h:-60}),this.git5=this.pie6||f(this.primaryColor,{h:-90}),this.git6=this.pie7||f(this.primaryColor,{h:60}),this.git7=this.pie8||f(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Xt={base:{getThemeVariables:t=>{const e=new Wt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new qt;return e.calculate(t),e}},default:{getThemeVariables:t=>{const e=new Ht;return e.calculate(t),e}},forest:{getThemeVariables:t=>{const e=new Vt;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Gt;return e.calculate(t),e}}},Qt={theme:"default",themeVariables:Xt.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},sequence:{hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",tickInterval:void 0,useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},timeline:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},class:{titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},gitGraph:{titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},fontSize:16};Qt.class&&(Qt.class.arrowMarkerAbsolute=Qt.arrowMarkerAbsolute),Qt.gitGraph&&(Qt.gitGraph.arrowMarkerAbsolute=Qt.arrowMarkerAbsolute);const Kt=(t,e="")=>Object.keys(t).reduce(((n,i)=>Array.isArray(t[i])?n:"object"==typeof t[i]&&null!==t[i]?[...n,e+i,...Kt(t[i],"")]:[...n,e+i]),[]),Jt=Kt(Qt,""),te=Qt;function ee(t){return null==t}var ne={isNothing:ee,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:ee(t)?[]:[t]},repeat:function(t,e){var n,i="";for(n=0;n<e;n+=1)i+=t;return i},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var n,i,r,a;if(e)for(n=0,i=(a=Object.keys(e)).length;n<i;n+=1)t[r=a[n]]=e[r];return t}};function ie(t,e){var n="",i=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),i+" "+n):i}function re(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=ie(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}re.prototype=Object.create(Error.prototype),re.prototype.constructor=re,re.prototype.toString=function(t){return this.name+": "+ie(this,t)};var ae=re;function se(t,e,n,i,r){var a="",s="",o=Math.floor(r/2)-1;return i-e>o&&(e=i-o+(a=" ... ").length),n-i>o&&(n=i+o-(s=" ...").length),{str:a+t.slice(e,n).replace(/\t/g,"\u2192")+s,pos:i-e+a.length}}function oe(t,e){return ne.repeat(" ",e-t.length)+t}var ce=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var n,i=/\r?\n|\r|\0/g,r=[0],a=[],s=-1;n=i.exec(t.buffer);)a.push(n.index),r.push(n.index+n[0].length),t.position<=n.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var o,c,l="",h=Math.min(t.line+e.linesAfter,a.length).toString().length,u=e.maxLength-(e.indent+h+3);for(o=1;o<=e.linesBefore&&!(s-o<0);o++)c=se(t.buffer,r[s-o],a[s-o],t.position-(r[s]-r[s-o]),u),l=ne.repeat(" ",e.indent)+oe((t.line-o+1).toString(),h)+" | "+c.str+"\n"+l;for(c=se(t.buffer,r[s],a[s],t.position,u),l+=ne.repeat(" ",e.indent)+oe((t.line+1).toString(),h)+" | "+c.str+"\n",l+=ne.repeat("-",e.indent+h+3+c.pos)+"^\n",o=1;o<=e.linesAfter&&!(s+o>=a.length);o++)c=se(t.buffer,r[s+o],a[s+o],t.position-(r[s]-r[s+o]),u),l+=ne.repeat(" ",e.indent)+oe((t.line+o+1).toString(),h)+" | "+c.str+"\n";return l.replace(/\n$/,"")},le=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],he=["scalar","sequence","mapping"];var ue=function(t,e){var n,i;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===le.indexOf(e))throw new ae('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(n=e.styleAliases||null,i={},null!==n&&Object.keys(n).forEach((function(t){n[t].forEach((function(e){i[String(e)]=t}))})),i),-1===he.indexOf(this.kind))throw new ae('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function de(t,e){var n=[];return t[e].forEach((function(t){var e=n.length;n.forEach((function(n,i){n.tag===t.tag&&n.kind===t.kind&&n.multi===t.multi&&(e=i)})),n[e]=t})),n}function pe(t){return this.extend(t)}pe.prototype.extend=function(t){var e=[],n=[];if(t instanceof ue)n.push(t);else if(Array.isArray(t))n=n.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new ae("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(n=n.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof ue))throw new ae("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new ae("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new ae("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(t){if(!(t instanceof ue))throw new ae("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(pe.prototype);return i.implicit=(this.implicit||[]).concat(e),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=de(i,"implicit"),i.compiledExplicit=de(i,"explicit"),i.compiledTypeMap=function(){var t,e,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(t){t.multi?(n.multi[t.kind].push(t),n.multi.fallback.push(t)):n[t.kind][t.tag]=n.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(i);return n}(i.compiledImplicit,i.compiledExplicit),i};var fe=new pe({explicit:[new ue("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new ue("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new ue("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var ge=new ue("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var ye=new ue("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function me(t){return 48<=t&&t<=55}function be(t){return 48<=t&&t<=57}var _e=new ue("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,i=t.length,r=0,a=!1;if(!i)return!1;if("-"!==(e=t[r])&&"+"!==e||(e=t[++r]),"0"===e){if(r+1===i)return!0;if("b"===(e=t[++r])){for(r++;r<i;r++)if("_"!==(e=t[r])){if("0"!==e&&"1"!==e)return!1;a=!0}return a&&"_"!==e}if("x"===e){for(r++;r<i;r++)if("_"!==(e=t[r])){if(!(48<=(n=t.charCodeAt(r))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;a=!0}return a&&"_"!==e}if("o"===e){for(r++;r<i;r++)if("_"!==(e=t[r])){if(!me(t.charCodeAt(r)))return!1;a=!0}return a&&"_"!==e}}if("_"===e)return!1;for(;r<i;r++)if("_"!==(e=t[r])){if(!be(t.charCodeAt(r)))return!1;a=!0}return!(!a||"_"===e)},construct:function(t){var e,n=t,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(e=n[0])&&"+"!==e||("-"===e&&(i=-1),e=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===e){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!ne.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),xe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var ve=/^[-+]?[0-9]+e/;var ke=new ue("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!xe.test(t)||"_"===t[t.length-1])},construct:function(t){var e,n;return n="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:n*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||ne.isNegativeZero(t))},represent:function(t,e){var n;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ne.isNegativeZero(t))return"-0.0";return n=t.toString(10),ve.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),we=fe.extend({implicit:[ge,ye,_e,ke]}),Ce=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Te=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var Ee=new ue("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Ce.exec(t)||null!==Te.exec(t))},construct:function(t){var e,n,i,r,a,s,o,c,l=0,h=null;if(null===(e=Ce.exec(t))&&(e=Te.exec(t)),null===e)throw new Error("Date resolve error");if(n=+e[1],i=+e[2]-1,r=+e[3],!e[4])return new Date(Date.UTC(n,i,r));if(a=+e[4],s=+e[5],o=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),c=new Date(Date.UTC(n,i,r,a,s,o,l)),h&&c.setTime(c.getTime()-h),c},instanceOf:Date,represent:function(t){return t.toISOString()}});var Se=new ue("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Ae="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Le=new ue("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,i=0,r=t.length,a=Ae;for(n=0;n<r;n++)if(!((e=a.indexOf(t.charAt(n)))>64)){if(e<0)return!1;i+=6}return i%8==0},construct:function(t){var e,n,i=t.replace(/[\r\n=]/g,""),r=i.length,a=Ae,s=0,o=[];for(e=0;e<r;e++)e%4==0&&e&&(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)),s=s<<6|a.indexOf(i.charAt(e));return 0===(n=r%4*6)?(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)):18===n?(o.push(s>>10&255),o.push(s>>2&255)):12===n&&o.push(s>>4&255),new Uint8Array(o)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,n,i="",r=0,a=t.length,s=Ae;for(e=0;e<a;e++)e%3==0&&e&&(i+=s[r>>18&63],i+=s[r>>12&63],i+=s[r>>6&63],i+=s[63&r]),r=(r<<8)+t[e];return 0===(n=a%3)?(i+=s[r>>18&63],i+=s[r>>12&63],i+=s[r>>6&63],i+=s[63&r]):2===n?(i+=s[r>>10&63],i+=s[r>>4&63],i+=s[r<<2&63],i+=s[64]):1===n&&(i+=s[r>>2&63],i+=s[r<<4&63],i+=s[64],i+=s[64]),i}}),Be=Object.prototype.hasOwnProperty,Ne=Object.prototype.toString;var De=new ue("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,i,r,a,s=[],o=t;for(e=0,n=o.length;e<n;e+=1){if(i=o[e],a=!1,"[object Object]"!==Ne.call(i))return!1;for(r in i)if(Be.call(i,r)){if(a)return!1;a=!0}if(!a)return!1;if(-1!==s.indexOf(r))return!1;s.push(r)}return!0},construct:function(t){return null!==t?t:[]}}),Oe=Object.prototype.toString;var Me=new ue("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,i,r,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1){if(i=s[e],"[object Object]"!==Oe.call(i))return!1;if(1!==(r=Object.keys(i)).length)return!1;a[e]=[r[0],i[r[0]]]}return!0},construct:function(t){if(null===t)return[];var e,n,i,r,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1)i=s[e],r=Object.keys(i),a[e]=[r[0],i[r[0]]];return a}}),Ie=Object.prototype.hasOwnProperty;var Fe=new ue("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,n=t;for(e in n)if(Ie.call(n,e)&&null!==n[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),$e=we.extend({implicit:[Ee,Se],explicit:[Le,De,Me,Fe]}),Re=Object.prototype.hasOwnProperty,Ze=1,Pe=2,je=3,Ye=4,ze=1,Ue=2,We=3,qe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,He=/[\x85\u2028\u2029]/,Ve=/[,\[\]\{\}]/,Ge=/^(?:!|!!|![a-z\-]+!)$/i,Xe=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Qe(t){return Object.prototype.toString.call(t)}function Ke(t){return 10===t||13===t}function Je(t){return 9===t||32===t}function tn(t){return 9===t||32===t||10===t||13===t}function en(t){return 44===t||91===t||93===t||123===t||125===t}function nn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function rn(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function an(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var sn=new Array(256),on=new Array(256),cn=0;cn<256;cn++)sn[cn]=rn(cn)?1:0,on[cn]=rn(cn);function ln(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||$e,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function hn(t,e){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=ce(n),new ae(e,n)}function un(t,e){throw hn(t,e)}function dn(t,e){t.onWarning&&t.onWarning.call(null,hn(t,e))}var pn={YAML:function(t,e,n){var i,r,a;null!==t.version&&un(t,"duplication of %YAML directive"),1!==n.length&&un(t,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&un(t,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),a=parseInt(i[2],10),1!==r&&un(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=a<2,1!==a&&2!==a&&dn(t,"unsupported YAML version of the document")},TAG:function(t,e,n){var i,r;2!==n.length&&un(t,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],Ge.test(i)||un(t,"ill-formed tag handle (first argument) of the TAG directive"),Re.call(t.tagMap,i)&&un(t,'there is a previously declared suffix for "'+i+'" tag handle'),Xe.test(r)||un(t,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(a){un(t,"tag prefix is malformed: "+r)}t.tagMap[i]=r}};function fn(t,e,n,i){var r,a,s,o;if(e<n){if(o=t.input.slice(e,n),i)for(r=0,a=o.length;r<a;r+=1)9===(s=o.charCodeAt(r))||32<=s&&s<=1114111||un(t,"expected valid JSON character");else qe.test(o)&&un(t,"the stream contains non-printable characters");t.result+=o}}function gn(t,e,n,i){var r,a,s,o;for(ne.isObject(n)||un(t,"cannot merge mappings; the provided source object is unacceptable"),s=0,o=(r=Object.keys(n)).length;s<o;s+=1)a=r[s],Re.call(e,a)||(e[a]=n[a],i[a]=!0)}function yn(t,e,n,i,r,a,s,o,c){var l,h;if(Array.isArray(r))for(l=0,h=(r=Array.prototype.slice.call(r)).length;l<h;l+=1)Array.isArray(r[l])&&un(t,"nested arrays are not supported inside keys"),"object"==typeof r&&"[object Object]"===Qe(r[l])&&(r[l]="[object Object]");if("object"==typeof r&&"[object Object]"===Qe(r)&&(r="[object Object]"),r=String(r),null===e&&(e={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(a))for(l=0,h=a.length;l<h;l+=1)gn(t,e,a[l],n);else gn(t,e,a,n);else t.json||Re.call(n,r)||!Re.call(e,r)||(t.line=s||t.line,t.lineStart=o||t.lineStart,t.position=c||t.position,un(t,"duplicated mapping key")),"__proto__"===r?Object.defineProperty(e,r,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[r]=a,delete n[r];return e}function mn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):un(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function bn(t,e,n){for(var i=0,r=t.input.charCodeAt(t.position);0!==r;){for(;Je(r);)9===r&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),r=t.input.charCodeAt(++t.position);if(e&&35===r)do{r=t.input.charCodeAt(++t.position)}while(10!==r&&13!==r&&0!==r);if(!Ke(r))break;for(mn(t),r=t.input.charCodeAt(t.position),i++,t.lineIndent=0;32===r;)t.lineIndent++,r=t.input.charCodeAt(++t.position)}return-1!==n&&0!==i&&t.lineIndent<n&&dn(t,"deficient indentation"),i}function _n(t){var e,n=t.position;return!(45!==(e=t.input.charCodeAt(n))&&46!==e||e!==t.input.charCodeAt(n+1)||e!==t.input.charCodeAt(n+2)||(n+=3,0!==(e=t.input.charCodeAt(n))&&!tn(e)))}function xn(t,e){1===e?t.result+=" ":e>1&&(t.result+=ne.repeat("\n",e-1))}function vn(t,e){var n,i,r=t.tag,a=t.anchor,s=[],o=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),i=t.input.charCodeAt(t.position);0!==i&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,un(t,"tab characters must not be used in indentation")),45===i)&&tn(t.input.charCodeAt(t.position+1));)if(o=!0,t.position++,bn(t,!0,-1)&&t.lineIndent<=e)s.push(null),i=t.input.charCodeAt(t.position);else if(n=t.line,Cn(t,e,je,!1,!0),s.push(t.result),bn(t,!0,-1),i=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>e)&&0!==i)un(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!o&&(t.tag=r,t.anchor=a,t.kind="sequence",t.result=s,!0)}function kn(t){var e,n,i,r,a=!1,s=!1;if(33!==(r=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&un(t,"duplication of a tag property"),60===(r=t.input.charCodeAt(++t.position))?(a=!0,r=t.input.charCodeAt(++t.position)):33===r?(s=!0,n="!!",r=t.input.charCodeAt(++t.position)):n="!",e=t.position,a){do{r=t.input.charCodeAt(++t.position)}while(0!==r&&62!==r);t.position<t.length?(i=t.input.slice(e,t.position),r=t.input.charCodeAt(++t.position)):un(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==r&&!tn(r);)33===r&&(s?un(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(e-1,t.position+1),Ge.test(n)||un(t,"named tag handle cannot contain such characters"),s=!0,e=t.position+1)),r=t.input.charCodeAt(++t.position);i=t.input.slice(e,t.position),Ve.test(i)&&un(t,"tag suffix cannot contain flow indicator characters")}i&&!Xe.test(i)&&un(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(o){un(t,"tag name is malformed: "+i)}return a?t.tag=i:Re.call(t.tagMap,n)?t.tag=t.tagMap[n]+i:"!"===n?t.tag="!"+i:"!!"===n?t.tag="tag:yaml.org,2002:"+i:un(t,'undeclared tag handle "'+n+'"'),!0}function wn(t){var e,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&un(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!tn(n)&&!en(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&un(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Cn(t,e,n,i,r){var a,s,o,c,l,h,u,d,p,f=1,g=!1,y=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=o=Ye===n||je===n,i&&bn(t,!0,-1)&&(g=!0,t.lineIndent>e?f=1:t.lineIndent===e?f=0:t.lineIndent<e&&(f=-1)),1===f)for(;kn(t)||wn(t);)bn(t,!0,-1)?(g=!0,o=a,t.lineIndent>e?f=1:t.lineIndent===e?f=0:t.lineIndent<e&&(f=-1)):o=!1;if(o&&(o=g||r),1!==f&&Ye!==n||(d=Ze===n||Pe===n?e:e+1,p=t.position-t.lineStart,1===f?o&&(vn(t,p)||function(t,e,n){var i,r,a,s,o,c,l,h=t.tag,u=t.anchor,d={},p=Object.create(null),f=null,g=null,y=null,m=!1,b=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),l=t.input.charCodeAt(t.position);0!==l;){if(m||-1===t.firstTabInLine||(t.position=t.firstTabInLine,un(t,"tab characters must not be used in indentation")),i=t.input.charCodeAt(t.position+1),a=t.line,63!==l&&58!==l||!tn(i)){if(s=t.line,o=t.lineStart,c=t.position,!Cn(t,n,Pe,!1,!0))break;if(t.line===a){for(l=t.input.charCodeAt(t.position);Je(l);)l=t.input.charCodeAt(++t.position);if(58===l)tn(l=t.input.charCodeAt(++t.position))||un(t,"a whitespace character is expected after the key-value separator within a block mapping"),m&&(yn(t,d,p,f,g,null,s,o,c),f=g=y=null),b=!0,m=!1,r=!1,f=t.tag,g=t.result;else{if(!b)return t.tag=h,t.anchor=u,!0;un(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!b)return t.tag=h,t.anchor=u,!0;un(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===l?(m&&(yn(t,d,p,f,g,null,s,o,c),f=g=y=null),b=!0,m=!0,r=!0):m?(m=!1,r=!0):un(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,l=i;if((t.line===a||t.lineIndent>e)&&(m&&(s=t.line,o=t.lineStart,c=t.position),Cn(t,e,Ye,!0,r)&&(m?g=t.result:y=t.result),m||(yn(t,d,p,f,g,y,s,o,c),f=g=y=null),bn(t,!0,-1),l=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&0!==l)un(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return m&&yn(t,d,p,f,g,null,s,o,c),b&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),b}(t,p,d))||function(t,e){var n,i,r,a,s,o,c,l,h,u,d,p,f=!0,g=t.tag,y=t.anchor,m=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))s=93,l=!1,a=[];else{if(123!==p)return!1;s=125,l=!0,a={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),p=t.input.charCodeAt(++t.position);0!==p;){if(bn(t,!0,e),(p=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=g,t.anchor=y,t.kind=l?"mapping":"sequence",t.result=a,!0;f?44===p&&un(t,"expected the node content, but found ','"):un(t,"missed comma between flow collection entries"),d=null,o=c=!1,63===p&&tn(t.input.charCodeAt(t.position+1))&&(o=c=!0,t.position++,bn(t,!0,e)),n=t.line,i=t.lineStart,r=t.position,Cn(t,e,Ze,!1,!0),u=t.tag,h=t.result,bn(t,!0,e),p=t.input.charCodeAt(t.position),!c&&t.line!==n||58!==p||(o=!0,p=t.input.charCodeAt(++t.position),bn(t,!0,e),Cn(t,e,Ze,!1,!0),d=t.result),l?yn(t,a,m,u,h,d,n,i,r):o?a.push(yn(t,null,m,u,h,d,n,i,r)):a.push(h),bn(t,!0,e),44===(p=t.input.charCodeAt(t.position))?(f=!0,p=t.input.charCodeAt(++t.position)):f=!1}un(t,"unexpected end of the stream within a flow collection")}(t,d)?y=!0:(s&&function(t,e){var n,i,r,a,s,o=ze,c=!1,l=!1,h=e,u=0,d=!1;if(124===(a=t.input.charCodeAt(t.position)))i=!1;else{if(62!==a)return!1;i=!0}for(t.kind="scalar",t.result="";0!==a;)if(43===(a=t.input.charCodeAt(++t.position))||45===a)ze===o?o=43===a?We:Ue:un(t,"repeat of a chomping mode identifier");else{if(!((r=48<=(s=a)&&s<=57?s-48:-1)>=0))break;0===r?un(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?un(t,"repeat of an indentation width identifier"):(h=e+r-1,l=!0)}if(Je(a)){do{a=t.input.charCodeAt(++t.position)}while(Je(a));if(35===a)do{a=t.input.charCodeAt(++t.position)}while(!Ke(a)&&0!==a)}for(;0!==a;){for(mn(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!l||t.lineIndent<h)&&32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position);if(!l&&t.lineIndent>h&&(h=t.lineIndent),Ke(a))u++;else{if(t.lineIndent<h){o===We?t.result+=ne.repeat("\n",c?1+u:u):o===ze&&c&&(t.result+="\n");break}for(i?Je(a)?(d=!0,t.result+=ne.repeat("\n",c?1+u:u)):d?(d=!1,t.result+=ne.repeat("\n",u+1)):0===u?c&&(t.result+=" "):t.result+=ne.repeat("\n",u):t.result+=ne.repeat("\n",c?1+u:u),c=!0,l=!0,u=0,n=t.position;!Ke(a)&&0!==a;)a=t.input.charCodeAt(++t.position);fn(t,n,t.position,!1)}}return!0}(t,d)||function(t,e){var n,i,r;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(fn(t,i,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;i=t.position,t.position++,r=t.position}else Ke(n)?(fn(t,i,r,!0),xn(t,bn(t,!1,e)),i=r=t.position):t.position===t.lineStart&&_n(t)?un(t,"unexpected end of the document within a single quoted scalar"):(t.position++,r=t.position);un(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var n,i,r,a,s,o,c;if(34!==(o=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(o=t.input.charCodeAt(t.position));){if(34===o)return fn(t,n,t.position,!0),t.position++,!0;if(92===o){if(fn(t,n,t.position,!0),Ke(o=t.input.charCodeAt(++t.position)))bn(t,!1,e);else if(o<256&&sn[o])t.result+=on[o],t.position++;else if((s=120===(c=o)?2:117===c?4:85===c?8:0)>0){for(r=s,a=0;r>0;r--)(s=nn(o=t.input.charCodeAt(++t.position)))>=0?a=(a<<4)+s:un(t,"expected hexadecimal character");t.result+=an(a),t.position++}else un(t,"unknown escape sequence");n=i=t.position}else Ke(o)?(fn(t,n,i,!0),xn(t,bn(t,!1,e)),n=i=t.position):t.position===t.lineStart&&_n(t)?un(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}un(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?y=!0:!function(t){var e,n,i;if(42!==(i=t.input.charCodeAt(t.position)))return!1;for(i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!tn(i)&&!en(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&un(t,"name of an alias node must contain at least one character"),n=t.input.slice(e,t.position),Re.call(t.anchorMap,n)||un(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],bn(t,!0,-1),!0}(t)?function(t,e,n){var i,r,a,s,o,c,l,h,u=t.kind,d=t.result;if(tn(h=t.input.charCodeAt(t.position))||en(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(tn(i=t.input.charCodeAt(t.position+1))||n&&en(i)))return!1;for(t.kind="scalar",t.result="",r=a=t.position,s=!1;0!==h;){if(58===h){if(tn(i=t.input.charCodeAt(t.position+1))||n&&en(i))break}else if(35===h){if(tn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&_n(t)||n&&en(h))break;if(Ke(h)){if(o=t.line,c=t.lineStart,l=t.lineIndent,bn(t,!1,-1),t.lineIndent>=e){s=!0,h=t.input.charCodeAt(t.position);continue}t.position=a,t.line=o,t.lineStart=c,t.lineIndent=l;break}}s&&(fn(t,r,a,!1),xn(t,t.line-o),r=a=t.position,s=!1),Je(h)||(a=t.position+1),h=t.input.charCodeAt(++t.position)}return fn(t,r,a,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Ze===n)&&(y=!0,null===t.tag&&(t.tag="?")):(y=!0,null===t.tag&&null===t.anchor||un(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===f&&(y=o&&vn(t,p))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&un(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),c=0,l=t.implicitTypes.length;c<l;c+=1)if((u=t.implicitTypes[c]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Re.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,c=0,l=(h=t.typeMap.multi[t.kind||"fallback"]).length;c<l;c+=1)if(t.tag.slice(0,h[c].tag.length)===h[c].tag){u=h[c];break}u||un(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&un(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):un(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||y}function Tn(t){var e,n,i,r,a=t.position,s=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(r=t.input.charCodeAt(t.position))&&(bn(t,!0,-1),r=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==r));){for(s=!0,r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!tn(r);)r=t.input.charCodeAt(++t.position);for(i=[],(n=t.input.slice(e,t.position)).length<1&&un(t,"directive name must not be less than one character in length");0!==r;){for(;Je(r);)r=t.input.charCodeAt(++t.position);if(35===r){do{r=t.input.charCodeAt(++t.position)}while(0!==r&&!Ke(r));break}if(Ke(r))break;for(e=t.position;0!==r&&!tn(r);)r=t.input.charCodeAt(++t.position);i.push(t.input.slice(e,t.position))}0!==r&&mn(t),Re.call(pn,n)?pn[n](t,n,i):dn(t,'unknown document directive "'+n+'"')}bn(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,bn(t,!0,-1)):s&&un(t,"directives end mark is expected"),Cn(t,t.lineIndent-1,Ye,!1,!0),bn(t,!0,-1),t.checkLineBreaks&&He.test(t.input.slice(a,t.position))&&dn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&_n(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,bn(t,!0,-1)):t.position<t.length-1&&un(t,"end of the stream or a document separator is expected")}function En(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new ln(t,e),i=t.indexOf("\0");for(-1!==i&&(n.position=i,un(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Tn(n);return n.documents}var Sn=fe,An={loadAll:function(t,e,n){null!==e&&"object"==typeof e&&void 0===n&&(n=e,e=null);var i=En(t,n);if("function"!=typeof e)return i;for(var r=0,a=i.length;r<a;r+=1)e(i[r])},load:function(t,e){var n=En(t,e);if(0!==n.length){if(1===n.length)return n[0];throw new ae("expected a single document in the stream, but found more")}}}.load;const Ln=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;const Bn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Nn=/\s*%%.*\n/gm,Dn={},On=function(t,e){t=t.replace(Ln,"").replace(Bn,"").replace(Nn,"\n");for(const[n,{detector:i}]of Object.entries(Dn)){if(i(t,e))return n}throw new Error(`No diagram type detected for text: ${t}`)},Mn=(...t)=>{for(const{id:e,detector:n,loader:i}of t)In(e,n,i)},In=(t,e,n)=>{Dn[t]?Bt.error(`Detector with key ${t} already exists`):Dn[t]={detector:e,loader:n},Bt.debug(`Detector with key ${t} added${n?" with loader":""}`)},Fn=function(t,e,n){const{depth:i,clobber:r}=Object.assign({depth:2,clobber:!1},n);return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Fn(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Fn(t[n],e[n],{depth:i-1,clobber:r}))})),t)},$n=Fn,Rn={curveBasis:o.$0Z,curveBasisClosed:o.Dts,curveBasisOpen:o.WQY,curveBumpX:o.qpX,curveBumpY:o.u93,curveBundle:o.tFB,curveCardinalClosed:o.OvA,curveCardinalOpen:o.dCK,curveCardinal:o.YY7,curveCatmullRomClosed:o.fGX,curveCatmullRomOpen:o.$m7,curveCatmullRom:o.zgE,curveLinear:o.c_6,curveLinearClosed:o.fxm,curveMonotoneX:o.FdL,curveMonotoneY:o.ak_,curveNatural:o.SxZ,curveStep:o.eA_,curveStepAfter:o.jsv,curveStepBefore:o.iJ},Zn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Pn=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,jn=function(t,e=null){try{const n=new RegExp(`[%]{2}(?![{]${Pn.source})(?=[}][%]{2}).*\n`,"ig");let i;t=t.trim().replace(n,"").replace(/'/gm,'"'),Bt.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const r=[];for(;null!==(i=Zn.exec(t));)if(i.index===Zn.lastIndex&&Zn.lastIndex++,i&&!e||e&&i[1]&&i[1].match(e)||e&&i[2]&&i[2].match(e)){const t=i[1]?i[1]:i[2],e=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;r.push({type:t,args:e})}return 0===r.length&&r.push({type:t,args:null}),1===r.length?r[0]:r}catch(n){return Bt.error(`ERROR: ${n.message} - Unable to parse directive\n ${null!==e?" type:"+e:""} based on the text:${t}`),{type:null,args:null}}};function Yn(t,e){if(!t)return e;const n=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Rn[n]||e}function zn(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}function Un(t){let e="",n="";for(const i of t)void 0!==i&&(i.startsWith("color:")||i.startsWith("text-align:")?n=n+i+";":e=e+i+";");return{style:e,labelStyle:n}}let Wn=0;const qn=()=>(Wn++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Wn);const Hn=t=>function(t){let e="";const n="0123456789abcdef";for(let i=0;i<t;i++)e+=n.charAt(Math.floor(16*Math.random()));return e}(t.length),Vn=function(t,e){const n=e.text.replace(jt.lineBreakRegex," "),[,i]=ri(e.fontSize),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.style("text-anchor",e.anchor),r.style("font-family",e.fontFamily),r.style("font-size",i),r.style("font-weight",e.fontWeight),r.attr("fill",e.fill),void 0!==e.class&&r.attr("class",e.class);const a=r.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(n),r},Gn=(0,v.Z)(((t,e,n)=>{if(!t)return t;if(n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},n),jt.lineBreakRegex.test(t))return t;const i=t.split(" "),r=[];let a="";return i.forEach(((t,s)=>{const o=Kn(`${t} `,n),c=Kn(a,n);if(o>e){const{hyphenatedStrings:i,remainingWord:s}=Xn(t,e,"-",n);r.push(a,...i),a=s}else c+o>=e?(r.push(a),a=t):a=[a,t].filter(Boolean).join(" ");s+1===i.length&&r.push(a)})),r.filter((t=>""!==t)).join(n.joinWith)}),((t,e,n)=>`${t}${e}${n.fontSize}${n.fontWeight}${n.fontFamily}${n.joinWith}`)),Xn=(0,v.Z)(((t,e,n="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);const r=[...t],a=[];let s="";return r.forEach(((t,o)=>{const c=`${s}${t}`;if(Kn(c,i)>=e){const t=o+1,e=r.length===t,i=`${c}${n}`;a.push(e?c:i),s=""}else s=c})),{hyphenatedStrings:a,remainingWord:s}}),((t,e,n="-",i)=>`${t}${e}${n}${i.fontSize}${i.fontWeight}${i.fontFamily}`));function Qn(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),Jn(t,e).height}function Kn(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),Jn(t,e).width}const Jn=(0,v.Z)(((t,e)=>{e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e);const{fontSize:n,fontFamily:i,fontWeight:r}=e;if(!t)return{width:0,height:0};const[,a]=ri(n),s=["sans-serif",i],c=t.split(jt.lineBreakRegex),l=[],h=(0,o.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const o of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const n of c){const i={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0};i.text=n;const s=Vn(u,i).style("font-size",a).style("font-weight",r).style("font-family",o),c=(s._groups||s)[0][0].getBBox();e.width=Math.round(Math.max(e.width,c.width)),t=Math.round(c.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}l.push(e)}u.remove();return l[isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let ti;const ei=t=>{if(Bt.debug("directiveSanitizer called with",t),"object"==typeof t&&(t.length?t.forEach((t=>ei(t))):Object.keys(t).forEach((e=>{Bt.debug("Checking key",e),e.startsWith("__")&&(Bt.debug("sanitize deleting __ option",e),delete t[e]),e.includes("proto")&&(Bt.debug("sanitize deleting proto option",e),delete t[e]),e.includes("constr")&&(Bt.debug("sanitize deleting constr option",e),delete t[e]),e.includes("themeCSS")&&(Bt.debug("sanitizing themeCss option"),t[e]=ni(t[e])),e.includes("fontFamily")&&(Bt.debug("sanitizing fontFamily option"),t[e]=ni(t[e])),e.includes("altFontFamily")&&(Bt.debug("sanitizing altFontFamily option"),t[e]=ni(t[e])),Jt.includes(e)?"object"==typeof t[e]&&(Bt.debug("sanitize deleting object",e),ei(t[e])):(Bt.debug("sanitize deleting option",e),delete t[e])}))),t.themeVariables){const e=Object.keys(t.themeVariables);for(const n of e){const e=t.themeVariables[n];e&&e.match&&!e.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[n]="")}}Bt.debug("After sanitization",t)},ni=t=>{let e=0,n=0;for(const i of t){if(e<n)return"{ /* ERROR: Unbalanced CSS */ }";"{"===i?e++:"}"===i&&n++}return e!==n?"{ /* ERROR: Unbalanced CSS */ }":t};function ii(t){return"str"in t}const ri=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t,10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},ai={assignWithDepth:$n,wrapLabel:Gn,calculateTextHeight:Qn,calculateTextWidth:Kn,calculateTextDimensions:Jn,detectInit:function(t,e){const n=jn(t,/(?:init\b)|(?:initialize\b)/);let i={};if(Array.isArray(n)){const t=n.map((t=>t.args));ei(t),i=$n(i,[...t])}else i=n.args;if(i){let n=On(t,e);["config"].forEach((t=>{void 0!==i[t]&&("flowchart-v2"===n&&(n="flowchart"),i[n]=i[t],delete i[t])}))}return i},detectDirective:jn,isSubstringInArray:function(t,e){for(const[n,i]of e.entries())if(i.match(t))return n;return-1},interpolateToCurve:Yn,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,n=0;t.forEach((t=>{n+=zn(t,e),e=t}));let i,r=n/2;return e=void 0,t.forEach((t=>{if(e&&!i){const n=zn(t,e);if(n<r)r-=n;else{const a=r/n;a<=0&&(i=e),a>=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:(t,e,n)=>{let i;Bt.info(`our points ${JSON.stringify(e)}`),e[0]!==n&&(e=e.reverse());let r,a=25;i=void 0,e.forEach((t=>{if(i&&!r){const e=zn(t,i);if(e<a)a-=e;else{const n=a/e;n<=0&&(r=i),n>=1&&(r={x:t.x,y:t.y}),n>0&&n<1&&(r={x:(1-n)*i.x+n*t.x,y:(1-n)*i.y+n*t.y})}}i=t}));const s=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),c={x:0,y:0};return c.x=Math.sin(o)*s+(e[0].x+r.x)/2,c.y=-Math.cos(o)*s+(e[0].y+r.y)/2,c},calcTerminalLabelPosition:function(t,e,n){let i,r=JSON.parse(JSON.stringify(n));Bt.info("our points",r),"start_left"!==e&&"start_right"!==e&&(r=r.reverse()),r.forEach((t=>{i=t}));let a,s=25+t;i=void 0,r.forEach((t=>{if(i&&!a){const e=zn(t,i);if(e<s)s-=e;else{const n=s/e;n<=0&&(a=i),n>=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*i.x+n*t.x,y:(1-n)*i.y+n*t.y})}}i=t}));const o=10+.5*t,c=Math.atan2(r[0].y-a.y,r[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(c)*o+(r[0].x+a.x)/2,l.y=-Math.cos(c)*o+(r[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(c+Math.PI)*o+(r[0].x+a.x)/2,l.y=-Math.cos(c+Math.PI)*o+(r[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(c-Math.PI)*o+(r[0].x+a.x)/2-5,l.y=-Math.cos(c-Math.PI)*o+(r[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(c)*o+(r[0].x+a.x)/2-5,l.y=-Math.cos(c)*o+(r[0].y+a.y)/2-5),l},formatUrl:function(t,e){const n=t.trim();if(n)return"loose"!==e.securityLevel?(0,s.Nm)(n):n},getStylesFromArray:Un,generateId:qn,random:Hn,runFunc:(t,...e)=>{const n=t.split("."),i=n.length-1,r=n[i];let a=window;for(let s=0;s<i;s++)if(a=a[n[s]],!a)return;a[r](...e)},entityDecode:function(t){return ti=ti||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),ti.innerHTML=t,unescape(ti.textContent)},initIdGenerator:class{constructor(t,e){this.deterministic=t,this.seed=e,this.count=e?e.length:0}next(){return this.deterministic?this.count++:Date.now()}},directiveSanitizer:ei,sanitizeCss:ni,insertTitle:(t,e,n,i)=>{if(!i)return;const r=t.node().getBBox();t.append("text").text(i).attr("x",r.x+r.width/2).attr("y",-n).attr("class",e)},parseFontSize:ri},si="9.4.3",oi=Object.freeze(te);let ci,li=$n({},oi),hi=[],ui=$n({},oi);const di=(t,e)=>{let n=$n({},t),i={};for(const r of e)yi(r),i=$n(i,r);if(n=$n(n,i),i.theme&&i.theme in Xt){const t=$n({},ci),e=$n(t.themeVariables||{},i.themeVariables);n.theme&&n.theme in Xt&&(n.themeVariables=Xt[n.theme].getThemeVariables(e))}return ui=n,vi(ui),ui},pi=()=>$n({},li),fi=t=>(vi(t),$n(ui,t),gi()),gi=()=>$n({},ui),yi=t=>{["secure",...li.secure??[]].forEach((e=>{void 0!==t[e]&&(Bt.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{0===e.indexOf("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&yi(t[e])}))},mi=t=>{t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),hi.push(t),di(li,hi)},bi=(t=li)=>{hi=[],di(t,hi)};var _i=(t=>(t.LAZY_LOAD_DEPRECATED="The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",t))(_i||{});const xi={},vi=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(xi[e="LAZY_LOAD_DEPRECATED"]||(Bt.warn(_i[e]),xi[e]=!0)))},ki=function(t,e,n,i){const r=function(t,e,n){let i=new Map;return n?(i.set("width","100%"),i.set("style",`max-width: ${e}px;`)):(i.set("height",t),i.set("width",e)),i}(e,n,i);!function(t,e){for(let n of e)t.attr(n[0],n[1])}(t,r)},wi=function(t,e,n,i){const r=e.node().getBBox(),a=r.width,s=r.height;Bt.info(`SVG bounds: ${a}x${s}`,r);let o=0,c=0;Bt.info(`Graph bounds: ${o}x${c}`,t),o=a+2*n,c=s+2*n,Bt.info(`Calculated bounds: ${o}x${c}`),ki(e,c,o,i);const l=`${r.x-n} ${r.y-n} ${r.width+2*n} ${r.height+2*n}`;e.attr("viewBox",l)},Ci=t=>`g.classGroup text {\n fill: ${t.nodeBorder};\n fill: ${t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`,Ti=t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n`,Ei=()=>"",Si=t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.nodeTextColor||t.textColor};\n }\n .cluster-label text {\n fill: ${t.titleColor};\n }\n .cluster-label span {\n color: ${t.titleColor};\n }\n\n .label text,span {\n fill: ${t.nodeTextColor||t.textColor};\n color: ${t.nodeTextColor||t.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${t.clusterBkg};\n stroke: ${t.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n .cluster span {\n color: ${t.titleColor};\n }\n /* .cluster div {\n color: ${t.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`,Ai=t=>`\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${t.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${t.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`,Li=()=>"",Bi=t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`,Ni=t=>`\n\n marker {\n fill: ${t.relationColor};\n stroke: ${t.relationColor};\n }\n\n marker.cross {\n stroke: ${t.lineColor};\n }\n\n svg {\n font-family: ${t.fontFamily};\n font-size: ${t.fontSize};\n }\n\n .reqBox {\n fill: ${t.requirementBackground};\n fill-opacity: 100%;\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${t.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${t.relationLabelBackground};\n fill-opacity: 100%;\n }\n\n .req-title-line {\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${t.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${t.relationLabelColor};\n }\n\n`,Di=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,Oi=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`,Mi=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,Ii=t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,Fi={flowchart:Si,"flowchart-v2":Si,sequence:Di,gantt:Ai,classDiagram:Ci,"classDiagram-v2":Ci,class:Ci,stateDiagram:Oi,state:Oi,info:Li,pie:Bi,er:Ti,error:Ei,journey:Mi,requirement:Ni,c4:Ii},$i=(t,e,n)=>{let i="";return t in Fi&&Fi[t]?i=Fi[t](n):Bt.warn(`No theme found for ${t}`),` & {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n fill: ${n.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${n.errorBkgColor};\n }\n & .error-text {\n fill: ${n.errorTextColor};\n stroke: ${n.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${n.lineColor};\n stroke: ${n.lineColor};\n }\n & .marker.cross {\n stroke: ${n.lineColor};\n }\n\n & svg {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n }\n\n ${i}\n\n ${e}\n`};let Ri="",Zi="",Pi="";const ji=t=>It(t,gi()),Yi=function(){Ri="",Pi="",Zi=""},zi=function(t){Ri=ji(t).replace(/^\s+/g,"")},Ui=function(){return Ri||Zi},Wi=function(t){Pi=ji(t).replace(/\n\s+/g,"\n")},qi=function(){return Pi},Hi=function(t){Zi=ji(t)},Vi=function(){return Zi},Gi={setAccTitle:zi,getAccTitle:Ui,setDiagramTitle:Hi,getDiagramTitle:Vi,getAccDescription:qi,setAccDescription:Wi,clear:Yi},Xi=Object.freeze(Object.defineProperty({__proto__:null,clear:Yi,default:Gi,getAccDescription:qi,getAccTitle:Ui,getDiagramTitle:Vi,setAccDescription:Wi,setAccTitle:zi,setDiagramTitle:Hi},Symbol.toStringTag,{value:"Module"}));let Qi={};const Ki=function(t,e,n,i){Bt.debug("parseDirective is being called",e,n,i);try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Qi={};break;case"type_directive":if(!Qi)throw new Error("currentDirective is undefined");Qi.type=e.toLowerCase();break;case"arg_directive":if(!Qi)throw new Error("currentDirective is undefined");Qi.args=JSON.parse(e);break;case"close_directive":Ji(t,Qi,i),Qi=void 0}}catch(r){Bt.error(`Error while rendering sequenceDiagram directive: ${e} jison context: ${n}`),Bt.error(r.message)}},Ji=function(t,e,n){switch(Bt.info(`Directive type=${e.type} with args:`,e.args),e.type){case"init":case"initialize":["config"].forEach((t=>{void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),Bt.info("sanitize in handleDirective",e.args),ei(e.args),Bt.info("sanitize in handleDirective (done)",e.args),mi(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":Bt.warn("themeCss encountered");break;default:Bt.warn(`Unhandled directive: source: '%%{${e.type}: ${JSON.stringify(e.args?e.args:{})}}%%`,e)}},tr=Bt,er=Nt,nr=gi,ir=t=>It(t,nr()),rr=wi,ar=(t,e,n,i)=>Ki(t,e,n,i),sr={},or=(t,e,n)=>{if(sr[t])throw new Error(`Diagram ${t} already registered.`);var i,r;sr[t]=e,n&&In(t,n),i=t,r=e.styles,Fi[i]=r,e.injectUtils&&e.injectUtils(tr,er,nr,ir,rr,Xi,ar)},cr=t=>{if(t in sr)return sr[t];throw new Error(`Diagram ${t} not found.`)};var lr=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,4],i=[1,7],r=[1,5],a=[1,9],s=[1,6],o=[2,6],c=[1,16],l=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],h=[8,14,20,22,24,25,27,29,32,37,40],u=[8,13,14,20,22,24,25,27,29,32,37,40],d=[1,26],p=[6,8,14,50,55],f=[8,14,55],g=[1,53],y=[1,52],m=[8,14,30,33,35,38,55],b=[1,67],_=[1,68],x=[1,69],v=[8,14,33,35,42,55],k={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 3:return a[o];case 4:return a[o-1];case 5:return i.setDirection(a[o-3]),a[o-1];case 7:i.setOptions(a[o-1]),this.$=a[o];break;case 8:a[o-1]+=a[o],this.$=a[o-1];break;case 10:this.$=[];break;case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 12:this.$=a[o-1];break;case 17:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 20:i.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 22:i.checkout(a[o]);break;case 23:i.branch(a[o]);break;case 24:i.branch(a[o-2],a[o]);break;case 25:i.cherryPick(a[o],"",void 0);break;case 26:i.cherryPick(a[o-2],"",a[o]);break;case 27:case 29:i.cherryPick(a[o-2],"","");break;case 28:i.cherryPick(a[o],"",a[o-2]);break;case 30:i.merge(a[o],"","","");break;case 31:i.merge(a[o-2],a[o],"","");break;case 32:i.merge(a[o-2],"",a[o],"");break;case 33:i.merge(a[o-2],"","",a[o]);break;case 34:i.merge(a[o-4],a[o],"",a[o-2]);break;case 35:i.merge(a[o-4],"",a[o],a[o-2]);break;case 36:i.merge(a[o-4],"",a[o-2],a[o]);break;case 37:i.merge(a[o-4],a[o-2],a[o],"");break;case 38:i.merge(a[o-4],a[o-2],"",a[o]);break;case 39:i.merge(a[o-4],a[o],a[o-2],"");break;case 40:i.merge(a[o-6],a[o-4],a[o-2],a[o]);break;case 41:i.merge(a[o-6],a[o],a[o-4],a[o-2]);break;case 42:i.merge(a[o-6],a[o-4],a[o],a[o-2]);break;case 43:i.merge(a[o-6],a[o-2],a[o-4],a[o]);break;case 44:i.merge(a[o-6],a[o],a[o-2],a[o-4]);break;case 45:i.merge(a[o-6],a[o-2],a[o],a[o-4]);break;case 46:i.commit(a[o]);break;case 47:i.commit("","",i.commitType.NORMAL,a[o]);break;case 48:i.commit("","",a[o],"");break;case 49:i.commit("","",a[o],a[o-2]);break;case 50:i.commit("","",a[o-2],a[o]);break;case 51:i.commit("",a[o],i.commitType.NORMAL,"");break;case 52:i.commit("",a[o-2],i.commitType.NORMAL,a[o]);break;case 53:i.commit("",a[o],i.commitType.NORMAL,a[o-2]);break;case 54:i.commit("",a[o-2],a[o],"");break;case 55:i.commit("",a[o],a[o-2],"");break;case 56:i.commit("",a[o-4],a[o-2],a[o]);break;case 57:i.commit("",a[o-4],a[o],a[o-2]);break;case 58:i.commit("",a[o-2],a[o-4],a[o]);break;case 59:i.commit("",a[o],a[o-4],a[o-2]);break;case 60:i.commit("",a[o],a[o-2],a[o-4]);break;case 61:i.commit("",a[o-2],a[o],a[o-4]);break;case 62:i.commit(a[o],"",i.commitType.NORMAL,"");break;case 63:i.commit(a[o],"",i.commitType.NORMAL,a[o-2]);break;case 64:i.commit(a[o-2],"",i.commitType.NORMAL,a[o]);break;case 65:i.commit(a[o-2],"",a[o],"");break;case 66:i.commit(a[o],"",a[o-2],"");break;case 67:i.commit(a[o],a[o-2],i.commitType.NORMAL,"");break;case 68:i.commit(a[o-2],a[o],i.commitType.NORMAL,"");break;case 69:i.commit(a[o-4],"",a[o-2],a[o]);break;case 70:i.commit(a[o-4],"",a[o],a[o-2]);break;case 71:i.commit(a[o-2],"",a[o-4],a[o]);break;case 72:i.commit(a[o],"",a[o-4],a[o-2]);break;case 73:i.commit(a[o],"",a[o-2],a[o-4]);break;case 74:i.commit(a[o-2],"",a[o],a[o-4]);break;case 75:i.commit(a[o-4],a[o],a[o-2],"");break;case 76:i.commit(a[o-4],a[o-2],a[o],"");break;case 77:i.commit(a[o-2],a[o],a[o-4],"");break;case 78:i.commit(a[o],a[o-2],a[o-4],"");break;case 79:i.commit(a[o],a[o-4],a[o-2],"");break;case 80:i.commit(a[o-2],a[o-4],a[o],"");break;case 81:i.commit(a[o-4],a[o],i.commitType.NORMAL,a[o-2]);break;case 82:i.commit(a[o-4],a[o-2],i.commitType.NORMAL,a[o]);break;case 83:i.commit(a[o-2],a[o],i.commitType.NORMAL,a[o-4]);break;case 84:i.commit(a[o],a[o-2],i.commitType.NORMAL,a[o-4]);break;case 85:i.commit(a[o],a[o-4],i.commitType.NORMAL,a[o-2]);break;case 86:i.commit(a[o-2],a[o-4],i.commitType.NORMAL,a[o]);break;case 87:i.commit(a[o-6],a[o-4],a[o-2],a[o]);break;case 88:i.commit(a[o-6],a[o-4],a[o],a[o-2]);break;case 89:i.commit(a[o-6],a[o-2],a[o-4],a[o]);break;case 90:i.commit(a[o-6],a[o],a[o-4],a[o-2]);break;case 91:i.commit(a[o-6],a[o-2],a[o],a[o-4]);break;case 92:i.commit(a[o-6],a[o],a[o-2],a[o-4]);break;case 93:i.commit(a[o-4],a[o-6],a[o-2],a[o]);break;case 94:i.commit(a[o-4],a[o-6],a[o],a[o-2]);break;case 95:i.commit(a[o-2],a[o-6],a[o-4],a[o]);break;case 96:i.commit(a[o],a[o-6],a[o-4],a[o-2]);break;case 97:i.commit(a[o-2],a[o-6],a[o],a[o-4]);break;case 98:i.commit(a[o],a[o-6],a[o-2],a[o-4]);break;case 99:i.commit(a[o],a[o-4],a[o-2],a[o-6]);break;case 100:i.commit(a[o-2],a[o-4],a[o],a[o-6]);break;case 101:i.commit(a[o],a[o-2],a[o-4],a[o-6]);break;case 102:i.commit(a[o-2],a[o],a[o-4],a[o-6]);break;case 103:i.commit(a[o-4],a[o-2],a[o],a[o-6]);break;case 104:i.commit(a[o-4],a[o],a[o-2],a[o-6]);break;case 105:i.commit(a[o-2],a[o-4],a[o-6],a[o]);break;case 106:i.commit(a[o],a[o-4],a[o-6],a[o-2]);break;case 107:i.commit(a[o-2],a[o],a[o-6],a[o-4]);break;case 108:i.commit(a[o],a[o-2],a[o-6],a[o-4]);break;case 109:i.commit(a[o-4],a[o-2],a[o-6],a[o]);break;case 110:i.commit(a[o-4],a[o],a[o-6],a[o-2]);break;case 111:this.$="";break;case 112:this.$=a[o];break;case 113:this.$=i.commitType.NORMAL;break;case 114:this.$=i.commitType.REVERSE;break;case 115:this.$=i.commitType.HIGHLIGHT;break;case 118:i.parseDirective("%%{","open_directive");break;case 119:i.parseDirective(a[o],"type_directive");break;case 120:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 121:i.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:n,8:i,14:r,46:8,50:a,55:s},{1:[3]},{3:10,4:2,5:3,6:n,8:i,14:r,46:8,50:a,55:s},{3:11,4:2,5:3,6:n,8:i,14:r,46:8,50:a,55:s},{7:12,8:o,9:[1,13],10:[1,14],11:15,14:c},e(l,[2,124]),e(l,[2,125]),e(l,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:o,11:15,14:c},{9:[1,21]},e(h,[2,10],{12:22,13:[1,23]}),e(u,[2,9]),{9:[1,25],48:24,53:d},e([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:o,11:15,14:c},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},e(u,[2,8]),e(p,[2,116]),{49:45,52:[1,46]},e(p,[2,121]),{1:[2,4]},{8:[1,47]},e(h,[2,11]),{4:48,8:i,14:r,55:s},e(h,[2,13]),e(f,[2,14]),e(f,[2,15]),e(f,[2,16]),{21:[1,49]},{23:[1,50]},e(f,[2,19]),e(f,[2,20]),e(f,[2,21]),{28:51,34:g,54:y},e(f,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:g,54:y},{33:[1,61],35:[1,62]},{28:63,34:g,54:y},{48:64,53:d},{53:[2,120]},{1:[2,5]},e(h,[2,12]),e(f,[2,17]),e(f,[2,18]),e(f,[2,22]),e(m,[2,122]),e(m,[2,123]),e(f,[2,46]),{34:[1,65]},{39:66,43:b,44:_,45:x},{34:[1,70]},{34:[1,71]},e(f,[2,112]),e(f,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},e(f,[2,23],{30:[1,78]}),e(p,[2,117]),e(f,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),e(f,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),e(v,[2,113]),e(v,[2,114]),e(v,[2,115]),e(f,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),e(f,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:b,44:_,45:x},{34:[1,93]},e(f,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:b,44:_,45:x},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:b,44:_,45:x},{34:[1,106]},{34:[1,107]},{39:108,43:b,44:_,45:x},{34:[1,109]},e(f,[2,31],{35:[1,111],38:[1,110]}),e(f,[2,32],{33:[1,113],35:[1,112]}),e(f,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},e(f,[2,24]),e(f,[2,49],{33:[1,120],42:[1,121]}),e(f,[2,53],{38:[1,122],42:[1,123]}),e(f,[2,63],{33:[1,125],38:[1,124]}),e(f,[2,50],{33:[1,126],42:[1,127]}),e(f,[2,55],{35:[1,128],42:[1,129]}),e(f,[2,66],{33:[1,131],35:[1,130]}),e(f,[2,52],{38:[1,132],42:[1,133]}),e(f,[2,54],{35:[1,134],42:[1,135]}),e(f,[2,67],{35:[1,137],38:[1,136]}),e(f,[2,64],{33:[1,139],38:[1,138]}),e(f,[2,65],{33:[1,141],35:[1,140]}),e(f,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:b,44:_,45:x},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:b,44:_,45:x},e(f,[2,26]),e(f,[2,27]),e(f,[2,28]),e(f,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:b,44:_,45:x},{34:[1,153]},{39:154,43:b,44:_,45:x},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:b,44:_,45:x},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:b,44:_,45:x},{34:[1,167]},{39:168,43:b,44:_,45:x},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:b,44:_,45:x},{34:[1,173]},e(f,[2,37],{35:[1,174]}),e(f,[2,38],{38:[1,175]}),e(f,[2,36],{33:[1,176]}),e(f,[2,39],{35:[1,177]}),e(f,[2,34],{38:[1,178]}),e(f,[2,35],{33:[1,179]}),e(f,[2,60],{42:[1,180]}),e(f,[2,73],{33:[1,181]}),e(f,[2,61],{42:[1,182]}),e(f,[2,84],{38:[1,183]}),e(f,[2,74],{33:[1,184]}),e(f,[2,83],{38:[1,185]}),e(f,[2,59],{42:[1,186]}),e(f,[2,72],{33:[1,187]}),e(f,[2,58],{42:[1,188]}),e(f,[2,78],{35:[1,189]}),e(f,[2,71],{33:[1,190]}),e(f,[2,77],{35:[1,191]}),e(f,[2,57],{42:[1,192]}),e(f,[2,85],{38:[1,193]}),e(f,[2,56],{42:[1,194]}),e(f,[2,79],{35:[1,195]}),e(f,[2,80],{35:[1,196]}),e(f,[2,86],{38:[1,197]}),e(f,[2,70],{33:[1,198]}),e(f,[2,81],{38:[1,199]}),e(f,[2,69],{33:[1,200]}),e(f,[2,75],{35:[1,201]}),e(f,[2,76],{35:[1,202]}),e(f,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:b,44:_,45:x},{34:[1,206]},{34:[1,207]},{39:208,43:b,44:_,45:x},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:b,44:_,45:x},{34:[1,214]},{39:215,43:b,44:_,45:x},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:b,44:_,45:x},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:b,44:_,45:x},{34:[1,228]},{39:229,43:b,44:_,45:x},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:b,44:_,45:x},e(f,[2,40]),e(f,[2,42]),e(f,[2,41]),e(f,[2,43]),e(f,[2,45]),e(f,[2,44]),e(f,[2,101]),e(f,[2,102]),e(f,[2,99]),e(f,[2,100]),e(f,[2,104]),e(f,[2,103]),e(f,[2,108]),e(f,[2,107]),e(f,[2,106]),e(f,[2,105]),e(f,[2,110]),e(f,[2,109]),e(f,[2,98]),e(f,[2,97]),e(f,[2,96]),e(f,[2,95]),e(f,[2,93]),e(f,[2,94]),e(f,[2,92]),e(f,[2,91]),e(f,[2,90]),e(f,[2,89]),e(f,[2,87]),e(f,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},w=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 34:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}},t);function C(){this.yy={}}return k.lexer=w,C.prototype=k,k.Parser=C,new C}();lr.parser=lr;const hr=lr,ur=t=>null!==t.match(/^\s*gitGraph/);let dr=gi().gitGraph.mainBranchName,pr=gi().gitGraph.mainBranchOrder,fr={},gr=null,yr={};yr[dr]={name:dr,order:pr};let mr={};mr[dr]=gr;let br=dr,_r="LR",xr=0;function vr(){return Hn({length:7})}let kr={};const wr=function(t){if(t=jt.sanitizeText(t,gi()),void 0===mr[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{br=t;const e=mr[br];gr=fr[e]}};function Cr(t,e,n){const i=t.indexOf(e);-1===i?t.push(n):t.splice(i,1,n)}function Tr(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));const i=[n,e.id,e.seq];for(let r in mr)mr[r]===e.id&&i.push(r);if(Bt.debug(i.join(" ")),e.parents&&2==e.parents.length){const n=fr[e.parents[0]];Cr(t,e,n),t.push(fr[e.parents[1]])}else{if(0==e.parents.length)return;{const n=fr[e.parents];Cr(t,e,n)}}Tr(t=function(t,e){const n=Object.create(null);return t.reduce(((t,i)=>{const r=e(i);return n[r]||(n[r]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const Er=function(){const t=Object.keys(fr).map((function(t){return fr[t]}));return t.forEach((function(t){Bt.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},Sr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},Ar={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().gitGraph,setDirection:function(t){_r=t},setOptions:function(t){Bt.debug("options str",t),t=(t=t&&t.trim())||"{}";try{kr=JSON.parse(t)}catch(e){Bt.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return kr},commit:function(t,e,n,i){Bt.debug("Entering commit:",t,e,n,i),e=jt.sanitizeText(e,gi()),t=jt.sanitizeText(t,gi()),i=jt.sanitizeText(i,gi());const r={id:e||xr+"-"+vr(),message:t,seq:xr++,type:n||Sr.NORMAL,tag:i||"",parents:null==gr?[]:[gr.id],branch:br};gr=r,fr[r.id]=r,mr[br]=r.id,Bt.debug("in pushCommit "+r.id)},branch:function(t,e){if(t=jt.sanitizeText(t,gi()),void 0!==mr[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}mr[t]=null!=gr?gr.id:null,yr[t]={name:t,order:e?parseInt(e,10):null},wr(t),Bt.debug("in createBranch")},merge:function(t,e,n,i){t=jt.sanitizeText(t,gi()),e=jt.sanitizeText(e,gi());const r=fr[mr[br]],a=fr[mr[t]];if(br===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===r||!r){let e=new Error('Incorrect usage of "merge". Current branch ('+br+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===mr[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===a||!a){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(r===a){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==fr[e]){let r=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw r.hash={text:"merge "+t+e+n+i,token:"merge "+t+e+n+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+n+" "+i]},r}const s={id:e||xr+"-"+vr(),message:"merged branch "+t+" into "+br,seq:xr++,parents:[null==gr?null:gr.id,mr[t]],branch:br,type:Sr.MERGE,customType:n,customId:!!e,tag:i||""};gr=s,fr[s.id]=s,mr[br]=s.id,Bt.debug(mr),Bt.debug("in mergeBranch")},cherryPick:function(t,e,n){if(Bt.debug("Entering cherryPick:",t,e,n),t=jt.sanitizeText(t,gi()),e=jt.sanitizeText(e,gi()),n=jt.sanitizeText(n,gi()),!t||void 0===fr[t]){let n=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw n.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},n}let i=fr[t],r=i.branch;if(i.type===Sr.MERGE){let n=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw n.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},n}if(!e||void 0===fr[e]){if(r===br){let n=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw n.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},n}const a=fr[mr[br]];if(void 0===a||!a){let n=new Error('Incorrect usage of "cherry-pick". Current branch ('+br+")has no commits");throw n.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},n}const s={id:xr+"-"+vr(),message:"cherry-picked "+i+" into "+br,seq:xr++,parents:[null==gr?null:gr.id,i.id],branch:br,type:Sr.CHERRY_PICK,tag:n??"cherry-pick:"+i.id};gr=s,fr[s.id]=s,mr[br]=s.id,Bt.debug(mr),Bt.debug("in cherryPick")}},checkout:wr,prettyPrint:function(){Bt.debug(fr);Tr([Er()[0]])},clear:function(){fr={},gr=null;let t=gi().gitGraph.mainBranchName,e=gi().gitGraph.mainBranchOrder;mr={},mr[t]=null,yr={},yr[t]={name:t,order:e},br=t,xr=0,Yi()},getBranchesAsObjArray:function(){const t=Object.values(yr).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})));return t},getBranches:function(){return mr},getCommits:function(){return fr},getCommitsArray:Er,getCurrentBranch:function(){return br},getDirection:function(){return _r},getHead:function(){return gr},setAccTitle:zi,getAccTitle:Ui,getAccDescription:qi,setAccDescription:Wi,setDiagramTitle:Hi,getDiagramTitle:Vi,commitType:Sr};let Lr={};const Br=0,Nr=1,Dr=2,Or=3,Mr=4;let Ir={},Fr={},$r=[],Rr=0;const Zr=(t,e,n)=>{const i=nr().gitGraph,r=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels");let s=0;Object.keys(e).sort(((t,n)=>e[t].seq-e[n].seq)).forEach((t=>{const o=e[t],c=Ir[o.branch].pos,l=s+10;if(n){let t,e=void 0!==o.customType&&""!==o.customType?o.customType:o.type;switch(e){case Br:t="commit-normal";break;case Nr:t="commit-reverse";break;case Dr:t="commit-highlight";break;case Or:t="commit-merge";break;case Mr:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===Dr){const e=r.append("rect");e.attr("x",l-10),e.attr("y",c-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${o.id} commit-highlight${Ir[o.branch].index%8} ${t}-outer`),r.append("rect").attr("x",l-6).attr("y",c-6).attr("height",12).attr("width",12).attr("class",`commit ${o.id} commit${Ir[o.branch].index%8} ${t}-inner`)}else if(e===Mr)r.append("circle").attr("cx",l).attr("cy",c).attr("r",10).attr("class",`commit ${o.id} ${t}`),r.append("circle").attr("cx",l-3).attr("cy",c+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),r.append("circle").attr("cx",l+3).attr("cy",c+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),r.append("line").attr("x1",l+3).attr("y1",c+1).attr("x2",l).attr("y2",c-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`),r.append("line").attr("x1",l-3).attr("y1",c+1).attr("x2",l).attr("y2",c-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`);else{const n=r.append("circle");if(n.attr("cx",l),n.attr("cy",c),n.attr("r",o.type===Or?9:10),n.attr("class",`commit ${o.id} commit${Ir[o.branch].index%8}`),e===Or){const e=r.append("circle");e.attr("cx",l),e.attr("cy",c),e.attr("r",6),e.attr("class",`commit ${t} ${o.id} commit${Ir[o.branch].index%8}`)}if(e===Nr){r.append("path").attr("d",`M ${l-5},${c-5}L${l+5},${c+5}M${l-5},${c+5}L${l+5},${c-5}`).attr("class",`commit ${t} ${o.id} commit${Ir[o.branch].index%8}`)}}}if(Fr[o.id]={x:s+10,y:c},n){const t=4,e=2;if(o.type!==Mr&&(o.customId&&o.type===Or||o.type!==Or)&&i.showCommitLabel){const t=a.append("g"),n=t.insert("rect").attr("class","commit-label-bkg"),r=t.append("text").attr("x",s).attr("y",c+25).attr("class","commit-label").text(o.id);let l=r.node().getBBox();if(n.attr("x",s+10-l.width/2-e).attr("y",c+13.5).attr("width",l.width+2*e).attr("height",l.height+2*e),r.attr("x",s+10-l.width/2),i.rotateCommitLabel){let e=-7.5-(l.width+10)/25*9.5,n=10+l.width/25*8.5;t.attr("transform","translate("+e+", "+n+") rotate("+"-45, "+s+", "+c+")")}}if(o.tag){const n=a.insert("polygon"),i=a.append("circle"),r=a.append("text").attr("y",c-16).attr("class","tag-label").text(o.tag);let l=r.node().getBBox();r.attr("x",s+10-l.width/2);const h=l.height/2,u=c-19.2;n.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${u+e}\n ${s-l.width/2-t/2},${u-e}\n ${s+10-l.width/2-t},${u-h-e}\n ${s+10+l.width/2+t},${u-h-e}\n ${s+10+l.width/2+t},${u+h+e}\n ${s+10-l.width/2-t},${u+h+e}`),i.attr("cx",s-l.width/2+t/2).attr("cy",u).attr("r",1.5).attr("class","tag-hole")}}s+=50,s>Rr&&(Rr=s)}))},Pr=(t,e,n=0)=>{const i=t+Math.abs(t-e)/2;if(n>5)return i;if($r.every((t=>Math.abs(t-i)>=10)))return $r.push(i),i;const r=Math.abs(t-e);return Pr(t,e-r/5,n+1)},jr=(t,e,n,i)=>{const r=Fr[e.id],a=Fr[n.id],s=((t,e,n)=>Object.keys(n).filter((i=>n[i].branch===e.branch&&n[i].seq>t.seq&&n[i].seq<e.seq)).length>0)(e,n,i);let o,c="",l="",h=0,u=0,d=Ir[n.branch].index;if(s){c="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,u=10,d=Ir[n.branch].index;const t=r.y<a.y?Pr(r.y,a.y):Pr(a.y,r.y);o=r.y<a.y?`M ${r.x} ${r.y} L ${r.x} ${t-h} ${c} ${r.x+u} ${t} L ${a.x-h} ${t} ${l} ${a.x} ${t+u} L ${a.x} ${a.y}`:`M ${r.x} ${r.y} L ${r.x} ${t+h} ${l} ${r.x+u} ${t} L ${a.x-h} ${t} ${c} ${a.x} ${t-u} L ${a.x} ${a.y}`}else r.y<a.y&&(c="A 20 20, 0, 0, 0,",h=20,u=20,d=Ir[n.branch].index,o=`M ${r.x} ${r.y} L ${r.x} ${a.y-h} ${c} ${r.x+u} ${a.y} L ${a.x} ${a.y}`),r.y>a.y&&(c="A 20 20, 0, 0, 0,",h=20,u=20,d=Ir[e.branch].index,o=`M ${r.x} ${r.y} L ${a.x-h} ${r.y} ${c} ${a.x} ${r.y-u} L ${a.x} ${a.y}`),r.y===a.y&&(d=Ir[e.branch].index,o=`M ${r.x} ${r.y} L ${r.x} ${a.y-h} ${c} ${r.x+u} ${a.y} L ${a.x} ${a.y}`);t.append("path").attr("d",o).attr("class","arrow arrow"+d%8)},Yr=(t,e)=>{const n=nr().gitGraph,i=t.append("g");e.forEach(((t,e)=>{const r=e%8,a=Ir[t.name].pos,s=i.append("line");s.attr("x1",0),s.attr("y1",a),s.attr("x2",Rr),s.attr("y2",a),s.attr("class","branch branch"+r),$r.push(a);const o=(t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let n=[];n="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const i of n){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=i.trim(),e.appendChild(t)}return e})(t.name),c=i.insert("rect"),l=i.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+r);l.node().appendChild(o);let h=o.getBBox();c.attr("class","branchLabelBkg label"+r).attr("rx",4).attr("ry",4).attr("x",-h.width-4-(!0===n.rotateCommitLabel?30:0)).attr("y",-h.height/2+8).attr("width",h.width+18).attr("height",h.height+4),l.attr("transform","translate("+(-h.width-14-(!0===n.rotateCommitLabel?30:0))+", "+(a-h.height/2-1)+")"),c.attr("transform","translate(-19, "+(a-h.height/2)+")")}))},zr={draw:function(t,e,n,i){Ir={},Fr={},Lr={},Rr=0,$r=[];const r=nr(),a=r.gitGraph;Bt.debug("in gitgraph renderer",t+"\n","id:",e,n),Lr=i.db.getCommits();const s=i.db.getBranchesAsObjArray();let c=0;s.forEach(((t,e)=>{Ir[t.name]={pos:c,index:e},c+=50+(a.rotateCommitLabel?40:0)}));const l=(0,o.Ys)(`[id="${e}"]`);Zr(l,Lr,!1),a.showBranches&&Yr(l,s),((t,e)=>{const n=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{jr(n,e[t],i,e)}))}))})(l,Lr),Zr(l,Lr,!0),ai.insertTitle(l,"gitTitleText",a.titleTopMargin,i.db.getDiagramTitle()),rr(void 0,l,a.diagramPadding,a.useMaxWidth??r.useMaxWidth)}},Ur=t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n }\n`;var Wr=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,6],i=[1,7],r=[1,8],a=[1,9],s=[1,16],o=[1,11],l=[1,12],h=[1,13],u=[1,14],d=[1,15],p=[1,27],f=[1,33],g=[1,34],y=[1,35],m=[1,36],b=[1,37],_=[1,72],x=[1,73],v=[1,74],k=[1,75],w=[1,76],C=[1,77],T=[1,78],E=[1,38],S=[1,39],A=[1,40],L=[1,41],B=[1,42],N=[1,43],D=[1,44],O=[1,45],M=[1,46],I=[1,47],F=[1,48],$=[1,49],R=[1,50],Z=[1,51],P=[1,52],j=[1,53],Y=[1,54],z=[1,55],U=[1,56],W=[1,57],q=[1,59],H=[1,60],V=[1,61],G=[1,62],X=[1,63],Q=[1,64],K=[1,65],J=[1,66],tt=[1,67],et=[1,68],nt=[1,69],it=[24,52],rt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],st=[1,94],ot=[1,95],ct=[1,96],lt=[1,97],ht=[15,24,52],ut=[7,8,9,10,18,22,25,26,27,28],dt=[15,24,43,52],pt=[15,24,43,52,86,87,89,90],ft=[15,43],gt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],yt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 4:i.setDirection("TB");break;case 5:i.setDirection("BT");break;case 6:i.setDirection("RL");break;case 7:i.setDirection("LR");break;case 11:i.parseDirective("%%{","open_directive");break;case 12:break;case 13:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 14:i.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:i.setC4Type(a[o-3]);break;case 26:i.setTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 27:i.setAccDescription(a[o].substring(15)),this.$=a[o].substring(15);break;case 28:this.$=a[o].trim(),i.setTitle(this.$);break;case 29:case 30:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 35:case 36:a[o].splice(2,0,"ENTERPRISE"),i.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 37:i.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 38:a[o].splice(2,0,"CONTAINER"),i.addContainerBoundary(...a[o]),this.$=a[o];break;case 39:i.addDeploymentNode("node",...a[o]),this.$=a[o];break;case 40:i.addDeploymentNode("nodeL",...a[o]),this.$=a[o];break;case 41:i.addDeploymentNode("nodeR",...a[o]),this.$=a[o];break;case 42:i.popBoundaryParseStack();break;case 46:i.addPersonOrSystem("person",...a[o]),this.$=a[o];break;case 47:i.addPersonOrSystem("external_person",...a[o]),this.$=a[o];break;case 48:i.addPersonOrSystem("system",...a[o]),this.$=a[o];break;case 49:i.addPersonOrSystem("system_db",...a[o]),this.$=a[o];break;case 50:i.addPersonOrSystem("system_queue",...a[o]),this.$=a[o];break;case 51:i.addPersonOrSystem("external_system",...a[o]),this.$=a[o];break;case 52:i.addPersonOrSystem("external_system_db",...a[o]),this.$=a[o];break;case 53:i.addPersonOrSystem("external_system_queue",...a[o]),this.$=a[o];break;case 54:i.addContainer("container",...a[o]),this.$=a[o];break;case 55:i.addContainer("container_db",...a[o]),this.$=a[o];break;case 56:i.addContainer("container_queue",...a[o]),this.$=a[o];break;case 57:i.addContainer("external_container",...a[o]),this.$=a[o];break;case 58:i.addContainer("external_container_db",...a[o]),this.$=a[o];break;case 59:i.addContainer("external_container_queue",...a[o]),this.$=a[o];break;case 60:i.addComponent("component",...a[o]),this.$=a[o];break;case 61:i.addComponent("component_db",...a[o]),this.$=a[o];break;case 62:i.addComponent("component_queue",...a[o]),this.$=a[o];break;case 63:i.addComponent("external_component",...a[o]),this.$=a[o];break;case 64:i.addComponent("external_component_db",...a[o]),this.$=a[o];break;case 65:i.addComponent("external_component_queue",...a[o]),this.$=a[o];break;case 67:i.addRel("rel",...a[o]),this.$=a[o];break;case 68:i.addRel("birel",...a[o]),this.$=a[o];break;case 69:i.addRel("rel_u",...a[o]),this.$=a[o];break;case 70:i.addRel("rel_d",...a[o]),this.$=a[o];break;case 71:i.addRel("rel_l",...a[o]),this.$=a[o];break;case 72:i.addRel("rel_r",...a[o]),this.$=a[o];break;case 73:i.addRel("rel_b",...a[o]),this.$=a[o];break;case 74:a[o].splice(0,1),i.addRel("rel",...a[o]),this.$=a[o];break;case 75:i.updateElStyle("update_el_style",...a[o]),this.$=a[o];break;case 76:i.updateRelStyle("update_rel_style",...a[o]),this.$=a[o];break;case 77:i.updateLayoutConfig("update_layout_config",...a[o]),this.$=a[o];break;case 78:this.$=[a[o]];break;case 79:a[o].unshift(a[o-1]),this.$=a[o];break;case 80:case 82:this.$=a[o].trim();break;case 81:let t={};t[a[o-1].trim()]=a[o].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:n,8:i,9:r,10:a,11:5,12:10,18:s,22:o,25:l,26:h,27:u,28:d},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:n,8:i,9:r,10:a,11:5,12:10,18:s,22:o,25:l,26:h,27:u,28:d},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:p},e([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:79,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:80,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:81,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:82,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},e(it,[2,20],{53:32,39:58,40:70,42:71,30:87,44:_,46:x,47:v,48:k,49:w,50:C,51:T,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt}),e(it,[2,21]),e(rt,[2,23],{15:[1,88]}),e(it,[2,43],{15:[1,89]}),e(at,[2,26]),e(at,[2,27]),{35:[1,90]},{37:[1,91]},e(at,[2,30]),{45:92,85:93,86:st,87:ot,89:ct,90:lt},{45:98,85:93,86:st,87:ot,89:ct,90:lt},{45:99,85:93,86:st,87:ot,89:ct,90:lt},{45:100,85:93,86:st,87:ot,89:ct,90:lt},{45:101,85:93,86:st,87:ot,89:ct,90:lt},{45:102,85:93,86:st,87:ot,89:ct,90:lt},{45:103,85:93,86:st,87:ot,89:ct,90:lt},{45:104,85:93,86:st,87:ot,89:ct,90:lt},{45:105,85:93,86:st,87:ot,89:ct,90:lt},{45:106,85:93,86:st,87:ot,89:ct,90:lt},{45:107,85:93,86:st,87:ot,89:ct,90:lt},{45:108,85:93,86:st,87:ot,89:ct,90:lt},{45:109,85:93,86:st,87:ot,89:ct,90:lt},{45:110,85:93,86:st,87:ot,89:ct,90:lt},{45:111,85:93,86:st,87:ot,89:ct,90:lt},{45:112,85:93,86:st,87:ot,89:ct,90:lt},{45:113,85:93,86:st,87:ot,89:ct,90:lt},{45:114,85:93,86:st,87:ot,89:ct,90:lt},{45:115,85:93,86:st,87:ot,89:ct,90:lt},{45:116,85:93,86:st,87:ot,89:ct,90:lt},e(ht,[2,66]),{45:117,85:93,86:st,87:ot,89:ct,90:lt},{45:118,85:93,86:st,87:ot,89:ct,90:lt},{45:119,85:93,86:st,87:ot,89:ct,90:lt},{45:120,85:93,86:st,87:ot,89:ct,90:lt},{45:121,85:93,86:st,87:ot,89:ct,90:lt},{45:122,85:93,86:st,87:ot,89:ct,90:lt},{45:123,85:93,86:st,87:ot,89:ct,90:lt},{45:124,85:93,86:st,87:ot,89:ct,90:lt},{45:125,85:93,86:st,87:ot,89:ct,90:lt},{45:126,85:93,86:st,87:ot,89:ct,90:lt},{45:127,85:93,86:st,87:ot,89:ct,90:lt},{30:128,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:T,53:32,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{15:[1,130],43:[1,129]},{45:131,85:93,86:st,87:ot,89:ct,90:lt},{45:132,85:93,86:st,87:ot,89:ct,90:lt},{45:133,85:93,86:st,87:ot,89:ct,90:lt},{45:134,85:93,86:st,87:ot,89:ct,90:lt},{45:135,85:93,86:st,87:ot,89:ct,90:lt},{45:136,85:93,86:st,87:ot,89:ct,90:lt},{45:137,85:93,86:st,87:ot,89:ct,90:lt},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},e(ut,[2,9]),{14:142,21:p},{21:[2,13]},{1:[2,15]},e(it,[2,22]),e(rt,[2,24],{31:31,29:143,32:f,33:g,34:y,36:m,38:b}),e(it,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:f,33:g,34:y,36:m,38:b,44:_,46:x,47:v,48:k,49:w,50:C,51:T,54:E,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:q,75:H,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt}),e(at,[2,28]),e(at,[2,29]),e(ht,[2,46]),e(dt,[2,78],{85:93,45:145,86:st,87:ot,89:ct,90:lt}),e(pt,[2,80]),{88:[1,146]},e(pt,[2,82]),e(pt,[2,83]),e(ht,[2,47]),e(ht,[2,48]),e(ht,[2,49]),e(ht,[2,50]),e(ht,[2,51]),e(ht,[2,52]),e(ht,[2,53]),e(ht,[2,54]),e(ht,[2,55]),e(ht,[2,56]),e(ht,[2,57]),e(ht,[2,58]),e(ht,[2,59]),e(ht,[2,60]),e(ht,[2,61]),e(ht,[2,62]),e(ht,[2,63]),e(ht,[2,64]),e(ht,[2,65]),e(ht,[2,67]),e(ht,[2,68]),e(ht,[2,69]),e(ht,[2,70]),e(ht,[2,71]),e(ht,[2,72]),e(ht,[2,73]),e(ht,[2,74]),e(ht,[2,75]),e(ht,[2,76]),e(ht,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},e(ft,[2,35]),e(ft,[2,36]),e(ft,[2,37]),e(ft,[2,38]),e(ft,[2,39]),e(ft,[2,40]),e(ft,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},e(rt,[2,25]),e(it,[2,45]),e(dt,[2,79]),e(pt,[2,81]),e(ht,[2,31]),e(ht,[2,42]),e(gt,[2,32]),e(gt,[2,33],{15:[1,152]}),e(ut,[2,10]),e(gt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},mt=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 78:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:case 75:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:case 58:return this.begin("rel_u"),76;case 59:case 60:return this.begin("rel_d"),77;case 61:case 62:return this.begin("rel_l"),78;case 63:case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:case 84:this.popState(),this.popState();break;case 74:case 76:return 90;case 77:this.begin("string");break;case 79:case 85:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}},t);function bt(){this.yy={}}return yt.lexer=mt,bt.prototype=yt,yt.Parser=bt,new bt}();Wr.parser=Wr;const qr=Wr,Hr=t=>null!==t.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/);let Vr=[],Gr=[""],Xr="global",Qr="",Kr=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Jr=[],ta="",ea=!1,na=4,ia=2;var ra;const aa=function(t){return null==t?Vr:Vr.filter((e=>e.parentBoundary===t))},sa=function(){return ea},oa={addPersonOrSystem:function(t,e,n,i,r,a,s){if(null===e||null===n)return;let o={};const c=Vr.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,Vr.push(o)),o.label=null==n?{text:""}:{text:n},null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.sprite=r;if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=e}else o.tags=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.link=s;o.typeC4Shape={text:t},o.parentBoundary=Xr,o.wrap=sa()},addPersonOrSystemBoundary:function(t,e,n,i,r){if(null===t||null===e)return;let a={};const s=Kr.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,Kr.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.tags=i;if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.link=r;a.parentBoundary=Xr,a.wrap=sa(),Qr=Xr,Xr=t,Gr.push(Qr)},addContainer:function(t,e,n,i,r,a,s,o){if(null===e||null===n)return;let c={};const l=Vr.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Vr.push(c)),c.label=null==n?{text:""}:{text:n},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==r)c.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.descr={text:r};if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]=e}else c.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=sa(),c.typeC4Shape={text:t},c.parentBoundary=Xr},addContainerBoundary:function(t,e,n,i,r){if(null===t||null===e)return;let a={};const s=Kr.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,Kr.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.tags=i;if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.link=r;a.parentBoundary=Xr,a.wrap=sa(),Qr=Xr,Xr=t,Gr.push(Qr)},addComponent:function(t,e,n,i,r,a,s,o){if(null===e||null===n)return;let c={};const l=Vr.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Vr.push(c)),c.label=null==n?{text:""}:{text:n},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==r)c.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.descr={text:r};if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]=e}else c.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=sa(),c.typeC4Shape={text:t},c.parentBoundary=Xr},addDeploymentNode:function(t,e,n,i,r,a,s,o){if(null===e||null===n)return;let c={};const l=Kr.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Kr.push(c)),c.label=null==n?{text:""}:{text:n},null==i)c.type={text:"node"};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.type={text:i};if(null==r)c.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.descr={text:r};if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.nodeType=t,c.parentBoundary=Xr,c.wrap=sa(),Qr=Xr,Xr=e,Gr.push(Qr)},popBoundaryParseStack:function(){Xr=Qr,Gr.pop(),Qr=Gr.pop(),Gr.push(Qr)},addRel:function(t,e,n,i,r,a,s,o,c){if(null==t||null==e||null==n||null==i)return;let l={};const h=Jr.find((t=>t.from===e&&t.to===n));if(h?l=h:Jr.push(l),l.type=t,l.from=e,l.to=n,l.label={text:i},null==r)l.techn={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]={text:e}}else l.techn={text:r};if(null==a)l.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]={text:e}}else l.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.sprite=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];l[t]=e}else l.tags=o;if("object"==typeof c){let[t,e]=Object.entries(c)[0];l[t]=e}else l.link=c;l.wrap=sa()},updateElStyle:function(t,e,n,i,r,a,s,o,c,l,h){let u=Vr.find((t=>t.alias===e));if(void 0!==u||(u=Kr.find((t=>t.alias===e)),void 0!==u)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.bgColor=n;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.fontColor=i;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.borderColor=r;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.shadowing=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shape=s;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.sprite=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.techn=c;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.legendText=l;if(null!=h)if("object"==typeof h){let[t,e]=Object.entries(h)[0];u[t]=e}else u.legendSprite=h}},updateRelStyle:function(t,e,n,i,r,a,s){const o=Jr.find((t=>t.from===e&&t.to===n));if(void 0!==o){if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]=e}else o.textColor=i;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.lineColor=r;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=parseInt(e)}else o.offsetX=parseInt(a);if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=parseInt(e)}else o.offsetY=parseInt(s)}},updateLayoutConfig:function(t,e,n){let i=na,r=ia;if("object"==typeof e){const t=Object.values(e)[0];i=parseInt(t)}else i=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];r=parseInt(t)}else r=parseInt(n);i>=1&&(na=i),r>=1&&(ia=r)},autoWrap:sa,setWrap:function(t){ea=t},getC4ShapeArray:aa,getC4Shape:function(t){return Vr.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(aa(t))},getBoundarys:function(t){return null==t?Kr:Kr.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return Xr},getParentBoundaryParse:function(){return Qr},getRels:function(){return Jr},getTitle:function(){return ta},getC4Type:function(){return ra},getC4ShapeInRow:function(){return na},getC4BoundaryInRow:function(){return ia},setAccTitle:zi,getAccTitle:Ui,getAccDescription:qi,setAccDescription:Wi,parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().c4,clear:function(){Vr=[],Kr=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Qr="",Xr="global",Gr=[""],Jr=[],Gr=[""],ta="",ea=!1,na=4,ia=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=It(t,gi());ta=e},setC4Type:function(t){let e=It(t,gi());ra=e}},ca=function(t,e){const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),"undefined"!==e.attrs&&null!==e.attrs)for(let i in e.attrs)n.attr(i,e.attrs[i]);return"undefined"!==e.class&&n.attr("class",e.class),n},la=function(t,e,n,i,r,a){const o=t.append("image");o.attr("width",e),o.attr("height",n),o.attr("x",i),o.attr("y",r);let c=a.startsWith("data:image/png;base64")?a:(0,s.Nm)(a);o.attr("xlink:href",c)},ha=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},ua=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),da=function(){function t(t,e,n,r,a,s,o){i(e.append("text").attr("x",n+a/2).attr("y",r+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,r,a,s,o,c){const{fontSize:l,fontFamily:h,fontWeight:u}=c,d=t.split(jt.lineBreakRegex);for(let p=0;p<d.length;p++){const t=p*l-l*(d.length-1)/2,s=e.append("text").attr("x",n+a/2).attr("y",r).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",l).style("font-weight",u).style("font-family",h);s.append("tspan").attr("dy",t).text(d[p]).attr("alignment-baseline","mathematical"),i(s,o)}}function n(t,n,r,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",r).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,a,s,0,c,l),i(u,c)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),pa=function(t,e,n){const i=t.append("g");let r=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",o={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(o={"stroke-width":1});let c={x:e.x,y:e.y,fill:r,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:o};ca(i,c);let l=n.boundaryFont();l.fontWeight="bold",l.fontSize=l.fontSize+2,l.fontColor=s,da(n)(e.label.text,i,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},l),e.type&&""!==e.type.text&&(l=n.boundaryFont(),l.fontColor=s,da(n)(e.type.text,i,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},l)),e.descr&&""!==e.descr.text&&(l=n.boundaryFont(),l.fontSize=l.fontSize-2,l.fontColor=s,da(n)(e.descr.text,i,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},l))},fa=function(t,e,n){var i;let r=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],a=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],s=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const l=ha();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":l.x=e.x,l.y=e.y,l.fill=r,l.width=e.width,l.height=e.height,l.stroke=a,l.rx=2.5,l.ry=2.5,l.attrs={"stroke-width":.5},ca(c,l);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",r).attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":c.append("path").attr("fill",r).attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let h=ua(n,e.typeC4Shape.text);switch(c.append("text").attr("fill",s).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":la(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let u=n[e.typeC4Shape.text+"Font"]();return u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=s,da(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:s},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=s,e.techn&&""!==(null==(i=e.techn)?void 0:i.text)?da(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:s,"font-style":"italic"},u):e.type&&""!==e.type.text&&da(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:s,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=s,da(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:s},u)),e.height},ga=(t,e,n)=>{const i=t.append("g");let r=0;for(let a of e){let t=a.textColor?a.textColor:"#444444",e=a.lineColor?a.lineColor:"#444444",s=a.offsetX?parseInt(a.offsetX):0,o=a.offsetY?parseInt(a.offsetY):0,c="";if(0===r){let t=i.append("line");t.attr("x1",a.startPoint.x),t.attr("y1",a.startPoint.y),t.attr("x2",a.endPoint.x),t.attr("y2",a.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==a.type&&t.attr("marker-end","url("+c+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+c+"#arrowend)"),r=-1}else{let t=i.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),"rel_b"!==a.type&&t.attr("marker-end","url("+c+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+c+"#arrowend)")}let l=n.messageFont();da(n)(a.label.text,i,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+o,a.label.width,a.label.height,{fill:t},l),a.techn&&""!==a.techn.text&&(l=n.messageFont(),da(n)("["+a.techn.text+"]",i,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+n.messageFontSize+5+o,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:t,"font-style":"italic"},l))}},ya=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},ma=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},ba=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},_a=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},xa=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},va=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},ka=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};s.Nm;let wa=0,Ca=0,Ta=4,Ea=2;Wr.yy=oa;let Sa={};class Aa{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,La(t.db.getConfig())}setData(t,e,n,i){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,n=e+t.width,i=this.nextData.starty+2*t.margin,r=i+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>Ta)&&(e=this.nextData.startx+t.margin+Sa.nextLinePaddingX,i=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=r=i+t.height,this.nextData.cnt=1),t.x=e,t.y=i,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",r,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",r,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},La(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const La=function(t){$n(Sa,t),t.fontFamily&&(Sa.personFontFamily=Sa.systemFontFamily=Sa.messageFontFamily=t.fontFamily),t.fontSize&&(Sa.personFontSize=Sa.systemFontSize=Sa.messageFontSize=t.fontSize),t.fontWeight&&(Sa.personFontWeight=Sa.systemFontWeight=Sa.messageFontWeight=t.fontWeight)},Ba=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),Na=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function Da(t,e,n,i,r){if(!e[t].width)if(n)e[t].text=Gn(e[t].text,r,i),e[t].textLines=e[t].text.split(jt.lineBreakRegex).length,e[t].width=r,e[t].height=Qn(e[t].text,i);else{let n=e[t].text.split(jt.lineBreakRegex);e[t].textLines=n.length;let r=0;e[t].height=0,e[t].width=0;for(const a of n)e[t].width=Math.max(Kn(a,i),e[t].width),r=Qn(a,i),e[t].height=e[t].height+r}}const Oa=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=Sa.c4ShapeMargin-35;let i=e.wrap&&Sa.wrap,r=Na(Sa);r.fontSize=r.fontSize+2,r.fontWeight="bold",Da("label",e,i,r,Kn(e.label.text,r)),pa(t,e,Sa)},Ma=function(t,e,n,i){let r=0;for(const a of i){r=0;const i=n[a];let s=Ba(Sa,i.typeC4Shape.text);switch(s.fontSize=s.fontSize-2,i.typeC4Shape.width=Kn("<<"+i.typeC4Shape.text+">>",s),i.typeC4Shape.height=s.fontSize+2,i.typeC4Shape.Y=Sa.c4ShapePadding,r=i.typeC4Shape.Y+i.typeC4Shape.height-4,i.image={width:0,height:0,Y:0},i.typeC4Shape.text){case"person":case"external_person":i.image.width=48,i.image.height=48,i.image.Y=r,r=i.image.Y+i.image.height}i.sprite&&(i.image.width=48,i.image.height=48,i.image.Y=r,r=i.image.Y+i.image.height);let o=i.wrap&&Sa.wrap,c=Sa.width-2*Sa.c4ShapePadding,l=Ba(Sa,i.typeC4Shape.text);if(l.fontSize=l.fontSize+2,l.fontWeight="bold",Da("label",i,o,l,c),i.label.Y=r+8,r=i.label.Y+i.label.height,i.type&&""!==i.type.text){i.type.text="["+i.type.text+"]",Da("type",i,o,Ba(Sa,i.typeC4Shape.text),c),i.type.Y=r+5,r=i.type.Y+i.type.height}else if(i.techn&&""!==i.techn.text){i.techn.text="["+i.techn.text+"]",Da("techn",i,o,Ba(Sa,i.techn.text),c),i.techn.Y=r+5,r=i.techn.Y+i.techn.height}let h=r,u=i.label.width;if(i.descr&&""!==i.descr.text){Da("descr",i,o,Ba(Sa,i.typeC4Shape.text),c),i.descr.Y=r+20,r=i.descr.Y+i.descr.height,u=Math.max(i.label.width,i.descr.width),h=r-5*i.descr.textLines}u+=Sa.c4ShapePadding,i.width=Math.max(i.width||Sa.width,u,Sa.width),i.height=Math.max(i.height||Sa.height,h,Sa.height),i.margin=i.margin||Sa.c4ShapeMargin,t.insert(i),fa(e,i,Sa)}t.bumpLastMargin(Sa.c4ShapeMargin)};class Ia{constructor(t,e){this.x=t,this.y=e}}let Fa=function(t,e){let n=t.x,i=t.y,r=e.x,a=e.y,s=n+t.width/2,o=i+t.height/2,c=Math.abs(n-r),l=Math.abs(i-a),h=l/c,u=t.height/t.width,d=null;return i==a&&n<r?d=new Ia(n+t.width,o):i==a&&n>r?d=new Ia(n,o):n==r&&i<a?d=new Ia(s,i+t.height):n==r&&i>a&&(d=new Ia(s,i)),n>r&&i<a?d=u>=h?new Ia(n,o+h*t.width/2):new Ia(s-c/l*t.height/2,i+t.height):n<r&&i<a?d=u>=h?new Ia(n+t.width,o+h*t.width/2):new Ia(s+c/l*t.height/2,i+t.height):n<r&&i>a?d=u>=h?new Ia(n+t.width,o-h*t.width/2):new Ia(s+t.height/2*c/l,i):n>r&&i>a&&(d=u>=h?new Ia(n,o-t.width/2*h):new Ia(s-t.height/2*c/l,i)),d},$a=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let i=Fa(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:i,endPoint:Fa(e,n)}};function Ra(t,e,n,i,r){let a=new Aa(r);a.data.widthLimit=n.data.widthLimit/Math.min(Ea,i.length);for(let[s,o]of i.entries()){let i=0;o.image={width:0,height:0,Y:0},o.sprite&&(o.image.width=48,o.image.height=48,o.image.Y=i,i=o.image.Y+o.image.height);let c=o.wrap&&Sa.wrap,l=Na(Sa);if(l.fontSize=l.fontSize+2,l.fontWeight="bold",Da("label",o,c,l,a.data.widthLimit),o.label.Y=i+8,i=o.label.Y+o.label.height,o.type&&""!==o.type.text){o.type.text="["+o.type.text+"]",Da("type",o,c,Na(Sa),a.data.widthLimit),o.type.Y=i+5,i=o.type.Y+o.type.height}if(o.descr&&""!==o.descr.text){let t=Na(Sa);t.fontSize=t.fontSize-2,Da("descr",o,c,t,a.data.widthLimit),o.descr.Y=i+20,i=o.descr.Y+o.descr.height}if(0==s||s%Ea==0){let t=n.data.startx+Sa.diagramMarginX,e=n.data.stopy+Sa.diagramMarginY+i;a.setData(t,t,e,e)}else{let t=a.data.stopx!==a.data.startx?a.data.stopx+Sa.diagramMarginX:a.data.startx,e=a.data.starty;a.setData(t,t,e,e)}a.name=o.alias;let h=r.db.getC4ShapeArray(o.alias),u=r.db.getC4ShapeKeys(o.alias);u.length>0&&Ma(a,t,h,u),e=o.alias;let d=r.db.getBoundarys(e);d.length>0&&Ra(t,e,a,d,r),"global"!==o.alias&&Oa(t,o,a),n.data.stopy=Math.max(a.data.stopy+Sa.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(a.data.stopx+Sa.c4ShapeMargin,n.data.stopx),wa=Math.max(wa,n.data.stopx),Ca=Math.max(Ca,n.data.stopy)}}const Za={drawPersonOrSystemArray:Ma,drawBoundary:Oa,setConf:La,draw:function(t,e,n,i){Sa=gi().c4;const r=gi().securityLevel;let a;"sandbox"===r&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===r?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body");let c=i.db;i.db.setWrap(Sa.wrap),Ta=c.getC4ShapeInRow(),Ea=c.getC4BoundaryInRow(),Bt.debug(`C:${JSON.stringify(Sa,null,2)}`);const l="sandbox"===r?s.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`);va(l),xa(l),ka(l);let h=new Aa(i);h.setData(Sa.diagramMarginX,Sa.diagramMarginX,Sa.diagramMarginY,Sa.diagramMarginY),h.data.widthLimit=screen.availWidth,wa=Sa.diagramMarginX,Ca=Sa.diagramMarginY;const u=i.db.getTitle();Ra(l,"",h,i.db.getBoundarys(""),i),ya(l),ma(l),_a(l),ba(l),function(t,e,n,i){let r=0;for(let s of e){r+=1;let t=s.wrap&&Sa.wrap,e={fontFamily:(a=Sa).messageFontFamily,fontSize:a.messageFontSize,fontWeight:a.messageFontWeight};"C4Dynamic"===i.db.getC4Type()&&(s.label.text=r+": "+s.label.text);let o=Kn(s.label.text,e);Da("label",s,t,e,o),s.techn&&""!==s.techn.text&&(o=Kn(s.techn.text,e),Da("techn",s,t,e,o)),s.descr&&""!==s.descr.text&&(o=Kn(s.descr.text,e),Da("descr",s,t,e,o));let c=n(s.from),l=n(s.to),h=$a(c,l);s.startPoint=h.startPoint,s.endPoint=h.endPoint}var a;ga(t,e,Sa)}(l,i.db.getRels(),i.db.getC4Shape,i),h.data.stopx=wa,h.data.stopy=Ca;const d=h.data;let p=d.stopy-d.starty+2*Sa.diagramMarginY;const f=d.stopx-d.startx+2*Sa.diagramMarginX;u&&l.append("text").text(u).attr("x",(d.stopx-d.startx)/2-4*Sa.diagramMarginX).attr("y",d.starty+Sa.diagramMarginY),ki(l,p,f,Sa.useMaxWidth);const g=u?60:0;l.attr("viewBox",d.startx-Sa.diagramMarginX+" -"+(Sa.diagramMarginY+g)+" "+f+" "+(p+g)),Bt.debug("models:",d)}};var Pa=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,3],i=[1,7],r=[1,8],a=[1,9],s=[1,10],o=[1,13],c=[1,12],l=[1,16,25],h=[1,20],u=[1,32],d=[1,33],p=[1,34],f=[1,36],g=[1,39],y=[1,37],m=[1,38],b=[1,44],_=[1,45],x=[1,40],v=[1,41],k=[1,42],w=[1,43],C=[1,48],T=[1,49],E=[1,50],S=[1,51],A=[16,25],L=[1,65],B=[1,66],N=[1,67],D=[1,68],O=[1,69],M=[1,70],I=[1,71],F=[1,80],$=[16,25,32,45,46,54,60,61,62,63,64,65,66,71,73],R=[16,25,30,32,45,46,50,54,60,61,62,63,64,65,66,71,73,88,89,90,91],Z=[5,8,9,10,11,16,19,23,25],P=[54,88,89,90,91],j=[54,65,66,88,89,90,91],Y=[54,60,61,62,63,64,88,89,90,91],z=[16,25,32],U=[1,107],W={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,className:27,alphaNumToken:28,classLiteralName:29,GENERICTYPE:30,relationStatement:31,LABEL:32,classStatement:33,methodStatement:34,annotationStatement:35,clickStatement:36,cssClassStatement:37,noteStatement:38,acc_title:39,acc_title_value:40,acc_descr:41,acc_descr_value:42,acc_descr_multiline_value:43,CLASS:44,STYLE_SEPARATOR:45,STRUCT_START:46,members:47,STRUCT_STOP:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,STR:54,NOTE_FOR:55,noteText:56,NOTE:57,relationType:58,lineType:59,AGGREGATION:60,EXTENSION:61,COMPOSITION:62,DEPENDENCY:63,LOLLIPOP:64,LINE:65,DOTTED_LINE:66,CALLBACK:67,LINK:68,LINK_TARGET:69,CLICK:70,CALLBACK_NAME:71,CALLBACK_ARGS:72,HREF:73,CSSCLASS:74,commentToken:75,textToken:76,graphCodeTokens:77,textNoTagsToken:78,TAGSTART:79,TAGEND:80,"==":81,"--":82,PCT:83,DEFAULT:84,SPACE:85,MINUS:86,keywords:87,UNICODE_TEXT:88,NUM:89,ALPHA:90,BQUOTE_STR:91,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",30:"GENERICTYPE",32:"LABEL",39:"acc_title",40:"acc_title_value",41:"acc_descr",42:"acc_descr_value",43:"acc_descr_multiline_value",44:"CLASS",45:"STYLE_SEPARATOR",46:"STRUCT_START",48:"STRUCT_STOP",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"STR",55:"NOTE_FOR",57:"NOTE",60:"AGGREGATION",61:"EXTENSION",62:"COMPOSITION",63:"DEPENDENCY",64:"LOLLIPOP",65:"LINE",66:"DOTTED_LINE",67:"CALLBACK",68:"LINK",69:"LINK_TARGET",70:"CLICK",71:"CALLBACK_NAME",72:"CALLBACK_ARGS",73:"HREF",74:"CSSCLASS",77:"graphCodeTokens",79:"TAGSTART",80:"TAGEND",81:"==",82:"--",83:"PCT",84:"DEFAULT",85:"SPACE",86:"MINUS",87:"keywords",88:"UNICODE_TEXT",89:"NUM",90:"ALPHA",91:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[47,1],[47,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[38,3],[38,2],[53,3],[53,2],[53,2],[53,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[75,1],[75,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[78,1],[78,1],[78,1],[78,1],[28,1],[28,1],[28,1],[29,1],[56,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 5:i.setDirection("TB");break;case 6:i.setDirection("BT");break;case 7:i.setDirection("RL");break;case 8:i.setDirection("LR");break;case 12:i.parseDirective("%%{","open_directive");break;case 13:i.parseDirective(a[o],"type_directive");break;case 14:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 15:i.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=a[o];break;case 22:this.$=a[o-1]+a[o];break;case 23:case 24:this.$=a[o-1]+"~"+a[o];break;case 25:i.addRelation(a[o]);break;case 26:a[o-1].title=i.cleanupLabel(a[o]),i.addRelation(a[o-1]);break;case 35:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 36:case 37:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 38:i.addClass(a[o]);break;case 39:i.addClass(a[o-2]),i.setCssClass(a[o-2],a[o]);break;case 40:i.addClass(a[o-3]),i.addMembers(a[o-3],a[o-1]);break;case 41:i.addClass(a[o-5]),i.setCssClass(a[o-5],a[o-3]),i.addMembers(a[o-5],a[o-1]);break;case 42:i.addAnnotation(a[o],a[o-2]);break;case 43:this.$=[a[o]];break;case 44:a[o].push(a[o-1]),this.$=a[o];break;case 45:case 47:case 48:break;case 46:i.addMember(a[o-1],i.cleanupLabel(a[o]));break;case 49:this.$={id1:a[o-2],id2:a[o],relation:a[o-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:a[o-3],id2:a[o],relation:a[o-1],relationTitle1:a[o-2],relationTitle2:"none"};break;case 51:this.$={id1:a[o-3],id2:a[o],relation:a[o-2],relationTitle1:"none",relationTitle2:a[o-1]};break;case 52:this.$={id1:a[o-4],id2:a[o],relation:a[o-2],relationTitle1:a[o-3],relationTitle2:a[o-1]};break;case 53:i.addNote(a[o],a[o-1]);break;case 54:i.addNote(a[o]);break;case 55:this.$={type1:a[o-2],type2:a[o],lineType:a[o-1]};break;case 56:this.$={type1:"none",type2:a[o],lineType:a[o-1]};break;case 57:this.$={type1:a[o-1],type2:"none",lineType:a[o]};break;case 58:this.$={type1:"none",type2:"none",lineType:a[o]};break;case 59:this.$=i.relationType.AGGREGATION;break;case 60:this.$=i.relationType.EXTENSION;break;case 61:this.$=i.relationType.COMPOSITION;break;case 62:this.$=i.relationType.DEPENDENCY;break;case 63:this.$=i.relationType.LOLLIPOP;break;case 64:this.$=i.lineType.LINE;break;case 65:this.$=i.lineType.DOTTED_LINE;break;case 66:case 72:this.$=a[o-2],i.setClickEvent(a[o-1],a[o]);break;case 67:case 73:this.$=a[o-3],i.setClickEvent(a[o-2],a[o-1]),i.setTooltip(a[o-2],a[o]);break;case 68:case 76:this.$=a[o-2],i.setLink(a[o-1],a[o]);break;case 69:case 77:this.$=a[o-3],i.setLink(a[o-2],a[o-1],a[o]);break;case 70:case 78:this.$=a[o-3],i.setLink(a[o-2],a[o-1]),i.setTooltip(a[o-2],a[o]);break;case 71:case 79:this.$=a[o-4],i.setLink(a[o-3],a[o-2],a[o]),i.setTooltip(a[o-3],a[o-1]);break;case 74:this.$=a[o-3],i.setClickEvent(a[o-2],a[o-1],a[o]);break;case 75:this.$=a[o-4],i.setClickEvent(a[o-3],a[o-2],a[o-1]),i.setTooltip(a[o-3],a[o]);break;case 80:i.setCssClass(a[o-1],a[o])}},table:[{3:1,4:2,5:n,6:4,7:5,8:i,9:r,10:a,11:s,12:6,13:11,19:o,23:c},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:n,6:4,7:5,8:i,9:r,10:a,11:s,12:6,13:11,19:o,23:c},{1:[2,9]},e(l,[2,5]),e(l,[2,6]),e(l,[2,7]),e(l,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:h},e([17,22],[2,13]),{6:31,7:30,8:i,9:r,10:a,11:s,13:11,19:o,24:21,26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:u,41:d,43:p,44:f,49:g,51:y,52:m,55:b,57:_,67:x,68:v,70:k,74:w,88:C,89:T,90:E,91:S},{16:[1,52]},{18:53,21:[1,54]},{16:[2,15]},{25:[1,55]},{16:[1,56],25:[2,17]},e(A,[2,25],{32:[1,57]}),e(A,[2,27]),e(A,[2,28]),e(A,[2,29]),e(A,[2,30]),e(A,[2,31]),e(A,[2,32]),e(A,[2,33]),e(A,[2,34]),{40:[1,58]},{42:[1,59]},e(A,[2,37]),e(A,[2,45],{53:60,58:63,59:64,32:[1,62],54:[1,61],60:L,61:B,62:N,63:D,64:O,65:M,66:I}),{27:72,28:46,29:47,88:C,89:T,90:E,91:S},e(A,[2,47]),e(A,[2,48]),{28:73,88:C,89:T,90:E},{27:74,28:46,29:47,88:C,89:T,90:E,91:S},{27:75,28:46,29:47,88:C,89:T,90:E,91:S},{27:76,28:46,29:47,88:C,89:T,90:E,91:S},{54:[1,77]},{27:78,28:46,29:47,88:C,89:T,90:E,91:S},{54:F,56:79},e($,[2,20],{28:46,29:47,27:81,30:[1,82],88:C,89:T,90:E,91:S}),e($,[2,21],{30:[1,83]}),e(R,[2,94]),e(R,[2,95]),e(R,[2,96]),e([16,25,30,32,45,46,54,60,61,62,63,64,65,66,71,73],[2,97]),e(Z,[2,10]),{15:84,22:h},{22:[2,14]},{1:[2,16]},{6:31,7:30,8:i,9:r,10:a,11:s,13:11,19:o,24:85,25:[2,18],26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:u,41:d,43:p,44:f,49:g,51:y,52:m,55:b,57:_,67:x,68:v,70:k,74:w,88:C,89:T,90:E,91:S},e(A,[2,26]),e(A,[2,35]),e(A,[2,36]),{27:86,28:46,29:47,54:[1,87],88:C,89:T,90:E,91:S},{53:88,58:63,59:64,60:L,61:B,62:N,63:D,64:O,65:M,66:I},e(A,[2,46]),{59:89,65:M,66:I},e(P,[2,58],{58:90,60:L,61:B,62:N,63:D,64:O}),e(j,[2,59]),e(j,[2,60]),e(j,[2,61]),e(j,[2,62]),e(j,[2,63]),e(Y,[2,64]),e(Y,[2,65]),e(A,[2,38],{45:[1,91],46:[1,92]}),{50:[1,93]},{54:[1,94]},{54:[1,95]},{71:[1,96],73:[1,97]},{28:98,88:C,89:T,90:E},{54:F,56:99},e(A,[2,54]),e(A,[2,98]),e($,[2,22]),e($,[2,23]),e($,[2,24]),{16:[1,100]},{25:[2,19]},e(z,[2,49]),{27:101,28:46,29:47,88:C,89:T,90:E,91:S},{27:102,28:46,29:47,54:[1,103],88:C,89:T,90:E,91:S},e(P,[2,57],{58:104,60:L,61:B,62:N,63:D,64:O}),e(P,[2,56]),{28:105,88:C,89:T,90:E},{47:106,51:U},{27:108,28:46,29:47,88:C,89:T,90:E,91:S},e(A,[2,66],{54:[1,109]}),e(A,[2,68],{54:[1,111],69:[1,110]}),e(A,[2,72],{54:[1,112],72:[1,113]}),e(A,[2,76],{54:[1,115],69:[1,114]}),e(A,[2,80]),e(A,[2,53]),e(Z,[2,11]),e(z,[2,51]),e(z,[2,50]),{27:116,28:46,29:47,88:C,89:T,90:E,91:S},e(P,[2,55]),e(A,[2,39],{46:[1,117]}),{48:[1,118]},{47:119,48:[2,43],51:U},e(A,[2,42]),e(A,[2,67]),e(A,[2,69]),e(A,[2,70],{69:[1,120]}),e(A,[2,73]),e(A,[2,74],{54:[1,121]}),e(A,[2,77]),e(A,[2,78],{69:[1,122]}),e(z,[2,52]),{47:123,51:U},e(A,[2,40]),{48:[2,44]},e(A,[2,71]),e(A,[2,75]),e(A,[2,79]),{48:[1,124]},e(A,[2,41])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],54:[2,14],55:[2,16],85:[2,19],119:[2,44]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},q=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),39;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),41;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 39:case 42:case 45:case 48:case 51:case 54:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),46;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),48;case 28:return"MEMBER";case 29:return 44;case 30:return 74;case 31:return 67;case 32:return 68;case 33:return 70;case 34:return 55;case 35:return 57;case 36:return 49;case 37:return 50;case 38:this.begin("generic");break;case 40:return"GENERICTYPE";case 41:this.begin("string");break;case 43:return"STR";case 44:this.begin("bqstring");break;case 46:return"BQUOTE_STR";case 47:this.begin("href");break;case 49:return 73;case 50:this.begin("callback_name");break;case 52:this.popState(),this.begin("callback_args");break;case 53:return 71;case 55:return 72;case 56:case 57:case 58:case 59:return 69;case 60:case 61:return 61;case 62:case 63:return 63;case 64:return 62;case 65:return 60;case 66:return 64;case 67:return 65;case 68:return 66;case 69:return 32;case 70:return 45;case 71:return 86;case 72:return"DOT";case 73:return"PLUS";case 74:return 83;case 75:case 76:return"EQUALS";case 77:return 90;case 78:return"PUNCTUATION";case 79:return 89;case 80:return 88;case 81:return 85;case 82:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\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\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\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\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-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\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-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\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\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\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\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\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])/,/^(?:\s)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[54,55],inclusive:!1},callback_name:{rules:[51,52,53],inclusive:!1},href:{rules:[48,49],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[39,40],inclusive:!1},bqstring:{rules:[45,46],inclusive:!1},string:{rules:[42,43],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,37,38,41,44,47,50,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],inclusive:!0}}},t);function H(){this.yy={}}return W.lexer=q,H.prototype=W,W.Parser=H,new H}();Pa.parser=Pa;const ja=Pa,Ya=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*classDiagram/)},za=(t,e)=>{var n;return null!==t.match(/^\s*classDiagram/)&&"dagre-wrapper"===(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)||null!==t.match(/^\s*classDiagram-v2/)},Ua="classid-";let Wa=[],qa={},Ha=[],Va=0,Ga=[];const Xa=t=>jt.sanitizeText(t,gi()),Qa=function(t){let e="",n=t;if(t.indexOf("~")>0){let i=t.split("~");n=i[0],e=jt.sanitizeText(i[1],gi())}return{className:n,type:e}},Ka=function(t){let e=Qa(t);void 0===qa[e.className]&&(qa[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:Ua+e.className+"-"+Va},Va++)},Ja=function(t){const e=Object.keys(qa);for(const n of e)if(qa[n].id===t)return qa[n].domId},ts=function(t,e){const n=Qa(t).className,i=qa[n];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?i.annotations.push(Xa(t.substring(2,t.length-2))):t.indexOf(")")>0?i.methods.push(Xa(t)):t&&i.members.push(Xa(t))}},es=function(t,e){t.split(",").forEach((function(t){let n=t;t[0].match(/\d/)&&(n=Ua+n),void 0!==qa[n]&&qa[n].cssClasses.push(e)}))},ns=function(t,e,n){const i=gi();let r=t,a=Ja(r);if("loose"===i.securityLevel&&void 0!==e&&void 0!==qa[r]){let t=[];if("string"==typeof n){t=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let e=0;e<t.length;e++){let n=t[e].trim();'"'===n.charAt(0)&&'"'===n.charAt(n.length-1)&&(n=n.substr(1,n.length-2)),t[e]=n}}0===t.length&&t.push(a),Ga.push((function(){const n=document.querySelector(`[id="${a}"]`);null!==n&&n.addEventListener("click",(function(){ai.runFunc(e,...t)}),!1)}))}},is=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};Ga.push(is);let rs="TB";const as={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},setAccTitle:zi,getAccTitle:Ui,getAccDescription:qi,setAccDescription:Wi,getConfig:()=>gi().class,addClass:Ka,bindFunctions:function(t){Ga.forEach((function(e){e(t)}))},clear:function(){Wa=[],qa={},Ha=[],Ga=[],Ga.push(is),Yi()},getClass:function(t){return qa[t]},getClasses:function(){return qa},getNotes:function(){return Ha},addAnnotation:function(t,e){const n=Qa(t).className;qa[n].annotations.push(e)},addNote:function(t,e){const n={id:`note${Ha.length}`,class:e,text:t};Ha.push(n)},getRelations:function(){return Wa},addRelation:function(t){Bt.debug("Adding relation: "+JSON.stringify(t)),Ka(t.id1),Ka(t.id2),t.id1=Qa(t.id1).className,t.id2=Qa(t.id2).className,t.relationTitle1=jt.sanitizeText(t.relationTitle1.trim(),gi()),t.relationTitle2=jt.sanitizeText(t.relationTitle2.trim(),gi()),Wa.push(t)},getDirection:()=>rs,setDirection:t=>{rs=t},addMember:ts,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>ts(t,e))))},cleanupLabel:function(t){return":"===t.substring(0,1)?jt.sanitizeText(t.substr(1).trim(),gi()):Xa(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){ns(t,e,n),qa[t].haveCallback=!0})),es(t,"clickable")},setCssClass:es,setLink:function(t,e,n){const i=gi();t.split(",").forEach((function(t){let r=t;t[0].match(/\d/)&&(r=Ua+r),void 0!==qa[r]&&(qa[r].link=ai.formatUrl(e,i),"sandbox"===i.securityLevel?qa[r].linkTarget="_top":qa[r].linkTarget="string"==typeof n?Xa(n):"_blank")})),es(t,"clickable")},getTooltip:function(t){return qa[t].tooltip},setTooltip:function(t,e){const n=gi();t.split(",").forEach((function(t){void 0!==e&&(qa[t].tooltip=jt.sanitizeText(e,n))}))},lookUpDomId:Ja,setDiagramTitle:Hi,getDiagramTitle:Vi};let ss=0;const os=function(t){let e=t.match(/^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/),n=t.match(/^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/);return e&&!n?cs(e):n?ls(n):hs(t)},cs=function(t){let e="",n="";try{let i=t[1]?t[1].trim():"",r=t[2]?t[2].trim():"",a=t[3]?Pt(t[3].trim()):"",s=t[4]?t[4].trim():"",o=t[5]?t[5].trim():"";n=i+r+a+" "+s,e=ds(o)}catch(i){n=t}return{displayText:n,cssStyle:e}},ls=function(t){let e="",n="";try{let i=t[1]?t[1].trim():"",r=t[2]?t[2].trim():"",a=t[3]?Pt(t[3].trim()):"",s=t[4]?t[4].trim():"";n=i+r+"("+a+")"+(t[5]?" : "+Pt(t[5]).trim():""),e=ds(s)}catch(i){n=t}return{displayText:n,cssStyle:e}},hs=function(t){let e="",n="",i="",r=t.indexOf("("),a=t.indexOf(")");if(r>1&&a>r&&a<=t.length){let s="",o="",c=t.substring(0,1);c.match(/\w/)?o=t.substring(0,r).trim():(c.match(/[#+~-]/)&&(s=c),o=t.substring(1,r).trim());const l=t.substring(r+1,a);t.substring(a+1,1),n=ds(t.substring(a+1,a+2)),e=s+o+"("+Pt(l.trim())+")",a<t.length&&(i=t.substring(a+2).trim(),""!==i&&(i=" : "+Pt(i),e+=i))}else e=Pt(t);return{displayText:e,cssStyle:n}},us=function(t,e,n,i){let r=os(e);const a=t.append("tspan").attr("x",i.padding).text(r.displayText);""!==r.cssStyle&&a.attr("style",r.cssStyle),n||a.attr("dy",i.textHeight)},ds=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},ps=function(t,e,n,i){Bt.debug("Rendering class ",e,n);const r=e.id,a={id:r,label:e.id,width:0,height:0},s=t.append("g").attr("id",i.db.lookUpDomId(r)).attr("class","classGroup");let o;o=e.link?s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=o.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",n.textHeight),c=!1}));let l=e.id;void 0!==e.type&&""!==e.type&&(l+="<"+e.type+">");const h=o.append("tspan").text(l).attr("class","title");c||h.attr("dy",n.textHeight);const u=o.node().getBBox().height,d=s.append("line").attr("x1",0).attr("y1",n.padding+u+n.dividerMargin/2).attr("y2",n.padding+u+n.dividerMargin/2),p=s.append("text").attr("x",n.padding).attr("y",u+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(t){us(p,t,c,n),c=!1}));const f=p.node().getBBox(),g=s.append("line").attr("x1",0).attr("y1",n.padding+u+n.dividerMargin+f.height).attr("y2",n.padding+u+n.dividerMargin+f.height),y=s.append("text").attr("x",n.padding).attr("y",u+2*n.dividerMargin+f.height+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(t){us(y,t,c,n),c=!1}));const m=s.node().getBBox();var b=" ";e.cssClasses.length>0&&(b+=e.cssClasses.join(" "));const _=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*n.padding).attr("height",m.height+n.padding+.5*n.dividerMargin).attr("class",b).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(_-t.getBBox().width)/2)})),e.tooltip&&o.insert("title").text(e.tooltip),d.attr("x2",_),g.attr("x2",_),a.width=_,a.height=m.height+n.padding+.5*n.dividerMargin,a},fs=function(t,e,n,i,r){const a=function(t){switch(t){case r.db.relationType.AGGREGATION:return"aggregation";case r.db.relationType.EXTENSION:return"extension";case r.db.relationType.COMPOSITION:return"composition";case r.db.relationType.DEPENDENCY:return"dependency";case r.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const s=e.points,c=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),l=t.append("path").attr("d",c(s)).attr("id","edge"+ss).attr("class","relation");let h,u,d="";i.arrowMarkerAbsolute&&(d=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,d=d.replace(/\(/g,"\\("),d=d.replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),10==n.relation.lineType&&l.attr("class","relation dotted-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+d+"#"+a(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+d+"#"+a(n.relation.type2)+"End)");const p=e.points.length;let f,g,y,m,b=ai.calcLabelPosition(e.points);if(h=b.x,u=b.y,p%2!=0&&p>1){let t=ai.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),i=ai.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[p-1]);Bt.debug("cardinality_1_point "+JSON.stringify(t)),Bt.debug("cardinality_2_point "+JSON.stringify(i)),f=t.x,g=t.y,y=i.x,m=i.y}if(void 0!==n.title){const e=t.append("g").attr("class","classLabel"),r=e.append("text").attr("class","label").attr("x",h).attr("y",u).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=r;const a=r.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",a.x-i.padding/2).attr("y",a.y-i.padding/2).attr("width",a.width+i.padding).attr("height",a.height+i.padding)}if(Bt.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",f).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle1)}if(void 0!==n.relationTitle2&&"none"!==n.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",m).attr("fill","black").attr("font-size","6").text(n.relationTitle2)}ss++},gs=function(t,e,n,i){Bt.debug("Rendering note ",e,n);const r=e.id,a={id:r,text:e.text,width:0,height:0},s=t.append("g").attr("id",r).attr("class","classGroup");let o=s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);const c=JSON.parse(`"${e.text}"`).split("\n");c.forEach((function(t){Bt.debug(`Adding line: ${t}`),o.append("tspan").text(t).attr("class","title").attr("dy",n.textHeight)}));const l=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",l.width+2*n.padding).attr("height",l.height+c.length*n.textHeight+n.padding+.5*n.dividerMargin).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(h-t.getBBox().width)/2)})),a.width=h,a.height=l.height+c.length*n.textHeight+n.padding+.5*n.dividerMargin,a};let ys={};const ms=function(t){const e=Object.entries(ys).find((e=>e[1].label===t));if(e)return e[0]},bs={draw:function(t,e,n,i){const r=gi().class;ys={},Bt.info("Rendering diagram "+t);const a=gi().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),l=c.select(`[id='${e}']`);var h;(h=l).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),h.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),h.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),h.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),h.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),h.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),h.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),h.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");const u=new lt.k({multigraph:!0});u.setGraph({isMultiGraph:!0}),u.setDefaultEdgeLabel((function(){return{}}));const d=i.db.getClasses(),p=Object.keys(d);for(const o of p){const t=d[o],e=ps(l,t,r,i);ys[e.id]=e,u.setNode(e.id,e),Bt.info("Org height: "+e.height)}i.db.getRelations().forEach((function(t){Bt.info("tjoho"+ms(t.id1)+ms(t.id2)+JSON.stringify(t)),u.setEdge(ms(t.id1),ms(t.id2),{relation:t},t.title||"DEFAULT")}));i.db.getNotes().forEach((function(t){Bt.debug(`Adding note: ${JSON.stringify(t)}`);const e=gs(l,t,r,i);ys[e.id]=e,u.setNode(e.id,e),t.class&&t.class in d&&u.setEdge(t.id,ms(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,ct.bK)(u),u.nodes().forEach((function(t){void 0!==t&&void 0!==u.node(t)&&(Bt.debug("Node "+t+": "+JSON.stringify(u.node(t))),c.select("#"+(i.db.lookUpDomId(t)||t)).attr("transform","translate("+(u.node(t).x-u.node(t).width/2)+","+(u.node(t).y-u.node(t).height/2)+" )"))})),u.edges().forEach((function(t){void 0!==t&&void 0!==u.edge(t)&&(Bt.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(u.edge(t))),fs(l,u.edge(t),u.edge(t).relation,r,i))}));const f=l.node().getBBox(),g=f.width+40,y=f.height+40;ki(l,y,g,r.useMaxWidth);const m=`${f.x-20} ${f.y-20} ${g} ${y}`;Bt.debug(`viewBox ${m}`),l.attr("viewBox",m)}},_s={extension:(t,e,n)=>{Bt.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 12 20").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},xs=(t,e,n,i)=>{e.forEach((e=>{_s[e](t,n,i)}))};const vs=(t,e,n,i)=>{let r=t||"";if("object"==typeof r&&(r=r[0]),Zt(gi().flowchart.htmlLabels)){r=r.replace(/\\n|\n/g,"<br />"),Bt.info("vertexText"+r);let t=function(t){const e=(0,o.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),n=e.append("xhtml:div"),i=t.label,r=t.isNode?"nodeLabel":"edgeLabel";var a,s;return n.html('<span class="'+r+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+i+"</span>"),a=n,(s=t.labelStyle)&&a.attr("style",s),n.style("display","inline-block"),n.style("white-space","nowrap"),n.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:gp(r).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let i=[];i="string"==typeof r?r.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(r)?r:[];for(const e of i){const i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),n?i.setAttribute("class","title-row"):i.setAttribute("class","row"),i.textContent=e.trim(),t.appendChild(i)}return t}},ks=(t,e,n,i)=>{let r;r=n||"node default";const a=t.insert("g").attr("class",r).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",e.labelStyle);let c;c=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const l=s.node().appendChild(vs(It(gp(c),gi()),e.labelStyle,!1,i));let h=l.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=l.children[0],e=(0,o.Ys)(l);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}const u=e.padding/2;return s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),{shapeSvg:a,bbox:h,halfPadding:u,label:s}},ws=(t,e)=>{const n=e.node().getBBox();t.width=n.width,t.height=n.height};function Cs(t,e,n,i){return t.insert("polygon",":first-child").attr("points",i.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+n/2+")")}let Ts={},Es={},Ss={};const As=(t,e)=>(Bt.trace("In isDecendant",e," ",t," = ",Es[e].includes(t)),!!Es[e].includes(t)),Ls=(t,e,n,i)=>{Bt.warn("Copying children of ",t,"root",i,"data",e.node(t),i);const r=e.children(t)||[];t!==i&&r.push(t),Bt.warn("Copying (nodes) clusterId",t,"nodes",r),r.forEach((r=>{if(e.children(r).length>0)Ls(r,e,n,i);else{const a=e.node(r);Bt.info("cp ",r," to ",i," with parent ",t),n.setNode(r,a),i!==e.parent(r)&&(Bt.warn("Setting parent",r,e.parent(r)),n.setParent(r,e.parent(r))),t!==i&&r!==t?(Bt.debug("Setting parent",r,t),n.setParent(r,t)):(Bt.info("In copy ",t,"root",i,"data",e.node(t),i),Bt.debug("Not Setting parent for node=",r,"cluster!==rootId",t!==i,"node!==clusterId",r!==t));const s=e.edges(r);Bt.debug("Copying Edges",s),s.forEach((r=>{Bt.info("Edge",r);const a=e.edge(r.v,r.w,r.name);Bt.info("Edge data",a,i);try{((t,e)=>(Bt.info("Decendants of ",e," is ",Es[e]),Bt.info("Edge is ",t),t.v!==e&&t.w!==e&&(Es[e]?Es[e].includes(t.v)||As(t.v,e)||As(t.w,e)||Es[e].includes(t.w):(Bt.debug("Tilt, ",e,",not in decendants"),!1))))(r,i)?(Bt.info("Copying as ",r.v,r.w,a,r.name),n.setEdge(r.v,r.w,a,r.name),Bt.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):Bt.info("Skipping copy of edge ",r.v,"--\x3e",r.w," rootId: ",i," clusterId:",t)}catch(s){Bt.error(s)}}))}Bt.debug("Removing node",r),e.removeNode(r)}))},Bs=(t,e)=>{const n=e.children(t);let i=[...n];for(const r of n)Ss[r]=t,i=[...i,...Bs(r,e)];return i},Ns=(t,e)=>{Bt.trace("Searching",t);const n=e.children(t);if(Bt.trace("Searching children of id ",t,n),n.length<1)return Bt.trace("This is a valid node",t),t;for(const i of n){const n=Ns(i,e);if(n)return Bt.trace("Found replacement for",t," => ",n),n}},Ds=t=>Ts[t]&&Ts[t].externalConnections&&Ts[t]?Ts[t].id:t,Os=(t,e)=>{if(Bt.warn("extractor - ",e,ht.c(t),t.children("D")),e>10)return void Bt.error("Bailing out");let n=t.nodes(),i=!1;for(const r of n){const e=t.children(r);i=i||e.length>0}if(i){Bt.debug("Nodes = ",n,e);for(const i of n)if(Bt.debug("Extracting node",i,Ts,Ts[i]&&!Ts[i].externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),Ts[i])if(!Ts[i].externalConnections&&t.children(i)&&t.children(i).length>0){Bt.warn("Cluster without external connections, without a parent and with children",i,e);let n="TB"===t.graph().rankdir?"LR":"TB";Ts[i]&&Ts[i].clusterData&&Ts[i].clusterData.dir&&(n=Ts[i].clusterData.dir,Bt.warn("Fixing dir",Ts[i].clusterData.dir,n));const r=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));Bt.warn("Old graph before copy",ht.c(t)),Ls(i,t,r,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:Ts[i].clusterData,labelText:Ts[i].labelText,graph:r}),Bt.warn("New graph after copy node: (",i,")",ht.c(r)),Bt.debug("Old graph after copy",ht.c(t))}else Bt.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!Ts[i].externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Bt.debug(Ts);else Bt.debug("Not a cluster",i,e);n=t.nodes(),Bt.warn("New list of nodes",n);for(const i of n){const n=t.node(i);Bt.warn(" Now next level",i,n),n.clusterNode&&Os(n.graph,e+1)}}else Bt.debug("Done, no node has children",t.nodes())},Ms=(t,e)=>{if(0===e.length)return[];let n=Object.assign(e);return e.forEach((e=>{const i=t.children(e),r=Ms(t,i);n=[...n,...r]})),n};function Is(t,e,n,i){var r=t.x,a=t.y,s=r-i.x,o=a-i.y,c=Math.sqrt(e*e*o*o+n*n*s*s),l=Math.abs(e*n*s/c);i.x<r&&(l=-l);var h=Math.abs(e*n*o/c);return i.y<a&&(h=-h),{x:r+l,y:a+h}}function Fs(t,e,n,i){var r,a,s,o,c,l,h,u,d,p,f,g,y;if(r=e.y-t.y,s=t.x-e.x,c=e.x*t.y-t.x*e.y,d=r*n.x+s*n.y+c,p=r*i.x+s*i.y+c,!(0!==d&&0!==p&&$s(d,p)||(a=i.y-n.y,o=n.x-i.x,l=i.x*n.y-n.x*i.y,h=a*t.x+o*t.y+l,u=a*e.x+o*e.y+l,0!==h&&0!==u&&$s(h,u)||0==(f=r*o-a*s))))return g=Math.abs(f/2),{x:(y=s*l-o*c)<0?(y-g)/f:(y+g)/f,y:(y=a*c-r*l)<0?(y-g)/f:(y+g)/f}}function $s(t,e){return t*e>0}const Rs=(t,e)=>{var n,i,r=t.x,a=t.y,s=e.x-r,o=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=0===o?0:l*s/o,i=l):(s<0&&(c=-c),n=c,i=0===s?0:c*o/s),{x:r+n,y:a+i}},Zs={node:function(t,e){return t.intersect(e)},circle:function(t,e,n){return Is(t,e,e,n)},ellipse:Is,polygon:function(t,e,n){var i=t.x,r=t.y,a=[],s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),o=Math.min(o,t.y)})):(s=Math.min(s,e.x),o=Math.min(o,e.y));for(var c=i-t.width/2-s,l=r-t.height/2-o,h=0;h<e.length;h++){var u=e[h],d=e[h<e.length-1?h+1:0],p=Fs(t,n,{x:c+u.x,y:l+u.y},{x:c+d.x,y:l+d.y});p&&a.push(p)}return a.length?(a.length>1&&a.sort((function(t,e){var i=t.x-n.x,r=t.y-n.y,a=Math.sqrt(i*i+r*r),s=e.x-n.x,o=e.y-n.y,c=Math.sqrt(s*s+o*o);return a<c?-1:a===c?0:1})),a[0]):t},rect:Rs},Ps=(t,e)=>{const{shapeSvg:n,bbox:i,halfPadding:r}=ks(t,e,"node "+e.classes,!0);Bt.info("Classes = ",e.classes);const a=n.insert("rect",":first-child");return a.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-r).attr("y",-i.height/2-r).attr("width",i.width+e.padding).attr("height",i.height+e.padding),ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},n},js=(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding+(i.height+e.padding),a=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}];Bt.info("Question main (Circle)");const s=Cs(n,r,r,a);return s.attr("style",e.style),ws(e,s),e.intersect=function(t){return Bt.warn("Intersect called"),Zs.polygon(e,a,t)},n};function Ys(t,e,n,i){const r=[],a=t=>{r.push(t,0)},s=t=>{r.push(0,t)};e.includes("t")?(Bt.debug("add top border"),a(n)):s(n),e.includes("r")?(Bt.debug("add right border"),a(i)):s(i),e.includes("b")?(Bt.debug("add bottom border"),a(n)):s(n),e.includes("l")?(Bt.debug("add left border"),a(i)):s(i),t.attr("stroke-dasharray",r.join(" "))}const zs=(t,e,n)=>{const i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let r=70,a=10;"LR"===n&&(r=10,a=70);const s=i.append("rect").attr("x",-1*r/2).attr("y",-1*a/2).attr("width",r).attr("height",a).attr("class","fork-join");return ws(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Zs.rect(e,t)},i},Us={rhombus:js,question:js,rect:(t,e)=>{const{shapeSvg:n,bbox:i,halfPadding:r}=ks(t,e,"node "+e.classes,!0);Bt.trace("Classes = ",e.classes);const a=n.insert("rect",":first-child"),s=i.width+e.padding,o=i.height+e.padding;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-r).attr("y",-i.height/2-r).attr("width",s).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(Ys(a,e.props.borders,s,o),t.delete("borders")),t.forEach((t=>{Bt.warn(`Unknown node property ${t}`)}))}return ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},n},labelRect:(t,e)=>{const{shapeSvg:n}=ks(t,e,"label",!0);Bt.trace("Classes = ",e.classes);const i=n.insert("rect",":first-child");if(i.attr("width",0).attr("height",0),n.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(Ys(i,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{Bt.warn(`Unknown node property ${t}`)}))}return ws(e,i),e.intersect=function(t){return Zs.rect(e,t)},n},rectWithTitle:(t,e)=>{let n;n=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),r=i.insert("rect",":first-child"),a=i.insert("line"),s=i.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let l="";l="object"==typeof c?c[0]:c,Bt.info("Label text abc79",l,c,"object"==typeof c);const h=s.node().appendChild(vs(l,e.labelStyle,!0,!0));let u={width:0,height:0};if(Zt(gi().flowchart.htmlLabels)){const t=h.children[0],e=(0,o.Ys)(h);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}Bt.info("Text 2",c);const d=c.slice(1,c.length);let p=h.getBBox();const f=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(Zt(gi().flowchart.htmlLabels)){const t=f.children[0],e=(0,o.Ys)(f);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}const g=e.padding/2;return(0,o.Ys)(f).attr("transform","translate( "+(u.width>p.width?0:(p.width-u.width)/2)+", "+(p.height+g+5)+")"),(0,o.Ys)(h).attr("transform","translate( "+(u.width<p.width?0:-(p.width-u.width)/2)+", 0)"),u=s.node().getBBox(),s.attr("transform","translate("+-u.width/2+", "+(-u.height/2-g+3)+")"),r.attr("class","outer title-state").attr("x",-u.width/2-g).attr("y",-u.height/2-g).attr("width",u.width+e.padding).attr("height",u.height+e.padding),a.attr("class","divider").attr("x1",-u.width/2-g).attr("x2",u.width/2+g).attr("y1",-u.height/2-g+p.height+g).attr("y2",-u.height/2-g+p.height+g),ws(e,r),e.intersect=function(t){return Zs.rect(e,t)},i},choice:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return n.insert("polygon",":first-child").attr("points",i.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return Zs.circle(e,14,t)},n},circle:(t,e)=>{const{shapeSvg:n,bbox:i,halfPadding:r}=ks(t,e,void 0,!0),a=n.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+r).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Bt.info("Circle main"),ws(e,a),e.intersect=function(t){return Bt.info("Circle intersect",e,i.width/2+r,t),Zs.circle(e,i.width/2+r,t)},n},doublecircle:(t,e)=>{const{shapeSvg:n,bbox:i,halfPadding:r}=ks(t,e,void 0,!0),a=n.insert("g",":first-child"),s=a.insert("circle"),o=a.insert("circle");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+r+5).attr("width",i.width+e.padding+10).attr("height",i.height+e.padding+10),o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+r).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Bt.info("DoubleCircle main"),ws(e,s),e.intersect=function(t){return Bt.info("DoubleCircle intersect",e,i.width/2+r+5,t),Zs.circle(e,i.width/2+r+5,t)},n},stadium:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.height+e.padding,a=i.width+r/4+e.padding,s=n.insert("rect",":first-child").attr("style",e.style).attr("rx",r/2).attr("ry",r/2).attr("x",-a/2).attr("y",-r/2).attr("width",a).attr("height",r);return ws(e,s),e.intersect=function(t){return Zs.rect(e,t)},n},hexagon:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.height+e.padding,a=r/4,s=i.width+2*a+e.padding,o=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-r/2},{x:s-a,y:-r},{x:a,y:-r},{x:0,y:-r/2}],c=Cs(n,s,r,o);return c.attr("style",e.style),ws(e,c),e.intersect=function(t){return Zs.polygon(e,o,t)},n},rect_left_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:-a/2,y:0},{x:r,y:0},{x:r,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Cs(n,r,a,s).attr("style",e.style),e.width=r+a,e.height=a,e.intersect=function(t){return Zs.polygon(e,s,t)},n},lean_right:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:r-a/6,y:0},{x:r+2*a/6,y:-a},{x:a/6,y:-a}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},lean_left:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:2*a/6,y:0},{x:r+a/6,y:0},{x:r-2*a/6,y:-a},{x:-a/6,y:-a}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},trapezoid:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:r+2*a/6,y:0},{x:r-a/6,y:-a},{x:a/6,y:-a}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},inv_trapezoid:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:a/6,y:0},{x:r-a/6,y:0},{x:r+2*a/6,y:-a},{x:-2*a/6,y:-a}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},rect_right_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:r+a/2,y:0},{x:r,y:-a/2},{x:r+a/2,y:-a},{x:0,y:-a}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},cylinder:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=r/2,s=a/(2.5+r/50),o=i.height+s+e.padding,c="M 0,"+s+" a "+a+","+s+" 0,0,0 "+r+" 0 a "+a+","+s+" 0,0,0 "+-r+" 0 l 0,"+o+" a "+a+","+s+" 0,0,0 "+r+" 0 l 0,"+-o,l=n.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",c).attr("transform","translate("+-r/2+","+-(o/2+s)+")");return ws(e,l),e.intersect=function(t){const n=Zs.rect(e,t),i=n.x-e.x;if(0!=a&&(Math.abs(i)<e.width/2||Math.abs(i)==e.width/2&&Math.abs(n.y-e.y)>e.height/2-s)){let r=s*s*(1-i*i/(a*a));0!=r&&(r=Math.sqrt(r)),r=s-r,t.y-e.y>0&&(r=-r),n.y+=r}return n},n},start:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ws(e,i),e.intersect=function(t){return Zs.circle(e,7,t)},n},end:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=n.insert("circle",":first-child"),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ws(e,r),e.intersect=function(t){return Zs.circle(e,7,t)},n},note:Ps,subroutine:(t,e)=>{const{shapeSvg:n,bbox:i}=ks(t,e,void 0,!0),r=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:r,y:0},{x:r,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],o=Cs(n,r,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},fork:zs,join:zs,class_box:(t,e)=>{const n=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const r=t.insert("g").attr("class",i).attr("id",e.domId||e.id),a=r.insert("rect",":first-child"),s=r.insert("line"),c=r.insert("line");let l=0,h=4;const u=r.insert("g").attr("class","label");let d=0;const p=e.classData.annotations&&e.classData.annotations[0],f=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",g=u.node().appendChild(vs(f,e.labelStyle,!0,!0));let y=g.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=g.children[0],e=(0,o.Ys)(g);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}e.classData.annotations[0]&&(h+=y.height+4,l+=y.width);let m=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(gi().flowchart.htmlLabels?m+="<"+e.classData.type+">":m+="<"+e.classData.type+">");const b=u.node().appendChild(vs(m,e.labelStyle,!0,!0));(0,o.Ys)(b).attr("class","classTitle");let _=b.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=b.children[0],e=(0,o.Ys)(b);_=t.getBoundingClientRect(),e.attr("width",_.width),e.attr("height",_.height)}h+=_.height+4,_.width>l&&(l=_.width);const x=[];e.classData.members.forEach((t=>{const n=os(t);let i=n.displayText;gi().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const r=u.node().appendChild(vs(i,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=r.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=r.children[0],e=(0,o.Ys)(r);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>l&&(l=a.width),h+=a.height+4,x.push(r)})),h+=8;const v=[];if(e.classData.methods.forEach((t=>{const n=os(t);let i=n.displayText;gi().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const r=u.node().appendChild(vs(i,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=r.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=r.children[0],e=(0,o.Ys)(r);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>l&&(l=a.width),h+=a.height+4,v.push(r)})),h+=8,p){let t=(l-y.width)/2;(0,o.Ys)(g).attr("transform","translate( "+(-1*l/2+t)+", "+-1*h/2+")"),d=y.height+4}let k=(l-_.width)/2;return(0,o.Ys)(b).attr("transform","translate( "+(-1*l/2+k)+", "+(-1*h/2+d)+")"),d+=_.height+4,s.attr("class","divider").attr("x1",-l/2-n).attr("x2",l/2+n).attr("y1",-h/2-n+8+d).attr("y2",-h/2-n+8+d),d+=8,x.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-l/2+", "+(-1*h/2+d+4)+")"),d+=_.height+4})),d+=8,c.attr("class","divider").attr("x1",-l/2-n).attr("x2",l/2+n).attr("y1",-h/2-n+8+d).attr("y2",-h/2-n+8+d),d+=8,v.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-l/2+", "+(-1*h/2+d)+")"),d+=_.height+4})),a.attr("class","outer title-state").attr("x",-l/2-n).attr("y",-h/2-n).attr("width",l+e.padding).attr("height",h+e.padding),ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},r}};let Ws={};const qs=(t,e,n)=>{let i,r;if(e.link){let a;"sandbox"===gi().securityLevel?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),r=Us[e.shape](i,e,n)}else r=Us[e.shape](t,e,n),i=r;return e.tooltip&&r.attr("title",e.tooltip),e.class&&r.attr("class","node default "+e.class),Ws[e.id]=i,e.haveCallback&&Ws[e.id].attr("class",Ws[e.id].attr("class")+" clickable"),i},Hs=t=>{const e=Ws[t.id];Bt.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},Vs={rect:(t,e)=>{Bt.trace("Creating subgraph rect for ",e.id,e);const n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),i=n.insert("rect",":first-child"),r=n.insert("g").attr("class","cluster-label"),a=r.node().appendChild(vs(e.labelText,e.labelStyle,void 0,!0));let s=a.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=a.children[0],e=(0,o.Ys)(a);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}const c=0*e.padding,l=c/2,h=e.width<=s.width+c?s.width+c:e.width;e.width<=s.width+c?e.diff=(s.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,Bt.trace("Data ",e,JSON.stringify(e)),i.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-h/2).attr("y",e.y-e.height/2-l).attr("width",h).attr("height",e.height+c),r.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2)+")");const u=i.node().getBBox();return e.width=u.width,e.height=u.height,e.intersect=function(t){return Rs(e,t)},n},roundedWithTitle:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),i=n.insert("rect",":first-child"),r=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),s=r.node().appendChild(vs(e.labelText,e.labelStyle,void 0,!0));let c=s.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=s.children[0],e=(0,o.Ys)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}c=s.getBBox();const l=0*e.padding,h=l/2,u=e.width<=c.width+e.padding?c.width+e.padding:e.width;e.width<=c.width+e.padding?e.diff=(c.width+0*e.padding-e.width)/2:e.diff=-e.padding/2,i.attr("class","outer").attr("x",e.x-u/2-h).attr("y",e.y-e.height/2-h).attr("width",u+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-u/2-h).attr("y",e.y-e.height/2-h+c.height-1).attr("width",u+l).attr("height",e.height+l-c.height-3),r.attr("transform","translate("+(e.x-c.width/2)+", "+(e.y-e.height/2-e.padding/3+(Zt(gi().flowchart.htmlLabels)?5:3))+")");const d=i.node().getBBox();return e.height=d.height,e.intersect=function(t){return Rs(e,t)},n},noteGroup:(t,e)=>{const n=t.insert("g").attr("class","note-cluster").attr("id",e.id),i=n.insert("rect",":first-child"),r=0*e.padding,a=r/2;i.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+r).attr("height",e.height+r).attr("fill","none");const s=i.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(t){return Rs(e,t)},n},divider:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),i=n.insert("rect",":first-child"),r=0*e.padding,a=r/2;i.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+r).attr("height",e.height+r);const s=i.node().getBBox();return e.width=s.width,e.height=s.height,e.diff=-e.padding/2,e.intersect=function(t){return Rs(e,t)},n}};let Gs={};let Xs={},Qs={};const Ks=(t,e)=>{const n=vs(e.label,e.labelStyle),i=t.insert("g").attr("class","edgeLabel"),r=i.insert("g").attr("class","label");r.node().appendChild(n);let a,s=n.getBBox();if(Zt(gi().flowchart.htmlLabels)){const t=n.children[0],e=(0,o.Ys)(n);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}if(r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xs[e.id]=i,e.width=s.width,e.height=s.height,e.startLabelLeft){const n=vs(e.startLabelLeft,e.labelStyle),i=t.insert("g").attr("class","edgeTerminals"),r=i.insert("g").attr("class","inner");a=r.node().appendChild(n);const s=n.getBBox();r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].startLeft=i,Js(a,e.startLabelLeft)}if(e.startLabelRight){const n=vs(e.startLabelRight,e.labelStyle),i=t.insert("g").attr("class","edgeTerminals"),r=i.insert("g").attr("class","inner");a=i.node().appendChild(n),r.node().appendChild(n);const s=n.getBBox();r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].startRight=i,Js(a,e.startLabelRight)}if(e.endLabelLeft){const n=vs(e.endLabelLeft,e.labelStyle),i=t.insert("g").attr("class","edgeTerminals"),r=i.insert("g").attr("class","inner");a=r.node().appendChild(n);const s=n.getBBox();r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.node().appendChild(n),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].endLeft=i,Js(a,e.endLabelLeft)}if(e.endLabelRight){const n=vs(e.endLabelRight,e.labelStyle),i=t.insert("g").attr("class","edgeTerminals"),r=i.insert("g").attr("class","inner");a=r.node().appendChild(n);const s=n.getBBox();r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.node().appendChild(n),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].endRight=i,Js(a,e.endLabelRight)}return n};function Js(t,e){gi().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const to=(t,e)=>{Bt.warn("abc88 cutPathAtIntersect",t,e);let n=[],i=t[0],r=!1;return t.forEach((t=>{if(Bt.info("abc88 checking point",t,e),((t,e)=>{const n=t.x,i=t.y,r=Math.abs(e.x-n),a=Math.abs(e.y-i),s=t.width/2,o=t.height/2;return r>=s||a>=o})(e,t)||r)Bt.warn("abc88 outside",t,i),i=t,r||n.push(t);else{const a=((t,e,n)=>{Bt.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(n)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const i=t.x,r=t.y,a=Math.abs(i-n.x),s=t.width/2;let o=n.x<e.x?s-a:s+a;const c=t.height/2,l=Math.abs(e.y-n.y),h=Math.abs(e.x-n.x);if(Math.abs(r-e.y)*s>Math.abs(i-e.x)*c){let t=n.y<e.y?e.y-c-r:r-c-e.y;o=h*t/l;const i={x:n.x<e.x?n.x+o:n.x-h+o,y:n.y<e.y?n.y+l-t:n.y-l+t};return 0===o&&(i.x=e.x,i.y=e.y),0===h&&(i.x=e.x),0===l&&(i.y=e.y),Bt.warn(`abc89 topp/bott calc, Q ${l}, q ${t}, R ${h}, r ${o}`,i),i}{o=n.x<e.x?e.x-s-i:i-s-e.x;let t=l*o/h,r=n.x<e.x?n.x+h-o:n.x-h+o,a=n.y<e.y?n.y+t:n.y-t;return Bt.warn(`sides calc abc89, Q ${l}, q ${t}, R ${h}, r ${o}`,{_x:r,_y:a}),0===o&&(r=e.x,a=e.y),0===h&&(r=e.x),0===l&&(a=e.y),{x:r,y:a}}})(e,i,t);Bt.warn("abc88 inside",t,i,a),Bt.warn("abc88 intersection",a);let s=!1;n.forEach((t=>{s=s||t.x===a.x&&t.y===a.y})),n.some((t=>t.x===a.x&&t.y===a.y))?Bt.warn("abc88 no intersect",a,n):n.push(a),r=!0}})),Bt.warn("abc88 returning points",n),n},eo=(t,e,n,i)=>{Bt.info("Graph in recursive render: XXX",ht.c(e),i);const r=e.graph().rankdir;Bt.trace("Dir in recursive render - dir:",r);const a=t.insert("g").attr("class","root");e.nodes()?Bt.info("Recursive render XXX",e.nodes()):Bt.info("No nodes found for",e),e.edges().length>0&&Bt.trace("Recursive edges",e.edge(e.edges()[0]));const s=a.insert("g").attr("class","clusters"),c=a.insert("g").attr("class","edgePaths"),l=a.insert("g").attr("class","edgeLabels"),h=a.insert("g").attr("class","nodes");e.nodes().forEach((function(t){const a=e.node(t);if(void 0!==i){const n=JSON.parse(JSON.stringify(i.clusterData));Bt.info("Setting data for cluster XXX (",t,") ",n,i),e.setNode(i.id,n),e.parent(t)||(Bt.trace("Setting parent",t,i.id),e.setParent(t,i.id,n))}if(Bt.info("(Insert) Node XXX"+t+": "+JSON.stringify(e.node(t))),a&&a.clusterNode){Bt.info("Cluster identified",t,a.width,e.node(t));const i=eo(h,a.graph,n,e.node(t)),r=i.elem;ws(a,r),a.diff=i.diff||0,Bt.info("Node bounds (abc123)",t,a,a.width,a.x,a.y),((t,e)=>{Ws[e.id]=t})(r,a),Bt.warn("Recursive render complete ",r,a)}else e.children(t).length>0?(Bt.info("Cluster - the non recursive path XXX",t,a.id,a,e),Bt.info(Ns(a.id,e)),Ts[a.id]={id:Ns(a.id,e),node:a}):(Bt.info("Node - the non recursive path",t,a.id,a),qs(h,e.node(t),r))})),e.edges().forEach((function(t){const n=e.edge(t.v,t.w,t.name);Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),Bt.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(e.edge(t))),Bt.info("Fix",Ts,"ids:",t.v,t.w,"Translateing: ",Ts[t.v],Ts[t.w]),Ks(l,n)})),e.edges().forEach((function(t){Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),Bt.info("#############################################"),Bt.info("### Layout ###"),Bt.info("#############################################"),Bt.info(e),(0,ct.bK)(e),Bt.info("Graph after layout:",ht.c(e));let u=0;return(t=>Ms(t,t.children()))(e).forEach((function(t){const n=e.node(t);Bt.info("Position "+t+": "+JSON.stringify(e.node(t))),Bt.info("Position "+t+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?Hs(n):e.children(t).length>0?(((t,e)=>{Bt.trace("Inserting cluster");const n=e.shape||"rect";Gs[e.id]=Vs[n](t,e)})(s,n),Ts[n.id].node=n):Hs(n)})),e.edges().forEach((function(t){const i=e.edge(t);Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(i),i);const r=function(t,e,n,i,r,a){let s=n.points,c=!1;const l=a.node(e.v);var h=a.node(e.w);Bt.info("abc88 InsertEdge: ",n),h.intersect&&l.intersect&&(s=s.slice(1,n.points.length-1),s.unshift(l.intersect(s[0])),Bt.info("Last point",s[s.length-1],h,h.intersect(s[s.length-1])),s.push(h.intersect(s[s.length-1]))),n.toCluster&&(Bt.info("to cluster abc88",i[n.toCluster]),s=to(n.points,i[n.toCluster].node),c=!0),n.fromCluster&&(Bt.info("from cluster abc88",i[n.fromCluster]),s=to(s.reverse(),i[n.fromCluster].node).reverse(),c=!0);const u=s.filter((t=>!Number.isNaN(t.y)));let d;d=("graph"===r||"flowchart"===r)&&n.curve||o.$0Z;const p=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d);let f;switch(n.thickness){case"normal":f="edge-thickness-normal";break;case"thick":f="edge-thickness-thick";break;default:f=""}switch(n.pattern){case"solid":f+=" edge-pattern-solid";break;case"dotted":f+=" edge-pattern-dotted";break;case"dashed":f+=" edge-pattern-dashed"}const g=t.append("path").attr("d",p(u)).attr("id",n.id).attr("class"," "+f+(n.classes?" "+n.classes:"")).attr("style",n.style);let y="";switch((gi().flowchart.arrowMarkerAbsolute||gi().state.arrowMarkerAbsolute)&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),Bt.info("arrowTypeStart",n.arrowTypeStart),Bt.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":g.attr("marker-start","url("+y+"#"+r+"-crossStart)");break;case"arrow_point":g.attr("marker-start","url("+y+"#"+r+"-pointStart)");break;case"arrow_barb":g.attr("marker-start","url("+y+"#"+r+"-barbStart)");break;case"arrow_circle":g.attr("marker-start","url("+y+"#"+r+"-circleStart)");break;case"aggregation":g.attr("marker-start","url("+y+"#"+r+"-aggregationStart)");break;case"extension":g.attr("marker-start","url("+y+"#"+r+"-extensionStart)");break;case"composition":g.attr("marker-start","url("+y+"#"+r+"-compositionStart)");break;case"dependency":g.attr("marker-start","url("+y+"#"+r+"-dependencyStart)");break;case"lollipop":g.attr("marker-start","url("+y+"#"+r+"-lollipopStart)")}switch(n.arrowTypeEnd){case"arrow_cross":g.attr("marker-end","url("+y+"#"+r+"-crossEnd)");break;case"arrow_point":g.attr("marker-end","url("+y+"#"+r+"-pointEnd)");break;case"arrow_barb":g.attr("marker-end","url("+y+"#"+r+"-barbEnd)");break;case"arrow_circle":g.attr("marker-end","url("+y+"#"+r+"-circleEnd)");break;case"aggregation":g.attr("marker-end","url("+y+"#"+r+"-aggregationEnd)");break;case"extension":g.attr("marker-end","url("+y+"#"+r+"-extensionEnd)");break;case"composition":g.attr("marker-end","url("+y+"#"+r+"-compositionEnd)");break;case"dependency":g.attr("marker-end","url("+y+"#"+r+"-dependencyEnd)");break;case"lollipop":g.attr("marker-end","url("+y+"#"+r+"-lollipopEnd)")}let m={};return c&&(m.updatedPath=s),m.originalPath=n.points,m}(c,t,i,Ts,n,e);((t,e)=>{Bt.info("Moving label abc78 ",t.id,t.label,Xs[t.id]);let n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const i=Xs[t.id];let r=t.x,a=t.y;if(n){const i=ai.calcLabelPosition(n);Bt.info("Moving label "+t.label+" from (",r,",",a,") to (",i.x,",",i.y,") abc78"),e.updatedPath&&(r=i.x,a=i.y)}i.attr("transform","translate("+r+", "+a+")")}if(t.startLabelLeft){const e=Qs[t.id].startLeft;let i=t.x,r=t.y;if(n){const e=ai.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",n);i=e.x,r=e.y}e.attr("transform","translate("+i+", "+r+")")}if(t.startLabelRight){const e=Qs[t.id].startRight;let i=t.x,r=t.y;if(n){const e=ai.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",n);i=e.x,r=e.y}e.attr("transform","translate("+i+", "+r+")")}if(t.endLabelLeft){const e=Qs[t.id].endLeft;let i=t.x,r=t.y;if(n){const e=ai.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",n);i=e.x,r=e.y}e.attr("transform","translate("+i+", "+r+")")}if(t.endLabelRight){const e=Qs[t.id].endRight;let i=t.x,r=t.y;if(n){const e=ai.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",n);i=e.x,r=e.y}e.attr("transform","translate("+i+", "+r+")")}})(i,r)})),e.nodes().forEach((function(t){const n=e.node(t);Bt.info(t,n.type,n.diff),"group"===n.type&&(u=n.diff)})),{elem:a,diff:u}},no=(t,e,n,i,r)=>{xs(t,n,i,r),Ws={},Xs={},Qs={},Gs={},Es={},Ss={},Ts={},Bt.warn("Graph at first:",ht.c(e)),((t,e)=>{!t||e>10?Bt.debug("Opting out, no graph "):(Bt.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(Bt.warn("Cluster identified",e," Replacement id in edges: ",Ns(e,t)),Es[e]=Bs(e,t),Ts[e]={id:Ns(e,t),clusterData:t.node(e)})})),t.nodes().forEach((function(e){const n=t.children(e),i=t.edges();n.length>0?(Bt.debug("Cluster identified",e,Es),i.forEach((t=>{t.v!==e&&t.w!==e&&As(t.v,e)^As(t.w,e)&&(Bt.warn("Edge: ",t," leaves cluster ",e),Bt.warn("Decendants of XXX ",e,": ",Es[e]),Ts[e].externalConnections=!0)}))):Bt.debug("Not a cluster ",e,Es)})),t.edges().forEach((function(e){const n=t.edge(e);Bt.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),Bt.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));let i=e.v,r=e.w;if(Bt.warn("Fix XXX",Ts,"ids:",e.v,e.w,"Translating: ",Ts[e.v]," --- ",Ts[e.w]),Ts[e.v]&&Ts[e.w]&&Ts[e.v]===Ts[e.w]){Bt.warn("Fixing and trixing link to self - removing XXX",e.v,e.w,e.name),Bt.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),i=Ds(e.v),r=Ds(e.w),t.removeEdge(e.v,e.w,e.name);const a=e.w+"---"+e.v;t.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const s=JSON.parse(JSON.stringify(n)),o=JSON.parse(JSON.stringify(n));s.label="",s.arrowTypeEnd="none",o.label="",s.fromCluster=e.v,o.toCluster=e.v,t.setEdge(i,a,s,e.name+"-cyclic-special"),t.setEdge(a,r,o,e.name+"-cyclic-special")}else(Ts[e.v]||Ts[e.w])&&(Bt.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),i=Ds(e.v),r=Ds(e.w),t.removeEdge(e.v,e.w,e.name),i!==e.v&&(n.fromCluster=e.v),r!==e.w&&(n.toCluster=e.w),Bt.warn("Fix Replacing with XXX",i,r,e.name),t.setEdge(i,r,n,e.name))})),Bt.warn("Adjusted Graph",ht.c(t)),Os(t,0),Bt.trace(Ts))})(e),Bt.warn("Graph after:",ht.c(e)),eo(t,e,i)},io=t=>jt.sanitizeText(t,gi());let ro={dividerMargin:10,padding:5,textHeight:10};function ao(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const so={setConf:function(t){Object.keys(t).forEach((function(e){ro[e]=t[e]}))},draw:function(t,e,n,i){Bt.info("Drawing class - ",e);const r=gi().flowchart,a=gi().securityLevel;Bt.info("config:",r);const s=r.nodeSpacing||50,c=r.rankSpacing||50,l=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:i.db.getDirection(),nodesep:s,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=i.db.getClasses(),u=i.db.getRelations(),d=i.db.getNotes();let p;Bt.info(u),function(t,e,n,i){const r=Object.keys(t);Bt.info("keys:",r),Bt.info(t),r.forEach((function(n){const r=t[n];let a="";r.cssClasses.length>0&&(a=a+" "+r.cssClasses.join(" "));const s={labelStyle:""};let o=void 0!==r.text?r.text:r.id,c="";r.type,c="class_box",e.setNode(r.id,{labelStyle:s.labelStyle,shape:c,labelText:io(o),classData:r,rx:0,ry:0,class:a,style:s.style,id:r.id,domId:r.domId,tooltip:i.db.getTooltip(r.id)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:gi().flowchart.padding}),Bt.info("setNode",{labelStyle:s.labelStyle,shape:c,labelText:o,rx:0,ry:0,class:a,style:s.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:gi().flowchart.padding})}))}(h,l,0,i),function(t,e){const n=gi().flowchart;let i=0;t.forEach((function(r){i++;const a={classes:"relation"};a.pattern=1==r.relation.lineType?"dashed":"solid",a.id="id"+i,"arrow_open"===r.type?a.arrowhead="none":a.arrowhead="normal",Bt.info(a,r),a.startLabelRight="none"===r.relationTitle1?"":r.relationTitle1,a.endLabelLeft="none"===r.relationTitle2?"":r.relationTitle2,a.arrowTypeStart=ao(r.relation.type1),a.arrowTypeEnd=ao(r.relation.type2);let s="",c="";if(void 0!==r.style){const t=Un(r.style);s=t.style,c=t.labelStyle}else s="fill:none";a.style=s,a.labelStyle=c,void 0!==r.interpolate?a.curve=Yn(r.interpolate,o.c_6):void 0!==t.defaultInterpolate?a.curve=Yn(t.defaultInterpolate,o.c_6):a.curve=Yn(n.curve,o.c_6),r.text=r.title,void 0===r.text?void 0!==r.style&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",gi().flowchart.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+r.text+"</span>"):(a.labelType="text",a.label=r.text.replace(jt.lineBreakRegex,"\n"),void 0===r.style&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(r.id1,r.id2,a,i)}))}(u,l),function(t,e,n,i){Bt.info(t),t.forEach((function(t,r){const a=t,s="",c="";let l=a.text,h="note";if(e.setNode(a.id,{labelStyle:s,shape:h,labelText:io(l),noteData:a,rx:0,ry:0,class:"",style:c,id:a.id,domId:a.id,tooltip:"",type:"note",padding:gi().flowchart.padding}),Bt.info("setNode",{labelStyle:s,shape:h,labelText:l,rx:0,ry:0,style:c,id:a.id,type:"note",padding:gi().flowchart.padding}),!a.class||!(a.class in i))return;const u=n+r,d={classes:"relation",pattern:"dotted"};d.id=`edgeNote${u}`,d.arrowhead="none",Bt.info(`Note edge: ${JSON.stringify(d)}, ${JSON.stringify(a)}`),d.startLabelRight="",d.endLabelLeft="",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.style="fill:none",d.labelStyle="",d.curve=Yn(ro.curve,o.c_6),e.setEdge(a.id,a.class,d,u)}))}(d,l,u.length+1,h),"sandbox"===a&&(p=(0,o.Ys)("#i"+e));const f="sandbox"===a?(0,o.Ys)(p.nodes()[0].contentDocument.body):(0,o.Ys)("body"),g=f.select(`[id="${e}"]`),y=f.select("#"+e+" g");if(no(y,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),ai.insertTitle(g,"classTitleText",r.titleTopMargin,i.db.getDiagramTitle()),wi(l,g,r.diagramPadding,r.useMaxWidth),!r.htmlLabels){const t="sandbox"===a?p.nodes()[0].contentDocument:document,n=t.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of n){const n=e.getBBox(),i=t.createElementNS("http://www.w3.org/2000/svg","rect");i.setAttribute("rx",0),i.setAttribute("ry",0),i.setAttribute("width",n.width),i.setAttribute("height",n.height),e.insertBefore(i,e.firstChild)}}}};var oo=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,2],i=[1,5],r=[6,9,11,23,25,27,29,30,31,51],a=[1,17],s=[1,18],o=[1,19],c=[1,20],l=[1,21],h=[1,22],u=[1,25],d=[1,30],p=[1,31],f=[1,32],g=[1,33],y=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,51],m=[1,45],b=[30,31,48,49],_=[4,6,9,11,23,25,27,29,30,31,51],x=[44,45,46,47],v=[22,37],k=[1,65],w=[1,64],C=[22,37,39,41],T={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,NON_IDENTIFYING:48,IDENTIFYING:49,WORD:50,open_directive:51,type_directive:52,arg_directive:53,close_directive:54,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"NON_IDENTIFYING",49:"IDENTIFYING",50:"WORD",51:"open_directive",52:"type_directive",53:"arg_directive",54:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:case 20:case 43:case 28:case 29:case 32:this.$=a[o];break;case 12:i.addEntity(a[o-4]),i.addEntity(a[o-2]),i.addRelationship(a[o-4],a[o],a[o-2],a[o-3]);break;case 13:i.addEntity(a[o-3]),i.addAttributes(a[o-3],a[o-1]);break;case 14:i.addEntity(a[o-2]);break;case 15:i.addEntity(a[o]);break;case 16:case 17:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 21:case 41:case 42:case 33:this.$=a[o].replace(/"/g,"");break;case 22:case 30:this.$=[a[o]];break;case 23:a[o].push(a[o-1]),this.$=a[o];break;case 24:this.$={attributeType:a[o-1],attributeName:a[o]};break;case 25:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeKeyTypeList:a[o]};break;case 26:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeComment:a[o]};break;case 27:this.$={attributeType:a[o-3],attributeName:a[o-2],attributeKeyTypeList:a[o-1],attributeComment:a[o]};break;case 31:a[o-2].push(a[o]),this.$=a[o-2];break;case 34:this.$={cardA:a[o],relType:a[o-1],cardB:a[o-2]};break;case 35:this.$=i.Cardinality.ZERO_OR_ONE;break;case 36:this.$=i.Cardinality.ZERO_OR_MORE;break;case 37:this.$=i.Cardinality.ONE_OR_MORE;break;case 38:this.$=i.Cardinality.ONLY_ONE;break;case 39:this.$=i.Identification.NON_IDENTIFYING;break;case 40:this.$=i.Identification.IDENTIFYING;break;case 44:i.parseDirective("%%{","open_directive");break;case 45:i.parseDirective(a[o],"type_directive");break;case 46:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 47:i.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:n,7:3,12:4,51:i},{1:[3]},e(r,[2,3],{5:6}),{3:7,4:n,7:3,12:4,51:i},{13:8,52:[1,9]},{52:[2,44]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:a,25:s,27:o,29:c,30:l,31:h,51:i},{1:[2,2]},{14:23,15:[1,24],54:u},e([15,54],[2,45]),e(r,[2,8],{1:[2,1]}),e(r,[2,4]),{7:15,10:26,12:4,17:16,23:a,25:s,27:o,29:c,30:l,31:h,51:i},e(r,[2,6]),e(r,[2,7]),e(r,[2,11]),e(r,[2,15],{18:27,42:29,20:[1,28],44:d,45:p,46:f,47:g}),{24:[1,34]},{26:[1,35]},{28:[1,36]},e(r,[2,19]),e(y,[2,20]),e(y,[2,21]),{11:[1,37]},{16:38,53:[1,39]},{11:[2,47]},e(r,[2,5]),{17:40,30:l,31:h},{21:41,22:[1,42],32:43,33:44,37:m},{43:46,48:[1,47],49:[1,48]},e(b,[2,35]),e(b,[2,36]),e(b,[2,37]),e(b,[2,38]),e(r,[2,16]),e(r,[2,17]),e(r,[2,18]),e(_,[2,9]),{14:49,54:u},{54:[2,46]},{15:[1,50]},{22:[1,51]},e(r,[2,14]),{21:52,22:[2,22],32:43,33:44,37:m},{34:53,37:[1,54]},{37:[2,28]},{42:55,44:d,45:p,46:f,47:g},e(x,[2,39]),e(x,[2,40]),{11:[1,56]},{19:57,30:[1,60],31:[1,59],50:[1,58]},e(r,[2,13]),{22:[2,23]},e(v,[2,24],{35:61,36:62,38:63,40:k,41:w}),e([22,37,40,41],[2,29]),e([30,31],[2,34]),e(_,[2,10]),e(r,[2,12]),e(r,[2,41]),e(r,[2,42]),e(r,[2,43]),e(v,[2,25],{36:66,39:[1,67],41:w}),e(v,[2,26]),e(C,[2,30]),e(v,[2,33]),e(C,[2,32]),e(v,[2,27]),{38:68,40:k},e(C,[2,31])],defaultActions:{5:[2,44],7:[2,2],25:[2,47],39:[2,46],45:[2,28],52:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},E=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),51;case 8:return this.begin("type_directive"),52;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),54;case 11:return 53;case 12:case 13:case 15:case 22:case 27:break;case 14:return 11;case 16:return 9;case 17:return 31;case 18:return 50;case 19:return 4;case 20:return this.begin("block"),20;case 21:return 39;case 23:return 40;case 24:case 25:return 37;case 26:return 41;case 28:return this.popState(),22;case 29:case 58:return e.yytext[0];case 30:case 34:case 35:case 48:return 44;case 31:case 32:case 33:case 41:case 43:case 50:return 46;case 36:case 37:case 38:case 39:case 40:case 42:case 49:return 45;case 44:case 45:case 46:case 47:return 47;case 51:case 54:case 55:case 56:return 48;case 52:case 53:return 49;case 57:return 30;case 59:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[21,22,23,24,25,26,27,28,29],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,20,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],inclusive:!0}}},t);function S(){this.yy={}}return T.lexer=E,S.prototype=T,T.Parser=S,new S}();oo.parser=oo;const co=oo,lo=t=>null!==t.match(/^\s*erDiagram/);let ho={},uo=[];const po=function(t){return void 0===ho[t]&&(ho[t]={attributes:[]},Bt.info("Added new entity :",t)),ho[t]},fo={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().er,addEntity:po,addAttributes:function(t,e){let n,i=po(t);for(n=e.length-1;n>=0;n--)i.attributes.push(e[n]),Bt.debug("Added attribute ",e[n].attributeName)},getEntities:()=>ho,addRelationship:function(t,e,n,i){let r={entityA:t,roleA:e,entityB:n,relSpec:i};uo.push(r),Bt.debug("Added new relationship :",r)},getRelationships:()=>uo,clear:function(){ho={},uo=[],Yi()},setAccTitle:zi,getAccTitle:Ui,setAccDescription:Wi,getAccDescription:qi,setDiagramTitle:Hi,getDiagramTitle:Vi},go={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},yo=go,mo=function(t,e){let n;t.append("defs").append("marker").attr("id",go.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",go.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",go.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",go.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},bo=/[^\dA-Za-z](\W)*/g;let _o={},xo=new Map;const vo=function(t,e,n){let i;return Object.keys(e).forEach((function(r){const a=function(t="",e=""){const n=t.replace(bo,"");return`${To(e)}${To(n)}${xt(t,Co)}`}(r,"entity");xo.set(r,a);const s=t.append("g").attr("id",a);i=void 0===i?a:i;const o="text-"+a,c=s.append("text").classed("er entityLabel",!0).attr("id",o).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",gi().fontFamily).style("font-size",_o.fontSize+"px").text(r),{width:l,height:h}=((t,e,n)=>{const i=_o.entityPadding/3,r=_o.entityPadding/3,a=.85*_o.fontSize,s=e.node().getBBox(),o=[];let c=!1,l=!1,h=0,u=0,d=0,p=0,f=s.height+2*i,g=1;n.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(c=!0),void 0!==t.attributeComment&&(l=!0)})),n.forEach((n=>{const r=`${e.node().id}-attr-${g}`;let s=0;const y=Pt(n.attributeType),m=t.append("text").classed("er entityLabel",!0).attr("id",`${r}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gi().fontFamily).style("font-size",a+"px").text(y),b=t.append("text").classed("er entityLabel",!0).attr("id",`${r}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gi().fontFamily).style("font-size",a+"px").text(n.attributeName),_={};_.tn=m,_.nn=b;const x=m.node().getBBox(),v=b.node().getBBox();if(h=Math.max(h,x.width),u=Math.max(u,v.width),s=Math.max(x.height,v.height),c){const e=void 0!==n.attributeKeyTypeList?n.attributeKeyTypeList.join(","):"",i=t.append("text").classed("er entityLabel",!0).attr("id",`${r}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gi().fontFamily).style("font-size",a+"px").text(e);_.kn=i;const o=i.node().getBBox();d=Math.max(d,o.width),s=Math.max(s,o.height)}if(l){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${r}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gi().fontFamily).style("font-size",a+"px").text(n.attributeComment||"");_.cn=e;const i=e.node().getBBox();p=Math.max(p,i.width),s=Math.max(s,i.height)}_.height=s,o.push(_),f+=s+2*i,g+=1}));let y=4;c&&(y+=2),l&&(y+=2);const m=h+u+d+p,b={width:Math.max(_o.minEntityWidth,Math.max(s.width+2*_o.entityPadding,m+r*y)),height:n.length>0?f:Math.max(_o.minEntityHeight,s.height+2*_o.entityPadding)};if(n.length>0){const n=Math.max(0,(b.width-m-r*y)/(y/2));e.attr("transform","translate("+b.width/2+","+(i+s.height/2)+")");let a=s.height+2*i,f="attributeBoxOdd";o.forEach((e=>{const s=a+i+e.height/2;e.tn.attr("transform","translate("+r+","+s+")");const o=t.insert("rect","#"+e.tn.node().id).classed(`er ${f}`,!0).attr("x",0).attr("y",a).attr("width",h+2*r+n).attr("height",e.height+2*i),g=parseFloat(o.attr("x"))+parseFloat(o.attr("width"));e.nn.attr("transform","translate("+(g+r)+","+s+")");const y=t.insert("rect","#"+e.nn.node().id).classed(`er ${f}`,!0).attr("x",g).attr("y",a).attr("width",u+2*r+n).attr("height",e.height+2*i);let m=parseFloat(y.attr("x"))+parseFloat(y.attr("width"));if(c){e.kn.attr("transform","translate("+(m+r)+","+s+")");const o=t.insert("rect","#"+e.kn.node().id).classed(`er ${f}`,!0).attr("x",m).attr("y",a).attr("width",d+2*r+n).attr("height",e.height+2*i);m=parseFloat(o.attr("x"))+parseFloat(o.attr("width"))}l&&(e.cn.attr("transform","translate("+(m+r)+","+s+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${f}`,"true").attr("x",m).attr("y",a).attr("width",p+2*r+n).attr("height",e.height+2*i)),a+=e.height+2*i,f="attributeBoxOdd"===f?"attributeBoxEven":"attributeBoxOdd"}))}else b.height=Math.max(_o.minEntityHeight,f),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b})(s,c,e[r].attributes),u=s.insert("rect","#"+o).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",l).attr("height",h).node().getBBox();n.setNode(a,{width:u.width,height:u.height,shape:"rect",id:a})})),i},ko=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let wo=0;const Co="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function To(t=""){return t.length>0?`${t}-`:""}const Eo={setConf:function(t){const e=Object.keys(t);for(const n of e)_o[n]=t[n]},draw:function(t,e,n,i){_o=gi().er,Bt.info("Drawing ER diagram");const r=gi().securityLevel;let a;"sandbox"===r&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===r?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);let c;mo(s,_o),c=new lt.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:_o.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const l=vo(s,i.db.getEntities(),c),h=function(t,e){return t.forEach((function(t){e.setEdge(xo.get(t.entityA),xo.get(t.entityB),{relationship:t},ko(t))})),t}(i.db.getRelationships(),c);var u,d;(0,ct.bK)(c),u=s,(d=c).nodes().forEach((function(t){void 0!==t&&void 0!==d.node(t)&&u.select("#"+t).attr("transform","translate("+(d.node(t).x-d.node(t).width/2)+","+(d.node(t).y-d.node(t).height/2)+" )")})),h.forEach((function(t){!function(t,e,n,i,r){wo++;const a=n.edge(xo.get(e.entityA),xo.get(e.entityB),ko(e)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),c=t.insert("path","#"+i).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",_o.stroke).style("fill","none");e.relSpec.relType===r.db.Identification.NON_IDENTIFYING&&c.attr("stroke-dasharray","8,8");let l="";switch(_o.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),e.relSpec.cardA){case r.db.Cardinality.ZERO_OR_ONE:c.attr("marker-end","url("+l+"#"+yo.ZERO_OR_ONE_END+")");break;case r.db.Cardinality.ZERO_OR_MORE:c.attr("marker-end","url("+l+"#"+yo.ZERO_OR_MORE_END+")");break;case r.db.Cardinality.ONE_OR_MORE:c.attr("marker-end","url("+l+"#"+yo.ONE_OR_MORE_END+")");break;case r.db.Cardinality.ONLY_ONE:c.attr("marker-end","url("+l+"#"+yo.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case r.db.Cardinality.ZERO_OR_ONE:c.attr("marker-start","url("+l+"#"+yo.ZERO_OR_ONE_START+")");break;case r.db.Cardinality.ZERO_OR_MORE:c.attr("marker-start","url("+l+"#"+yo.ZERO_OR_MORE_START+")");break;case r.db.Cardinality.ONE_OR_MORE:c.attr("marker-start","url("+l+"#"+yo.ONE_OR_MORE_START+")");break;case r.db.Cardinality.ONLY_ONE:c.attr("marker-start","url("+l+"#"+yo.ONLY_ONE_START+")")}const h=c.node().getTotalLength(),u=c.node().getPointAtLength(.5*h),d="rel"+wo,p=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",u.x).attr("y",u.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",gi().fontFamily).style("font-size",_o.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",u.x-p.width/2).attr("y",u.y-p.height/2).attr("width",p.width).attr("height",p.height)}(s,t,c,l,i)}));const p=_o.diagramPadding;ai.insertTitle(s,"entityTitleText",_o.titleTopMargin,i.db.getDiagramTitle());const f=s.node().getBBox(),g=f.width+2*p,y=f.height+2*p;ki(s,y,g,_o.useMaxWidth),s.attr("viewBox",`${f.x-p} ${f.y-p} ${g} ${y}`)}};var So=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,9],i=[1,7],r=[1,6],a=[1,8],s=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],o=[2,10],c=[1,20],l=[1,21],h=[1,22],u=[1,23],d=[1,30],p=[1,32],f=[1,33],g=[1,34],y=[1,62],m=[1,48],b=[1,52],_=[1,36],x=[1,37],v=[1,38],k=[1,39],w=[1,40],C=[1,56],T=[1,63],E=[1,51],S=[1,53],A=[1,55],L=[1,59],B=[1,60],N=[1,41],D=[1,42],O=[1,43],M=[1,44],I=[1,61],F=[1,50],$=[1,54],R=[1,57],Z=[1,58],P=[1,49],j=[1,66],Y=[1,71],z=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],U=[1,75],W=[1,74],q=[1,76],H=[20,21,23,81,82],V=[1,99],G=[1,104],X=[1,107],Q=[1,108],K=[1,101],J=[1,106],tt=[1,109],et=[1,102],nt=[1,114],it=[1,113],rt=[1,103],at=[1,105],st=[1,110],ot=[1,111],ct=[1,112],lt=[1,115],ht=[20,21,22,23,81,82],ut=[20,21,22,23,53,81,82],dt=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],pt=[20,21,23],ft=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],gt=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],yt=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],mt=[1,149],bt=[1,157],_t=[1,158],xt=[1,159],vt=[1,160],kt=[1,144],wt=[1,145],Ct=[1,141],Tt=[1,152],Et=[1,153],St=[1,154],At=[1,155],Lt=[1,156],Bt=[1,161],Nt=[1,162],Dt=[1,147],Ot=[1,150],Mt=[1,146],It=[1,143],Ft=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$t=[1,165],Rt=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],Zt=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],Pt=[12,21,22,24],jt=[22,106],Yt=[1,250],zt=[1,245],Ut=[1,246],Wt=[1,254],qt=[1,251],Ht=[1,248],Vt=[1,247],Gt=[1,249],Xt=[1,252],Qt=[1,253],Kt=[1,255],Jt=[1,273],te=[20,21,23,106],ee=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],ne={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,keywords:85,STYLE:86,LINKSTYLE:87,CLASSDEF:88,CLASS:89,CLICK:90,DOWN:91,UP:92,textNoTags:93,textNoTagsToken:94,DEFAULT:95,stylesOpt:96,alphaNum:97,CALLBACKNAME:98,CALLBACKARGS:99,HREF:100,LINK_TARGET:101,HEX:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,MINUS:109,UNIT:110,BRKT:111,DOT:112,PCT:113,TAGSTART:114,alphaNumToken:115,idStringToken:116,alphaNumStatement:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,PUNCTUATION:122,UNICODE_TEXT:123,PLUS:124,EQUALS:125,MULT:126,UNDERSCORE:127,graphCodeTokens:128,ARROW_CROSS:129,ARROW_POINT:130,ARROW_CIRCLE:131,ARROW_OPEN:132,QUOTE:133,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",86:"STYLE",87:"LINKSTYLE",88:"CLASSDEF",89:"CLASS",90:"CLICK",91:"DOWN",92:"UP",95:"DEFAULT",98:"CALLBACKNAME",99:"CALLBACKARGS",100:"HREF",101:"LINK_TARGET",102:"HEX",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"MINUS",110:"UNIT",111:"BRKT",112:"DOT",113:"PCT",114:"TAGSTART",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr",122:"PUNCTUATION",123:"UNICODE_TEXT",124:"PLUS",125:"EQUALS",126:"MULT",127:"UNDERSCORE",129:"ARROW_CROSS",130:"ARROW_POINT",131:"ARROW_CIRCLE",132:"ARROW_OPEN",133:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 5:i.parseDirective("%%{","open_directive");break;case 6:i.parseDirective(a[o],"type_directive");break;case 7:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 8:i.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:(!Array.isArray(a[o])||a[o].length>0)&&a[o-1].push(a[o]),this.$=a[o-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:case 78:case 150:this.$=a[o];break;case 19:i.setDirection("TB"),this.$="TB";break;case 20:i.setDirection(a[o-1]),this.$=a[o-1];break;case 35:this.$=a[o-1].nodes;break;case 41:this.$=i.addSubGraph(a[o-6],a[o-1],a[o-4]);break;case 42:this.$=i.addSubGraph(a[o-3],a[o-1],a[o-3]);break;case 43:this.$=i.addSubGraph(void 0,a[o-1],void 0);break;case 45:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 46:case 47:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 51:i.addLink(a[o-2].stmt,a[o],a[o-1]),this.$={stmt:a[o],nodes:a[o].concat(a[o-2].nodes)};break;case 52:i.addLink(a[o-3].stmt,a[o-1],a[o-2]),this.$={stmt:a[o-1],nodes:a[o-1].concat(a[o-3].nodes)};break;case 53:this.$={stmt:a[o-1],nodes:a[o-1]};break;case 54:this.$={stmt:a[o],nodes:a[o]};break;case 55:case 123:case 125:this.$=[a[o]];break;case 56:this.$=a[o-4].concat(a[o]);break;case 57:this.$=[a[o-2]],i.setClass(a[o-2],a[o]);break;case 58:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"square");break;case 59:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"doublecircle");break;case 60:this.$=a[o-5],i.addVertex(a[o-5],a[o-2],"circle");break;case 61:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"ellipse");break;case 62:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"stadium");break;case 63:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"subroutine");break;case 64:this.$=a[o-7],i.addVertex(a[o-7],a[o-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[o-5],a[o-3]]]));break;case 65:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"cylinder");break;case 66:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"round");break;case 67:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"diamond");break;case 68:this.$=a[o-5],i.addVertex(a[o-5],a[o-2],"hexagon");break;case 69:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"odd");break;case 70:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"trapezoid");break;case 71:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"inv_trapezoid");break;case 72:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"lean_right");break;case 73:this.$=a[o-3],i.addVertex(a[o-3],a[o-1],"lean_left");break;case 74:this.$=a[o],i.addVertex(a[o]);break;case 75:a[o-1].text=a[o],this.$=a[o-1];break;case 76:case 77:a[o-2].text=a[o-1],this.$=a[o-2];break;case 79:var c=i.destructLink(a[o],a[o-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[o-1]};break;case 80:c=i.destructLink(a[o]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 81:this.$=a[o-1];break;case 83:case 97:case 153:case 151:this.$=a[o-1]+""+a[o];break;case 98:case 99:this.$=a[o-4],i.addClass(a[o-2],a[o]);break;case 100:this.$=a[o-4],i.setClass(a[o-2],a[o]);break;case 101:case 109:this.$=a[o-1],i.setClickEvent(a[o-1],a[o]);break;case 102:case 110:this.$=a[o-3],i.setClickEvent(a[o-3],a[o-2]),i.setTooltip(a[o-3],a[o]);break;case 103:this.$=a[o-2],i.setClickEvent(a[o-2],a[o-1],a[o]);break;case 104:this.$=a[o-4],i.setClickEvent(a[o-4],a[o-3],a[o-2]),i.setTooltip(a[o-4],a[o]);break;case 105:case 111:this.$=a[o-1],i.setLink(a[o-1],a[o]);break;case 106:case 112:this.$=a[o-3],i.setLink(a[o-3],a[o-2]),i.setTooltip(a[o-3],a[o]);break;case 107:case 113:this.$=a[o-3],i.setLink(a[o-3],a[o-2],a[o]);break;case 108:case 114:this.$=a[o-5],i.setLink(a[o-5],a[o-4],a[o]),i.setTooltip(a[o-5],a[o-2]);break;case 115:this.$=a[o-4],i.addVertex(a[o-2],void 0,void 0,a[o]);break;case 116:case 118:this.$=a[o-4],i.updateLink(a[o-2],a[o]);break;case 117:this.$=a[o-4],i.updateLink([a[o-2]],a[o]);break;case 119:this.$=a[o-8],i.updateLinkInterpolate([a[o-6]],a[o-2]),i.updateLink([a[o-6]],a[o]);break;case 120:this.$=a[o-8],i.updateLinkInterpolate(a[o-6],a[o-2]),i.updateLink(a[o-6],a[o]);break;case 121:this.$=a[o-6],i.updateLinkInterpolate([a[o-4]],a[o]);break;case 122:this.$=a[o-6],i.updateLinkInterpolate(a[o-4],a[o]);break;case 124:case 126:a[o-2].push(a[o]),this.$=a[o-2];break;case 128:this.$=a[o-1]+a[o];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:n,16:4,21:i,22:r,24:a},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:n,16:4,21:i,22:r,24:a},e(s,o,{17:11}),{7:12,13:[1,13]},{16:14,21:i,22:r,24:a},{16:15,21:i,22:r,24:a},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{8:64,10:[1,65],15:j},e([10,15],[2,6]),e(s,[2,17]),e(s,[2,18]),e(s,[2,19]),{20:[1,68],21:[1,69],22:Y,27:67,30:70},e(z,[2,11]),e(z,[2,12]),e(z,[2,13]),e(z,[2,14]),e(z,[2,15]),e(z,[2,16]),{9:72,20:U,21:W,23:q,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:U,21:W,23:q},{9:81,20:U,21:W,23:q},{9:82,20:U,21:W,23:q},{9:83,20:U,21:W,23:q},{9:84,20:U,21:W,23:q},{9:86,20:U,21:W,22:[1,85],23:q},e(z,[2,44]),{45:[1,87]},{47:[1,88]},e(z,[2,47]),e(H,[2,54],{30:89,22:Y}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:V,52:G,66:X,67:Q,84:[1,97],91:K,97:96,98:[1,94],100:[1,95],105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(z,[2,158]),e(z,[2,159]),e(z,[2,160]),e(z,[2,161]),e(ht,[2,55],{53:[1,116]}),e(ut,[2,74],{116:129,40:[1,117],52:y,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:m,67:b,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:C,95:T,105:E,106:S,109:A,111:L,112:B,122:I,123:F,124:$,125:R,126:Z,127:P}),e(dt,[2,150]),e(dt,[2,175]),e(dt,[2,176]),e(dt,[2,177]),e(dt,[2,178]),e(dt,[2,179]),e(dt,[2,180]),e(dt,[2,181]),e(dt,[2,182]),e(dt,[2,183]),e(dt,[2,184]),e(dt,[2,185]),e(dt,[2,186]),e(dt,[2,187]),e(dt,[2,188]),e(dt,[2,189]),e(dt,[2,190]),{9:130,20:U,21:W,23:q},{11:131,14:[1,132]},e(pt,[2,8]),e(s,[2,20]),e(s,[2,26]),e(s,[2,27]),{21:[1,133]},e(ft,[2,34],{30:134,22:Y}),e(z,[2,35]),{50:135,51:45,52:y,54:46,66:m,67:b,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},e(gt,[2,48]),e(gt,[2,49]),e(gt,[2,50]),e(yt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:mt,24:bt,26:_t,38:xt,39:139,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),e(z,[2,36]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),{22:mt,24:bt,26:_t,38:xt,39:163,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(Ft,o,{17:164}),e(z,[2,45]),e(z,[2,46]),e(H,[2,53],{52:$t}),{26:V,52:G,66:X,67:Q,91:K,97:166,102:[1,167],105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{95:[1,168],103:169,105:[1,170]},{26:V,52:G,66:X,67:Q,91:K,95:[1,171],97:172,105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{26:V,52:G,66:X,67:Q,91:K,97:173,105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,101],{22:[1,174],99:[1,175]}),e(pt,[2,105],{22:[1,176]}),e(pt,[2,109],{115:100,117:178,22:[1,177],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,122:rt,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,111],{22:[1,179]}),e(Rt,[2,152]),e(Rt,[2,154]),e(Rt,[2,155]),e(Rt,[2,156]),e(Rt,[2,157]),e(Zt,[2,162]),e(Zt,[2,163]),e(Zt,[2,164]),e(Zt,[2,165]),e(Zt,[2,166]),e(Zt,[2,167]),e(Zt,[2,168]),e(Zt,[2,169]),e(Zt,[2,170]),e(Zt,[2,171]),e(Zt,[2,172]),e(Zt,[2,173]),e(Zt,[2,174]),{52:y,54:180,66:m,67:b,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},{22:mt,24:bt,26:_t,38:xt,39:181,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:182,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:184,42:vt,52:G,57:[1,183],66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:185,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:186,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:187,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{66:[1,188]},{22:mt,24:bt,26:_t,38:xt,39:189,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:190,42:vt,52:G,66:X,67:Q,71:[1,191],73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:192,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:193,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:194,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(dt,[2,151]),e(Pt,[2,3]),{8:195,15:j},{15:[2,7]},e(s,[2,28]),e(ft,[2,33]),e(H,[2,51],{30:196,22:Y}),e(yt,[2,75],{22:[1,197]}),{22:[1,198]},{22:mt,24:bt,26:_t,38:xt,39:199,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,81:wt,82:[1,200],83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(Zt,[2,82]),e(Zt,[2,84]),e(Zt,[2,140]),e(Zt,[2,141]),e(Zt,[2,142]),e(Zt,[2,143]),e(Zt,[2,144]),e(Zt,[2,145]),e(Zt,[2,146]),e(Zt,[2,147]),e(Zt,[2,148]),e(Zt,[2,149]),e(Zt,[2,85]),e(Zt,[2,86]),e(Zt,[2,87]),e(Zt,[2,88]),e(Zt,[2,89]),e(Zt,[2,90]),e(Zt,[2,91]),e(Zt,[2,92]),e(Zt,[2,93]),e(Zt,[2,94]),e(Zt,[2,95]),{9:203,20:U,21:W,22:mt,23:q,24:bt,26:_t,38:xt,40:[1,202],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,204],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Y,30:205},{22:[1,206],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,115:100,117:178,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},e(jt,[2,123]),{22:[1,211]},{22:[1,212],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,115:100,117:178,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:[1,213],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,115:100,117:178,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{84:[1,214]},e(pt,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},e(Rt,[2,153]),{84:[1,219],101:[1,220]},e(ht,[2,57],{116:129,52:y,66:m,67:b,91:C,95:T,105:E,106:S,109:A,111:L,112:B,122:I,123:F,124:$,125:R,126:Z,127:P}),{22:mt,24:bt,26:_t,38:xt,41:[1,221],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,56:[1,222],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:223,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,58:[1,224],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,60:[1,225],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,62:[1,226],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,64:[1,227],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{67:[1,228]},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,70:[1,229],73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,72:[1,230],73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:231,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,41:[1,232],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,75:[1,233],77:[1,234],81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,75:[1,236],77:[1,235],81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{9:237,20:U,21:W,23:q},e(H,[2,52],{52:$t}),e(yt,[2,77]),e(yt,[2,76]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,68:[1,238],73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(yt,[2,79]),e(Zt,[2,83]),{22:mt,24:bt,26:_t,38:xt,39:239,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(Ft,o,{17:240}),e(z,[2,43]),{51:241,52:y,54:46,66:m,67:b,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Yt,66:zt,67:Ut,86:Wt,96:242,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:256,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:257,102:qt,104:[1,258],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:259,102:qt,104:[1,260],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{105:[1,261]},{22:Yt,66:zt,67:Ut,86:Wt,96:262,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:263,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{26:V,52:G,66:X,67:Q,91:K,97:264,105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,102]),{84:[1,265]},e(pt,[2,106],{22:[1,266]}),e(pt,[2,107]),e(pt,[2,110]),e(pt,[2,112],{22:[1,267]}),e(pt,[2,113]),e(ut,[2,58]),e(ut,[2,59]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,58:[1,268],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,66]),e(ut,[2,61]),e(ut,[2,62]),e(ut,[2,63]),{66:[1,269]},e(ut,[2,65]),e(ut,[2,67]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,72:[1,270],73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,69]),e(ut,[2,70]),e(ut,[2,72]),e(ut,[2,71]),e(ut,[2,73]),e(Pt,[2,4]),e([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:mt,24:bt,26:_t,38:xt,41:[1,271],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,272],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},e(ht,[2,56]),e(pt,[2,115],{106:Jt}),e(te,[2,125],{108:274,22:Yt,66:zt,67:Ut,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt}),e(ee,[2,127]),e(ee,[2,129]),e(ee,[2,130]),e(ee,[2,131]),e(ee,[2,132]),e(ee,[2,133]),e(ee,[2,134]),e(ee,[2,135]),e(ee,[2,136]),e(ee,[2,137]),e(ee,[2,138]),e(ee,[2,139]),e(pt,[2,116],{106:Jt}),e(pt,[2,117],{106:Jt}),{22:[1,275]},e(pt,[2,118],{106:Jt}),{22:[1,276]},e(jt,[2,124]),e(pt,[2,98],{106:Jt}),e(pt,[2,99],{106:Jt}),e(pt,[2,100],{115:100,117:178,26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,122:rt,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:U,21:W,23:q},e(z,[2,42]),{22:Yt,66:zt,67:Ut,86:Wt,102:qt,105:Ht,107:283,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},e(ee,[2,128]),{26:V,52:G,66:X,67:Q,91:K,97:284,105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{26:V,52:G,66:X,67:Q,91:K,97:285,105:J,106:tt,109:et,111:nt,112:it,115:100,117:98,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,108]),e(pt,[2,114]),e(ut,[2,60]),{22:mt,24:bt,26:_t,38:xt,39:286,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,68]),e(Ft,o,{17:287}),e(te,[2,126],{108:274,22:Yt,66:zt,67:Ut,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt}),e(pt,[2,121],{115:100,117:178,22:[1,288],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,122:rt,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,122],{115:100,117:178,22:[1,289],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:it,122:rt,123:at,124:st,125:ot,126:ct,127:lt}),{22:mt,24:bt,26:_t,38:xt,41:[1,290],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Tt,87:Et,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:it,113:Mt,114:It,115:148,122:rt,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,291],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:T,105:E,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Yt,66:zt,67:Ut,86:Wt,96:292,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:293,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},e(ut,[2,64]),e(z,[2,41]),e(pt,[2,119],{106:Jt}),e(pt,[2,120],{106:Jt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},ie=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:case 24:case 27:case 30:case 33:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 25:return 100;case 26:this.begin("callbackname");break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 31:return 99;case 32:this.begin("click");break;case 34:return 90;case 35:case 36:case 37:return t.lex.firstGraph()&&this.begin("dir"),24;case 38:return 38;case 39:return 42;case 40:case 41:case 42:case 43:return 101;case 44:return this.popState(),25;case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:return this.popState(),26;case 55:return 118;case 56:return 119;case 57:return 120;case 58:return 121;case 59:return 105;case 60:return 111;case 61:return 53;case 62:return 67;case 63:return 52;case 64:return 20;case 65:return 106;case 66:return 126;case 67:case 68:case 69:return 82;case 70:case 71:case 72:return 81;case 73:return 59;case 74:return 60;case 75:return 61;case 76:return 62;case 77:return 63;case 78:return 64;case 79:return 65;case 80:return 69;case 81:return 70;case 82:return 55;case 83:return 56;case 84:return 109;case 85:return 112;case 86:return 127;case 87:return 124;case 88:return 113;case 89:case 90:return 125;case 91:return 114;case 92:return 73;case 93:return 92;case 94:return"SEP";case 95:return 91;case 96:return 66;case 97:return 75;case 98:return 74;case 99:return 77;case 100:return 76;case 101:return 122;case 102:return 123;case 103:return 68;case 104:return 57;case 105:return 58;case 106:return 40;case 107:return 41;case 108:return 71;case 109:return 72;case 110:return 133;case 111:return 21;case 112:return 22;case 113:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\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\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\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\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-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\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-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\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\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\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\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[44,45,46,47,48,49,50,51,52,53,54],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113],inclusive:!0}}},t);function re(){this.yy={}}return ne.lexer=ie,re.prototype=ne,ne.Parser=re,new re}();So.parser=So;const Ao=So,Lo=(t,e)=>{var n,i;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&null!==t.match(/^\s*graph/))},Bo=(t,e)=>{var n,i;return"dagre-d3"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&(null!==t.match(/^\s*graph/)||null!==t.match(/^\s*flowchart/)))};let No,Do,Oo=0,Mo=gi(),Io={},Fo=[],$o={},Ro=[],Zo={},Po={},jo=0,Yo=!0,zo=[];const Uo=t=>jt.sanitizeText(t,Mo),Wo=function(t,e,n){Cp.parseDirective(this,t,e,n)},qo=function(t){const e=Object.keys(Io);for(const n of e)if(Io[n].id===t)return Io[n].domId;return t},Ho=function(t,e,n,i,r,a,s={}){let o,c=t;void 0!==c&&0!==c.trim().length&&(void 0===Io[c]&&(Io[c]={id:c,domId:"flowchart-"+c+"-"+Oo,styles:[],classes:[]}),Oo++,void 0!==e?(Mo=gi(),o=Uo(e.trim()),'"'===o[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),Io[c].text=o):void 0===Io[c].text&&(Io[c].text=t),void 0!==n&&(Io[c].type=n),null!=i&&i.forEach((function(t){Io[c].styles.push(t)})),null!=r&&r.forEach((function(t){Io[c].classes.push(t)})),void 0!==a&&(Io[c].dir=a),void 0===Io[c].props?Io[c].props=s:void 0!==s&&Object.assign(Io[c].props,s))},Vo=function(t,e,n,i){const r={start:t,end:e,type:void 0,text:""};void 0!==(i=n.text)&&(r.text=Uo(i.trim()),'"'===r.text[0]&&'"'===r.text[r.text.length-1]&&(r.text=r.text.substring(1,r.text.length-1))),void 0!==n&&(r.type=n.type,r.stroke=n.stroke,r.length=n.length),Fo.push(r)},Go=function(t,e,n,i){let r,a;for(r=0;r<t.length;r++)for(a=0;a<e.length;a++)Vo(t[r],e[a],n,i)},Xo=function(t,e){t.forEach((function(t){"default"===t?Fo.defaultInterpolate=e:Fo[t].interpolate=e}))},Qo=function(t,e){t.forEach((function(t){"default"===t?Fo.defaultStyle=e:(-1===ai.isSubstringInArray("fill",e)&&e.push("fill:none"),Fo[t].style=e)}))},Ko=function(t,e){void 0===$o[t]&&($o[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const n=e.replace("fill","bgFill").replace("color","fill");$o[t].textStyles.push(n)}$o[t].styles.push(e)}))},Jo=function(t){No=t,No.match(/.*</)&&(No="RL"),No.match(/.*\^/)&&(No="BT"),No.match(/.*>/)&&(No="LR"),No.match(/.*v/)&&(No="TB"),"TD"===No&&(No="TB")},tc=function(t,e){t.split(",").forEach((function(t){let n=t;void 0!==Io[n]&&Io[n].classes.push(e),void 0!==Zo[n]&&Zo[n].classes.push(e)}))},ec=function(t,e,n){t.split(",").forEach((function(t){void 0!==Io[t]&&(Io[t].link=ai.formatUrl(e,Mo),Io[t].linkTarget=n)})),tc(t,"clickable")},nc=function(t){return Po[t]},ic=function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){let i=qo(t);if("loose"!==gi().securityLevel)return;if(void 0===e)return;let r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<r.length;t++){let e=r[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),r[t]=e}}0===r.length&&r.push(t),void 0!==Io[t]&&(Io[t].haveCallback=!0,zo.push((function(){const t=document.querySelector(`[id="${i}"]`);null!==t&&t.addEventListener("click",(function(){ai.runFunc(e,...r)}),!1)})))}(t,e,n)})),tc(t,"clickable")},rc=function(t){zo.forEach((function(e){e(t)}))},ac=function(){return No.trim()},sc=function(){return Io},oc=function(){return Fo},cc=function(){return $o},lc=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};zo.push(lc);const hc=function(t="gen-1"){Io={},$o={},Fo=[],zo=[lc],Ro=[],Zo={},jo=0,Po=[],Yo=!0,Do=t,Yi()},uc=t=>{Do=t||"gen-2"},dc=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},pc=function(t,e,n){let i=t.trim(),r=n;t===n&&n.match(/\s/)&&(i=void 0);let a=[];const{nodeList:s,dir:o}=function(t){const e={boolean:{},number:{},string:{}},n=[];let i;return{nodeList:t.filter((function(t){const r=typeof t;return t.stmt&&"dir"===t.stmt?(i=t.value,!1):""!==t.trim()&&(r in e?!e[r].hasOwnProperty(t)&&(e[r][t]=!0):!n.includes(t)&&n.push(t))})),dir:i}}(a.concat.apply(a,e));if(a=s,"gen-1"===Do)for(let l=0;l<a.length;l++)a[l]=qo(a[l]);i=i||"subGraph"+jo,r=r||"",r=Uo(r),jo+=1;const c={id:i,nodes:a,title:r.trim(),classes:[],dir:o};return Bt.info("Adding",c.id,c.nodes,c.dir),c.nodes=Cc(c,Ro).nodes,Ro.push(c),Zo[i]=c,i},fc=function(t){for(const[e,n]of Ro.entries())if(n.id===t)return e;return-1};let gc=-1;const yc=[],mc=function(t,e){const n=Ro[e].nodes;if(gc+=1,gc>2e3)return;if(yc[gc]=e,Ro[e].id===t)return{result:!0,count:0};let i=0,r=1;for(;i<n.length;){const e=fc(n[i]);if(e>=0){const n=mc(t,e);if(n.result)return{result:!0,count:r+n.count};r+=n.count}i+=1}return{result:!1,count:r}},bc=function(t){return yc[t]},_c=function(){gc=-1,Ro.length>0&&mc("none",Ro.length-1)},xc=function(){return Ro},vc=()=>!!Yo&&(Yo=!1,!0),kc=(t,e)=>{const n=(t=>{const e=t.trim();let n=e.slice(0,-1),i="arrow_open";switch(e.slice(-1)){case"x":i="arrow_cross","x"===e[0]&&(i="double_"+i,n=n.slice(1));break;case">":i="arrow_point","<"===e[0]&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle","o"===e[0]&&(i="double_"+i,n=n.slice(1))}let r="normal",a=n.length-1;"="===n[0]&&(r="thick");let s=((t,e)=>{const n=e.length;let i=0;for(let r=0;r<n;++r)e[r]===t&&++i;return i})(".",n);return s&&(r="dotted",a=s),{type:i,stroke:r,length:a}})(t);let i;if(e){if(i=(t=>{let e=t.trim(),n="arrow_open";switch(e[0]){case"<":n="arrow_point",e=e.slice(1);break;case"x":n="arrow_cross",e=e.slice(1);break;case"o":n="arrow_circle",e=e.slice(1)}let i="normal";return e.includes("=")&&(i="thick"),e.includes(".")&&(i="dotted"),{type:n,stroke:i}})(e),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===i.type)i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return"double_arrow"===i.type&&(i.type="double_arrow_point"),i.length=n.length,i}return n},wc=(t,e)=>{let n=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(n=!0)})),n},Cc=(t,e)=>{const n=[];return t.nodes.forEach(((i,r)=>{wc(e,i)||n.push(t.nodes[r])})),{nodes:n}},Tc={firstGraph:vc},Ec={parseDirective:Wo,defaultConfig:()=>oi.flowchart,setAccTitle:zi,getAccTitle:Ui,getAccDescription:qi,setAccDescription:Wi,addVertex:Ho,lookUpDomId:qo,addLink:Go,updateLinkInterpolate:Xo,updateLink:Qo,addClass:Ko,setDirection:Jo,setClass:tc,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Po["gen-1"===Do?qo(t):t]=Uo(e))}))},getTooltip:nc,setClickEvent:ic,setLink:ec,bindFunctions:rc,getDirection:ac,getVertices:sc,getEdges:oc,getClasses:cc,clear:hc,setGen:uc,defaultStyle:dc,addSubGraph:pc,getDepthFirstPos:bc,indexNodes:_c,getSubGraphs:xc,destructLink:kc,lex:Tc,exists:wc,makeUniq:Cc,setDiagramTitle:Hi,getDiagramTitle:Vi},Sc=Object.freeze(Object.defineProperty({__proto__:null,addClass:Ko,addLink:Go,addSingleLink:Vo,addSubGraph:pc,addVertex:Ho,bindFunctions:rc,clear:hc,default:Ec,defaultStyle:dc,destructLink:kc,firstGraph:vc,getClasses:cc,getDepthFirstPos:bc,getDirection:ac,getEdges:oc,getSubGraphs:xc,getTooltip:nc,getVertices:sc,indexNodes:_c,lex:Tc,lookUpDomId:qo,parseDirective:Wo,setClass:tc,setClickEvent:ic,setDirection:Jo,setGen:uc,setLink:ec,updateLink:Qo,updateLinkInterpolate:Xo},Symbol.toStringTag,{value:"Module"}));const Ac={},Lc=function(t){const e=Object.keys(t);for(const n of e)Ac[n]=t[n]},Bc={},Nc=function(t,e,n,i,r,a){const s=i.select(`[id="${n}"]`);Object.keys(t).forEach((function(n){const i=t[n];let o="default";i.classes.length>0&&(o=i.classes.join(" "));const c=Un(i.styles);let l,h=void 0!==i.text?i.text:i.id;if(Zt(gi().flowchart.htmlLabels)){const t={label:h.replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`))};l=(0,vt.a)(s,t).node(),l.parentNode.removeChild(l)}else{const t=r.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",c.labelStyle.replace("color:","fill:"));const e=h.split(jt.lineBreakRegex);for(const n of e){const e=r.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","1"),e.textContent=n,t.appendChild(e)}l=t}let u=0,d="";switch(i.type){case"round":u=5,d="rect";break;case"square":case"group":default:d="rect";break;case"diamond":d="question";break;case"hexagon":d="hexagon";break;case"odd":case"odd_right":d="rect_left_inv_arrow";break;case"lean_right":d="lean_right";break;case"lean_left":d="lean_left";break;case"trapezoid":d="trapezoid";break;case"inv_trapezoid":d="inv_trapezoid";break;case"circle":d="circle";break;case"ellipse":d="ellipse";break;case"stadium":d="stadium";break;case"subroutine":d="subroutine";break;case"cylinder":d="cylinder";break;case"doublecircle":d="doublecircle"}e.setNode(i.id,{labelStyle:c.labelStyle,shape:d,labelText:h,rx:u,ry:u,class:o,style:c.style,id:i.id,link:i.link,linkTarget:i.linkTarget,tooltip:a.db.getTooltip(i.id)||"",domId:a.db.lookUpDomId(i.id),haveCallback:i.haveCallback,width:"group"===i.type?500:void 0,dir:i.dir,type:i.type,props:i.props,padding:gi().flowchart.padding}),Bt.info("setNode",{labelStyle:c.labelStyle,shape:d,labelText:h,rx:u,ry:u,class:o,style:c.style,id:i.id,domId:a.db.lookUpDomId(i.id),width:"group"===i.type?500:void 0,type:i.type,dir:i.dir,props:i.props,padding:gi().flowchart.padding})}))},Dc=function(t,e,n){Bt.info("abc78 edges = ",t);let i,r,a=0,s={};if(void 0!==t.defaultStyle){const e=Un(t.defaultStyle);i=e.style,r=e.labelStyle}t.forEach((function(n){a++;var c="L-"+n.start+"-"+n.end;void 0===s[c]?(s[c]=0,Bt.info("abc78 new entry",c,s[c])):(s[c]++,Bt.info("abc78 new entry",c,s[c]));let l=c+"-"+s[c];Bt.info("abc78 new link id to be used is",c,l,s[c]);var h="LS-"+n.start,u="LE-"+n.end;const d={style:"",labelStyle:""};switch(d.minlen=n.length||1,"arrow_open"===n.type?d.arrowhead="none":d.arrowhead="normal",d.arrowTypeStart="arrow_open",d.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":d.arrowTypeStart="arrow_cross";case"arrow_cross":d.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":d.arrowTypeStart="arrow_point";case"arrow_point":d.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":d.arrowTypeStart="arrow_circle";case"arrow_circle":d.arrowTypeEnd="arrow_circle"}let p="",f="";switch(n.stroke){case"normal":p="fill:none;",void 0!==i&&(p=i),void 0!==r&&(f=r),d.thickness="normal",d.pattern="solid";break;case"dotted":d.thickness="normal",d.pattern="dotted",d.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":d.thickness="thick",d.pattern="solid",d.style="stroke-width: 3.5px;fill:none;"}if(void 0!==n.style){const t=Un(n.style);p=t.style,f=t.labelStyle}d.style=d.style+=p,d.labelStyle=d.labelStyle+=f,void 0!==n.interpolate?d.curve=Yn(n.interpolate,o.c_6):void 0!==t.defaultInterpolate?d.curve=Yn(t.defaultInterpolate,o.c_6):d.curve=Yn(Bc.curve,o.c_6),void 0===n.text?void 0!==n.style&&(d.arrowheadStyle="fill: #333"):(d.arrowheadStyle="fill: #333",d.labelpos="c"),d.labelType="text",d.label=n.text.replace(jt.lineBreakRegex,"\n"),void 0===n.style&&(d.style=d.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),d.labelStyle=d.labelStyle.replace("color:","fill:"),d.id=l,d.classes="flowchart-link "+h+" "+u,e.setEdge(n.start,n.end,d,a)}))},Oc={setConf:function(t){const e=Object.keys(t);for(const n of e)Bc[n]=t[n]},addVertices:Nc,addEdges:Dc,getClasses:function(t,e){Bt.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch(n){return}},draw:function(t,e,n,i){Bt.info("Drawing flowchart"),i.db.clear(),Ec.setGen("gen-2"),i.parser.parse(t);let r=i.db.getDirection();void 0===r&&(r="TD");const{securityLevel:a,flowchart:s}=gi(),c=s.nodeSpacing||50,l=s.rankSpacing||50;let h;"sandbox"===a&&(h=(0,o.Ys)("#i"+e));const u="sandbox"===a?(0,o.Ys)(h.nodes()[0].contentDocument.body):(0,o.Ys)("body"),d="sandbox"===a?h.nodes()[0].contentDocument:document,p=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:c,ranksep:l,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let f;const g=i.db.getSubGraphs();Bt.info("Subgraphs - ",g);for(let o=g.length-1;o>=0;o--)f=g[o],Bt.info("Subgraph - ",f),i.db.addVertex(f.id,f.title,"group",void 0,f.classes,f.dir);const y=i.db.getVertices(),m=i.db.getEdges();Bt.info("Edges",m);let b=0;for(b=g.length-1;b>=0;b--){f=g[b],(0,o.td_)("cluster").append("text");for(let t=0;t<f.nodes.length;t++)Bt.info("Setting up subgraphs",f.nodes[t],f.id),p.setParent(f.nodes[t],f.id)}Nc(y,p,e,u,d,i),Dc(m,p);const _=u.select(`[id="${e}"]`),x=u.select("#"+e+" g");if(no(x,p,["point","circle","cross"],"flowchart",e),ai.insertTitle(_,"flowchartTitleText",s.titleTopMargin,i.db.getDiagramTitle()),wi(p,_,s.diagramPadding,s.useMaxWidth),i.db.indexNodes("subGraph"+b),!s.htmlLabels){const t=d.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of t){const t=e.getBBox(),n=d.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",t.width),n.setAttribute("height",t.height),e.insertBefore(n,e.firstChild)}}Object.keys(y).forEach((function(t){const n=y[t];if(n.link){const i=(0,o.Ys)("#"+e+' [id="'+t+'"]');if(i){const t=d.createElementNS("http://www.w3.org/2000/svg","a");t.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),t.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),t.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===a?t.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&t.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const e=i.insert((function(){return t}),":first-child"),r=i.select(".label-container");r&&e.append((function(){return r.node()}));const s=i.select(".label");s&&e.append((function(){return s.node()}))}}}))}};var Mc=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,3],i=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],a=[1,15],s=[1,16],o=[1,17],c=[1,18],l=[1,19],h=[1,20],u=[1,21],d=[1,22],p=[1,23],f=[1,24],g=[1,25],y=[1,26],m=[1,27],b=[1,29],_=[1,31],x=[1,34],v=[5,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],k={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,tickInterval:16,excludes:17,includes:18,todayMarker:19,title:20,acc_title:21,acc_title_value:22,acc_descr:23,acc_descr_value:24,acc_descr_multiline_value:25,section:26,clickStatement:27,taskTxt:28,taskData:29,openDirective:30,typeDirective:31,closeDirective:32,":":33,argDirective:34,click:35,callbackname:36,callbackargs:37,href:38,clickStatementDebug:39,open_directive:40,type_directive:41,arg_directive:42,close_directive:43,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"tickInterval",17:"excludes",18:"includes",19:"todayMarker",20:"title",21:"acc_title",22:"acc_title_value",23:"acc_descr",24:"acc_descr_value",25:"acc_descr_multiline_value",26:"section",28:"taskTxt",29:"taskData",33:":",35:"click",36:"callbackname",37:"callbackargs",38:"href",40:"open_directive",41:"type_directive",42:"arg_directive",43:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[27,2],[27,3],[27,3],[27,4],[27,3],[27,4],[27,2],[39,2],[39,3],[39,3],[39,4],[39,3],[39,4],[39,2],[30,1],[31,1],[34,1],[32,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 2:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 9:i.setDateFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 10:i.enableInclusiveEndDates(),this.$=a[o].substr(18);break;case 11:i.TopAxis(),this.$=a[o].substr(8);break;case 12:i.setAxisFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 13:i.setTickInterval(a[o].substr(13)),this.$=a[o].substr(13);break;case 14:i.setExcludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 15:i.setIncludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 16:i.setTodayMarker(a[o].substr(12)),this.$=a[o].substr(12);break;case 17:i.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 18:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 19:case 20:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 21:i.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 23:i.addTask(a[o-1],a[o]),this.$="task";break;case 27:this.$=a[o-1],i.setClickEvent(a[o-1],a[o],null);break;case 28:this.$=a[o-2],i.setClickEvent(a[o-2],a[o-1],a[o]);break;case 29:this.$=a[o-2],i.setClickEvent(a[o-2],a[o-1],null),i.setLink(a[o-2],a[o]);break;case 30:this.$=a[o-3],i.setClickEvent(a[o-3],a[o-2],a[o-1]),i.setLink(a[o-3],a[o]);break;case 31:this.$=a[o-2],i.setClickEvent(a[o-2],a[o],null),i.setLink(a[o-2],a[o-1]);break;case 32:this.$=a[o-3],i.setClickEvent(a[o-3],a[o-1],a[o]),i.setLink(a[o-3],a[o-2]);break;case 33:this.$=a[o-1],i.setLink(a[o-1],a[o]);break;case 34:case 40:this.$=a[o-1]+" "+a[o];break;case 35:case 36:case 38:this.$=a[o-2]+" "+a[o-1]+" "+a[o];break;case 37:case 39:this.$=a[o-3]+" "+a[o-2]+" "+a[o-1]+" "+a[o];break;case 41:i.parseDirective("%%{","open_directive");break;case 42:i.parseDirective(a[o],"type_directive");break;case 43:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 44:i.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:n,30:4,40:i},{1:[3]},{3:6,4:2,5:n,30:4,40:i},e(r,[2,3],{6:7}),{31:8,41:[1,9]},{41:[2,41]},{1:[2,1]},{4:30,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:a,13:s,14:o,15:c,16:l,17:h,18:u,19:d,20:p,21:f,23:g,25:y,26:m,27:28,28:b,30:4,35:_,40:i},{32:32,33:[1,33],43:x},e([33,43],[2,42]),e(r,[2,8],{1:[2,2]}),e(r,[2,4]),{4:30,10:35,12:a,13:s,14:o,15:c,16:l,17:h,18:u,19:d,20:p,21:f,23:g,25:y,26:m,27:28,28:b,30:4,35:_,40:i},e(r,[2,6]),e(r,[2,7]),e(r,[2,9]),e(r,[2,10]),e(r,[2,11]),e(r,[2,12]),e(r,[2,13]),e(r,[2,14]),e(r,[2,15]),e(r,[2,16]),e(r,[2,17]),{22:[1,36]},{24:[1,37]},e(r,[2,20]),e(r,[2,21]),e(r,[2,22]),{29:[1,38]},e(r,[2,24]),{36:[1,39],38:[1,40]},{11:[1,41]},{34:42,42:[1,43]},{11:[2,44]},e(r,[2,5]),e(r,[2,18]),e(r,[2,19]),e(r,[2,23]),e(r,[2,27],{37:[1,44],38:[1,45]}),e(r,[2,33],{36:[1,46]}),e(v,[2,25]),{32:47,43:x},{43:[2,43]},e(r,[2,28],{38:[1,48]}),e(r,[2,29]),e(r,[2,31],{37:[1,49]}),{11:[1,50]},e(r,[2,30]),e(r,[2,32]),e(v,[2,26])],defaultActions:{5:[2,41],6:[2,1],34:[2,44],43:[2,43]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},w=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),40;case 1:return this.begin("type_directive"),41;case 2:return this.popState(),this.begin("arg_directive"),33;case 3:return this.popState(),this.popState(),43;case 4:return 42;case 5:return this.begin("acc_title"),21;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),23;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 38;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 36;case 27:return 37;case 28:this.begin("click");break;case 30:return 35;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 16;case 37:return 18;case 38:return 17;case 39:return 19;case 40:return"date";case 41:return 20;case 42:return"accDescription";case 43:return 26;case 44:return 28;case 45:return 29;case 46:return 33;case 47:return 7;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}},t);function C(){this.yy={}}return k.lexer=w,C.prototype=k,k.Parser=C,new C}();Mc.parser=Mc;const Ic=Mc,Fc=t=>null!==t.match(/^\s*gantt/);a().extend(wt()),a().extend(Tt()),a().extend(St());let $c,Rc="",Zc="",Pc="",jc=[],Yc=[],zc={},Uc=[],Wc=[],qc="";const Hc=["active","done","crit","milestone"];let Vc=[],Gc=!1,Xc=!1,Qc=0;const Kc=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},Jc=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,s;r=t.startTime instanceof Date?a()(t.startTime):a()(t.startTime,e,!0),r=r.add(1,"d"),s=t.endTime instanceof Date?a()(t.endTime):a()(t.endTime,e,!0);const[o,c]=tl(r,s,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},tl=function(t,e,n,i,r){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Kc(t,n,i,r),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},el=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==i){let t=null;if(i[1].split(" ").forEach((function(e){let n=hl(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let r=a()(n,e.trim(),!0);if(r.isValid())return r.toDate();{Bt.debug("Invalid date:"+n),Bt.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime()))throw new Error("Invalid date:"+n);return t}},nl=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},il=function(t,e,n,i=!1){n=n.trim();let r=a()(n,e.trim(),!0);if(r.isValid())return i&&(r=r.add(1,"d")),r.toDate();let s=a()(t);const[o,c]=nl(n);if(!Number.isNaN(o)){const t=s.add(o,c);t.isValid()&&(s=t)}return s.toDate()};let rl=0;const al=function(t){return void 0===t?(rl+=1,"task"+rl):t};let sl,ol,cl=[];const ll={},hl=function(t){const e=ll[t];return cl[e]},ul=function(){const t=function(t){const e=cl[t];let n="";switch(cl[t].raw.startTime.type){case"prevTaskEnd":{const t=hl(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=el(0,Rc,cl[t].raw.startTime.startData),n&&(cl[t].startTime=n)}return cl[t].startTime&&(cl[t].endTime=il(cl[t].startTime,Rc,cl[t].raw.endTime.data,Gc),cl[t].endTime&&(cl[t].processed=!0,cl[t].manualEndTime=a()(cl[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Jc(cl[t],Rc,Yc,jc))),cl[t].processed};let e=!0;for(const[n,i]of cl.entries())t(n),e=e&&i.processed;return e},dl=function(t,e){t.split(",").forEach((function(t){let n=hl(t);void 0!==n&&n.classes.push(e)}))},pl=function(t,e){Vc.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},fl={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().gantt,clear:function(){Uc=[],Wc=[],qc="",Vc=[],rl=0,sl=void 0,ol=void 0,cl=[],Rc="",Zc="",$c=void 0,Pc="",jc=[],Yc=[],Gc=!1,Xc=!1,Qc=0,zc={},Yi()},setDateFormat:function(t){Rc=t},getDateFormat:function(){return Rc},enableInclusiveEndDates:function(){Gc=!0},endDatesAreInclusive:function(){return Gc},enableTopAxis:function(){Xc=!0},topAxisEnabled:function(){return Xc},setAxisFormat:function(t){Zc=t},getAxisFormat:function(){return Zc},setTickInterval:function(t){$c=t},getTickInterval:function(){return $c},setTodayMarker:function(t){Pc=t},getTodayMarker:function(){return Pc},setAccTitle:zi,getAccTitle:Ui,setDiagramTitle:Hi,getDiagramTitle:Vi,setAccDescription:Wi,getAccDescription:qi,addSection:function(t){qc=t,Uc.push(t)},getSections:function(){return Uc},getTasks:function(){let t=ul();let e=0;for(;!t&&e<10;)t=ul(),e++;return Wc=cl,Wc},addTask:function(t,e){const n={section:qc,type:qc,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};gl(i,r,Hc);for(let a=0;a<i.length;a++)i[a]=i[a].trim();switch(i.length){case 1:r.id=al(),r.startTime={type:"prevTaskEnd",id:t},r.endTime={data:i[0]};break;case 2:r.id=al(),r.startTime={type:"getStartDate",startData:i[0]},r.endTime={data:i[1]};break;case 3:r.id=al(i[0]),r.startTime={type:"getStartDate",startData:i[1]},r.endTime={data:i[2]}}return r}(ol,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=ol,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=Qc,Qc++;const r=cl.push(n);ol=n.id,ll[n.id]=r-1},findTaskById:hl,addTaskOrg:function(t,e){const n={section:qc,type:qc,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};gl(i,r,Hc);for(let a=0;a<i.length;a++)i[a]=i[a].trim();let s="";switch(i.length){case 1:r.id=al(),r.startTime=t.endTime,s=i[0];break;case 2:r.id=al(),r.startTime=el(0,Rc,i[0]),s=i[1];break;case 3:r.id=al(i[0]),r.startTime=el(0,Rc,i[1]),s=i[2]}return s&&(r.endTime=il(r.startTime,Rc,s,Gc),r.manualEndTime=a()(s,"YYYY-MM-DD",!0).isValid(),Jc(r,Rc,Yc,jc)),r}(sl,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,sl=n,Wc.push(n)},setIncludes:function(t){jc=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return jc},setExcludes:function(t){Yc=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return Yc},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==gi().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==hl(t)&&pl(t,(()=>{ai.runFunc(e,...i)}))}(t,e,n)})),dl(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==gi().securityLevel&&(n=(0,s.Nm)(e)),t.split(",").forEach((function(t){void 0!==hl(t)&&(pl(t,(()=>{window.open(n,"_self")})),zc[t]=n)})),dl(t,"clickable")},getLinks:function(){return zc},bindFunctions:function(t){Vc.forEach((function(e){e(t)}))},parseDuration:nl,isInvalidDate:Kc};function gl(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const r=new RegExp("^\\s*"+n+"\\s*$");t[0].match(r)&&(e[n]=!0,t.shift(1),i=!0)}))}let yl;const ml={setConf:function(){Bt.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=gi().gantt,s=gi().securityLevel;let c;"sandbox"===s&&(c=(0,o.Ys)("#i"+e));const l="sandbox"===s?(0,o.Ys)(c.nodes()[0].contentDocument.body):(0,o.Ys)("body"),h="sandbox"===s?c.nodes()[0].contentDocument:document,u=h.getElementById(e);yl=u.parentElement.offsetWidth,void 0===yl&&(yl=1200),void 0!==r.useWidth&&(yl=r.useWidth);const d=i.db.getTasks(),p=d.length*(r.barHeight+r.barGap)+2*r.topPadding;u.setAttribute("viewBox","0 0 "+yl+" "+p);const f=l.select(`[id="${e}"]`),g=(0,o.Xf)().domain([(0,o.VV$)(d,(function(t){return t.startTime})),(0,o.Fp7)(d,(function(t){return t.endTime}))]).rangeRound([0,yl-r.leftPadding-r.rightPadding]);let y=[];for(const a of d)y.push(a.type);const m=y;function b(t,e){return function(t){let e=t.length;const n={};for(;e;)n[t[--e]]=(n[t[e]]||0)+1;return n}(e)[t]||0}y=function(t){const e={},n=[];for(let i=0,r=t.length;i<r;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(y),d.sort((function(t,e){const n=t.startTime,i=e.startTime;let r=0;return n>i?r=1:n<i&&(r=-1),r})),function(t,n,s){const c=r.barHeight,l=c+r.barGap,u=r.topPadding,d=r.leftPadding;(0,o.BYU)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(o.JHv);(function(t,e,n,s,o,c,l,h){const u=c.reduce(((t,{startTime:e})=>t?Math.min(t,e):e),0),d=c.reduce(((t,{endTime:e})=>t?Math.max(t,e):e),0),p=i.db.getDateFormat();if(!u||!d)return;const y=[];let m=null,b=a()(u);for(;b.valueOf()<=d;)i.db.isInvalidDate(b,p,l,h)?m?m.end=b:m={start:b,end:b}:m&&(y.push(m),m=null),b=b.add(1,"d");f.append("g").selectAll("rect").data(y).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(l,u,d,0,s,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,a){let s=(0,o.LLu)(g).tickSize(-a+e+r.gridLineStartPadding).tickFormat((0,o.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const c=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==c){const t=c[1];switch(c[2]){case"minute":s.ticks(o.Z_i.every(t));break;case"hour":s.ticks(o.WQD.every(t));break;case"day":s.ticks(o.rr1.every(t));break;case"week":s.ticks(o.NGh.every(t));break;case"month":s.ticks(o.F0B.every(t))}}if(f.append("g").attr("class","grid").attr("transform","translate("+t+", "+(a-50)+")").call(s).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,o.F5q)(g).tickSize(-a+e+r.gridLineStartPadding).tickFormat((0,o.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==c){const t=c[1];switch(c[2]){case"minute":n.ticks(o.Z_i.every(t));break;case"hour":n.ticks(o.WQD.every(t));break;case"day":n.ticks(o.rr1.every(t));break;case"week":n.ticks(o.NGh.every(t));break;case"month":n.ticks(o.F0B.every(t))}}f.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(d,u,0,s),function(t,n,a,s,c,l,h){f.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+a-2})).attr("width",(function(){return h-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const u=f.append("g").selectAll("rect").data(t).enter(),d=i.db.getLinks();u.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+s+.5*(g(t.endTime)-g(t.startTime))-.5*c:g(t.startTime)+s})).attr("y",(function(t,e){return t.order*n+a})).attr("width",(function(t){return t.milestone?c:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",c).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+s+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+a+.5*c).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[s,o]of y.entries())t.type===o&&(i=s%r.numberSectionStyles);let a="";return t.active?t.crit?a+=" activeCrit":a=" active":t.done?a=t.crit?" doneCrit":" done":t.crit&&(a+=" crit"),0===a.length&&(a=" task"),t.milestone&&(a=" milestone "+a),a+=i,a+=" "+n,e+a})),u.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*c),t.milestone&&(n=e+c);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>h?e+s-5:n+s+5:(n-e)/2+e+s})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+a})).attr("text-height",c).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+c);const i=this.getBBox().width;let a="";t.classes.length>0&&(a=t.classes.join(" "));let s=0;for(const[c,l]of y.entries())t.type===l&&(s=c%r.numberSectionStyles);let o="";return t.active&&(o=t.crit?"activeCritText"+s:"activeText"+s),t.done?o=t.crit?o+" doneCritText"+s:o+" doneText"+s:t.crit&&(o=o+" critText"+s),t.milestone&&(o+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>h?a+" taskTextOutsideLeft taskTextOutside"+s+" "+o:a+" taskTextOutsideRight taskTextOutside"+s+" "+o+" width-"+i:a+" taskText taskText"+s+" "+o+" width-"+i}));if("sandbox"===gi().securityLevel){let t;t=(0,o.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;u.filter((function(t){return void 0!==d[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const r=e.parentNode;var a=n.createElement("a");a.setAttribute("xlink:href",d[t.id]),a.setAttribute("target","_top"),r.appendChild(a),a.appendChild(e),a.appendChild(i)}))}}(t,l,u,d,c,0,n),function(t,e){const n=[];let i=0;for(const[r,a]of y.entries())n[r]=[a,b(a,m)];f.append("g").selectAll("text").data(n).enter().append((function(t){const e=t[0].split(jt.lineBreakRegex),n=-(e.length-1)/2,i=h.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[r,a]of e.entries()){const t=h.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),r>0&&t.setAttribute("dy","1em"),t.textContent=a,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(r,a){if(!(a>0))return r[1]*t/2+e;for(let s=0;s<a;s++)return i+=n[a-1][1],r[1]*t/2+i*t+e})).attr("font-size",r.sectionFontSize).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(l,u),function(t,e,n,a){const s=i.db.getTodayMarker();if("off"===s)return;const o=f.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",r.titleTopMargin).attr("y2",a-r.titleTopMargin).attr("class","today"),""!==s&&l.attr("style",s.replace(/,/g,";"))}(d,0,0,s)}(d,yl,p),ki(f,p,yl,r.useMaxWidth),f.append("text").text(i.db.getDiagramTitle()).attr("x",yl/2).attr("y",r.titleTopMargin).attr("class","titleText")}};var bl=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[6,9,10],i={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,i,r,a,s){switch(a.length,r){case 1:return i;case 4:break;case 6:i.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},r=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}},t);function a(){this.yy={}}return i.lexer=r,a.prototype=i,i.Parser=a,new a}();bl.parser=bl;const _l=bl;var xl="",vl=!1;const kl={setMessage:t=>{Bt.debug("Setting message to: "+t),xl=t},getMessage:()=>xl,setInfo:t=>{vl=t},getInfo:()=>vl,clear:Yi},wl={draw:(t,e,n)=>{try{Bt.debug("Rendering info diagram\n"+t);const i=gi().securityLevel;let r;"sandbox"===i&&(r=(0,o.Ys)("#i"+e));const a=("sandbox"===i?(0,o.Ys)(r.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select("#"+e);a.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),a.attr("height",100),a.attr("width",400)}catch(i){Bt.error("Error while rendering info diagram"),Bt.error(i.message)}}},Cl=t=>null!==t.match(/^\s*info/);var Tl=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,4],i=[1,5],r=[1,6],a=[1,7],s=[1,9],o=[1,11,13,15,17,19,20,26,27,28,29],c=[2,5],l=[1,6,11,13,15,17,19,20,26,27,28,29],h=[26,27,28],u=[2,8],d=[1,18],p=[1,19],f=[1,20],g=[1,21],y=[1,22],m=[1,23],b=[1,28],_=[6,26,27,28,29],x={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 4:i.setShowData(!0);break;case 7:this.$=a[o-1];break;case 9:i.addSection(a[o-1],i.cleanupValue(a[o]));break;case 10:this.$=a[o].trim(),i.setDiagramTitle(this.$);break;case 11:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 12:case 13:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 14:i.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(a[o],"type_directive");break;case 23:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:n,21:8,26:i,27:r,28:a,29:s},{1:[3]},{3:10,4:2,5:3,6:n,21:8,26:i,27:r,28:a,29:s},{3:11,4:2,5:3,6:n,21:8,26:i,27:r,28:a,29:s},e(o,c,{7:12,8:[1,13]}),e(l,[2,18]),e(l,[2,19]),e(l,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},e(h,u,{21:8,9:16,10:17,5:24,1:[2,3],11:d,13:p,15:f,17:g,19:y,20:m,29:s}),e(o,c,{7:25}),{23:26,24:[1,27],32:b},e([24,32],[2,22]),e(o,[2,6]),{4:29,26:i,27:r,28:a},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},e(h,[2,13]),e(h,[2,14]),e(h,[2,15]),e(h,u,{21:8,9:16,10:17,5:24,1:[2,4],11:d,13:p,15:f,17:g,19:y,20:m,29:s}),e(_,[2,16]),{25:34,31:[1,35]},e(_,[2,24]),e(o,[2,7]),e(h,[2,9]),e(h,[2,10]),e(h,[2,11]),e(h,[2,12]),{23:36,32:b},{32:[2,23]},e(_,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},v=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}},t);function k(){this.yy={}}return x.lexer=v,k.prototype=x,x.Parser=k,new k}();Tl.parser=Tl;const El=Tl,Sl=t=>null!==t.match(/^\s*pie/)||null!==t.match(/^\s*bar/);let Al={},Ll=!1;const Bl={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().pie,addSection:function(t,e){t=jt.sanitizeText(t,gi()),void 0===Al[t]&&(Al[t]=e,Bt.debug("Added new section :",t))},getSections:()=>Al,cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){Al={},Ll=!1,Yi()},setAccTitle:zi,getAccTitle:Ui,setDiagramTitle:Hi,getDiagramTitle:Vi,setShowData:function(t){Ll=t},getShowData:function(){return Ll},getAccDescription:qi,setAccDescription:Wi};let Nl,Dl=gi();const Ol=450,Ml={draw:(t,e,n,i)=>{try{Dl=gi(),Bt.debug("Rendering info diagram\n"+t);const n=gi().securityLevel;let y;"sandbox"===n&&(y=(0,o.Ys)("#i"+e));const m="sandbox"===n?(0,o.Ys)(y.nodes()[0].contentDocument.body):(0,o.Ys)("body"),b="sandbox"===n?y.nodes()[0].contentDocument:document;i.db.clear(),i.parser.parse(t),Bt.debug("Parsed info diagram");const _=b.getElementById(e);Nl=_.parentElement.offsetWidth,void 0===Nl&&(Nl=1200),void 0!==Dl.useWidth&&(Nl=Dl.useWidth),void 0!==Dl.pie.useWidth&&(Nl=Dl.pie.useWidth);const x=m.select("#"+e);ki(x,Ol,Nl,Dl.pie.useMaxWidth),_.setAttribute("viewBox","0 0 "+Nl+" "+Ol);var r=18,a=Math.min(Nl,Ol)/2-40,s=x.append("g").attr("transform","translate("+Nl/2+",225)"),c=i.db.getSections(),l=0;Object.keys(c).forEach((function(t){l+=c[t]}));const v=Dl.themeVariables;var h=[v.pie1,v.pie2,v.pie3,v.pie4,v.pie5,v.pie6,v.pie7,v.pie8,v.pie9,v.pie10,v.pie11,v.pie12],u=(0,o.PKp)().range(h),d=Object.entries(c).map((function(t,e){return{order:e,name:t[0],value:t[1]}})),p=(0,o.ve8)().value((function(t){return t.value})).sort((function(t,e){return t.order-e.order}))(d),f=(0,o.Nb1)().innerRadius(0).outerRadius(a);s.selectAll("mySlices").data(p).enter().append("path").attr("d",f).attr("fill",(function(t){return u(t.data.name)})).attr("class","pieCircle"),s.selectAll("mySlices").data(p).enter().append("text").text((function(t){return(t.data.value/l*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+f.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),s.append("text").text(i.db.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var g=s.selectAll(".legend").data(u.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*u.domain().length/2)+")"}));g.append("rect").attr("width",r).attr("height",r).style("fill",u).style("stroke",u),g.data(p).append("text").attr("x",22).attr("y",14).text((function(t){return i.db.getShowData()||Dl.showData||Dl.pie.showData?t.data.name+" ["+t.data.value+"]":t.data.name}))}catch(y){Bt.error("Error while rendering info diagram"),Bt.error(y)}}};var Il=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,3],i=[1,5],r=[1,6],a=[1,7],s=[1,8],o=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],c=[1,22],l=[2,13],h=[1,26],u=[1,27],d=[1,28],p=[1,29],f=[1,30],g=[1,31],y=[1,24],m=[1,32],b=[1,33],_=[1,36],x=[71,72],v=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],k=[1,56],w=[1,57],C=[1,58],T=[1,59],E=[1,60],S=[1,61],A=[1,62],L=[62,63],B=[1,74],N=[1,70],D=[1,71],O=[1,72],M=[1,73],I=[1,75],F=[1,79],$=[1,80],R=[1,77],Z=[1,78],P=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],j={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 6:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 7:case 8:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 9:i.parseDirective("%%{","open_directive");break;case 10:i.parseDirective(a[o],"type_directive");break;case 11:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 12:i.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:i.addRequirement(a[o-3],a[o-4]);break;case 20:i.setNewReqId(a[o-2]);break;case 21:i.setNewReqText(a[o-2]);break;case 22:i.setNewReqRisk(a[o-2]);break;case 23:i.setNewReqVerifyMethod(a[o-2]);break;case 26:this.$=i.RequirementType.REQUIREMENT;break;case 27:this.$=i.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=i.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=i.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=i.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=i.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=i.RiskLevel.LOW_RISK;break;case 33:this.$=i.RiskLevel.MED_RISK;break;case 34:this.$=i.RiskLevel.HIGH_RISK;break;case 35:this.$=i.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=i.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=i.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=i.VerifyType.VERIFY_TEST;break;case 39:i.addElement(a[o-3]);break;case 40:i.setNewElementType(a[o-2]);break;case 41:i.setNewElementDocRef(a[o-2]);break;case 44:i.addRelationship(a[o-2],a[o],a[o-4]);break;case 45:i.addRelationship(a[o-2],a[o-4],a[o]);break;case 46:this.$=i.Relationships.CONTAINS;break;case 47:this.$=i.Relationships.COPIES;break;case 48:this.$=i.Relationships.DERIVES;break;case 49:this.$=i.Relationships.SATISFIES;break;case 50:this.$=i.Relationships.VERIFIES;break;case 51:this.$=i.Relationships.REFINES;break;case 52:this.$=i.Relationships.TRACES}},table:[{3:1,4:2,6:n,9:4,14:i,16:r,18:a,19:s},{1:[3]},{3:10,4:2,5:[1,9],6:n,9:4,14:i,16:r,18:a,19:s},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},e(o,[2,8]),{20:[2,9]},{3:16,4:2,6:n,9:4,14:i,16:r,18:a,19:s},{1:[2,2]},{4:21,5:c,7:17,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{11:34,12:[1,35],22:_},e([12,22],[2,10]),e(o,[2,6]),e(o,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:c,7:38,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:39,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:40,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:41,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:42,8:l,9:4,14:i,16:r,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},e(x,[2,26]),e(x,[2,27]),e(x,[2,28]),e(x,[2,29]),e(x,[2,30]),e(x,[2,31]),e(v,[2,55]),e(v,[2,56]),e(o,[2,4]),{13:51,21:[1,52]},e(o,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:k,65:w,66:C,67:T,68:E,69:S,70:A},{61:63,64:k,65:w,66:C,67:T,68:E,69:S,70:A},{11:64,22:_},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},e(L,[2,46]),e(L,[2,47]),e(L,[2,48]),e(L,[2,49]),e(L,[2,50]),e(L,[2,51]),e(L,[2,52]),{63:[1,68]},e(o,[2,5]),{5:B,29:69,30:N,33:D,35:O,37:M,39:I},{5:F,39:$,55:76,56:R,58:Z},{32:81,71:m,72:b},{32:82,71:m,72:b},e(P,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:B,29:87,30:N,33:D,35:O,37:M,39:I},e(P,[2,25]),e(P,[2,39]),{31:[1,88]},{31:[1,89]},{5:F,39:$,55:90,56:R,58:Z},e(P,[2,43]),e(P,[2,44]),e(P,[2,45]),{32:91,71:m,72:b},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},e(P,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},e(P,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:B,29:116,30:N,33:D,35:O,37:M,39:I},{5:B,29:117,30:N,33:D,35:O,37:M,39:I},{5:B,29:118,30:N,33:D,35:O,37:M,39:I},{5:B,29:119,30:N,33:D,35:O,37:M,39:I},{5:F,39:$,55:120,56:R,58:Z},{5:F,39:$,55:121,56:R,58:Z},e(P,[2,20]),e(P,[2,21]),e(P,[2,22]),e(P,[2,23]),e(P,[2,40]),e(P,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},Y=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return e.yytext=e.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}},t);function z(){this.yy={}}return j.lexer=Y,z.prototype=j,j.Parser=z,new z}();Il.parser=Il;const Fl=Il,$l=t=>null!==t.match(/^\s*requirement(Diagram)?/);let Rl=[],Zl={},Pl={},jl={},Yl={};const zl={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().req,addRequirement:(t,e)=>(void 0===Pl[t]&&(Pl[t]={name:t,type:e,id:Zl.id,text:Zl.text,risk:Zl.risk,verifyMethod:Zl.verifyMethod}),Zl={},Pl[t]),getRequirements:()=>Pl,setNewReqId:t=>{void 0!==Zl&&(Zl.id=t)},setNewReqText:t=>{void 0!==Zl&&(Zl.text=t)},setNewReqRisk:t=>{void 0!==Zl&&(Zl.risk=t)},setNewReqVerifyMethod:t=>{void 0!==Zl&&(Zl.verifyMethod=t)},setAccTitle:zi,getAccTitle:Ui,setAccDescription:Wi,getAccDescription:qi,addElement:t=>(void 0===Yl[t]&&(Yl[t]={name:t,type:jl.type,docRef:jl.docRef},Bt.info("Added new requirement: ",t)),jl={},Yl[t]),getElements:()=>Yl,setNewElementType:t=>{void 0!==jl&&(jl.type=t)},setNewElementDocRef:t=>{void 0!==jl&&(jl.docRef=t)},addRelationship:(t,e,n)=>{Rl.push({type:t,src:e,dst:n})},getRelationships:()=>Rl,clear:()=>{Rl=[],Zl={},Pl={},jl={},Yl={},Yi()}},Ul={CONTAINS:"contains",ARROW:"arrow"},Wl=Ul,ql=(t,e)=>{let n=t.append("defs").append("marker").attr("id",Ul.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),n.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",Ul.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${e.line_height},${e.line_height/2}\n M${e.line_height},${e.line_height/2}\n L0,${e.line_height}`).attr("stroke-width",1)};let Hl={},Vl=0;const Gl=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Hl.rect_min_width+"px").attr("height",Hl.rect_min_height+"px"),Xl=(t,e,n)=>{let i=Hl.rect_min_width/2,r=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",i).attr("y",Hl.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((t=>{0==a?r.append("tspan").attr("text-anchor","middle").attr("x",Hl.rect_min_width/2).attr("dy",0).text(t):r.append("tspan").attr("text-anchor","middle").attr("x",Hl.rect_min_width/2).attr("dy",.75*Hl.line_height).text(t),a++}));let s=1.5*Hl.rect_padding+a*Hl.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Hl.rect_min_width).attr("y1",s).attr("y2",s),{titleNode:r,y:s}},Ql=(t,e,n,i)=>{let r=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",Hl.rect_padding).attr("y",i).attr("dominant-baseline","hanging"),a=0;let s=[];return n.forEach((t=>{let e=t.length;for(;e>30&&a<3;){let n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,s[s.length]=n,a++}if(3==a){let t=s[s.length-1];s[s.length-1]=t.substring(0,t.length-4)+"..."}else s[s.length]=t;a=0})),s.forEach((t=>{r.append("tspan").attr("x",Hl.rect_padding).attr("dy",Hl.line_height).text(t)})),r},Kl=function(t,e,n,i,r){const a=n.edge(Jl(e.src),Jl(e.dst)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})),c=t.insert("path","#"+i).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==r.db.Relationships.CONTAINS?c.attr("marker-start","url("+jt.getUrl(Hl.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(c.attr("stroke-dasharray","10,7"),c.attr("marker-end","url("+jt.getUrl(Hl.arrowMarkerAbsolute)+"#"+Wl.ARROW+"_line_ending)")),((t,e,n,i)=>{const r=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*r),s="rel"+Vl;Vl++;const o=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(i).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-o.width/2).attr("y",a.y-o.height/2).attr("width",o.width).attr("height",o.height).attr("fill","white").attr("fill-opacity","85%")})(t,c,0,`<<${e.type}>>`)},Jl=t=>t.replace(/\s/g,"").replace(/\./g,"_"),th={draw:(t,e,n,i)=>{Hl=gi().requirement,i.db.clear(),i.parser.parse(t);const r=Hl.securityLevel;let a;"sandbox"===r&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===r?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);ql(s,Hl);const c=new lt.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Hl.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let l=i.db.getRequirements(),h=i.db.getElements(),u=i.db.getRelationships();var d,p,f;d=l,p=c,f=s,Object.keys(d).forEach((t=>{let e=d[t];t=Jl(t),Bt.info("Added new requirement: ",t);const n=f.append("g").attr("id",t),i=Gl(n,"req-"+t);let r=Xl(n,t+"_title",[`<<${e.type}>>`,`${e.name}`]);Ql(n,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],r.y);const a=i.node().getBBox();p.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,n)=>{Object.keys(t).forEach((i=>{let r=t[i];const a=Jl(i),s=n.append("g").attr("id",a),o="element-"+a,c=Gl(s,o);let l=Xl(s,o+"_title",["<<Element>>",`${i}`]);Ql(s,o+"_body",[`Type: ${r.type||"Not Specified"}`,`Doc Ref: ${r.docRef||"None"}`],l.y);const h=c.node().getBBox();e.setNode(a,{width:h.width,height:h.height,shape:"rect",id:a})}))})(h,c,s),((t,e)=>{t.forEach((function(t){let n=Jl(t.src),i=Jl(t.dst);e.setEdge(n,i,{relationship:t})}))})(u,c),(0,ct.bK)(c),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(s,c),u.forEach((function(t){Kl(s,t,c,e,i)}));const g=Hl.rect_padding,y=s.node().getBBox(),m=y.width+2*g,b=y.height+2*g;ki(s,b,m,Hl.useMaxWidth),s.attr("viewBox",`${y.x-g} ${y.y-g} ${m} ${b}`)}};var eh=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,2],i=[1,3],r=[1,5],a=[1,7],s=[2,5],o=[1,15],c=[1,17],l=[1,19],h=[1,21],u=[1,22],d=[1,23],p=[1,29],f=[1,30],g=[1,31],y=[1,32],m=[1,33],b=[1,34],_=[1,35],x=[1,36],v=[1,37],k=[1,38],w=[1,39],C=[1,40],T=[1,42],E=[1,43],S=[1,45],A=[1,46],L=[1,47],B=[1,48],N=[1,49],D=[1,50],O=[1,53],M=[1,4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],I=[4,5,21,54,56],F=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],$=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,53,54,56,57,62,63,64,65,73,83],R=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,52,54,56,57,62,63,64,65,73,83],Z=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,54,56,57,62,63,64,65,73,83],P=[71,72,73],j=[1,125],Y=[1,4,5,7,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],z={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,box:19,restOfLine:20,end:21,signal:22,autonumber:23,NUM:24,off:25,activate:26,actor:27,deactivate:28,note_statement:29,links_statement:30,link_statement:31,properties_statement:32,details_statement:33,title:34,legacy_title:35,acc_title:36,acc_title_value:37,acc_descr:38,acc_descr_value:39,acc_descr_multiline_value:40,loop:41,rect:42,opt:43,alt:44,else_sections:45,par:46,par_sections:47,critical:48,option_sections:49,break:50,option:51,and:52,else:53,participant:54,AS:55,participant_actor:56,note:57,placement:58,text2:59,over:60,actor_pair:61,links:62,link:63,properties:64,details:65,spaceList:66,",":67,left_of:68,right_of:69,signaltype:70,"+":71,"-":72,ACTOR:73,SOLID_OPEN_ARROW:74,DOTTED_OPEN_ARROW:75,SOLID_ARROW:76,DOTTED_ARROW:77,SOLID_CROSS:78,DOTTED_CROSS:79,SOLID_POINT:80,DOTTED_POINT:81,TXT:82,open_directive:83,type_directive:84,arg_directive:85,close_directive:86,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"box",20:"restOfLine",21:"end",23:"autonumber",24:"NUM",25:"off",26:"activate",28:"deactivate",34:"title",35:"legacy_title",36:"acc_title",37:"acc_title_value",38:"acc_descr",39:"acc_descr_value",40:"acc_descr_multiline_value",41:"loop",42:"rect",43:"opt",44:"alt",46:"par",48:"critical",50:"break",51:"option",52:"and",53:"else",54:"participant",55:"AS",56:"participant_actor",57:"note",60:"over",62:"links",63:"link",64:"properties",65:"details",67:",",68:"left_of",69:"right_of",71:"+",72:"-",73:"ACTOR",74:"SOLID_OPEN_ARROW",75:"DOTTED_OPEN_ARROW",76:"SOLID_ARROW",77:"DOTTED_ARROW",78:"SOLID_CROSS",79:"DOTTED_CROSS",80:"SOLID_POINT",81:"DOTTED_POINT",82:"TXT",83:"open_directive",84:"type_directive",85:"arg_directive",86:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[49,1],[49,4],[47,1],[47,4],[45,1],[45,4],[13,5],[13,3],[13,5],[13,3],[29,4],[29,4],[30,3],[31,3],[32,3],[33,3],[66,2],[66,1],[61,3],[61,1],[58,1],[58,1],[22,5],[22,5],[22,4],[27,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[59,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 4:return i.apply(a[o]),a[o];case 5:case 10:case 9:case 14:this.$=[];break;case 6:case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 7:case 8:case 12:case 13:case 63:this.$=a[o];break;case 18:a[o-1].unshift({type:"boxStart",boxData:i.parseBoxData(a[o-2])}),a[o-1].push({type:"boxEnd",boxText:a[o-2]}),this.$=a[o-1];break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-2]),sequenceIndexStep:Number(a[o-1]),sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:i.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"activeStart",signalType:i.LINETYPE.ACTIVE_START,actor:a[o-1]};break;case 25:this.$={type:"activeEnd",signalType:i.LINETYPE.ACTIVE_END,actor:a[o-1]};break;case 31:i.setDiagramTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 32:i.setDiagramTitle(a[o].substring(7)),this.$=a[o].substring(7);break;case 33:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 34:case 35:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 36:a[o-1].unshift({type:"loopStart",loopText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.LOOP_START}),a[o-1].push({type:"loopEnd",loopText:a[o-2],signalType:i.LINETYPE.LOOP_END}),this.$=a[o-1];break;case 37:a[o-1].unshift({type:"rectStart",color:i.parseMessage(a[o-2]),signalType:i.LINETYPE.RECT_START}),a[o-1].push({type:"rectEnd",color:i.parseMessage(a[o-2]),signalType:i.LINETYPE.RECT_END}),this.$=a[o-1];break;case 38:a[o-1].unshift({type:"optStart",optText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.OPT_START}),a[o-1].push({type:"optEnd",optText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.OPT_END}),this.$=a[o-1];break;case 39:a[o-1].unshift({type:"altStart",altText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.ALT_START}),a[o-1].push({type:"altEnd",signalType:i.LINETYPE.ALT_END}),this.$=a[o-1];break;case 40:a[o-1].unshift({type:"parStart",parText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.PAR_START}),a[o-1].push({type:"parEnd",signalType:i.LINETYPE.PAR_END}),this.$=a[o-1];break;case 41:a[o-1].unshift({type:"criticalStart",criticalText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.CRITICAL_START}),a[o-1].push({type:"criticalEnd",signalType:i.LINETYPE.CRITICAL_END}),this.$=a[o-1];break;case 42:a[o-1].unshift({type:"breakStart",breakText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.BREAK_START}),a[o-1].push({type:"breakEnd",optText:i.parseMessage(a[o-2]),signalType:i.LINETYPE.BREAK_END}),this.$=a[o-1];break;case 45:this.$=a[o-3].concat([{type:"option",optionText:i.parseMessage(a[o-1]),signalType:i.LINETYPE.CRITICAL_OPTION},a[o]]);break;case 47:this.$=a[o-3].concat([{type:"and",parText:i.parseMessage(a[o-1]),signalType:i.LINETYPE.PAR_AND},a[o]]);break;case 49:this.$=a[o-3].concat([{type:"else",altText:i.parseMessage(a[o-1]),signalType:i.LINETYPE.ALT_ELSE},a[o]]);break;case 50:a[o-3].type="addParticipant",a[o-3].description=i.parseMessage(a[o-1]),this.$=a[o-3];break;case 51:a[o-1].type="addParticipant",this.$=a[o-1];break;case 52:a[o-3].type="addActor",a[o-3].description=i.parseMessage(a[o-1]),this.$=a[o-3];break;case 53:a[o-1].type="addActor",this.$=a[o-1];break;case 54:this.$=[a[o-1],{type:"addNote",placement:a[o-2],actor:a[o-1].actor,text:a[o]}];break;case 55:a[o-2]=[].concat(a[o-1],a[o-1]).slice(0,2),a[o-2][0]=a[o-2][0].actor,a[o-2][1]=a[o-2][1].actor,this.$=[a[o-1],{type:"addNote",placement:i.PLACEMENT.OVER,actor:a[o-2].slice(0,2),text:a[o]}];break;case 56:this.$=[a[o-1],{type:"addLinks",actor:a[o-1].actor,text:a[o]}];break;case 57:this.$=[a[o-1],{type:"addALink",actor:a[o-1].actor,text:a[o]}];break;case 58:this.$=[a[o-1],{type:"addProperties",actor:a[o-1].actor,text:a[o]}];break;case 59:this.$=[a[o-1],{type:"addDetails",actor:a[o-1].actor,text:a[o]}];break;case 62:this.$=[a[o-2],a[o]];break;case 64:this.$=i.PLACEMENT.LEFTOF;break;case 65:this.$=i.PLACEMENT.RIGHTOF;break;case 66:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeStart",signalType:i.LINETYPE.ACTIVE_START,actor:a[o-1]}];break;case 67:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeEnd",signalType:i.LINETYPE.ACTIVE_END,actor:a[o-4]}];break;case 68:this.$=[a[o-3],a[o-1],{type:"addMessage",from:a[o-3].actor,to:a[o-1].actor,signalType:a[o-2],msg:a[o]}];break;case 69:this.$={type:"addParticipant",actor:a[o]};break;case 70:this.$=i.LINETYPE.SOLID_OPEN;break;case 71:this.$=i.LINETYPE.DOTTED_OPEN;break;case 72:this.$=i.LINETYPE.SOLID;break;case 73:this.$=i.LINETYPE.DOTTED;break;case 74:this.$=i.LINETYPE.SOLID_CROSS;break;case 75:this.$=i.LINETYPE.DOTTED_CROSS;break;case 76:this.$=i.LINETYPE.SOLID_POINT;break;case 77:this.$=i.LINETYPE.DOTTED_POINT;break;case 78:this.$=i.parseMessage(a[o].trim().substring(1));break;case 79:i.parseDirective("%%{","open_directive");break;case 80:i.parseDirective(a[o],"type_directive");break;case 81:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 82:i.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:n,5:i,6:4,7:r,14:6,83:a},{1:[3]},{3:8,4:n,5:i,6:4,7:r,14:6,83:a},{3:9,4:n,5:i,6:4,7:r,14:6,83:a},{3:10,4:n,5:i,6:4,7:r,14:6,83:a},e([1,4,5,19,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],s,{8:11}),{15:12,84:[1,13]},{84:[2,79]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{16:51,17:[1,52],86:O},e([17,86],[2,80]),e(M,[2,6]),{6:41,10:54,13:18,14:6,19:l,22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},e(M,[2,8]),e(M,[2,9]),e(M,[2,17]),{20:[1,55]},{5:[1,56]},{5:[1,59],24:[1,57],25:[1,58]},{27:60,73:D},{27:61,73:D},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},{5:[1,66]},e(M,[2,31]),e(M,[2,32]),{37:[1,67]},{39:[1,68]},e(M,[2,35]),{20:[1,69]},{20:[1,70]},{20:[1,71]},{20:[1,72]},{20:[1,73]},{20:[1,74]},{20:[1,75]},e(M,[2,43]),{27:76,73:D},{27:77,73:D},{70:78,74:[1,79],75:[1,80],76:[1,81],77:[1,82],78:[1,83],79:[1,84],80:[1,85],81:[1,86]},{58:87,60:[1,88],68:[1,89],69:[1,90]},{27:91,73:D},{27:92,73:D},{27:93,73:D},{27:94,73:D},e([5,55,67,74,75,76,77,78,79,80,81,82],[2,69]),{5:[1,95]},{18:96,85:[1,97]},{5:[2,82]},e(M,[2,7]),e(I,[2,10],{11:98}),e(M,[2,19]),{5:[1,100],24:[1,99]},{5:[1,101]},e(M,[2,23]),{5:[1,102]},{5:[1,103]},e(M,[2,26]),e(M,[2,27]),e(M,[2,28]),e(M,[2,29]),e(M,[2,30]),e(M,[2,33]),e(M,[2,34]),e(F,s,{8:104}),e(F,s,{8:105}),e(F,s,{8:106}),e($,s,{45:107,8:108}),e(R,s,{47:109,8:110}),e(Z,s,{49:111,8:112}),e(F,s,{8:113}),{5:[1,115],55:[1,114]},{5:[1,117],55:[1,116]},{27:120,71:[1,118],72:[1,119],73:D},e(P,[2,70]),e(P,[2,71]),e(P,[2,72]),e(P,[2,73]),e(P,[2,74]),e(P,[2,75]),e(P,[2,76]),e(P,[2,77]),{27:121,73:D},{27:123,61:122,73:D},{73:[2,64]},{73:[2,65]},{59:124,82:j},{59:126,82:j},{59:127,82:j},{59:128,82:j},e(Y,[2,15]),{16:129,86:O},{86:[2,81]},{4:[1,132],5:[1,134],12:131,13:133,21:[1,130],54:T,56:E},{5:[1,135]},e(M,[2,21]),e(M,[2,22]),e(M,[2,24]),e(M,[2,25]),{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,136],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,137],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,138],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,139]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,48],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,53:[1,140],54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,141]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,46],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,52:[1,142],54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,143]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,44],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,51:[1,144],54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,145],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:T,56:E,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{20:[1,146]},e(M,[2,51]),{20:[1,147]},e(M,[2,53]),{27:148,73:D},{27:149,73:D},{59:150,82:j},{59:151,82:j},{59:152,82:j},{67:[1,153],82:[2,63]},{5:[2,56]},{5:[2,78]},{5:[2,57]},{5:[2,58]},{5:[2,59]},{5:[1,154]},e(M,[2,18]),e(I,[2,11]),{13:155,54:T,56:E},e(I,[2,13]),e(I,[2,14]),e(M,[2,20]),e(M,[2,36]),e(M,[2,37]),e(M,[2,38]),e(M,[2,39]),{20:[1,156]},e(M,[2,40]),{20:[1,157]},e(M,[2,41]),{20:[1,158]},e(M,[2,42]),{5:[1,159]},{5:[1,160]},{59:161,82:j},{59:162,82:j},{5:[2,68]},{5:[2,54]},{5:[2,55]},{27:163,73:D},e(Y,[2,16]),e(I,[2,12]),e($,s,{8:108,45:164}),e(R,s,{8:110,47:165}),e(Z,s,{8:112,49:166}),e(M,[2,50]),e(M,[2,52]),{5:[2,66]},{5:[2,67]},{82:[2,62]},{21:[2,49]},{21:[2,47]},{21:[2,45]}],defaultActions:{7:[2,79],8:[2,1],9:[2,2],10:[2,3],53:[2,82],89:[2,64],90:[2,65],97:[2,81],124:[2,56],125:[2,78],126:[2,57],127:[2,58],128:[2,59],150:[2,68],151:[2,54],152:[2,55],161:[2,66],162:[2,67],163:[2,62],164:[2,49],165:[2,47],166:[2,45]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},U=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),83;case 1:return this.begin("type_directive"),84;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),86;case 4:return 85;case 5:case 53:case 66:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 24;case 12:return this.begin("LINE"),19;case 13:return this.begin("ID"),54;case 14:return this.begin("ID"),56;case 15:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),73;case 16:return this.popState(),this.popState(),this.begin("LINE"),55;case 17:return this.popState(),this.popState(),5;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),44;case 22:return this.begin("LINE"),53;case 23:return this.begin("LINE"),46;case 24:return this.begin("LINE"),52;case 25:return this.begin("LINE"),48;case 26:return this.begin("LINE"),51;case 27:return this.begin("LINE"),50;case 28:return this.popState(),20;case 29:return 21;case 30:return 68;case 31:return 69;case 32:return 62;case 33:return 63;case 34:return 64;case 35:return 65;case 36:return 60;case 37:return 57;case 38:return this.begin("ID"),26;case 39:return this.begin("ID"),28;case 40:return 34;case 41:return 35;case 42:return this.begin("acc_title"),36;case 43:return this.popState(),"acc_title_value";case 44:return this.begin("acc_descr"),38;case 45:return this.popState(),"acc_descr_value";case 46:this.begin("acc_descr_multiline");break;case 47:this.popState();break;case 48:return"acc_descr_multiline_value";case 49:return 7;case 50:return 23;case 51:return 25;case 52:return 67;case 54:return e.yytext=e.yytext.trim(),73;case 55:return 76;case 56:return 77;case 57:return 74;case 58:return 75;case 59:return 78;case 60:return 79;case 61:return 80;case 62:return 81;case 63:return 82;case 64:return 71;case 65:return 72;case 67:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[47,48],inclusive:!1},acc_descr:{rules:[45],inclusive:!1},acc_title:{rules:[43],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,15],inclusive:!1},ALIAS:{rules:[7,8,16,17],inclusive:!1},LINE:{rules:[7,8,28],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,46,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}},t);function W(){this.yy={}}return z.lexer=U,W.prototype=z,z.Parser=W,new W}();eh.parser=eh;const nh=eh,ih=t=>null!==t.match(/^\s*sequenceDiagram/);let rh,ah,sh,oh={},ch=[],lh=[],hh=!1;const uh=function(t,e,n,i){let r=sh;const a=oh[t];if(a){if(sh&&a.box&&sh!==a.box)throw new Error("A same participant should only be defined in one Box: "+a.name+" can't be in '"+a.box.name+"' and in '"+sh.name+"' at the same time.");if(r=a.box?a.box:sh,a.box=r,a&&e===a.name&&null==n)return}null!=n&&null!=n.text||(n={text:e,wrap:null,type:i}),null!=i&&null!=n.text||(n={text:e,wrap:null,type:i}),oh[t]={box:r,name:e,description:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,prevActor:rh,links:{},properties:{},actorCnt:null,rectData:null,type:i||"participant"},rh&&oh[rh]&&(oh[rh].nextActor=t),sh&&sh.actorKeys.push(t),rh=t},dh=function(t,e,n={text:void 0,wrap:void 0},i){if(i===gh.ACTIVE_END){const e=(t=>{let e,n=0;for(e=0;e<lh.length;e++)lh[e].type===gh.ACTIVE_START&&lh[e].from.actor===t&&n++,lh[e].type===gh.ACTIVE_END&&lh[e].from.actor===t&&n--;return n})(t.actor);if(e<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return lh.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,type:i}),!0},ph=function(t){return oh[t]},fh=()=>void 0!==ah?ah:gi().sequence.wrap,gh={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31},yh=function(t,e,n){n.text,void 0===n.wrap&&fh()||n.wrap;const i=[].concat(t,t);lh.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,type:gh.NOTE,placement:e})},mh=function(t,e){const n=ph(t);try{let t=It(e.text,gi());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");bh(n,JSON.parse(t))}catch(i){Bt.error("error while parsing actor link text",i)}};function bh(t,e){if(null==t.links)t.links=e;else for(let n in e)t.links[n]=e[n]}const _h=function(t,e){const n=ph(t);try{let t=It(e.text,gi());xh(n,JSON.parse(t))}catch(i){Bt.error("error while parsing actor properties text",i)}};function xh(t,e){if(null==t.properties)t.properties=e;else for(let n in e)t.properties[n]=e[n]}const vh=function(t,e){const n=ph(t),i=document.getElementById(e.text);try{const t=i.innerHTML,e=JSON.parse(t);e.properties&&xh(n,e.properties),e.links&&bh(n,e.links)}catch(r){Bt.error("error while parsing actor details text",r)}},kh=function(t){if(Array.isArray(t))t.forEach((function(t){kh(t)}));else switch(t.type){case"sequenceIndex":lh.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":uh(t.actor,t.actor,t.description,"participant");break;case"addActor":uh(t.actor,t.actor,t.description,"actor");break;case"activeStart":case"activeEnd":dh(t.actor,void 0,void 0,t.signalType);break;case"addNote":yh(t.actor,t.placement,t.text);break;case"addLinks":mh(t.actor,t.text);break;case"addALink":!function(t,e){const n=ph(t);try{const t={};let s=It(e.text,gi());var i=s.indexOf("@");s=s.replace(/&/g,"&"),s=s.replace(/=/g,"=");var r=s.slice(0,i-1).trim(),a=s.slice(i+1).trim();t[r]=a,bh(n,t)}catch(s){Bt.error("error while parsing actor link text",s)}}(t.actor,t.text);break;case"addProperties":_h(t.actor,t.text);break;case"addDetails":vh(t.actor,t.text);break;case"addMessage":dh(t.from,t.to,t.msg,t.signalType);break;case"boxStart":e=t.boxData,ch.push({name:e.text,wrap:void 0===e.wrap&&fh()||!!e.wrap,fill:e.color,actorKeys:[]}),sh=ch.slice(-1)[0];break;case"boxEnd":sh=void 0;break;case"loopStart":dh(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":dh(void 0,void 0,void 0,t.signalType);break;case"rectStart":dh(void 0,void 0,t.color,t.signalType);break;case"optStart":dh(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":dh(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":zi(t.text);break;case"parStart":case"and":dh(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":dh(void 0,void 0,t.criticalText,t.signalType);break;case"option":dh(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":dh(void 0,void 0,t.breakText,t.signalType)}var e},wh={addActor:uh,addMessage:function(t,e,n,i){lh.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,answer:i})},addSignal:dh,addLinks:mh,addDetails:vh,addProperties:_h,autoWrap:fh,setWrap:function(t){ah=t},enableSequenceNumbers:function(){hh=!0},disableSequenceNumbers:function(){hh=!1},showSequenceNumbers:()=>hh,getMessages:function(){return lh},getActors:function(){return oh},getActor:ph,getActorKeys:function(){return Object.keys(oh)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:Ui,getBoxes:function(){return ch},getDiagramTitle:Vi,setDiagramTitle:Hi,parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().sequence,clear:function(){oh={},ch=[],lh=[],hh=!1,Yi()},parseMessage:function(t){const e=t.trim(),n={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return Bt.debug("parseMessage:",n),n},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let n=null!=e&&e[1]?e[1].trim():"transparent",i=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",n)||(n="transparent",i=t.trim());else{const e=(new Option).style;e.color=n,e.color!==n&&(n="transparent",i=t.trim())}return{color:n,text:void 0!==i?It(i.replace(/^:?(?:no)?wrap:/,""),gi()):void 0,wrap:void 0!==i?null!==i.match(/^:?wrap:/)||null===i.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:gh,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:yh,setAccTitle:zi,apply:kh,setAccDescription:Wi,getAccDescription:qi,hasAtLeastOneBox:function(){return ch.length>0},hasAtLeastOneBoxWithTitle:function(){return ch.some((t=>t.name))}};let Ch=[];const Th=()=>{Ch.forEach((t=>{t()})),Ch=[]},Eh=function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},Sh=(t,e)=>{var n;n=()=>{const n=document.querySelectorAll(t);0!==n.length&&(n[0].addEventListener("mouseover",(function(){Bh("actor"+e+"_popup")})),n[0].addEventListener("mouseout",(function(){Nh("actor"+e+"_popup")})))},Ch.push(n)},Ah=function(t,e,n,i){const r=t.append("image");r.attr("x",e),r.attr("y",n);var a=(0,s.Nm)(i);r.attr("xlink:href",a)},Lh=function(t,e,n,i){const r=t.append("use");r.attr("x",e),r.attr("y",n);var a=(0,s.Nm)(i);r.attr("xlink:href","#"+a)},Bh=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},Nh=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},Dh=function(t,e){let n=0,i=0;const r=e.text.split(jt.lineBreakRegex),[a,s]=ri(e.fontSize);let o=[],c=0,l=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":l=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":l=()=>Math.round(e.y+(n+i+e.textMargin)/2);break;case"bottom":case"end":l=()=>Math.round(e.y+(n+i+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[h,u]of r.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==a&&(c=h*a);const r=t.append("text");if(r.attr("x",e.x),r.attr("y",l()),void 0!==e.anchor&&r.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&r.style("font-family",e.fontFamily),void 0!==s&&r.style("font-size",s),void 0!==e.fontWeight&&r.style("font-weight",e.fontWeight),void 0!==e.fill&&r.attr("fill",e.fill),void 0!==e.class&&r.attr("class",e.class),void 0!==e.dy?r.attr("dy",e.dy):0!==c&&r.attr("dy",c),e.tspan){const t=r.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(u)}else r.text(u);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(i+=(r._groups||r)[0][0].getBBox().height,n=i),o.push(r)}return o},Oh=function(t,e){const n=t.append("polygon");var i,r,a,s,o;return n.attr("points",(i=e.x,r=e.y,a=e.width,s=e.height,i+","+r+" "+(i+a)+","+r+" "+(i+a)+","+(r+s-(o=7))+" "+(i+a-1.2*o)+","+(r+s)+" "+i+","+(r+s))),n.attr("class","labelBox"),e.y=e.y+e.height/2,Dh(t,e),n};let Mh=-1;const Ih=(t,e)=>{t.selectAll&&t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)},Fh=function(t,e){Eh(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"}).lower()},$h=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},Rh=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Zh=function(){function t(t,e,n,r,a,s,o){i(e.append("text").attr("x",n+a/2).attr("y",r+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,r,a,s,o,c){const{actorFontSize:l,actorFontFamily:h,actorFontWeight:u}=c,[d,p]=ri(l),f=t.split(jt.lineBreakRegex);for(let g=0;g<f.length;g++){const t=g*d-d*(f.length-1)/2,c=e.append("text").attr("x",n+a/2).attr("y",r).style("text-anchor","middle").style("font-size",p).style("font-weight",u).style("font-family",h);c.append("tspan").attr("x",n+a/2).attr("dy",t).text(f[g]),c.attr("y",r+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,r,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",r).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,a,s,o,c,l),i(u,c)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),Ph=function(){function t(t,e,n,r,a,s,o){i(e.append("text").attr("x",n).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,n,r,a,s,o,c){const{actorFontSize:l,actorFontFamily:h,actorFontWeight:u}=c,d=t.split(jt.lineBreakRegex);for(let p=0;p<d.length;p++){const t=p*l-l*(d.length-1)/2,a=e.append("text").attr("x",n).attr("y",r).style("text-anchor","start").style("font-size",l).style("font-weight",u).style("font-family",h);a.append("tspan").attr("x",n).attr("dy",t).text(d[p]),a.attr("y",r+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(a,o)}}function n(t,n,r,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",r).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,a,0,o,c,l),i(u,c)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),jh={drawRect:Eh,drawText:Dh,drawLabel:Oh,drawActor:function(t,e,n,i){switch(e.type){case"actor":return function(t,e,n,i){const r=e.x+e.width/2,a=e.y+80;i||(Mh++,t.append("line").attr("id","actor"+Mh).attr("x1",r).attr("y1",a).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));const s=t.append("g");s.attr("class","actor-man");const o=Rh();o.x=e.x,o.y=e.y,o.fill="#eaeaea",o.width=e.width,o.height=e.height,o.class="actor",o.rx=3,o.ry=3,s.append("line").attr("id","actor-man-torso"+Mh).attr("x1",r).attr("y1",e.y+25).attr("x2",r).attr("y2",e.y+45),s.append("line").attr("id","actor-man-arms"+Mh).attr("x1",r-18).attr("y1",e.y+33).attr("x2",r+18).attr("y2",e.y+33),s.append("line").attr("x1",r-18).attr("y1",e.y+60).attr("x2",r).attr("y2",e.y+45),s.append("line").attr("x1",r).attr("y1",e.y+45).attr("x2",r+16).attr("y2",e.y+60);const c=s.append("circle");c.attr("cx",e.x+e.width/2),c.attr("cy",e.y+10),c.attr("r",15),c.attr("width",e.width),c.attr("height",e.height);const l=s.node().getBBox();return e.height=l.height,Zh(n)(e.description,s,o.x,o.y+35,o.width,o.height,{class:"actor"},n),e.height}(t,e,n,i);case"participant":return function(t,e,n,i){const r=e.x+e.width/2,a=e.y+5,s=t.append("g");var o=s;i||(Mh++,o.append("line").attr("id","actor"+Mh).attr("x1",r).attr("y1",a).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),o=s.append("g"),e.actorCnt=Mh,null!=e.links&&(o.attr("id","root-"+Mh),Sh("#root-"+Mh,Mh)));const c=Rh();var l="actor";null!=e.properties&&e.properties.class?l=e.properties.class:c.fill="#eaeaea",c.x=e.x,c.y=e.y,c.width=e.width,c.height=e.height,c.class=l,c.rx=3,c.ry=3;const h=Eh(o,c);if(e.rectData=c,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?Lh(o,c.x+c.width-20,c.y+10,t.substr(1)):Ah(o,c.x+c.width-20,c.y+10,t)}Zh(n)(e.description,o,c.x,c.y,c.width,c.height,{class:"actor"},n);let u=e.height;if(h.node){const t=h.node().getBBox();e.height=t.height,u=t.height}return u}(t,e,n,i)}},drawBox:function(t,e,n){const i=t.append("g");Fh(i,e),e.name&&Zh(n)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},n),i.lower()},drawPopup:function(t,e,n,i,r){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const a=e.links,o=e.actorCnt,c=e.rectData;var l="none";r&&(l="block !important");const h=t.append("g");h.attr("id","actor"+o+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",l),Sh("#actor"+o+"_popup",o);var u="";void 0!==c.class&&(u=" "+c.class);let d=c.width>n?c.width:n;const p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+u),p.attr("x",c.x),p.attr("y",c.height),p.attr("fill",c.fill),p.attr("stroke",c.stroke),p.attr("width",d),p.attr("height",c.height),p.attr("rx",c.rx),p.attr("ry",c.ry),null!=a){var f=20;for(let t in a){var g=h.append("a"),y=(0,s.Nm)(a[t]);g.attr("xlink:href",y),g.attr("target","_blank"),Ph(i)(t,g,c.x+10,c.height+f,d,20,{class:"actor"},i),f+=30}}return p.attr("height",f),{height:c.height+f,width:d}},drawImage:Ah,drawEmbeddedImage:Lh,anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,n,i,r){const a=Rh(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+r%3,a.width=e.stopx-e.startx,a.height=n-e.starty,Eh(s,a)},drawLoop:function(t,e,n,i){const{boxMargin:r,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:o,messageFontFamily:c,messageFontSize:l,messageFontWeight:h}=i,u=t.append("g"),d=function(t,e,n,i){return u.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",i).attr("class","loopLine")};d(e.startx,e.starty,e.stopx,e.starty),d(e.stopx,e.starty,e.stopx,e.stopy),d(e.startx,e.stopy,e.stopx,e.stopy),d(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){d(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let p=$h();p.text=n,p.x=e.startx,p.y=e.starty,p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.anchor="middle",p.valign="middle",p.tspan=!1,p.width=o||50,p.height=s||20,p.textMargin=a,p.class="labelText",Oh(u,p),p=$h(),p.text=e.title,p.x=e.startx+o/2+(e.stopx-e.startx)/2,p.y=e.starty+r+a,p.anchor="middle",p.valign="middle",p.textMargin=a,p.class="loopText",p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.wrap=!0;let f=Dh(u,p);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,n){if(t.message){p.text=t.message,p.x=e.startx+(e.stopx-e.startx)/2,p.y=e.sections[n].y+r+a,p.class="loopText",p.anchor="middle",p.valign="middle",p.tspan=!1,p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.wrap=e.wrap,f=Dh(u,p);let i=Math.round(f.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[n].height+=i-(r+a)}})),e.height=Math.round(e.stopy-e.starty),u},drawBackgroundRect:Fh,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:$h,getNoteRect:Rh,popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:Ih,sanitizeUrl:s.Nm};let Yh={};const zh={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Gh(gi())},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,i){const r=this;let a=0;function s(s){return function(o){a++;const c=r.sequenceItems.length-a+1;r.updateVal(o,"starty",e-c*Yh.boxMargin,Math.min),r.updateVal(o,"stopy",i+c*Yh.boxMargin,Math.max),r.updateVal(zh.data,"startx",t-c*Yh.boxMargin,Math.min),r.updateVal(zh.data,"stopx",n+c*Yh.boxMargin,Math.max),"activation"!==s&&(r.updateVal(o,"startx",t-c*Yh.boxMargin,Math.min),r.updateVal(o,"stopx",n+c*Yh.boxMargin,Math.max),r.updateVal(zh.data,"starty",e-c*Yh.boxMargin,Math.min),r.updateVal(zh.data,"stopy",i+c*Yh.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,e,n,i){const r=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,i),o=Math.max(e,i);this.updateVal(zh.data,"startx",r,Math.min),this.updateVal(zh.data,"starty",s,Math.min),this.updateVal(zh.data,"stopx",a,Math.max),this.updateVal(zh.data,"stopy",o,Math.max),this.updateBounds(r,s,a,o)},newActivation:function(t,e,n){const i=n[t.from.actor],r=Xh(t.from.actor).length||0,a=i.x+i.width/2+(r-1)*Yh.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Yh.activationWidth,stopy:void 0,actor:t.from.actor,anchored:jh.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:zh.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Uh=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),Wh=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),qh=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const Hh=function(t,e,n,i,r,a,s){if(!0===r.hideUnusedParticipants){const t=new Set;a.forEach((e=>{t.add(e.from),t.add(e.to)})),n=n.filter((e=>t.has(e)))}let o,c=0,l=0,h=0;for(const u of n){const n=e[u],r=n.box;o&&o!=r&&(s||zh.models.addBox(o),l+=Yh.boxMargin+o.margin),r&&r!=o&&(s||(r.x=c+l,r.y=i),l+=r.margin),n.width=n.width||Yh.width,n.height=Math.max(n.height||Yh.height,Yh.height),n.margin=n.margin||Yh.actorMargin,n.x=c+l,n.y=zh.getVerticalPos();const a=jh.drawActor(t,n,Yh,s);h=Math.max(h,a),zh.insert(n.x,i,n.x+n.width,n.height),c+=n.width+l,n.box&&(n.box.width=c+r.margin-n.box.x),l=n.margin,o=n.box,zh.models.addActor(n)}o&&!s&&zh.models.addBox(o),zh.bumpVerticalPos(h)},Vh=function(t,e,n,i){let r=0,a=0;for(const s of n){const n=e[s],o=Jh(n),c=jh.drawPopup(t,n,o,Yh,Yh.forceMenus,i);c.height>r&&(r=c.height),c.width+n.x>a&&(a=c.width+n.x)}return{maxHeight:r,maxWidth:a}},Gh=function(t){$n(Yh,t),t.fontFamily&&(Yh.actorFontFamily=Yh.noteFontFamily=Yh.messageFontFamily=t.fontFamily),t.fontSize&&(Yh.actorFontSize=Yh.noteFontSize=Yh.messageFontSize=t.fontSize),t.fontWeight&&(Yh.actorFontWeight=Yh.noteFontWeight=Yh.messageFontWeight=t.fontWeight)},Xh=function(t){return zh.activations.filter((function(e){return e.actor===t}))},Qh=function(t,e){const n=e[t],i=Xh(t);return[i.reduce((function(t,e){return Math.min(t,e.startx)}),n.x+n.width/2),i.reduce((function(t,e){return Math.max(t,e.stopx)}),n.x+n.width/2)]};function Kh(t,e,n,i,r){zh.bumpVerticalPos(n);let a=i;if(e.id&&e.message&&t[e.id]){const n=t[e.id].width,r=Uh(Yh);e.message=ai.wrapLabel(`[${e.message}]`,n-2*Yh.wrapPadding,r),e.width=n,e.wrap=!0;const s=ai.calculateTextDimensions(e.message,r),o=Math.max(s.height,Yh.labelBoxHeight);a=i+o,Bt.debug(`${o} - ${e.message}`)}r(e),zh.bumpVerticalPos(a)}const Jh=function(t){let e=0;const n=qh(Yh);for(const i in t.links){const t=ai.calculateTextDimensions(i,n).width+2*Yh.wrapPadding+2*Yh.boxMargin;e<t&&(e=t)}return e};const tu=function(t,e,n,i){const r={},a=[];let s,o,c;return t.forEach((function(t){switch(t.id=ai.random({length:10}),t.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:a.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:t.message&&(s=a.pop(),r[s.id]=s,r[t.id]=s,a.push(s));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:s=a.pop(),r[s.id]=s;break;case i.db.LINETYPE.ACTIVE_START:{const n=e[t.from?t.from.actor:t.to.actor],i=Xh(t.from?t.from.actor:t.to.actor).length,r=n.x+n.width/2+(i-1)*Yh.activationWidth/2,a={startx:r,stopx:r+Yh.activationWidth,actor:t.from.actor,enabled:!0};zh.activations.push(a)}break;case i.db.LINETYPE.ACTIVE_END:{const e=zh.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete zh.activations.splice(e,1)[0]}}void 0!==t.placement?(o=function(t,e,n){const i=e[t.from].x,r=e[t.to].x,a=t.wrap&&t.message;let s=ai.calculateTextDimensions(a?ai.wrapLabel(t.message,Yh.width,Wh(Yh)):t.message,Wh(Yh));const o={width:a?Yh.width:Math.max(Yh.width,s.width+2*Yh.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===n.db.PLACEMENT.RIGHTOF?(o.width=a?Math.max(Yh.width,s.width):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Yh.noteMargin),o.startx=i+(e[t.from].width+Yh.actorMargin)/2):t.placement===n.db.PLACEMENT.LEFTOF?(o.width=a?Math.max(Yh.width,s.width+2*Yh.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Yh.noteMargin),o.startx=i-o.width+(e[t.from].width-Yh.actorMargin)/2):t.to===t.from?(s=ai.calculateTextDimensions(a?ai.wrapLabel(t.message,Math.max(Yh.width,e[t.from].width),Wh(Yh)):t.message,Wh(Yh)),o.width=a?Math.max(Yh.width,e[t.from].width):Math.max(e[t.from].width,Yh.width,s.width+2*Yh.noteMargin),o.startx=i+(e[t.from].width-o.width)/2):(o.width=Math.abs(i+e[t.from].width/2-(r+e[t.to].width/2))+Yh.actorMargin,o.startx=i<r?i+e[t.from].width/2-Yh.actorMargin/2:r+e[t.to].width/2-Yh.actorMargin/2),a&&(o.message=ai.wrapLabel(t.message,o.width-2*Yh.wrapPadding,Wh(Yh))),Bt.debug(`NM:[${o.startx},${o.stopx},${o.starty},${o.stopy}:${o.width},${o.height}=${t.message}]`),o}(t,e,i),t.noteModel=o,a.forEach((t=>{s=t,s.from=Math.min(s.from,o.startx),s.to=Math.max(s.to,o.startx+o.width),s.width=Math.max(s.width,Math.abs(s.from-s.to))-Yh.labelBoxWidth}))):(c=function(t,e,n){let i=!1;if([n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(i=!0),!i)return{};const r=Qh(t.from,e),a=Qh(t.to,e),s=r[0]<=a[0]?1:0,o=r[0]<a[0]?0:1,c=[...r,...a],l=Math.abs(a[o]-r[s]);t.wrap&&t.message&&(t.message=ai.wrapLabel(t.message,Math.max(l+2*Yh.wrapPadding,Yh.width),Uh(Yh)));const h=ai.calculateTextDimensions(t.message,Uh(Yh));return{width:Math.max(t.wrap?0:h.width+2*Yh.wrapPadding,l+2*Yh.wrapPadding,Yh.width),height:0,startx:r[s],stopx:a[o],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,c),toBounds:Math.max.apply(null,c)}}(t,e,i),t.msgModel=c,c.startx&&c.stopx&&a.length>0&&a.forEach((n=>{if(s=n,c.startx===c.stopx){const n=e[t.from],i=e[t.to];s.from=Math.min(n.x-c.width/2,n.x-n.width/2,s.from),s.to=Math.max(i.x+c.width/2,i.x+n.width/2,s.to),s.width=Math.max(s.width,Math.abs(s.to-s.from))-Yh.labelBoxWidth}else s.from=Math.min(c.startx,s.from),s.to=Math.max(c.stopx,s.to),s.width=Math.max(s.width,c.width)-Yh.labelBoxWidth})))})),zh.activations=[],Bt.debug("Loop type widths:",r),r},eu={bounds:zh,drawActors:Hh,drawActorsPopup:Vh,setConf:Gh,draw:function(t,e,n,i){const{securityLevel:r,sequence:a}=gi();let s;Yh=a,i.db.clear(),i.parser.parse(t),"sandbox"===r&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===r?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),l="sandbox"===r?s.nodes()[0].contentDocument:document;zh.init(),Bt.debug(i.db);const h="sandbox"===r?c.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`),u=i.db.getActors(),d=i.db.getBoxes(),p=i.db.getActorKeys(),f=i.db.getMessages(),g=i.db.getDiagramTitle(),y=i.db.hasAtLeastOneBox(),m=i.db.hasAtLeastOneBoxWithTitle(),b=function(t,e,n){const i={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const r=t[e.to];if(e.placement===n.db.PLACEMENT.LEFTOF&&!r.prevActor)return;if(e.placement===n.db.PLACEMENT.RIGHTOF&&!r.nextActor)return;const a=void 0!==e.placement,s=!a,o=a?Wh(Yh):Uh(Yh),c=e.wrap?ai.wrapLabel(e.message,Yh.width-2*Yh.wrapPadding,o):e.message,l=ai.calculateTextDimensions(c,o).width+2*Yh.wrapPadding;s&&e.from===r.nextActor?i[e.to]=Math.max(i[e.to]||0,l):s&&e.from===r.prevActor?i[e.from]=Math.max(i[e.from]||0,l):s&&e.from===e.to?(i[e.from]=Math.max(i[e.from]||0,l/2),i[e.to]=Math.max(i[e.to]||0,l/2)):e.placement===n.db.PLACEMENT.RIGHTOF?i[e.from]=Math.max(i[e.from]||0,l):e.placement===n.db.PLACEMENT.LEFTOF?i[r.prevActor]=Math.max(i[r.prevActor]||0,l):e.placement===n.db.PLACEMENT.OVER&&(r.prevActor&&(i[r.prevActor]=Math.max(i[r.prevActor]||0,l/2)),r.nextActor&&(i[e.from]=Math.max(i[e.from]||0,l/2)))}})),Bt.debug("maxMessageWidthPerActor:",i),i}(u,f,i);Yh.height=function(t,e,n){let i=0;Object.keys(t).forEach((e=>{const n=t[e];n.wrap&&(n.description=ai.wrapLabel(n.description,Yh.width-2*Yh.wrapPadding,qh(Yh)));const r=ai.calculateTextDimensions(n.description,qh(Yh));n.width=n.wrap?Yh.width:Math.max(Yh.width,r.width+2*Yh.wrapPadding),n.height=n.wrap?Math.max(r.height,Yh.height):Yh.height,i=Math.max(i,n.height)}));for(const a in e){const n=t[a];if(!n)continue;const i=t[n.nextActor];if(!i){const t=e[a]+Yh.actorMargin-n.width/2;n.margin=Math.max(t,Yh.actorMargin);continue}const r=e[a]+Yh.actorMargin-n.width/2-i.width/2;n.margin=Math.max(r,Yh.actorMargin)}let r=0;return n.forEach((e=>{const n=Uh(Yh);let i=e.actorKeys.reduce(((e,n)=>e+(t[n].width+(t[n].margin||0))),0);i-=2*Yh.boxTextMargin,e.wrap&&(e.name=ai.wrapLabel(e.name,i-2*Yh.wrapPadding,n));const a=ai.calculateTextDimensions(e.name,n);r=Math.max(a.height,r);const s=Math.max(i,a.width+2*Yh.wrapPadding);if(e.margin=Yh.boxTextMargin,i<s){const t=(s-i)/2;e.margin+=t}})),n.forEach((t=>t.textMaxHeight=r)),Math.max(i,Yh.height)}(u,b,d),jh.insertComputerIcon(h),jh.insertDatabaseIcon(h),jh.insertClockIcon(h),y&&(zh.bumpVerticalPos(Yh.boxMargin),m&&zh.bumpVerticalPos(d[0].textMaxHeight)),Hh(h,u,p,0,Yh,f,!1);const _=tu(f,u,b,i);jh.insertArrowHead(h),jh.insertArrowCrossHead(h),jh.insertArrowFilledHead(h),jh.insertSequenceNumber(h);let x=1,v=1;const k=[];f.forEach((function(t){let e,n,r;switch(t.type){case i.db.LINETYPE.NOTE:n=t.noteModel,function(t,e){zh.bumpVerticalPos(Yh.boxMargin),e.height=Yh.boxMargin,e.starty=zh.getVerticalPos();const n=jh.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||Yh.width,n.class="note";const i=t.append("g"),r=jh.drawRect(i,n),a=jh.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Yh.noteFontFamily,a.fontSize=Yh.noteFontSize,a.fontWeight=Yh.noteFontWeight,a.anchor=Yh.noteAlign,a.textMargin=Yh.noteMargin,a.valign="center";const s=Dh(i,a),o=Math.round(s.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));r.attr("height",o+2*Yh.noteMargin),e.height+=o+2*Yh.noteMargin,zh.bumpVerticalPos(o+2*Yh.noteMargin),e.stopy=e.starty+o+2*Yh.noteMargin,e.stopx=e.startx+n.width,zh.insert(e.startx,e.starty,e.stopx,e.stopy),zh.models.addNote(e)}(h,n);break;case i.db.LINETYPE.ACTIVE_START:zh.newActivation(t,h,u);break;case i.db.LINETYPE.ACTIVE_END:!function(t,e){const n=zh.endActivation(t);n.starty+18>e&&(n.starty=e-6,e+=12),jh.drawActivation(h,n,e,Yh,Xh(t.from.actor).length),zh.insert(n.startx,e-10,n.stopx,e)}(t,zh.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.LOOP_END:e=zh.endLoop(),jh.drawLoop(h,e,"loop",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case i.db.LINETYPE.RECT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin,(t=>zh.newLoop(void 0,t.message)));break;case i.db.LINETYPE.RECT_END:e=zh.endLoop(),jh.drawBackgroundRect(h,e),zh.models.addLoop(e),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos());break;case i.db.LINETYPE.OPT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.OPT_END:e=zh.endLoop(),jh.drawLoop(h,e,"opt",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case i.db.LINETYPE.ALT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.ALT_ELSE:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case i.db.LINETYPE.ALT_END:e=zh.endLoop(),jh.drawLoop(h,e,"alt",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case i.db.LINETYPE.PAR_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.PAR_AND:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case i.db.LINETYPE.PAR_END:e=zh.endLoop(),jh.drawLoop(h,e,"par",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case i.db.LINETYPE.AUTONUMBER:x=t.message.start||x,v=t.message.step||v,t.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.CRITICAL_OPTION:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case i.db.LINETYPE.CRITICAL_END:e=zh.endLoop(),jh.drawLoop(h,e,"critical",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case i.db.LINETYPE.BREAK_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case i.db.LINETYPE.BREAK_END:e=zh.endLoop(),jh.drawLoop(h,e,"break",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;default:try{r=t.msgModel,r.starty=zh.getVerticalPos(),r.sequenceIndex=x,r.sequenceVisible=i.db.showSequenceNumbers();const e=function(t,e){zh.bumpVerticalPos(10);const{startx:n,stopx:i,message:r}=e,a=jt.splitBreaks(r).length,s=ai.calculateTextDimensions(r,Uh(Yh)),o=s.height/a;let c;e.height+=o,zh.bumpVerticalPos(o);let l=s.height-10;const h=s.width;if(n===i){c=zh.getVerticalPos()+l,Yh.rightAngles||(l+=Yh.boxMargin,c=zh.getVerticalPos()+l),l+=30;const t=Math.max(h/2,Yh.width/2);zh.insert(n-t,zh.getVerticalPos()-10+l,i+t,zh.getVerticalPos()+30+l)}else l+=Yh.boxMargin,c=zh.getVerticalPos()+l,zh.insert(n,c-10,i,c);return zh.bumpVerticalPos(l),e.height+=l,e.stopy=e.starty+e.height,zh.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),c}(0,r);k.push({messageModel:r,lineStartY:e}),zh.models.addMessage(r)}catch(a){Bt.error("error while drawing message",a)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(x+=v)})),k.forEach((t=>function(t,e,n,i){const{startx:r,stopx:a,starty:s,message:o,type:c,sequenceIndex:l,sequenceVisible:h}=e,u=ai.calculateTextDimensions(o,Uh(Yh)),d=jh.getTextObj();d.x=r,d.y=s+10,d.width=a-r,d.class="messageText",d.dy="1em",d.text=o,d.fontFamily=Yh.messageFontFamily,d.fontSize=Yh.messageFontSize,d.fontWeight=Yh.messageFontWeight,d.anchor=Yh.messageAlign,d.valign="center",d.textMargin=Yh.wrapPadding,d.tspan=!1,Dh(t,d);const p=u.width;let f;r===a?f=Yh.rightAngles?t.append("path").attr("d",`M ${r},${n} H ${r+Math.max(Yh.width/2,p/2)} V ${n+25} H ${r}`):t.append("path").attr("d","M "+r+","+n+" C "+(r+60)+","+(n-10)+" "+(r+60)+","+(n+30)+" "+r+","+(n+20)):(f=t.append("line"),f.attr("x1",r),f.attr("y1",n),f.attr("x2",a),f.attr("y2",n)),c===i.db.LINETYPE.DOTTED||c===i.db.LINETYPE.DOTTED_CROSS||c===i.db.LINETYPE.DOTTED_POINT||c===i.db.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");let g="";Yh.arrowMarkerAbsolute&&(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,g=g.replace(/\(/g,"\\("),g=g.replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),c!==i.db.LINETYPE.SOLID&&c!==i.db.LINETYPE.DOTTED||f.attr("marker-end","url("+g+"#arrowhead)"),c!==i.db.LINETYPE.SOLID_POINT&&c!==i.db.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+g+"#filled-head)"),c!==i.db.LINETYPE.SOLID_CROSS&&c!==i.db.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+g+"#crosshead)"),(h||Yh.showSequenceNumbers)&&(f.attr("marker-start","url("+g+"#sequencenumber)"),t.append("text").attr("x",r).attr("y",n+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(l))}(h,t.messageModel,t.lineStartY,i))),Yh.mirrorActors&&(zh.bumpVerticalPos(2*Yh.boxMargin),Hh(h,u,p,zh.getVerticalPos(),Yh,f,!0),zh.bumpVerticalPos(Yh.boxMargin),Ih(h,zh.getVerticalPos())),zh.models.boxes.forEach((function(t){t.height=zh.getVerticalPos()-t.y,zh.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",jh.drawBox(h,t,Yh)})),y&&zh.bumpVerticalPos(Yh.boxMargin);const w=Vh(h,u,p,l),{bounds:C}=zh.getBounds();Bt.debug("For line height fix Querying: #"+e+" .actor-line");(0,o.td_)("#"+e+" .actor-line").attr("y2",C.stopy);let T=C.stopy-C.starty;T<w.maxHeight&&(T=w.maxHeight);let E=T+2*Yh.diagramMarginY;Yh.mirrorActors&&(E=E-Yh.boxMargin+Yh.bottomMarginAdj);let S=C.stopx-C.startx;S<w.maxWidth&&(S=w.maxWidth);const A=S+2*Yh.diagramMarginX;g&&h.append("text").text(g).attr("x",(C.stopx-C.startx)/2-2*Yh.diagramMarginX).attr("y",-25),ki(h,E,A,Yh.useMaxWidth);const L=g?40:0;h.attr("viewBox",C.startx-Yh.diagramMarginX+" -"+(Yh.diagramMarginY+L)+" "+A+" "+(E+L)),Bt.debug("models:",zh.models)}};var nu=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,2],i=[1,3],r=[1,5],a=[1,7],s=[2,5],o=[1,15],c=[1,17],l=[1,21],h=[1,22],u=[1,23],d=[1,24],p=[1,37],f=[1,25],g=[1,26],y=[1,27],m=[1,28],b=[1,29],_=[1,32],x=[1,33],v=[1,34],k=[1,35],w=[1,36],C=[1,39],T=[1,40],E=[1,41],S=[1,42],A=[1,38],L=[1,45],B=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],N=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],D=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],M={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"--\x3e":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,class:42,CLASSENTITY_IDS:43,STYLECLASS:44,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 4:return i.setRootDoc(a[o]),a[o];case 5:this.$=[];break;case 6:"nl"!=a[o]&&(a[o-1].push(a[o]),this.$=a[o-1]);break;case 7:case 8:case 12:this.$=a[o];break;case 9:this.$="nl";break;case 13:const t=a[o-1];t.description=i.trimColon(a[o]),this.$=t;break;case 14:this.$={stmt:"relation",state1:a[o-2],state2:a[o]};break;case 15:const e=i.trimColon(a[o]);this.$={stmt:"relation",state1:a[o-3],state2:a[o-1],description:e};break;case 19:this.$={stmt:"state",id:a[o-3],type:"default",description:"",doc:a[o-1]};break;case 20:var c=a[o],l=a[o-2].trim();if(a[o].match(":")){var h=a[o].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 21:this.$={stmt:"state",id:a[o-3],type:"default",description:a[o-5],doc:a[o-1]};break;case 22:this.$={stmt:"state",id:a[o],type:"fork"};break;case 23:this.$={stmt:"state",id:a[o],type:"join"};break;case 24:this.$={stmt:"state",id:a[o],type:"choice"};break;case 25:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:a[o-1].trim(),note:{position:a[o-2].trim(),text:a[o].trim()}};break;case 30:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 31:case 32:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:a[o-1].trim(),classes:a[o].trim()};break;case 35:this.$={stmt:"applyClass",id:a[o-1].trim(),styleClass:a[o].trim()};break;case 38:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:a[o].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:a[o-2].trim(),classes:[a[o].trim()],type:"default",description:""};break;case 50:i.parseDirective("%%{","open_directive");break;case 51:i.parseDirective(a[o],"type_directive");break;case 52:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 53:i.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:n,5:i,6:4,7:r,45:6,60:a},{1:[3]},{3:8,4:n,5:i,6:4,7:r,45:6,60:a},{3:9,4:n,5:i,6:4,7:r,45:6,60:a},{3:10,4:n,5:i,6:4,7:r,45:6,60:a},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],s,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:T,52:E,53:S,56:A,60:a},{47:43,48:[1,44],63:L},e([48,63],[2,51]),e(B,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:l,17:h,19:u,22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:T,52:E,53:S,56:A,60:a},e(B,[2,8]),e(B,[2,9]),e(B,[2,10]),e(B,[2,11]),e(B,[2,12],{14:[1,47],15:[1,48]}),e(B,[2,16]),{18:[1,49]},e(B,[2,18],{20:[1,50]}),{23:[1,51]},e(B,[2,22]),e(B,[2,23]),e(B,[2,24]),e(B,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},e(B,[2,28]),e(B,[2,29]),{34:[1,56]},{36:[1,57]},e(B,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},e(N,[2,44],{57:[1,61]}),e(N,[2,45],{57:[1,62]}),e(B,[2,38]),e(B,[2,39]),e(B,[2,40]),e(B,[2,41]),e(D,[2,36]),{49:63,62:[1,64]},e(D,[2,53]),e(B,[2,7]),e(B,[2,13]),{13:65,24:p,56:A},e(B,[2,17]),e(O,s,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},e(B,[2,30]),e(B,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:L},{63:[2,52]},e(B,[2,14],{14:[1,76]}),{4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,21:[1,77],22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:T,52:E,53:S,56:A,60:a},e(B,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},e(B,[2,33]),e(B,[2,34]),e(B,[2,35]),e(N,[2,46]),e(N,[2,47]),e(D,[2,37]),e(B,[2,15]),e(B,[2,19]),e(O,s,{8:81}),e(B,[2,26]),e(B,[2,27]),{4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,21:[1,82],22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:T,52:E,53:S,56:A,60:a},e(B,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},I=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return 41;case 1:case 44:return 50;case 2:case 45:return 51;case 3:case 46:return 52;case 4:case 47:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:case 11:case 13:case 14:case 15:case 16:case 56:case 58:case 64:break;case 12:case 79:return 5;case 17:case 34:return this.pushState("SCALE"),17;case 18:case 35:return 18;case 19:case 25:case 36:case 51:case 54:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 37:this.pushState("STATE");break;case 38:case 41:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:case 66:return this.popState(),"ID";case 52:return"STATE_DESCR";case 53:return 19;case 55:return this.popState(),this.pushState("struct"),20;case 57:return this.popState(),21;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 65:return"NOTE_TEXT";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 69:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 70:case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return e.yytext=e.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 80:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}},t);function F(){this.yy={}}return M.lexer=I,F.prototype=M,M.Parser=F,new F}();nu.parser=nu;const iu=nu,ru=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*stateDiagram/)},au=(t,e)=>{var n;return null!==t.match(/^\s*stateDiagram-v2/)||!(!t.match(/^\s*stateDiagram/)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer))},su="state",ou="relation",cu="default",lu="divider",hu="[*]",uu="start",du=hu,pu="color",fu="fill";let gu="LR",yu=[],mu={};let bu={root:{relations:[],states:{},documents:{}}},_u=bu.root,xu=0,vu=0;const ku=t=>JSON.parse(JSON.stringify(t)),wu=(t,e,n)=>{if(e.stmt===ou)wu(t,e.state1,!0),wu(t,e.state2,!1);else if(e.stmt===su&&("[*]"===e.id?(e.id=n?t.id+"_start":t.id+"_end",e.start=n):e.id=e.id.trim()),e.doc){const t=[];let n,i=[];for(n=0;n<e.doc.length;n++)if(e.doc[n].type===lu){const r=ku(e.doc[n]);r.doc=ku(i),t.push(r),i=[]}else i.push(e.doc[n]);if(t.length>0&&i.length>0){const n={stmt:su,id:qn(),type:"divider",doc:ku(i)};t.push(ku(n)),e.doc=t}e.doc.forEach((t=>wu(e,t,!0)))}},Cu=function(t,e=cu,n=null,i=null,r=null,a=null,s=null,o=null){const c=null==t?void 0:t.trim();if(void 0===_u.states[c]?(Bt.info("Adding state ",c,i),_u.states[c]={id:c,descriptions:[],type:e,doc:n,note:r,classes:[],styles:[],textStyles:[]}):(_u.states[c].doc||(_u.states[c].doc=n),_u.states[c].type||(_u.states[c].type=e)),i&&(Bt.info("Setting state description",c,i),"string"==typeof i&&Bu(c,i.trim()),"object"==typeof i&&i.forEach((t=>Bu(c,t.trim())))),r&&(_u.states[c].note=r,_u.states[c].note.text=jt.sanitizeText(_u.states[c].note.text,gi())),a){Bt.info("Setting state classes",c,a);("string"==typeof a?[a]:a).forEach((t=>Du(c,t.trim())))}if(s){Bt.info("Setting state styles",c,s);("string"==typeof s?[s]:s).forEach((t=>Ou(c,t.trim())))}if(o){Bt.info("Setting state styles",c,s);("string"==typeof o?[o]:o).forEach((t=>Mu(c,t.trim())))}},Tu=function(t){bu={root:{relations:[],states:{},documents:{}}},_u=bu.root,xu=0,mu={},t||Yi()},Eu=function(t){return _u.states[t]};function Su(t=""){let e=t;return t===hu&&(xu++,e=`${uu}${xu}`),e}function Au(t="",e=cu){return t===hu?uu:e}const Lu=function(t,e,n){if("object"==typeof t)!function(t,e,n){let i=Su(t.id.trim()),r=Au(t.id.trim(),t.type),a=Su(e.id.trim()),s=Au(e.id.trim(),e.type);Cu(i,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),Cu(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),_u.relations.push({id1:i,id2:a,relationTitle:jt.sanitizeText(n,gi())})}(t,e,n);else{const i=Su(t.trim()),r=Au(t),a=function(t=""){let e=t;return t===du&&(xu++,e=`end${xu}`),e}(e.trim()),s=function(t="",e=cu){return t===du?"end":e}(e);Cu(i,r),Cu(a,s),_u.relations.push({id1:i,id2:a,title:jt.sanitizeText(n,gi())})}},Bu=function(t,e){const n=_u.states[t],i=e.startsWith(":")?e.replace(":","").trim():e;n.descriptions.push(jt.sanitizeText(i,gi()))},Nu=function(t,e=""){void 0===mu[t]&&(mu[t]={id:t,styles:[],textStyles:[]});const n=mu[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(pu)){const t=e.replace(fu,"bgFill").replace(pu,fu);n.textStyles.push(t)}n.styles.push(e)}))},Du=function(t,e){t.split(",").forEach((function(t){let n=Eu(t);if(void 0===n){const e=t.trim();Cu(e),n=Eu(e)}n.classes.push(e)}))},Ou=function(t,e){const n=Eu(t);void 0!==n&&n.textStyles.push(e)},Mu=function(t,e){const n=Eu(t);void 0!==n&&n.textStyles.push(e)},Iu={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().state,addState:Cu,clear:Tu,getState:Eu,getStates:function(){return _u.states},getRelations:function(){return _u.relations},getClasses:function(){return mu},getDirection:()=>gu,addRelation:Lu,getDividerId:()=>(vu++,"divider-id-"+vu),setDirection:t=>{gu=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){Bt.info("Documents = ",bu)},getRootDoc:()=>yu,setRootDoc:t=>{Bt.info("Setting root doc",t),yu=t},getRootDocV2:()=>(wu({id:"root"},{id:"root",doc:yu},!0),{id:"root",doc:yu}),extract:t=>{let e;e=t.doc?t.doc:t,Bt.info(e),Tu(!0),Bt.info("Extract",e),e.forEach((t=>{switch(t.stmt){case su:Cu(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case ou:Lu(t.state1,t.state2,t.description);break;case"classDef":Nu(t.id.trim(),t.classes);break;case"applyClass":Du(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:Ui,setAccTitle:zi,getAccDescription:qi,setAccDescription:Wi,addStyleClass:Nu,setCssClass:Du,addDescription:Bu,setDiagramTitle:Hi,getDiagramTitle:Vi},Fu={},$u=(t,e)=>{Fu[t]=e},Ru=(t,e)=>{const n=t.append("text").attr("x",2*gi().state.padding).attr("y",gi().state.textHeight+1.3*gi().state.padding).attr("font-size",gi().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=n.height,r=t.append("text").attr("x",gi().state.padding).attr("y",i+.4*gi().state.padding+gi().state.dividerMargin+gi().state.textHeight).attr("class","state-description");let a=!0,s=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){const i=t.append("tspan").attr("x",2*gi().state.padding).text(e);n||i.attr("dy",gi().state.textHeight)}(r,t,s),s=!1),a=!1}));const o=t.append("line").attr("x1",gi().state.padding).attr("y1",gi().state.padding+i+gi().state.dividerMargin/2).attr("y2",gi().state.padding+i+gi().state.dividerMargin/2).attr("class","descr-divider"),c=r.node().getBBox(),l=Math.max(c.width,n.width);return o.attr("x2",l+3*gi().state.padding),t.insert("rect",":first-child").attr("x",gi().state.padding).attr("y",gi().state.padding).attr("width",l+2*gi().state.padding).attr("height",c.height+i+2*gi().state.padding).attr("rx",gi().state.radius),t},Zu=(t,e,n)=>{const i=gi().state.padding,r=2*gi().state.padding,a=t.node().getBBox(),s=a.width,o=a.x,c=t.append("text").attr("x",0).attr("y",gi().state.titleShift).attr("font-size",gi().state.fontSize).attr("class","state-title").text(e.id),l=c.node().getBBox().width+r;let h,u=Math.max(l,s);u===s&&(u+=r);const d=t.node().getBBox();e.doc,h=o-i,l>s&&(h=(s-u)/2+i),Math.abs(o-d.x)<i&&l>s&&(h=o-(l-s)/2);const p=1-gi().state.textHeight;return t.insert("rect",":first-child").attr("x",h).attr("y",p).attr("class",n?"alt-composit":"composit").attr("width",u).attr("height",d.height+gi().state.textHeight+gi().state.titleShift+1).attr("rx","0"),c.attr("x",h+i),l<=s&&c.attr("x",o+(u-r)/2-l/2+i),t.insert("rect",":first-child").attr("x",h).attr("y",gi().state.titleShift-gi().state.textHeight-gi().state.padding).attr("width",u).attr("height",3*gi().state.textHeight).attr("rx",gi().state.radius),t.insert("rect",":first-child").attr("x",h).attr("y",gi().state.titleShift-gi().state.textHeight-gi().state.padding).attr("width",u).attr("height",d.height+3+2*gi().state.textHeight).attr("rx",gi().state.radius),t},Pu=(t,e)=>{e.attr("class","state-note");const n=e.append("rect").attr("x",0).attr("y",gi().state.padding),i=e.append("g"),{textWidth:r,textHeight:a}=((t,e,n,i)=>{let r=0;const a=i.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");const o=s.split(jt.lineBreakRegex);let c=1.25*gi().state.noteMargin;for(const l of o){const t=l.trim();if(t.length>0){const i=a.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),r+=c,i.attr("x",e+gi().state.noteMargin),i.attr("y",n+r+1.25*gi().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:r}})(t,0,0,i);return n.attr("height",a+2*gi().state.noteMargin),n.attr("width",r+2*gi().state.noteMargin),n},ju=function(t,e){const n=e.id,i={id:n,label:e.id,width:0,height:0},r=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",gi().state.sizeUnit).attr("cx",gi().state.padding+gi().state.sizeUnit).attr("cy",gi().state.padding+gi().state.sizeUnit)})(r),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",gi().state.sizeUnit+gi().state.miniPadding).attr("cx",gi().state.padding+gi().state.sizeUnit+gi().state.miniPadding).attr("cy",gi().state.padding+gi().state.sizeUnit+gi().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",gi().state.sizeUnit).attr("cx",gi().state.padding+gi().state.sizeUnit+2).attr("cy",gi().state.padding+gi().state.sizeUnit+2)})(r),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let n=gi().state.forkWidth,i=gi().state.forkHeight;if(e.parentId){let t=n;n=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",i).attr("x",gi().state.padding).attr("y",gi().state.padding)})(r,e),"note"===e.type&&Pu(e.note.text,r),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",gi().state.textHeight).attr("class","divider").attr("x2",2*gi().state.textHeight).attr("y1",0).attr("y2",0)})(r),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const n=t.append("text").attr("x",2*gi().state.padding).attr("y",gi().state.textHeight+2*gi().state.padding).attr("font-size",gi().state.fontSize).attr("class","state-title").text(e.id),i=n.node().getBBox();t.insert("rect",":first-child").attr("x",gi().state.padding).attr("y",gi().state.padding).attr("width",i.width+2*gi().state.padding).attr("height",i.height+2*gi().state.padding).attr("rx",gi().state.radius)})(r,e),"default"===e.type&&e.descriptions.length>0&&Ru(r,e);const a=r.node().getBBox();return i.width=a.width+2*gi().state.padding,i.height=a.height+2*gi().state.padding,$u(n,i),i};let Yu=0;let zu;const Uu={},Wu=(t,e,n,i,r,a,s)=>{const c=new lt.k({compound:!0,multigraph:!0});let l,h=!0;for(l=0;l<t.length;l++)if("relation"===t[l].stmt){h=!1;break}n?c.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:zu.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):c.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:zu.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),c.setDefaultEdgeLabel((function(){return{}})),s.db.extract(t);const u=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(u);for(const o of p){const t=u[o];let l;if(n&&(t.parentId=n),t.doc){let n=e.append("g").attr("id",t.id).attr("class","stateGroup");l=Wu(t.doc,n,t.id,!i,r,a,s);{n=Zu(n,t,i);let e=n.node().getBBox();l.width=e.width,l.height=e.height+zu.padding/2,Uu[t.id]={y:zu.compositTitleSize}}}else l=ju(e,t);if(t.note){const n={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},i=ju(e,n);"left of"===t.note.position?(c.setNode(l.id+"-note",i),c.setNode(l.id,l)):(c.setNode(l.id,l),c.setNode(l.id+"-note",i)),c.setParent(l.id,l.id+"-group"),c.setParent(l.id+"-note",l.id+"-group")}else c.setNode(l.id,l)}Bt.debug("Count=",c.nodeCount(),c);let f=0;d.forEach((function(t){var e;f++,Bt.debug("Setting edge",t),c.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*zu.fontSizeFactor:1),height:zu.labelHeight*jt.getRows(t.title).length,labelpos:"c"},"id"+f)})),(0,ct.bK)(c),Bt.debug("Graph after layout",c.nodes());const g=e.node();c.nodes().forEach((function(t){if(void 0!==t&&void 0!==c.node(t)){Bt.warn("Node "+t+": "+JSON.stringify(c.node(t))),r.select("#"+g.id+" #"+t).attr("transform","translate("+(c.node(t).x-c.node(t).width/2)+","+(c.node(t).y+(Uu[t]?Uu[t].y:0)-c.node(t).height/2)+" )"),r.select("#"+g.id+" #"+t).attr("data-x-shift",c.node(t).x-c.node(t).width/2);a.querySelectorAll("#"+g.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let n=0,i=0;e&&(e.parentElement&&(n=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",n-i-8)}))}else Bt.debug("No Node "+t+": "+JSON.stringify(c.node(t)))}));let y=g.getBBox();c.edges().forEach((function(t){void 0!==t&&void 0!==c.edge(t)&&(Bt.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(c.edge(t))),function(t,e,n){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const i=e.points,r=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),a=t.append("path").attr("d",r(i)).attr("id","edge"+Yu).attr("class","transition");let s="";if(gi().state.arrowMarkerAbsolute&&(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,s=s.replace(/\(/g,"\\("),s=s.replace(/\)/g,"\\)")),a.attr("marker-end","url("+s+"#"+function(t){switch(t){case Iu.relationType.AGGREGATION:return"aggregation";case Iu.relationType.EXTENSION:return"extension";case Iu.relationType.COMPOSITION:return"composition";case Iu.relationType.DEPENDENCY:return"dependency"}}(Iu.relationType.DEPENDENCY)+"End)"),void 0!==n.title){const i=t.append("g").attr("class","stateLabel"),{x:r,y:a}=ai.calcLabelPosition(e.points),s=jt.getRows(n.title);let o=0;const c=[];let l=0,h=0;for(let t=0;t<=s.length;t++){const e=i.append("text").attr("text-anchor","middle").text(s[t]).attr("x",r).attr("y",a+o),n=e.node().getBBox();if(l=Math.max(l,n.width),h=Math.min(h,n.x),Bt.info(n.x,r,a+o),0===o){const t=e.node().getBBox();o=t.height,Bt.info("Title height",o,a)}c.push(e)}let u=o*s.length;if(s.length>1){const t=(s.length-1)*o*.5;c.forEach(((e,n)=>e.attr("y",a+n*o-t))),u=o*s.length}const d=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",r-l/2-gi().state.padding/2).attr("y",a-u/2-gi().state.padding/2-3.5).attr("width",l+gi().state.padding).attr("height",u+gi().state.padding),Bt.info(d)}Yu++}(e,c.edge(t),c.edge(t).relation))})),y=g.getBBox();const m={id:n||"root",label:n||"root",width:0,height:0};return m.width=y.width+2*zu.padding,m.height=y.height+2*zu.padding,Bt.debug("Doc rendered",m,c),m},qu={setConf:function(){},draw:function(t,e,n,i){zu=gi().state;const r=gi().securityLevel;let a;"sandbox"===r&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===r?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body"),c="sandbox"===r?a.nodes()[0].contentDocument:document;Bt.debug("Rendering diagram "+t);const l=s.select(`[id='${e}']`);l.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");new lt.k({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));const h=i.db.getRootDoc();Wu(h,l,void 0,!1,s,c,i);const u=zu.padding,d=l.node().getBBox(),p=d.width+2*u,f=d.height+2*u;ki(l,f,1.75*p,zu.useMaxWidth),l.attr("viewBox",`${d.x-zu.padding} ${d.y-zu.padding} `+p+" "+f)}},Hu="rect",Vu="rectWithTitle",Gu="statediagram",Xu=`${Gu}-state`,Qu="transition",Ku=`${Qu} note-edge`,Ju=`${Gu}-note`,td=`${Gu}-cluster`,ed=`${Gu}-cluster-alt`,nd="parent",id="note",rd="----",ad=`${rd}${id}`,sd=`${rd}${nd}`,od="fill:none",cd="fill: #333",ld="text",hd="normal";let ud={},dd=0;function pd(t="",e=0,n="",i=rd){return`state-${t}${null!==n&&n.length>0?`${i}${n}`:""}-${e}`}const fd=(t,e,n,i,r,a)=>{const s=n.id,o=null==(c=i[s])?"":c.classes?c.classes.join(" "):"";var c;if("root"!==s){let e=Hu;!0===n.start&&(e="start"),!1===n.start&&(e="end"),n.type!==cu&&(e=n.type),ud[s]||(ud[s]={id:s,shape:e,description:jt.sanitizeText(s,gi()),classes:`${o} ${Xu}`});const i=ud[s];n.description&&(Array.isArray(i.description)?(i.shape=Vu,i.description.push(n.description)):i.description.length>0?(i.shape=Vu,i.description===s?i.description=[n.description]:i.description=[i.description,n.description]):(i.shape=Hu,i.description=n.description),i.description=jt.sanitizeTextOrArray(i.description,gi())),1===i.description.length&&i.shape===Vu&&(i.shape=Hu),!i.type&&n.doc&&(Bt.info("Setting cluster for ",s,yd(n)),i.type="group",i.dir=yd(n),i.shape=n.type===lu?"divider":"roundedWithTitle",i.classes=i.classes+" "+td+" "+(a?ed:""));const r={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:s,dir:i.dir,domId:pd(s,dd),type:i.type,padding:15};if(n.note){const e={labelStyle:"",shape:"note",labelText:n.note.text,classes:Ju,style:"",id:s+ad+"-"+dd,domId:pd(s,dd,id),type:i.type,padding:15},a={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:i.classes,style:"",id:s+sd,domId:pd(s,dd,nd),type:"group",padding:0};dd++;const o=s+sd;t.setNode(o,a),t.setNode(e.id,e),t.setNode(s,r),t.setParent(s,o),t.setParent(e.id,o);let c=s,l=e.id;"left of"===n.note.position&&(c=e.id,l=s),t.setEdge(c,l,{arrowhead:"none",arrowType:"",style:od,labelStyle:"",classes:Ku,arrowheadStyle:cd,labelpos:"c",labelType:ld,thickness:hd})}else t.setNode(s,r)}e&&"root"!==e.id&&(Bt.trace("Setting node ",s," to be child of its parent ",e.id),t.setParent(s,e.id)),n.doc&&(Bt.trace("Adding nodes children "),gd(t,n,n.doc,i,r,!a))},gd=(t,e,n,i,r,a)=>{Bt.trace("items",n),n.forEach((n=>{switch(n.stmt){case su:case cu:fd(t,e,n,i,r,a);break;case ou:{fd(t,e,n.state1,i,r,a),fd(t,e,n.state2,i,r,a);const s={id:"edge"+dd,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:od,labelStyle:"",label:jt.sanitizeText(n.description,gi()),arrowheadStyle:cd,labelpos:"c",labelType:ld,thickness:hd,classes:Qu};t.setEdge(n.state1.id,n.state2.id,s,dd),dd++}}}))},yd=(t,e="TB")=>{let n=e;if(t.doc)for(let i=0;i<t.doc.length;i++){const e=t.doc[i];"dir"===e.stmt&&(n=e.value)}return n},md={setConf:function(t){const e=Object.keys(t);for(const n of e)t[n]},getClasses:function(t,e){Bt.trace("Extracting classes"),e.db.clear();try{return e.parser.parse(t),e.db.extract(e.db.getRootDocV2()),e.db.getClasses()}catch(n){return n}},draw:function(t,e,n,i){Bt.info("Drawing state diagram (v2)",e),ud={};let r=i.db.getDirection();void 0===r&&(r="LR");const{securityLevel:a,state:s}=gi(),c=s.nodeSpacing||50,l=s.rankSpacing||50;Bt.info(i.db.getRootDocV2()),i.db.extract(i.db.getRootDocV2()),Bt.info(i.db.getRootDocV2());const h=i.db.getStates(),u=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:yd(i.db.getRootDocV2()),nodesep:c,ranksep:l,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let d;fd(u,void 0,i.db.getRootDocV2(),h,i.db,!0),"sandbox"===a&&(d=(0,o.Ys)("#i"+e));const p="sandbox"===a?(0,o.Ys)(d.nodes()[0].contentDocument.body):(0,o.Ys)("body"),f=p.select(`[id="${e}"]`),g=p.select("#"+e+" g");no(g,u,["barb"],Gu,e);ai.insertTitle(f,"statediagramTitleText",s.titleTopMargin,i.db.getDiagramTitle());const y=f.node().getBBox(),m=y.width+16,b=y.height+16;f.attr("class",Gu);const _=f.node().getBBox();ki(f,b,m,s.useMaxWidth);const x=`${_.x-8} ${_.y-8} ${m} ${b}`;Bt.debug(`viewBox ${x}`),f.attr("viewBox",x);const v=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const o of v){const t=o.getBBox(),e=document.createElementNS("http://www.w3.org/2000/svg",Hu);e.setAttribute("rx",0),e.setAttribute("ry",0),e.setAttribute("width",t.width),e.setAttribute("height",t.height),o.insertBefore(e,o.firstChild)}}};var bd=function(){var t,e=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},n=[1,2],i=[1,5],r=[6,9,11,17,18,20,22,23,24,26],a=[1,15],s=[1,16],o=[1,17],c=[1,18],l=[1,19],h=[1,20],u=[1,24],d=[4,6,9,11,17,18,20,22,23,24,26],p={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,r,a,s){var o=a.length-1;switch(r){case 1:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 11:i.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 12:this.$=a[o].trim(),i.setAccTitle(this.$);break;case 13:case 14:this.$=a[o].trim(),i.setAccDescription(this.$);break;case 15:i.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 16:i.addTask(a[o-1],a[o]),this.$="task";break;case 18:i.parseDirective("%%{","open_directive");break;case 19:i.parseDirective(a[o],"type_directive");break;case 20:a[o]=a[o].trim().replace(/'/g,'"'),i.parseDirective(a[o],"arg_directive");break;case 21:i.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:n,7:3,12:4,26:i},{1:[3]},e(r,[2,3],{5:6}),{3:7,4:n,7:3,12:4,26:i},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:a,18:s,20:o,22:c,23:l,24:h,26:i},{1:[2,2]},{14:22,15:[1,23],29:u},e([15,29],[2,19]),e(r,[2,8],{1:[2,1]}),e(r,[2,4]),{7:21,10:25,12:4,17:a,18:s,20:o,22:c,23:l,24:h,26:i},e(r,[2,6]),e(r,[2,7]),e(r,[2,11]),{19:[1,26]},{21:[1,27]},e(r,[2,14]),e(r,[2,15]),{25:[1,28]},e(r,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},e(r,[2,5]),e(r,[2,12]),e(r,[2,13]),e(r,[2,16]),e(d,[2,9]),{14:32,29:u},{29:[2,20]},{11:[1,33]},e(d,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],r=[null],a=[],s=this.table,o="",c=0,l=0,h=a.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=i.pop()||u.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,T={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var E="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),r.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],T.$=r[r.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(T,[o,l,c,d.yy,_[1],r,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),r.push(T.$),a.push(T._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},f=(t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in r)this[a]=r[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),a=0;a<r.length;a++)if((n=this._input.match(this.rules[r[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,r[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}},t);function g(){this.yy={}}return p.lexer=f,g.prototype=p,p.Parser=g,new g}();bd.parser=bd;const _d=bd,xd=t=>null!==t.match(/^\s*journey/);let vd="";const kd=[],wd=[],Cd=[],Td=function(){let t=!0;for(const[e,n]of Cd.entries())Cd[e].processed,t=t&&n.processed;return t},Ed={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gi().journey,clear:function(){kd.length=0,wd.length=0,vd="",Cd.length=0,Yi()},setDiagramTitle:Hi,getDiagramTitle:Vi,setAccTitle:zi,getAccTitle:Ui,setAccDescription:Wi,getAccDescription:qi,addSection:function(t){vd=t,kd.push(t)},getSections:function(){return kd},getTasks:function(){let t=Td();let e=0;for(;!t&&e<100;)t=Td(),e++;return wd.push(...Cd),wd},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,r=[];1===n.length?(i=Number(n[0]),r=[]):(i=Number(n[0]),r=n[1].split(","));const a=r.map((t=>t.trim())),s={section:vd,type:vd,people:a,task:t,score:i};Cd.push(s)},addTaskOrg:function(t){const e={section:vd,type:vd,description:t,task:t,classes:[]};wd.push(e)},getActors:function(){return function(){const t=[];return wd.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},Sd=function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},Ad=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},Ld=function(t,e){const n=e.text.replace(/<br\s*\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i};let Bd=-1;const Nd=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},Dd=function(){function t(t,e,n,r,a,s,o,c){i(e.append("text").attr("x",n+a/2).attr("y",r+s/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,r,a,s,o,c,l){const{taskFontSize:h,taskFontFamily:u}=c,d=t.split(/<br\s*\/?>/gi);for(let p=0;p<d.length;p++){const t=p*h-h*(d.length-1)/2,c=e.append("text").attr("x",n+a/2).attr("y",r).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",u);c.append("tspan").attr("x",n+a/2).attr("dy",t).text(d[p]),c.attr("y",r+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,r,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",r).attr("y",a).attr("width",s).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,a,s,o,c,l),i(u,c)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),Od=Ad,Md=function(t,e,n){const i=t.append("g"),r=Nd();r.x=e.x,r.y=e.y,r.fill=e.fill,r.width=n.width,r.height=n.height,r.class="journey-section section-type-"+e.num,r.rx=3,r.ry=3,Sd(i,r),Dd(n)(e.text,i,r.x,r.y,r.width,r.height,{class:"journey-section section-type-"+e.num},n,e.colour)},Id=Ld,Fd=function(t,e,n){const i=e.x+n.width/2,r=t.append("g");Bd++;r.append("line").attr("id","task"+Bd).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),r=t.append("g");r.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,o.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(r):e.score<3?function(t){const i=(0,o.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(r):r.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(r,{cx:i,cy:300+30*(5-e.score),score:e.score});const a=Nd();a.x=e.x,a.y=e.y,a.fill=e.fill,a.width=n.width,a.height=n.height,a.class="task task-type-"+e.num,a.rx=3,a.ry=3,Sd(r,a);let s=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:s,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};Ad(r,i),s+=10})),Dd(n)(e.task,r,a.x,a.y,a.width,a.height,{class:"task"},n,e.colour)},$d=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},Rd={};const Zd=gi().journey,Pd=Zd.leftMargin,jd={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,i){const r=gi().journey,a=this;let s=0;var o;this.sequenceItems.forEach((function(c){s++;const l=a.sequenceItems.length-s+1;a.updateVal(c,"starty",e-l*r.boxMargin,Math.min),a.updateVal(c,"stopy",i+l*r.boxMargin,Math.max),a.updateVal(jd.data,"startx",t-l*r.boxMargin,Math.min),a.updateVal(jd.data,"stopx",n+l*r.boxMargin,Math.max),"activation"!==o&&(a.updateVal(c,"startx",t-l*r.boxMargin,Math.min),a.updateVal(c,"stopx",n+l*r.boxMargin,Math.max),a.updateVal(jd.data,"starty",e-l*r.boxMargin,Math.min),a.updateVal(jd.data,"stopy",i+l*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const r=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,i),o=Math.max(e,i);this.updateVal(jd.data,"startx",r,Math.min),this.updateVal(jd.data,"starty",s,Math.min),this.updateVal(jd.data,"stopx",a,Math.max),this.updateVal(jd.data,"stopy",o,Math.max),this.updateBounds(r,s,a,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Yd=Zd.sectionFills,zd=Zd.sectionColours,Ud=function(t,e,n){const i=gi().journey;let r="";const a=n+(2*i.height+i.diagramMarginY);let s=0,o="#CCC",c="black",l=0;for(const[h,u]of e.entries()){if(r!==u.section){o=Yd[s%Yd.length],l=s%Yd.length,c=zd[s%zd.length];const e={x:h*i.taskMargin+h*i.width+Pd,y:50,text:u.section,fill:o,num:l,colour:c};Md(t,e,i),r=u.section,s++}const e=u.people.reduce(((t,e)=>(Rd[e]&&(t[e]=Rd[e]),t)),{});u.x=h*i.taskMargin+h*i.width+Pd,u.y=a,u.width=i.diagramMarginX,u.height=i.diagramMarginY,u.colour=c,u.fill=o,u.num=l,u.actors=e,Fd(t,u,i),jd.insert(u.x,u.y,u.x+u.width+i.taskMargin,450)}},Wd={setConf:function(t){Object.keys(t).forEach((function(e){Zd[e]=t[e]}))},draw:function(t,e,n,i){const r=gi().journey;i.db.clear(),i.parser.parse(t+"\n");const a=gi().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body");jd.init();const l=c.select("#"+e);$d(l);const h=i.db.getTasks(),u=i.db.getDiagramTitle(),d=i.db.getActors();for(const o in Rd)delete Rd[o];let p=0;d.forEach((t=>{Rd[t]={color:r.actorColours[p%r.actorColours.length],position:p},p++})),function(t){const e=gi().journey;let n=60;Object.keys(Rd).forEach((i=>{const r=Rd[i].color,a={cx:20,cy:n,r:7,fill:r,stroke:"#000",pos:Rd[i].position};Od(t,a);const s={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};Id(t,s),n+=20}))}(l),jd.insert(0,0,Pd,50*Object.keys(Rd).length),Ud(l,h,0);const f=jd.getBounds();u&&l.append("text").text(u).attr("x",Pd).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*r.diagramMarginY,y=Pd+f.stopx+2*r.diagramMarginX;ki(l,g,y,r.useMaxWidth),l.append("line").attr("x1",Pd).attr("y1",4*r.height).attr("x2",y-Pd-4).attr("y2",4*r.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;l.attr("viewBox",`${f.startx} -25 ${y} ${g+m}`),l.attr("preserveAspectRatio","xMinYMin meet"),l.attr("height",g+m+25)}};let qd={};const Hd={setConf:function(t){qd={...qd,...t}},draw:(t,e,n)=>{try{Bt.debug("Renering svg for syntax error\n");const t=(0,o.Ys)("#"+e),i=t.append("g");i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+n),t.attr("height",100),t.attr("width",500),t.attr("viewBox","768 0 912 512")}catch(r){Bt.error("Error while rendering info diagram"),Bt.error((i=r)instanceof Error?i.message:String(i))}var i}},Vd="flowchart-elk",Gd={id:Vd,detector:(t,e)=>{var n;return!!(t.match(/^\s*flowchart-elk/)||t.match(/^\s*flowchart|graph/)&&"elk"===(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))},loader:async()=>{const{diagram:t}=await n.e(9487).then(n.bind(n,9487));return{id:Vd,diagram:t}}},Xd="timeline",Qd={id:Xd,detector:t=>null!==t.match(/^\s*timeline/),loader:async()=>{const{diagram:t}=await n.e(6316).then(n.bind(n,6316));return{id:Xd,diagram:t}}},Kd="mindmap",Jd={id:Kd,detector:t=>null!==t.match(/^\s*mindmap/),loader:async()=>{const{diagram:t}=await n.e(7724).then(n.bind(n,7724));return{id:Kd,diagram:t}}};let tp=!1;const ep=()=>{tp||(tp=!0,Mn(Gd,Qd,Jd),or("error",{db:{clear:()=>{}},styles:Ei,renderer:Hd,parser:{parser:{yy:{}},parse:()=>{}},init:()=>{}},(t=>"error"===t.toLowerCase().trim())),or("---",{db:{clear:()=>{}},styles:Ei,renderer:Hd,parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with unindented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),or("c4",{parser:qr,db:oa,renderer:Za,styles:Ii,init:t=>{Za.setConf(t.c4)}},Hr),or("class",{parser:ja,db:as,renderer:bs,styles:Ci,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,as.clear()}},Ya),or("classDiagram",{parser:ja,db:as,renderer:so,styles:Ci,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,as.clear()}},za),or("er",{parser:co,db:fo,renderer:Eo,styles:Ti},lo),or("gantt",{parser:Ic,db:fl,renderer:ml,styles:Ai},Fc),or("info",{parser:_l,db:kl,renderer:wl,styles:Li},Cl),or("pie",{parser:El,db:Bl,renderer:Ml,styles:Bi},Sl),or("requirement",{parser:Fl,db:zl,renderer:th,styles:Ni},$l),or("sequence",{parser:nh,db:wh,renderer:eu,styles:Di,init:t=>{if(t.sequence||(t.sequence={}),t.sequence.arrowMarkerAbsolute=t.arrowMarkerAbsolute,"sequenceDiagram"in t)throw new Error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.");wh.setWrap(t.wrap),eu.setConf(t.sequence)}},ih),or("state",{parser:iu,db:Iu,renderer:qu,styles:Oi,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Iu.clear()}},ru),or("stateDiagram",{parser:iu,db:Iu,renderer:md,styles:Oi,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Iu.clear()}},au),or("journey",{parser:_d,db:Ed,renderer:Wd,styles:Mi,init:t=>{Wd.setConf(t.journey),Ed.clear()}},xd),or("flowchart",{parser:Ao,db:Ec,renderer:Oc,styles:Si,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Lc(t.flowchart),Ec.clear(),Ec.setGen("gen-1")}},Lo),or("flowchart-v2",{parser:Ao,db:Ec,renderer:Oc,styles:Si,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,fi({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),Oc.setConf(t.flowchart),Ec.clear(),Ec.setGen("gen-2")}},Bo),or("gitGraph",{parser:hr,db:Ar,renderer:zr,styles:Ur},ur))};class np{constructor(t,e){var n,i;this.txt=t,this.type="graph",this.detectTypeFailed=!1;const r=gi();this.txt=t;try{this.type=On(t,r)}catch(o){this.handleError(o,e),this.type="error",this.detectTypeFailed=!0}const a=cr(this.type);Bt.debug("Type "+this.type),this.db=a.db,null==(i=(n=this.db).clear)||i.call(n),this.renderer=a.renderer,this.parser=a.parser;const s=this.parser.parse.bind(this.parser);this.parser.parse=t=>s(function(t,e){var n;const i=t.match(Ln);if(i){const r=An(i[1],{schema:Sn});return(null==r?void 0:r.title)&&(null==(n=e.setDiagramTitle)||n.call(e,r.title)),t.slice(i[0].length)}return t}(t,this.db)),this.parser.parser.yy=this.db,a.init&&(a.init(r),Bt.info("Initialized diagram "+this.type,r)),this.txt+="\n",this.parse(this.txt,e)}parse(t,e){var n,i;if(this.detectTypeFailed)return!1;try{return t+="\n",null==(i=(n=this.db).clear)||i.call(n),this.parser.parse(t),!0}catch(r){this.handleError(r,e)}return!1}handleError(t,e){if(void 0===e)throw t;ii(t)?e(t.str,t.hash):e(t)}getParser(){return this.parser}getType(){return this.type}}const ip=(t,e)=>{const n=On(t,gi());try{cr(n)}catch(i){const r=Dn[n].loader;if(!r)throw new Error(`Diagram ${n} not found.`);return r().then((({diagram:i})=>(or(n,i,void 0),new np(t,e))))}return new np(t,e)},rp=np,ap="graphics-document document";const sp=["graph","flowchart","flowchart-v2","stateDiagram","stateDiagram-v2"],op="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",cp="sandbox",lp="loose",hp="http://www.w3.org/1999/xlink",up="http://www.w3.org/1999/xhtml",dp=["foreignobject"],pp=["dominant-baseline"];const fp=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e},gp=function(t){let e=t;return e=e.replace(/\ufb02\xb0\xb0/g,"&#"),e=e.replace(/\ufb02\xb0/g,"&"),e=e.replace(/\xb6\xdf/g,";"),e},yp=(t,e,n=[])=>`\n.${t} ${e} { ${n.join(" !important; ")} !important; }`,mp=(t,e,n,i)=>{const r=((t,e,n={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,At.Z)(n)&&sp.includes(e)){const e=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in n){const i=n[t];(0,At.Z)(i.styles)||e.forEach((t=>{r+=yp(i.id,t,i.styles)})),(0,At.Z)(i.textStyles)||(r+=yp(i.id,"tspan",i.textStyles))}}return r})(t,e,n);return M(it(`${i}{${$i(e,r,t.themeVariables)}}`),I)},bp=(t="",e,n)=>{let i=t;return n||e||(i=i.replace(/marker-end="url\(.*?#/g,'marker-end="url(#')),i=gp(i),i=i.replace(/<br>/g,"<br/>"),i},_p=(t="",e)=>`<iframe style="width:100%;height:${e?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`,xp=(t,e,n,i,r)=>{const a=t.append("div");a.attr("id",n),i&&a.attr("style",i);const s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return r&&s.attr("xmlns:xlink",r),s.append("g"),t};function vp(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const kp=(t,e,n,i)=>{var r,a,s;null==(r=t.getElementById(e))||r.remove(),null==(a=t.getElementById(n))||a.remove(),null==(s=t.getElementById(i))||s.remove()};function wp(t,e,n,i){var r,a;a=t,(r=e).attr("role",ap),(0,At.Z)(a)||r.attr("aria-roledescription",a),function(t,e,n,i){if(void 0!==t.insert&&(e||n)){if(n){const e="chart-desc-"+i;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(n)}if(e){const n="chart-title-"+i;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}(e,n,i,e.attr("id"))}const Cp=Object.freeze({render:function(t,e,n,i){var r,a,s,c;ep(),bi();const l=ai.detectInit(e);l&&(ei(l),mi(l));const u=gi();Bt.debug(u),e.length>((null==u?void 0:u.maxTextSize)??5e4)&&(e=op),e=e.replace(/\r\n?/g,"\n");const d="#"+t,p="i"+t,f="#"+p,g="d"+t,y="#"+g;let m=(0,o.Ys)("body");const b=u.securityLevel===cp,_=u.securityLevel===lp,x=u.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),b){const t=vp((0,o.Ys)(i),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)(i);xp(m,t,g,`font-family: ${x}`,hp)}else{if(kp(document,t,g,p),b){const t=vp((0,o.Ys)("body"),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)("body");xp(m,t,g)}let v,k;e=fp(e);try{if(v=ip(e),"then"in v)throw new Error("Diagram is a promise. Use renderAsync.")}catch(O){v=new rp("error"),k=O}const w=m.select(y).node(),C=v.type,T=w.firstChild,E=T.firstChild,S=sp.includes(C)?v.renderer.getClasses(e,v):{},A=mp(u,C,S,d),L=document.createElement("style");L.innerHTML=A,T.insertBefore(L,E);try{v.renderer.draw(e,t,si,v)}catch(M){throw Hd.draw(e,t,si),M}wp(C,m.select(`${y} svg`),null==(a=(r=v.db).getAccTitle)?void 0:a.call(r),null==(c=(s=v.db).getAccDescription)?void 0:c.call(s)),m.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",up);let B=m.select(y).node().innerHTML;if(Bt.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),B=bp(B,b,Zt(u.arrowMarkerAbsolute)),b){const t=m.select(y+" svg").node();B=_p(B,t)}else _||(B=h().sanitize(B,{ADD_TAGS:dp,ADD_ATTR:pp}));if(void 0!==n)switch(C){case"flowchart":case"flowchart-v2":n(B,Ec.bindFunctions);break;case"gantt":n(B,fl.bindFunctions);break;case"class":case"classDiagram":n(B,as.bindFunctions);break;default:n(B)}else Bt.debug("CB = undefined!");Th();const N=b?f:y,D=(0,o.Ys)(N).node();if(D&&"remove"in D&&D.remove(),k)throw k;return B},renderAsync:async function(t,e,n,i){var r,a,s,c;ep(),bi();const l=ai.detectInit(e);l&&(ei(l),mi(l));const u=gi();Bt.debug(u),e.length>((null==u?void 0:u.maxTextSize)??5e4)&&(e=op),e=e.replace(/\r\n?/g,"\n");const d="#"+t,p="i"+t,f="#"+p,g="d"+t,y="#"+g;let m=(0,o.Ys)("body");const b=u.securityLevel===cp,_=u.securityLevel===lp,x=u.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),b){const t=vp((0,o.Ys)(i),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)(i);xp(m,t,g,`font-family: ${x}`,hp)}else{if(kp(document,t,g,p),b){const t=vp((0,o.Ys)("body"),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)("body");xp(m,t,g)}let v,k;e=fp(e);try{v=await ip(e)}catch(O){v=new rp("error"),k=O}const w=m.select(y).node(),C=v.type,T=w.firstChild,E=T.firstChild,S=sp.includes(C)?v.renderer.getClasses(e,v):{},A=mp(u,C,S,d),L=document.createElement("style");L.innerHTML=A,T.insertBefore(L,E);try{await v.renderer.draw(e,t,si,v)}catch(M){throw Hd.draw(e,t,si),M}wp(C,m.select(`${y} svg`),null==(a=(r=v.db).getAccTitle)?void 0:a.call(r),null==(c=(s=v.db).getAccDescription)?void 0:c.call(s)),m.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",up);let B=m.select(y).node().innerHTML;if(Bt.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),B=bp(B,b,Zt(u.arrowMarkerAbsolute)),b){const t=m.select(y+" svg").node();B=_p(B,t)}else _||(B=h().sanitize(B,{ADD_TAGS:dp,ADD_ATTR:pp}));if(void 0!==n)switch(C){case"flowchart":case"flowchart-v2":n(B,Ec.bindFunctions);break;case"gantt":n(B,fl.bindFunctions);break;case"class":case"classDiagram":n(B,as.bindFunctions);break;default:n(B)}else Bt.debug("CB = undefined!");Th();const N=b?f:y,D=(0,o.Ys)(N).node();if(D&&"remove"in D&&D.remove(),k)throw k;return B},parse:function(t,e){return ep(),new rp(t,e).parse(t,e)},parseAsync:async function(t,e){return ep(),(await ip(t,e)).parse(t,e)},parseDirective:Ki,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),ci=$n({},t),(null==t?void 0:t.theme)&&t.theme in Xt?t.themeVariables=Xt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Xt.default.getThemeVariables(t.themeVariables));const n="object"==typeof t?(t=>(li=$n({},oi),li=$n(li,t),t.theme&&Xt[t.theme]&&(li.themeVariables=Xt[t.theme].getThemeVariables(t.themeVariables)),di(li,hi),li))(t):pi();Nt(n.logLevel),ep()},getConfig:gi,setConfig:fi,getSiteConfig:pi,updateSiteConfig:t=>(li=$n(li,t),di(li,hi),li),reset:()=>{bi()},globalReset:()=>{bi(oi)},defaultConfig:oi});Nt(gi().logLevel),bi(gi());const Tp=(t,e,n)=>{Bt.warn(t),ii(t)?(n&&n(t.str,t.hash),e.push({...t,message:t.str,error:t})):(n&&n(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Ep=async function(t,e,n){const r=Cp.getConfig();let a;if(t&&(Np.sequenceConfig=t),Bt.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}Bt.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(Bt.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),Cp.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new ai.initIdGenerator(r.deterministicIds,r.deterministicIDSeed);let o;const c=[];for(const h of Array.from(a)){if(Bt.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=h.innerHTML,o=i(ai.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=ai.detectInit(o);e&&Bt.debug("Detected early reinit: ",e);try{await Cp.renderAsync(t,o,((e,i)=>{h.innerHTML=e,void 0!==n&&n(t),i&&i(h)}),h)}catch(l){Tp(l,c,Np.parseError)}}if(c.length>0)throw c[0]},Sp=function(){if(Np.startOnLoad){const{startOnLoad:t}=Cp.getConfig();t&&Np.init().catch((t=>Bt.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Sp,!1);const Ap=[];let Lp=!1;const Bp=async()=>{if(!Lp){for(Lp=!0;Ap.length>0;){const e=Ap.shift();if(e)try{await e()}catch(t){Bt.error("Error executing queue",t)}}Lp=!1}},Np={startOnLoad:!0,diagrams:{},mermaidAPI:Cp,parse:t=>Cp.parse(t,Np.parseError),parseAsync:t=>new Promise(((e,n)=>{Ap.push((()=>new Promise(((i,r)=>{Cp.parseAsync(t,Np.parseError).then((t=>{i(t),e(t)}),(t=>{Bt.error("Error parsing",t),r(t),n(t)}))})))),Bp().catch(n)})),render:Cp.render,renderAsync:(t,e,n,i)=>new Promise(((r,a)=>{Ap.push((()=>new Promise(((s,o)=>{Cp.renderAsync(t,e,n,i).then((t=>{s(t),r(t)}),(t=>{Bt.error("Error parsing",t),o(t),a(t)}))})))),Bp().catch(a)})),init:async function(t,e,n){try{await Ep(t,e,n)}catch(i){Bt.warn("Syntax Error rendering"),ii(i)&&Bt.warn(i.str),Np.parseError&&Np.parseError(i)}},initThrowsErrors:function(t,e,n){const r=Cp.getConfig();let a;if(t&&(Np.sequenceConfig=t),Bt.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}Bt.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(Bt.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),Cp.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new ai.initIdGenerator(r.deterministicIds,r.deterministicIDSeed);let o;const c=[];for(const h of Array.from(a)){if(Bt.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=h.innerHTML,o=i(ai.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=ai.detectInit(o);e&&Bt.debug("Detected early reinit: ",e);try{Cp.render(t,o,((e,i)=>{h.innerHTML=e,void 0!==n&&n(t),i&&i(h)}),h)}catch(l){Tp(l,c,Np.parseError)}}if(c.length>0)throw c[0]},initThrowsErrorsAsync:Ep,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{e?Mn(...t):await(async(...t)=>{Bt.debug(`Loading ${t.length} external diagrams`);const e=(await Promise.allSettled(t.map((async({id:t,detector:e,loader:n})=>{const{diagram:i}=await n();or(t,i,e)})))).filter((t=>"rejected"===t.status));if(e.length>0){Bt.error(`Failed to load ${e.length} external diagrams`);for(const t of e)Bt.error(t);throw new Error(`Failed to load ${e.length} external diagrams`)}})(...t)},initialize:function(t){Cp.initialize(t)},parseError:void 0,contentLoaded:Sp,setParseErrorHandler:function(t){Np.parseError=t}}},7594:(t,e)=>{function n(t){let e,n=[];for(let i of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(i))n.push(parseInt(i,10));else if(e=i.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,i,r,a]=e;if(i&&a){i=parseInt(i),a=parseInt(a);const t=i<a?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(a+=t);for(let e=i;e!==a;e+=t)n.push(e)}}return n}e.default=n,t.exports=n},9373:(t,e,n)=>{"use strict";function i(t,e){let n;if(void 0===e)for(const i of t)null!=i&&(n<i||void 0===n&&i>=i)&&(n=i);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n<r||void 0===n&&r>=r)&&(n=r)}return n}function r(t,e){let n;if(void 0===e)for(const i of t)null!=i&&(n>i||void 0===n&&i>=i)&&(n=i);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n>r||void 0===n&&r>=r)&&(n=r)}return n}function a(t){return t}n.d(e,{Nb1:()=>so,LLu:()=>b,F5q:()=>m,$0Z:()=>xo,Dts:()=>ko,WQY:()=>Co,qpX:()=>Eo,u93:()=>So,tFB:()=>Lo,YY7:()=>Do,OvA:()=>Mo,dCK:()=>Fo,zgE:()=>Zo,fGX:()=>jo,$m7:()=>zo,c_6:()=>lo,fxm:()=>Wo,FdL:()=>Jo,ak_:()=>tc,SxZ:()=>ic,eA_:()=>ac,jsv:()=>oc,iJ:()=>sc,JHv:()=>gi,jvg:()=>po,Fp7:()=>i,VV$:()=>r,ve8:()=>yo,BYU:()=>cr,PKp:()=>gr,Xf:()=>Ns,Ys:()=>Ds,td_:()=>Os,YPS:()=>Vn,rr1:()=>Dr,i$Z:()=>ha,WQD:()=>Br,Z_i:()=>Ar,F0B:()=>Qr,NGh:()=>Fr});var s=1,o=2,c=3,l=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function p(t){return e=>+t(e)}function f(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function g(){return!this.__axis}function y(t,e){var n=[],i=null,r=null,y=6,m=6,b=3,_="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,x=t===s||t===l?-1:1,v=t===l||t===o?"x":"y",k=t===s||t===c?u:d;function w(u){var d=null==i?e.ticks?e.ticks.apply(e,n):e.domain():i,w=null==r?e.tickFormat?e.tickFormat.apply(e,n):a:r,C=Math.max(y,0)+b,T=e.range(),E=+T[0]+_,S=+T[T.length-1]+_,A=(e.bandwidth?f:p)(e.copy(),_),L=u.selection?u.selection():u,B=L.selectAll(".domain").data([null]),N=L.selectAll(".tick").data(d,e).order(),D=N.exit(),O=N.enter().append("g").attr("class","tick"),M=N.select("line"),I=N.select("text");B=B.merge(B.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),N=N.merge(O),M=M.merge(O.append("line").attr("stroke","currentColor").attr(v+"2",x*y)),I=I.merge(O.append("text").attr("fill","currentColor").attr(v,x*C).attr("dy",t===s?"0em":t===c?"0.71em":"0.32em")),u!==L&&(B=B.transition(u),N=N.transition(u),M=M.transition(u),I=I.transition(u),D=D.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=A(t))?k(t+_):this.getAttribute("transform")})),O.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return k((e&&isFinite(e=e(t))?e:A(t))+_)}))),D.remove(),B.attr("d",t===l||t===o?m?"M"+x*m+","+E+"H"+_+"V"+S+"H"+x*m:"M"+_+","+E+"V"+S:m?"M"+E+","+x*m+"V"+_+"H"+S+"V"+x*m:"M"+E+","+_+"H"+S),N.attr("opacity",1).attr("transform",(function(t){return k(A(t)+_)})),M.attr(v+"2",x*y),I.attr(v,x*C).text(w),L.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===o?"start":t===l?"end":"middle"),L.each((function(){this.__axis=A}))}return w.scale=function(t){return arguments.length?(e=t,w):e},w.ticks=function(){return n=Array.from(arguments),w},w.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),w):n.slice()},w.tickValues=function(t){return arguments.length?(i=null==t?null:Array.from(t),w):i&&i.slice()},w.tickFormat=function(t){return arguments.length?(r=t,w):r},w.tickSize=function(t){return arguments.length?(y=m=+t,w):y},w.tickSizeInner=function(t){return arguments.length?(y=+t,w):y},w.tickSizeOuter=function(t){return arguments.length?(m=+t,w):m},w.tickPadding=function(t){return arguments.length?(b=+t,w):b},w.offset=function(t){return arguments.length?(_=+t,w):_},w}function m(t){return y(s,t)}function b(t){return y(c,t)}function _(){}function x(t){return null==t?_:function(){return this.querySelector(t)}}function v(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function k(){return[]}function w(t){return null==t?k:function(){return this.querySelectorAll(t)}}function C(t){return function(){return this.matches(t)}}function T(t){return function(e){return e.matches(t)}}var E=Array.prototype.find;function S(){return this.firstElementChild}var A=Array.prototype.filter;function L(){return Array.from(this.children)}function B(t){return new Array(t.length)}function N(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function D(t,e,n,i,r,a){for(var s,o=0,c=e.length,l=a.length;o<l;++o)(s=e[o])?(s.__data__=a[o],i[o]=s):n[o]=new N(t,a[o]);for(;o<c;++o)(s=e[o])&&(r[o]=s)}function O(t,e,n,i,r,a,s){var o,c,l,h=new Map,u=e.length,d=a.length,p=new Array(u);for(o=0;o<u;++o)(c=e[o])&&(p[o]=l=s.call(c,c.__data__,o,e)+"",h.has(l)?r[o]=c:h.set(l,c));for(o=0;o<d;++o)l=s.call(t,a[o],o,a)+"",(c=h.get(l))?(i[o]=c,c.__data__=a[o],h.delete(l)):n[o]=new N(t,a[o]);for(o=0;o<u;++o)(c=e[o])&&h.get(p[o])===c&&(r[o]=c)}function M(t){return t.__data__}function I(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function F(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}N.prototype={constructor:N,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var $="http://www.w3.org/1999/xhtml";const R={svg:"http://www.w3.org/2000/svg",xhtml:$,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Z(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),R.hasOwnProperty(e)?{space:R[e],local:t}:t}function P(t){return function(){this.removeAttribute(t)}}function j(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Y(t,e){return function(){this.setAttribute(t,e)}}function z(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function U(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function W(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function q(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function H(t){return function(){this.style.removeProperty(t)}}function V(t,e,n){return function(){this.style.setProperty(t,e,n)}}function G(t,e,n){return function(){var i=e.apply(this,arguments);null==i?this.style.removeProperty(t):this.style.setProperty(t,i,n)}}function X(t,e){return t.style.getPropertyValue(e)||q(t).getComputedStyle(t,null).getPropertyValue(e)}function Q(t){return function(){delete this[t]}}function K(t,e){return function(){this[t]=e}}function J(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new nt(t)}function nt(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function it(t,e){for(var n=et(t),i=-1,r=e.length;++i<r;)n.add(e[i])}function rt(t,e){for(var n=et(t),i=-1,r=e.length;++i<r;)n.remove(e[i])}function at(t){return function(){it(this,t)}}function st(t){return function(){rt(this,t)}}function ot(t,e){return function(){(e.apply(this,arguments)?it:rt)(this,t)}}function ct(){this.textContent=""}function lt(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function pt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function ft(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function yt(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===$&&e.documentElement.namespaceURI===$?e.createElement(t):e.createElementNS(n,t)}}function mt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function bt(t){var e=Z(t);return(e.local?mt:yt)(e)}function _t(){return null}function xt(){var t=this.parentNode;t&&t.removeChild(this)}function vt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function wt(t){return function(){var e=this.__on;if(e){for(var n,i=0,r=-1,a=e.length;i<a;++i)n=e[i],t.type&&n.type!==t.type||n.name!==t.name?e[++r]=n:this.removeEventListener(n.type,n.listener,n.options);++r?e.length=r:delete this.__on}}}function Ct(t,e,n){return function(){var i,r=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(r)for(var s=0,o=r.length;s<o;++s)if((i=r[s]).type===t.type&&i.name===t.name)return this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),void(i.value=e);this.addEventListener(t.type,a,n),i={type:t.type,name:t.name,value:e,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Tt(t,e,n){var i=q(t),r=i.CustomEvent;"function"==typeof r?r=new r(e,n):(r=i.document.createEvent("Event"),n?(r.initEvent(e,n.bubbles,n.cancelable),r.detail=n.detail):r.initEvent(e,!1,!1)),t.dispatchEvent(r)}function Et(t,e){return function(){return Tt(this,t,e)}}function St(t,e){return function(){return Tt(this,t,e.apply(this,arguments))}}nt.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var At=[null];function Lt(t,e){this._groups=t,this._parents=e}function Bt(){return new Lt([[document.documentElement]],At)}Lt.prototype=Bt.prototype={constructor:Lt,select:function(t){"function"!=typeof t&&(t=x(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var a,s,o=e[r],c=o.length,l=i[r]=new Array(c),h=0;h<c;++h)(a=o[h])&&(s=t.call(a,a.__data__,h,o))&&("__data__"in a&&(s.__data__=a.__data__),l[h]=s);return new Lt(i,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return v(t.apply(this,arguments))}}(t):w(t);for(var e=this._groups,n=e.length,i=[],r=[],a=0;a<n;++a)for(var s,o=e[a],c=o.length,l=0;l<c;++l)(s=o[l])&&(i.push(t.call(s,s.__data__,l,o)),r.push(s));return new Lt(i,r)},selectChild:function(t){return this.select(null==t?S:function(t){return function(){return E.call(this.children,t)}}("function"==typeof t?t:T(t)))},selectChildren:function(t){return this.selectAll(null==t?L:function(t){return function(){return A.call(this.children,t)}}("function"==typeof t?t:T(t)))},filter:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var a,s=e[r],o=s.length,c=i[r]=[],l=0;l<o;++l)(a=s[l])&&t.call(a,a.__data__,l,s)&&c.push(a);return new Lt(i,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,M);var n,i=e?O:D,r=this._parents,a=this._groups;"function"!=typeof t&&(n=t,t=function(){return n});for(var s=a.length,o=new Array(s),c=new Array(s),l=new Array(s),h=0;h<s;++h){var u=r[h],d=a[h],p=d.length,f=I(t.call(u,u&&u.__data__,h,r)),g=f.length,y=c[h]=new Array(g),m=o[h]=new Array(g);i(u,d,y,m,l[h]=new Array(p),f,e);for(var b,_,x=0,v=0;x<g;++x)if(b=y[x]){for(x>=v&&(v=x+1);!(_=m[v])&&++v<g;);b._next=_||null}}return(o=new Lt(o,r))._enter=c,o._exit=l,o},enter:function(){return new Lt(this._enter||this._groups.map(B),this._parents)},exit:function(){return new Lt(this._exit||this._groups.map(B),this._parents)},join:function(t,e,n){var i=this.enter(),r=this,a=this.exit();return"function"==typeof t?(i=t(i))&&(i=i.selection()):i=i.append(t+""),null!=e&&(r=e(r))&&(r=r.selection()),null==n?a.remove():n(a),i&&r?i.merge(r).order():r},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,i=e._groups,r=n.length,a=i.length,s=Math.min(r,a),o=new Array(r),c=0;c<s;++c)for(var l,h=n[c],u=i[c],d=h.length,p=o[c]=new Array(d),f=0;f<d;++f)(l=h[f]||u[f])&&(p[f]=l);for(;c<r;++c)o[c]=n[c];return new Lt(o,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var i,r=t[e],a=r.length-1,s=r[a];--a>=0;)(i=r[a])&&(s&&4^i.compareDocumentPosition(s)&&s.parentNode.insertBefore(i,s),s=i);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=F);for(var n=this._groups,i=n.length,r=new Array(i),a=0;a<i;++a){for(var s,o=n[a],c=o.length,l=r[a]=new Array(c),h=0;h<c;++h)(s=o[h])&&(l[h]=s);l.sort(e)}return new Lt(r,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var i=t[e],r=0,a=i.length;r<a;++r){var s=i[r];if(s)return s}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,i=e.length;n<i;++n)for(var r,a=e[n],s=0,o=a.length;s<o;++s)(r=a[s])&&t.call(r,r.__data__,s,a);return this},attr:function(t,e){var n=Z(t);if(arguments.length<2){var i=this.node();return n.local?i.getAttributeNS(n.space,n.local):i.getAttribute(n)}return this.each((null==e?n.local?j:P:"function"==typeof e?n.local?W:U:n.local?z:Y)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?H:"function"==typeof e?G:V)(t,e,null==n?"":n)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Q:"function"==typeof e?J:K)(t,e)):this.node()[t]},classed:function(t,e){var n=tt(t+"");if(arguments.length<2){for(var i=et(this.node()),r=-1,a=n.length;++r<a;)if(!i.contains(n[r]))return!1;return!0}return this.each(("function"==typeof e?ot:e?at:st)(n,e))},text:function(t){return arguments.length?this.each(null==t?ct:("function"==typeof t?ht:lt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?pt:dt)(t)):this.node().innerHTML},raise:function(){return this.each(ft)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:bt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:bt(t),i=null==e?_t:"function"==typeof e?e:x(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),i.apply(this,arguments)||null)}))},remove:function(){return this.each(xt)},clone:function(t){return this.select(t?kt:vt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var i,r,a=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),s=a.length;if(!(arguments.length<2)){for(o=e?Ct:wt,i=0;i<s;++i)this.each(o(a[i],e,n));return this}var o=this.node().__on;if(o)for(var c,l=0,h=o.length;l<h;++l)for(i=0,c=o[l];i<s;++i)if((r=a[i]).type===c.type&&r.name===c.name)return c.value},dispatch:function(t,e){return this.each(("function"==typeof e?St:Et)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var i,r=t[e],a=0,s=r.length;a<s;++a)(i=r[a])&&(yield i)}};const Nt=Bt;var Dt={value:()=>{}};function Ot(){for(var t,e=0,n=arguments.length,i={};e<n;++e){if(!(t=arguments[e]+"")||t in i||/[\s.]/.test(t))throw new Error("illegal type: "+t);i[t]=[]}return new Mt(i)}function Mt(t){this._=t}function It(t,e){for(var n,i=0,r=t.length;i<r;++i)if((n=t[i]).name===e)return n.value}function Ft(t,e,n){for(var i=0,r=t.length;i<r;++i)if(t[i].name===e){t[i]=Dt,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=n&&t.push({name:e,value:n}),t}Mt.prototype=Ot.prototype={constructor:Mt,on:function(t,e){var n,i,r=this._,a=(i=r,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!i.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),s=-1,o=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++s<o;)if(n=(t=a[s]).type)r[n]=Ft(r[n],t.name,e);else if(null==e)for(n in r)r[n]=Ft(r[n],t.name,null);return this}for(;++s<o;)if((n=(t=a[s]).type)&&(n=It(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new Mt(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,i,r=new Array(n),a=0;a<n;++a)r[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(i=this._[t]).length;a<n;++a)i[a].value.apply(e,r)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var i=this._[t],r=0,a=i.length;r<a;++r)i[r].value.apply(e,n)}};const $t=Ot;var Rt,Zt,Pt=0,jt=0,Yt=0,zt=1e3,Ut=0,Wt=0,qt=0,Ht="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Wt||(Vt(Xt),Wt=Ht.now()+qt)}function Xt(){Wt=0}function Qt(){this._call=this._time=this._next=null}function Kt(t,e,n){var i=new Qt;return i.restart(t,e,n),i}function Jt(){Wt=(Ut=Ht.now())+qt,Pt=jt=0;try{!function(){Gt(),++Pt;for(var t,e=Rt;e;)(t=Wt-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Pt}()}finally{Pt=0,function(){var t,e,n=Rt,i=1/0;for(;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Rt=e);Zt=t,ee(i)}(),Wt=0}}function te(){var t=Ht.now(),e=t-Ut;e>zt&&(qt-=e,Ut=t)}function ee(t){Pt||(jt&&(jt=clearTimeout(jt)),t-Wt>24?(t<1/0&&(jt=setTimeout(Jt,t-Ht.now()-qt)),Yt&&(Yt=clearInterval(Yt))):(Yt||(Ut=Ht.now(),Yt=setInterval(te,zt)),Pt=1,Vt(Jt)))}function ne(t,e,n){var i=new Qt;return e=null==e?0:+e,i.restart((n=>{i.stop(),t(n+e)}),e,n),i}Qt.prototype=Kt.prototype={constructor:Qt,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Gt():+n)+(null==e?0:+e),this._next||Zt===this||(Zt?Zt._next=this:Rt=this,Zt=this),this._call=t,this._time=n,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var ie=$t("start","end","cancel","interrupt"),re=[],ae=0,se=1,oe=2,ce=3,le=4,he=5,ue=6;function de(t,e,n,i,r,a){var s=t.__transition;if(s){if(n in s)return}else t.__transition={};!function(t,e,n){var i,r=t.__transition;function a(t){n.state=se,n.timer.restart(s,n.delay,n.time),n.delay<=t&&s(t-n.delay)}function s(a){var l,h,u,d;if(n.state!==se)return c();for(l in r)if((d=r[l]).name===n.name){if(d.state===ce)return ne(s);d.state===le?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete r[l]):+l<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete r[l])}if(ne((function(){n.state===ce&&(n.state=le,n.timer.restart(o,n.delay,n.time),o(a))})),n.state=oe,n.on.call("start",t,t.__data__,n.index,n.group),n.state===oe){for(n.state=ce,i=new Array(u=n.tween.length),l=0,h=-1;l<u;++l)(d=n.tween[l].value.call(t,t.__data__,n.index,n.group))&&(i[++h]=d);i.length=h+1}}function o(e){for(var r=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(c),n.state=he,1),a=-1,s=i.length;++a<s;)i[a].call(t,r);n.state===he&&(n.on.call("end",t,t.__data__,n.index,n.group),c())}function c(){for(var i in n.state=ue,n.timer.stop(),delete r[e],r)return;delete t.__transition}r[e]=n,n.timer=Kt(a,0,n.time)}(t,n,{name:e,index:i,group:r,on:ie,tween:re,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:ae})}function pe(t,e){var n=ge(t,e);if(n.state>ae)throw new Error("too late; already scheduled");return n}function fe(t,e){var n=ge(t,e);if(n.state>ce)throw new Error("too late; already running");return n}function ge(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ye(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var me,be=180/Math.PI,_e={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function xe(t,e,n,i,r,a){var s,o,c;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(c=t*n+e*i)&&(n-=t*c,i-=e*c),(o=Math.sqrt(n*n+i*i))&&(n/=o,i/=o,c/=o),t*i<e*n&&(t=-t,e=-e,c=-c,s=-s),{translateX:r,translateY:a,rotate:Math.atan2(e,t)*be,skewX:Math.atan(c)*be,scaleX:s,scaleY:o}}function ve(t,e,n,i){function r(t){return t.length?t.pop()+" ":""}return function(a,s){var o=[],c=[];return a=t(a),s=t(s),function(t,i,r,a,s,o){if(t!==r||i!==a){var c=s.push("translate(",null,e,null,n);o.push({i:c-4,x:ye(t,r)},{i:c-2,x:ye(i,a)})}else(r||a)&&s.push("translate("+r+e+a+n)}(a.translateX,a.translateY,s.translateX,s.translateY,o,c),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(r(n)+"rotate(",null,i)-2,x:ye(t,e)})):e&&n.push(r(n)+"rotate("+e+i)}(a.rotate,s.rotate,o,c),function(t,e,n,a){t!==e?a.push({i:n.push(r(n)+"skewX(",null,i)-2,x:ye(t,e)}):e&&n.push(r(n)+"skewX("+e+i)}(a.skewX,s.skewX,o,c),function(t,e,n,i,a,s){if(t!==n||e!==i){var o=a.push(r(a)+"scale(",null,",",null,")");s.push({i:o-4,x:ye(t,n)},{i:o-2,x:ye(e,i)})}else 1===n&&1===i||a.push(r(a)+"scale("+n+","+i+")")}(a.scaleX,a.scaleY,s.scaleX,s.scaleY,o,c),a=s=null,function(t){for(var e,n=-1,i=c.length;++n<i;)o[(e=c[n]).i]=e.x(t);return o.join("")}}}var ke=ve((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?_e:xe(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),we=ve((function(t){return null==t?_e:(me||(me=document.createElementNS("http://www.w3.org/2000/svg","g")),me.setAttribute("transform",t),(t=me.transform.baseVal.consolidate())?xe((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):_e)}),", ",")",")");function Ce(t,e){var n,i;return function(){var r=fe(this,t),a=r.tween;if(a!==n)for(var s=0,o=(i=n=a).length;s<o;++s)if(i[s].name===e){(i=i.slice()).splice(s,1);break}r.tween=i}}function Te(t,e,n){var i,r;if("function"!=typeof n)throw new Error;return function(){var a=fe(this,t),s=a.tween;if(s!==i){r=(i=s).slice();for(var o={name:e,value:n},c=0,l=r.length;c<l;++c)if(r[c].name===e){r[c]=o;break}c===l&&r.push(o)}a.tween=r}}function Ee(t,e,n){var i=t._id;return t.each((function(){var t=fe(this,i);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return ge(t,i).value[e]}}function Se(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Ae(t,e){var n=Object.create(t.prototype);for(var i in e)n[i]=e[i];return n}function Le(){}var Be=.7,Ne=1/Be,De="\\s*([+-]?\\d+)\\s*",Oe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Me="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ie=/^#([0-9a-f]{3,8})$/,Fe=new RegExp(`^rgb\\(${De},${De},${De}\\)$`),$e=new RegExp(`^rgb\\(${Me},${Me},${Me}\\)$`),Re=new RegExp(`^rgba\\(${De},${De},${De},${Oe}\\)$`),Ze=new RegExp(`^rgba\\(${Me},${Me},${Me},${Oe}\\)$`),Pe=new RegExp(`^hsl\\(${Oe},${Me},${Me}\\)$`),je=new RegExp(`^hsla\\(${Oe},${Me},${Me},${Oe}\\)$`),Ye={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function ze(){return this.rgb().formatHex()}function Ue(){return this.rgb().formatRgb()}function We(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Ie.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?qe(e):3===n?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?He(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?He(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Fe.exec(t))?new Xe(e[1],e[2],e[3],1):(e=$e.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Re.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Ze.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Pe.exec(t))?nn(e[1],e[2]/100,e[3]/100,1):(e=je.exec(t))?nn(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?qe(Ye[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function qe(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,i){return i<=0&&(t=e=n=NaN),new Xe(t,e,n,i)}function Ve(t){return t instanceof Le||(t=We(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,n,i){return 1===arguments.length?Ve(t):new Xe(t,e,n,null==i?1:i)}function Xe(t,e,n,i){this.r=+t,this.g=+e,this.b=+n,this.opacity=+i}function Qe(){return`#${en(this.r)}${en(this.g)}${en(this.b)}`}function Ke(){const t=Je(this.opacity);return`${1===t?"rgb(":"rgba("}${tn(this.r)}, ${tn(this.g)}, ${tn(this.b)}${1===t?")":`, ${t})`}`}function Je(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function tn(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function en(t){return((t=tn(t))<16?"0":"")+t.toString(16)}function nn(t,e,n,i){return i<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new an(t,e,n,i)}function rn(t){if(t instanceof an)return new an(t.h,t.s,t.l,t.opacity);if(t instanceof Le||(t=We(t)),!t)return new an;if(t instanceof an)return t;var e=(t=t.rgb()).r/255,n=t.g/255,i=t.b/255,r=Math.min(e,n,i),a=Math.max(e,n,i),s=NaN,o=a-r,c=(a+r)/2;return o?(s=e===a?(n-i)/o+6*(n<i):n===a?(i-e)/o+2:(e-n)/o+4,o/=c<.5?a+r:2-a-r,s*=60):o=c>0&&c<1?0:s,new an(s,o,c,t.opacity)}function an(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function sn(t){return(t=(t||0)%360)<0?t+360:t}function on(t){return Math.max(0,Math.min(1,t||0))}function cn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function ln(t,e,n,i,r){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*n+(1+3*t+3*a-3*s)*i+s*r)/6}Se(Le,We,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return rn(this).formatHsl()},formatRgb:Ue,toString:Ue}),Se(Xe,Ge,Ae(Le,{brighter(t){return t=null==t?Ne:Math.pow(Ne,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Be:Math.pow(Be,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(tn(this.r),tn(this.g),tn(this.b),Je(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Qe,formatHex:Qe,formatHex8:function(){return`#${en(this.r)}${en(this.g)}${en(this.b)}${en(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Ke,toString:Ke})),Se(an,(function(t,e,n,i){return 1===arguments.length?rn(t):new an(t,e,n,null==i?1:i)}),Ae(Le,{brighter(t){return t=null==t?Ne:Math.pow(Ne,t),new an(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Be:Math.pow(Be,t),new an(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,i=n+(n<.5?n:1-n)*e,r=2*n-i;return new Xe(cn(t>=240?t-240:t+120,r,i),cn(t,r,i),cn(t<120?t+240:t-120,r,i),this.opacity)},clamp(){return new an(sn(this.h),on(this.s),on(this.l),Je(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Je(this.opacity);return`${1===t?"hsl(":"hsla("}${sn(this.h)}, ${100*on(this.s)}%, ${100*on(this.l)}%${1===t?")":`, ${t})`}`}}));const hn=t=>()=>t;function un(t,e){return function(n){return t+n*e}}function dn(t){return 1==(t=+t)?pn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(i){return Math.pow(t+i*e,n)}}(e,n,t):hn(isNaN(e)?n:e)}}function pn(t,e){var n=e-t;return n?un(t,n):hn(isNaN(t)?e:t)}const fn=function t(e){var n=dn(e);function i(t,e){var i=n((t=Ge(t)).r,(e=Ge(e)).r),r=n(t.g,e.g),a=n(t.b,e.b),s=pn(t.opacity,e.opacity);return function(e){return t.r=i(e),t.g=r(e),t.b=a(e),t.opacity=s(e),t+""}}return i.gamma=t,i}(1);function gn(t){return function(e){var n,i,r=e.length,a=new Array(r),s=new Array(r),o=new Array(r);for(n=0;n<r;++n)i=Ge(e[n]),a[n]=i.r||0,s[n]=i.g||0,o[n]=i.b||0;return a=t(a),s=t(s),o=t(o),i.opacity=1,function(t){return i.r=a(t),i.g=s(t),i.b=o(t),i+""}}}gn((function(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),r=t[i],a=t[i+1],s=i>0?t[i-1]:2*r-a,o=i<e-1?t[i+2]:2*a-r;return ln((n-i/e)*e,s,r,a,o)}})),gn((function(t){var e=t.length;return function(n){var i=Math.floor(((n%=1)<0?++n:n)*e),r=t[(i+e-1)%e],a=t[i%e],s=t[(i+1)%e],o=t[(i+2)%e];return ln((n-i/e)*e,r,a,s,o)}}));var yn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mn=new RegExp(yn.source,"g");function bn(t,e){var n,i,r,a=yn.lastIndex=mn.lastIndex=0,s=-1,o=[],c=[];for(t+="",e+="";(n=yn.exec(t))&&(i=mn.exec(e));)(r=i.index)>a&&(r=e.slice(a,r),o[s]?o[s]+=r:o[++s]=r),(n=n[0])===(i=i[0])?o[s]?o[s]+=i:o[++s]=i:(o[++s]=null,c.push({i:s,x:ye(n,i)})),a=mn.lastIndex;return a<e.length&&(r=e.slice(a),o[s]?o[s]+=r:o[++s]=r),o.length<2?c[0]?function(t){return function(e){return t(e)+""}}(c[0].x):function(t){return function(){return t}}(e):(e=c.length,function(t){for(var n,i=0;i<e;++i)o[(n=c[i]).i]=n.x(t);return o.join("")})}function _n(t,e){var n;return("number"==typeof e?ye:e instanceof We?fn:(n=We(e))?(e=n,fn):bn)(t,e)}function xn(t){return function(){this.removeAttribute(t)}}function vn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function kn(t,e,n){var i,r,a=n+"";return function(){var s=this.getAttribute(t);return s===a?null:s===i?r:r=e(i=s,n)}}function wn(t,e,n){var i,r,a=n+"";return function(){var s=this.getAttributeNS(t.space,t.local);return s===a?null:s===i?r:r=e(i=s,n)}}function Cn(t,e,n){var i,r,a;return function(){var s,o,c=n(this);if(null!=c)return(s=this.getAttribute(t))===(o=c+"")?null:s===i&&o===r?a:(r=o,a=e(i=s,c));this.removeAttribute(t)}}function Tn(t,e,n){var i,r,a;return function(){var s,o,c=n(this);if(null!=c)return(s=this.getAttributeNS(t.space,t.local))===(o=c+"")?null:s===i&&o===r?a:(r=o,a=e(i=s,c));this.removeAttributeNS(t.space,t.local)}}function En(t,e){var n,i;function r(){var r=e.apply(this,arguments);return r!==i&&(n=(i=r)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,r)),n}return r._value=e,r}function Sn(t,e){var n,i;function r(){var r=e.apply(this,arguments);return r!==i&&(n=(i=r)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,r)),n}return r._value=e,r}function An(t,e){return function(){pe(this,t).delay=+e.apply(this,arguments)}}function Ln(t,e){return e=+e,function(){pe(this,t).delay=e}}function Bn(t,e){return function(){fe(this,t).duration=+e.apply(this,arguments)}}function Nn(t,e){return e=+e,function(){fe(this,t).duration=e}}var Dn=Nt.prototype.constructor;function On(t){return function(){this.style.removeProperty(t)}}var Mn=0;function In(t,e,n,i){this._groups=t,this._parents=e,this._name=n,this._id=i}function Fn(){return++Mn}var $n=Nt.prototype;In.prototype=function(t){return Nt().transition(t)}.prototype={constructor:In,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=x(t));for(var i=this._groups,r=i.length,a=new Array(r),s=0;s<r;++s)for(var o,c,l=i[s],h=l.length,u=a[s]=new Array(h),d=0;d<h;++d)(o=l[d])&&(c=t.call(o,o.__data__,d,l))&&("__data__"in o&&(c.__data__=o.__data__),u[d]=c,de(u[d],e,n,d,u,ge(o,n)));return new In(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=w(t));for(var i=this._groups,r=i.length,a=[],s=[],o=0;o<r;++o)for(var c,l=i[o],h=l.length,u=0;u<h;++u)if(c=l[u]){for(var d,p=t.call(c,c.__data__,u,l),f=ge(c,n),g=0,y=p.length;g<y;++g)(d=p[g])&&de(d,e,n,g,p,f);a.push(p),s.push(c)}return new In(a,s,e,n)},selectChild:$n.selectChild,selectChildren:$n.selectChildren,filter:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var a,s=e[r],o=s.length,c=i[r]=[],l=0;l<o;++l)(a=s[l])&&t.call(a,a.__data__,l,s)&&c.push(a);return new In(i,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,i=e.length,r=n.length,a=Math.min(i,r),s=new Array(i),o=0;o<a;++o)for(var c,l=e[o],h=n[o],u=l.length,d=s[o]=new Array(u),p=0;p<u;++p)(c=l[p]||h[p])&&(d[p]=c);for(;o<i;++o)s[o]=e[o];return new In(s,this._parents,this._name,this._id)},selection:function(){return new Dn(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Fn(),i=this._groups,r=i.length,a=0;a<r;++a)for(var s,o=i[a],c=o.length,l=0;l<c;++l)if(s=o[l]){var h=ge(s,e);de(s,t,n,l,o,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new In(i,this._parents,t,n)},call:$n.call,nodes:$n.nodes,node:$n.node,size:$n.size,empty:$n.empty,each:$n.each,on:function(t,e){var n=this._id;return arguments.length<2?ge(this.node(),n).on.on(t):this.each(function(t,e,n){var i,r,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?pe:fe;return function(){var s=a(this,t),o=s.on;o!==i&&(r=(i=o).copy()).on(e,n),s.on=r}}(n,t,e))},attr:function(t,e){var n=Z(t),i="transform"===n?we:_n;return this.attrTween(t,"function"==typeof e?(n.local?Tn:Cn)(n,i,Ee(this,"attr."+t,e)):null==e?(n.local?vn:xn)(n):(n.local?wn:kn)(n,i,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var i=Z(t);return this.tween(n,(i.local?En:Sn)(i,e))},style:function(t,e,n){var i="transform"==(t+="")?ke:_n;return null==e?this.styleTween(t,function(t,e){var n,i,r;return function(){var a=X(this,t),s=(this.style.removeProperty(t),X(this,t));return a===s?null:a===n&&s===i?r:r=e(n=a,i=s)}}(t,i)).on("end.style."+t,On(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var i,r,a;return function(){var s=X(this,t),o=n(this),c=o+"";return null==o&&(this.style.removeProperty(t),c=o=X(this,t)),s===c?null:s===i&&c===r?a:(r=c,a=e(i=s,o))}}(t,i,Ee(this,"style."+t,e))).each(function(t,e){var n,i,r,a,s="style."+e,o="end."+s;return function(){var c=fe(this,t),l=c.on,h=null==c.value[s]?a||(a=On(e)):void 0;l===n&&r===h||(i=(n=l).copy()).on(o,r=h),c.on=i}}(this._id,t)):this.styleTween(t,function(t,e,n){var i,r,a=n+"";return function(){var s=X(this,t);return s===a?null:s===i?r:r=e(i=s,n)}}(t,i,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;return this.tween(i,function(t,e,n){var i,r;function a(){var a=e.apply(this,arguments);return a!==r&&(i=(r=a)&&function(t,e,n){return function(i){this.style.setProperty(t,e.call(this,i),n)}}(t,a,n)),i}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Ee(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,n;function i(){var i=t.apply(this,arguments);return i!==n&&(e=(n=i)&&function(t){return function(e){this.textContent=t.call(this,e)}}(i)),e}return i._value=t,i}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var i,r=ge(this.node(),n).tween,a=0,s=r.length;a<s;++a)if((i=r[a]).name===t)return i.value;return null}return this.each((null==e?Ce:Te)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?An:Ln)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bn:Nn)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){fe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;fe(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,i=n._id,r=n.size();return new Promise((function(a,s){var o={value:s},c={value:function(){0==--r&&a()}};n.each((function(){var n=fe(this,i),r=n.on;r!==t&&((e=(t=r).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(c)),n.on=e})),0===r&&a()}))},[Symbol.iterator]:$n[Symbol.iterator]};var Rn={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Zn(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Nt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,i,r,a=t.__transition,s=!0;if(a){for(r in e=null==e?null:e+"",a)(n=a[r]).name===e?(i=n.state>oe&&n.state<he,n.state=ue,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[r]):s=!1;s&&delete t.__transition}}(this,t)}))},Nt.prototype.transition=function(t){var e,n;t instanceof In?(e=t._id,t=t._name):(e=Fn(),(n=Rn).time=Gt(),t=null==t?null:t+"");for(var i=this._groups,r=i.length,a=0;a<r;++a)for(var s,o=i[a],c=o.length,l=0;l<c;++l)(s=o[l])&&de(s,t,e,l,o,n||Zn(s,e));return new In(i,this._parents,t,e)};const{abs:Pn,max:jn,min:Yn}=Math;function zn(t){return[+t[0],+t[1]]}function Un(t){return[zn(t[0]),zn(t[1])]}["w","e"].map(Wn),["n","s"].map(Wn),["n","w","e","s","nw","ne","sw","se"].map(Wn);function Wn(t){return{type:t}}function qn(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Hn(t){return(e,n)=>function(t,e){return fetch(t,e).then(qn)}(e,n).then((e=>(new DOMParser).parseFromString(e,t)))}Hn("application/xml");Hn("text/html");var Vn=Hn("image/svg+xml");const Gn=Math.PI/180,Xn=180/Math.PI,Qn=.96422,Kn=1,Jn=.82521,ti=4/29,ei=6/29,ni=3*ei*ei,ii=ei*ei*ei;function ri(t){if(t instanceof ai)return new ai(t.l,t.a,t.b,t.opacity);if(t instanceof di)return pi(t);t instanceof Xe||(t=Ve(t));var e,n,i=li(t.r),r=li(t.g),a=li(t.b),s=si((.2225045*i+.7168786*r+.0606169*a)/Kn);return i===r&&r===a?e=n=s:(e=si((.4360747*i+.3850649*r+.1430804*a)/Qn),n=si((.0139322*i+.0971045*r+.7141733*a)/Jn)),new ai(116*s-16,500*(e-s),200*(s-n),t.opacity)}function ai(t,e,n,i){this.l=+t,this.a=+e,this.b=+n,this.opacity=+i}function si(t){return t>ii?Math.pow(t,1/3):t/ni+ti}function oi(t){return t>ei?t*t*t:ni*(t-ti)}function ci(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function li(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function hi(t){if(t instanceof di)return new di(t.h,t.c,t.l,t.opacity);if(t instanceof ai||(t=ri(t)),0===t.a&&0===t.b)return new di(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Xn;return new di(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function ui(t,e,n,i){return 1===arguments.length?hi(t):new di(t,e,n,null==i?1:i)}function di(t,e,n,i){this.h=+t,this.c=+e,this.l=+n,this.opacity=+i}function pi(t){if(isNaN(t.h))return new ai(t.l,0,0,t.opacity);var e=t.h*Gn;return new ai(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fi(t){return function(e,n){var i=t((e=ui(e)).h,(n=ui(n)).h),r=pn(e.c,n.c),a=pn(e.l,n.l),s=pn(e.opacity,n.opacity);return function(t){return e.h=i(t),e.c=r(t),e.l=a(t),e.opacity=s(t),e+""}}}Se(ai,(function(t,e,n,i){return 1===arguments.length?ri(t):new ai(t,e,n,null==i?1:i)}),Ae(Le,{brighter(t){return new ai(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new ai(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Xe(ci(3.1338561*(e=Qn*oi(e))-1.6168667*(t=Kn*oi(t))-.4906146*(n=Jn*oi(n))),ci(-.9787684*e+1.9161415*t+.033454*n),ci(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Se(di,ui,Ae(Le,{brighter(t){return new di(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new di(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return pi(this).rgb()}}));const gi=fi((function(t,e){var n=e-t;return n?un(t,n>180||n<-180?n-360*Math.round(n/360):n):hn(isNaN(t)?e:t)}));fi(pn);const yi=Math.sqrt(50),mi=Math.sqrt(10),bi=Math.sqrt(2);function _i(t,e,n){const i=(e-t)/Math.max(0,n),r=Math.floor(Math.log10(i)),a=i/Math.pow(10,r),s=a>=yi?10:a>=mi?5:a>=bi?2:1;let o,c,l;return r<0?(l=Math.pow(10,-r)/s,o=Math.round(t*l),c=Math.round(e*l),o/l<t&&++o,c/l>e&&--c,l=-l):(l=Math.pow(10,r)*s,o=Math.round(t/l),c=Math.round(e/l),o*l<t&&++o,c*l>e&&--c),c<o&&.5<=n&&n<2?_i(t,e,2*n):[o,c,l]}function xi(t,e,n){return _i(t=+t,e=+e,n=+n)[2]}function vi(t,e,n){n=+n;const i=(e=+e)<(t=+t),r=i?xi(e,t,n):xi(t,e,n);return(i?-1:1)*(r<0?1/-r:r)}function ki(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function wi(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Ci(t){let e,n,i;function r(t,i,r=0,a=t.length){if(r<a){if(0!==e(i,i))return a;do{const e=r+a>>>1;n(t[e],i)<0?r=e+1:a=e}while(r<a)}return r}return 2!==t.length?(e=ki,n=(e,n)=>ki(t(e),n),i=(e,n)=>t(e)-n):(e=t===ki||t===wi?t:Ti,n=t,i=t),{left:r,center:function(t,e,n=0,a=t.length){const s=r(t,e,n,a-1);return s>n&&i(t[s-1],e)>-i(t[s],e)?s-1:s},right:function(t,i,r=0,a=t.length){if(r<a){if(0!==e(i,i))return a;do{const e=r+a>>>1;n(t[e],i)<=0?r=e+1:a=e}while(r<a)}return r}}}function Ti(){return 0}const Ei=Ci(ki),Si=Ei.right,Ai=(Ei.left,Ci((function(t){return null===t?NaN:+t})).center,Si);function Li(t,e){var n,i=e?e.length:0,r=t?Math.min(i,t.length):0,a=new Array(r),s=new Array(i);for(n=0;n<r;++n)a[n]=Oi(t[n],e[n]);for(;n<i;++n)s[n]=e[n];return function(t){for(n=0;n<r;++n)s[n]=a[n](t);return s}}function Bi(t,e){var n=new Date;return t=+t,e=+e,function(i){return n.setTime(t*(1-i)+e*i),n}}function Ni(t,e){var n,i={},r={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?i[n]=Oi(t[n],e[n]):r[n]=e[n];return function(t){for(n in i)r[n]=i[n](t);return r}}function Di(t,e){e||(e=[]);var n,i=t?Math.min(e.length,t.length):0,r=e.slice();return function(a){for(n=0;n<i;++n)r[n]=t[n]*(1-a)+e[n]*a;return r}}function Oi(t,e){var n,i,r=typeof e;return null==e||"boolean"===r?hn(e):("number"===r?ye:"string"===r?(n=We(e))?(e=n,fn):bn:e instanceof We?fn:e instanceof Date?Bi:(i=e,!ArrayBuffer.isView(i)||i instanceof DataView?Array.isArray(e)?Li:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Ni:ye:Di))(t,e)}function Mi(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Ii(t){return+t}var Fi=[0,1];function $i(t){return t}function Ri(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:(n=isNaN(e)?NaN:.5,function(){return n});var n}function Zi(t,e,n){var i=t[0],r=t[1],a=e[0],s=e[1];return r<i?(i=Ri(r,i),a=n(s,a)):(i=Ri(i,r),a=n(a,s)),function(t){return a(i(t))}}function Pi(t,e,n){var i=Math.min(t.length,e.length)-1,r=new Array(i),a=new Array(i),s=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<i;)r[s]=Ri(t[s],t[s+1]),a[s]=n(e[s],e[s+1]);return function(e){var n=Ai(t,e,1,i)-1;return a[n](r[n](e))}}function ji(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Yi(){var t,e,n,i,r,a,s=Fi,o=Fi,c=Oi,l=$i;function h(){var t,e,n,c=Math.min(s.length,o.length);return l!==$i&&(t=s[0],e=s[c-1],t>e&&(n=t,t=e,e=n),l=function(n){return Math.max(t,Math.min(e,n))}),i=c>2?Pi:Zi,r=a=null,u}function u(e){return null==e||isNaN(e=+e)?n:(r||(r=i(s.map(t),o,c)))(t(l(e)))}return u.invert=function(n){return l(e((a||(a=i(o,s.map(t),ye)))(n)))},u.domain=function(t){return arguments.length?(s=Array.from(t,Ii),h()):s.slice()},u.range=function(t){return arguments.length?(o=Array.from(t),h()):o.slice()},u.rangeRound=function(t){return o=Array.from(t),c=Mi,h()},u.clamp=function(t){return arguments.length?(l=!!t||$i,h()):l!==$i},u.interpolate=function(t){return arguments.length?(c=t,h()):c},u.unknown=function(t){return arguments.length?(n=t,u):n},function(n,i){return t=n,e=i,h()}}function zi(){return Yi()($i,$i)}function Ui(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var Wi,qi=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Hi(t){if(!(e=qi.exec(t)))throw new Error("invalid format: "+t);var e;return new Vi({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Vi(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Gi(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,i=t.slice(0,n);return[i.length>1?i[0]+i.slice(2):i,+t.slice(n+1)]}function Xi(t){return(t=Gi(Math.abs(t)))?t[1]:NaN}function Qi(t,e){var n=Gi(t,e);if(!n)return t+"";var i=n[0],r=n[1];return r<0?"0."+new Array(-r).join("0")+i:i.length>r+1?i.slice(0,r+1)+"."+i.slice(r+1):i+new Array(r-i.length+2).join("0")}Hi.prototype=Vi.prototype,Vi.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Ki={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Qi(100*t,e),r:Qi,s:function(t,e){var n=Gi(t,e);if(!n)return t+"";var i=n[0],r=n[1],a=r-(Wi=3*Math.max(-8,Math.min(8,Math.floor(r/3))))+1,s=i.length;return a===s?i:a>s?i+new Array(a-s+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+Gi(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ji(t){return t}var tr,er,nr,ir=Array.prototype.map,rr=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function ar(t){var e,n,i=void 0===t.grouping||void 0===t.thousands?Ji:(e=ir.call(t.grouping,Number),n=t.thousands+"",function(t,i){for(var r=t.length,a=[],s=0,o=e[0],c=0;r>0&&o>0&&(c+o+1>i&&(o=Math.max(1,i-c)),a.push(t.substring(r-=o,r+o)),!((c+=o+1)>i));)o=e[s=(s+1)%e.length];return a.reverse().join(n)}),r=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Ji:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ir.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=Hi(t)).fill,n=t.align,u=t.sign,d=t.symbol,p=t.zero,f=t.width,g=t.comma,y=t.precision,m=t.trim,b=t.type;"n"===b?(g=!0,b="g"):Ki[b]||(void 0===y&&(y=12),m=!0,b="g"),(p||"0"===e&&"="===n)&&(p=!0,e="0",n="=");var _="$"===d?r:"#"===d&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",x="$"===d?a:/[%p]/.test(b)?c:"",v=Ki[b],k=/[defgprs%]/.test(b);function w(t){var r,a,c,d=_,w=x;if("c"===b)w=v(t)+w,t="";else{var C=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:v(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,i=1,r=-1;i<n;++i)switch(t[i]){case".":r=e=i;break;case"0":0===r&&(r=i),e=i;break;default:if(!+t[i])break t;r>0&&(r=0)}return r>0?t.slice(0,r)+t.slice(e+1):t}(t)),C&&0==+t&&"+"!==u&&(C=!1),d=(C?"("===u?u:l:"-"===u||"("===u?"":u)+d,w=("s"===b?rr[8+Wi/3]:"")+w+(C&&"("===u?")":""),k)for(r=-1,a=t.length;++r<a;)if(48>(c=t.charCodeAt(r))||c>57){w=(46===c?s+t.slice(r+1):t.slice(r))+w,t=t.slice(0,r);break}}g&&!p&&(t=i(t,1/0));var T=d.length+t.length+w.length,E=T<f?new Array(f-T+1).join(e):"";switch(g&&p&&(t=i(E+t,E.length?f-w.length:1/0),E=""),n){case"<":t=d+t+w+E;break;case"=":t=d+E+t+w;break;case"^":t=E.slice(0,T=E.length>>1)+d+t+w+E.slice(T);break;default:t=E+d+t+w}return o(t)}return y=void 0===y?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),w.toString=function(){return t+""},w}return{format:u,formatPrefix:function(t,e){var n=u(((t=Hi(t)).type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Xi(e)/3))),r=Math.pow(10,-i),a=rr[8+i/3];return function(t){return n(r*t)+a}}}}function sr(t,e,n,i){var r,a=vi(t,e,n);switch((i=Hi(null==i?",f":i)).type){case"s":var s=Math.max(Math.abs(t),Math.abs(e));return null!=i.precision||isNaN(r=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Xi(e)/3)))-Xi(Math.abs(t)))}(a,s))||(i.precision=r),nr(i,s);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(r=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Xi(e)-Xi(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(i.precision=r-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(r=function(t){return Math.max(0,-Xi(Math.abs(t)))}(a))||(i.precision=r-2*("%"===i.type))}return er(i)}function or(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const i=e<t,[r,a,s]=i?_i(e,t,n):_i(t,e,n);if(!(a>=r))return[];const o=a-r+1,c=new Array(o);if(i)if(s<0)for(let l=0;l<o;++l)c[l]=(a-l)/-s;else for(let l=0;l<o;++l)c[l]=(a-l)*s;else if(s<0)for(let l=0;l<o;++l)c[l]=(r+l)/-s;else for(let l=0;l<o;++l)c[l]=(r+l)*s;return c}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var i=e();return sr(i[0],i[i.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var i,r,a=e(),s=0,o=a.length-1,c=a[s],l=a[o],h=10;for(l<c&&(r=c,c=l,l=r,r=s,s=o,o=r);h-- >0;){if((r=xi(c,l,n))===i)return a[s]=c,a[o]=l,e(a);if(r>0)c=Math.floor(c/r)*r,l=Math.ceil(l/r)*r;else{if(!(r<0))break;c=Math.ceil(c*r)/r,l=Math.floor(l*r)/r}i=r}return t},t}function cr(){var t=zi();return t.copy=function(){return ji(t,cr())},Ui.apply(t,arguments),or(t)}tr=ar({thousands:",",grouping:[3],currency:["$",""]}),er=tr.format,nr=tr.formatPrefix;class lr extends Map{constructor(t,e=pr){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(hr(this,t))}has(t){return super.has(hr(this,t))}set(t,e){return super.set(ur(this,t),e)}delete(t){return super.delete(dr(this,t))}}function hr({_intern:t,_key:e},n){const i=e(n);return t.has(i)?t.get(i):n}function ur({_intern:t,_key:e},n){const i=e(n);return t.has(i)?t.get(i):(t.set(i,n),n)}function dr({_intern:t,_key:e},n){const i=e(n);return t.has(i)&&(n=t.get(i),t.delete(i)),n}function pr(t){return null!==t&&"object"==typeof t?t.valueOf():t}const fr=Symbol("implicit");function gr(){var t=new lr,e=[],n=[],i=fr;function r(r){let a=t.get(r);if(void 0===a){if(i!==fr)return i;t.set(r,a=e.push(r)-1)}return n[a%n.length]}return r.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new lr;for(const i of n)t.has(i)||t.set(i,e.push(i)-1);return r},r.range=function(t){return arguments.length?(n=Array.from(t),r):n.slice()},r.unknown=function(t){return arguments.length?(i=t,r):i},r.copy=function(){return gr(e,n).unknown(i)},Ui.apply(r,arguments),r}const yr=1e3,mr=6e4,br=36e5,_r=864e5,xr=6048e5,vr=2592e6,kr=31536e6,wr=new Date,Cr=new Date;function Tr(t,e,n,i){function r(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return r.floor=e=>(t(e=new Date(+e)),e),r.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),r.round=t=>{const e=r(t),n=r.ceil(t);return t-e<n-t?e:n},r.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),r.range=(n,i,a)=>{const s=[];if(n=r.ceil(n),a=null==a?1:Math.floor(a),!(n<i&&a>0))return s;let o;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<i);return s},r.filter=n=>Tr((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,i)=>{if(t>=t)if(i<0)for(;++i<=0;)for(;e(t,-1),!n(t););else for(;--i>=0;)for(;e(t,1),!n(t););})),n&&(r.count=(e,i)=>(wr.setTime(+e),Cr.setTime(+i),t(wr),t(Cr),Math.floor(n(wr,Cr))),r.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?r.filter(i?e=>i(e)%t==0:e=>r.count(0,e)%t==0):r:null)),r}const Er=Tr((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Er.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Tr((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):Er:null);Er.range;const Sr=Tr((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yr)}),((t,e)=>(e-t)/yr),(t=>t.getUTCSeconds())),Ar=(Sr.range,Tr((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yr)}),((t,e)=>{t.setTime(+t+e*mr)}),((t,e)=>(e-t)/mr),(t=>t.getMinutes()))),Lr=(Ar.range,Tr((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*mr)}),((t,e)=>(e-t)/mr),(t=>t.getUTCMinutes()))),Br=(Lr.range,Tr((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yr-t.getMinutes()*mr)}),((t,e)=>{t.setTime(+t+e*br)}),((t,e)=>(e-t)/br),(t=>t.getHours()))),Nr=(Br.range,Tr((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*br)}),((t,e)=>(e-t)/br),(t=>t.getUTCHours()))),Dr=(Nr.range,Tr((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*mr)/_r),(t=>t.getDate()-1))),Or=(Dr.range,Tr((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_r),(t=>t.getUTCDate()-1))),Mr=(Or.range,Tr((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_r),(t=>Math.floor(t/_r))));Mr.range;function Ir(t){return Tr((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*mr)/xr))}const Fr=Ir(0),$r=Ir(1),Rr=Ir(2),Zr=Ir(3),Pr=Ir(4),jr=Ir(5),Yr=Ir(6);Fr.range,$r.range,Rr.range,Zr.range,Pr.range,jr.range,Yr.range;function zr(t){return Tr((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/xr))}const Ur=zr(0),Wr=zr(1),qr=zr(2),Hr=zr(3),Vr=zr(4),Gr=zr(5),Xr=zr(6),Qr=(Ur.range,Wr.range,qr.range,Hr.range,Vr.range,Gr.range,Xr.range,Tr((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kr=(Qr.range,Tr((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),Jr=(Kr.range,Tr((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));Jr.every=t=>isFinite(t=Math.floor(t))&&t>0?Tr((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null;Jr.range;const ta=Tr((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));ta.every=t=>isFinite(t=Math.floor(t))&&t>0?Tr((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null;ta.range;function ea(t,e,n,i,r,a){const s=[[Sr,1,yr],[Sr,5,5e3],[Sr,15,15e3],[Sr,30,3e4],[a,1,mr],[a,5,3e5],[a,15,9e5],[a,30,18e5],[r,1,br],[r,3,108e5],[r,6,216e5],[r,12,432e5],[i,1,_r],[i,2,1728e5],[n,1,xr],[e,1,vr],[e,3,7776e6],[t,1,kr]];function o(e,n,i){const r=Math.abs(n-e)/i,a=Ci((([,,t])=>t)).right(s,r);if(a===s.length)return t.every(vi(e/kr,n/kr,i));if(0===a)return Er.every(Math.max(vi(e,n,i),1));const[o,c]=s[r/s[a-1][2]<s[a][2]/r?a-1:a];return o.every(c)}return[function(t,e,n){const i=e<t;i&&([t,e]=[e,t]);const r=n&&"function"==typeof n.range?n:o(t,e,n),a=r?r.range(t,+e+1):[];return i?a.reverse():a},o]}const[na,ia]=ea(ta,Kr,Ur,Mr,Nr,Lr),[ra,aa]=ea(Jr,Qr,Fr,Dr,Br,Ar);function sa(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function oa(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ca(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var la,ha,ua={"-":"",_:" ",0:"0"},da=/^\s*\d+/,pa=/^%/,fa=/[\\^$*+?|[\]().{}]/g;function ga(t,e,n){var i=t<0?"-":"",r=(i?-t:t)+"",a=r.length;return i+(a<n?new Array(n-a+1).join(e)+r:r)}function ya(t){return t.replace(fa,"\\$&")}function ma(t){return new RegExp("^(?:"+t.map(ya).join("|")+")","i")}function ba(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _a(t,e,n){var i=da.exec(e.slice(n,n+1));return i?(t.w=+i[0],n+i[0].length):-1}function xa(t,e,n){var i=da.exec(e.slice(n,n+1));return i?(t.u=+i[0],n+i[0].length):-1}function va(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.U=+i[0],n+i[0].length):-1}function ka(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.V=+i[0],n+i[0].length):-1}function wa(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.W=+i[0],n+i[0].length):-1}function Ca(t,e,n){var i=da.exec(e.slice(n,n+4));return i?(t.y=+i[0],n+i[0].length):-1}function Ta(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),n+i[0].length):-1}function Ea(t,e,n){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),n+i[0].length):-1}function Sa(t,e,n){var i=da.exec(e.slice(n,n+1));return i?(t.q=3*i[0]-3,n+i[0].length):-1}function Aa(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.m=i[0]-1,n+i[0].length):-1}function La(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.d=+i[0],n+i[0].length):-1}function Ba(t,e,n){var i=da.exec(e.slice(n,n+3));return i?(t.m=0,t.d=+i[0],n+i[0].length):-1}function Na(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.H=+i[0],n+i[0].length):-1}function Da(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.M=+i[0],n+i[0].length):-1}function Oa(t,e,n){var i=da.exec(e.slice(n,n+2));return i?(t.S=+i[0],n+i[0].length):-1}function Ma(t,e,n){var i=da.exec(e.slice(n,n+3));return i?(t.L=+i[0],n+i[0].length):-1}function Ia(t,e,n){var i=da.exec(e.slice(n,n+6));return i?(t.L=Math.floor(i[0]/1e3),n+i[0].length):-1}function Fa(t,e,n){var i=pa.exec(e.slice(n,n+1));return i?n+i[0].length:-1}function $a(t,e,n){var i=da.exec(e.slice(n));return i?(t.Q=+i[0],n+i[0].length):-1}function Ra(t,e,n){var i=da.exec(e.slice(n));return i?(t.s=+i[0],n+i[0].length):-1}function Za(t,e){return ga(t.getDate(),e,2)}function Pa(t,e){return ga(t.getHours(),e,2)}function ja(t,e){return ga(t.getHours()%12||12,e,2)}function Ya(t,e){return ga(1+Dr.count(Jr(t),t),e,3)}function za(t,e){return ga(t.getMilliseconds(),e,3)}function Ua(t,e){return za(t,e)+"000"}function Wa(t,e){return ga(t.getMonth()+1,e,2)}function qa(t,e){return ga(t.getMinutes(),e,2)}function Ha(t,e){return ga(t.getSeconds(),e,2)}function Va(t){var e=t.getDay();return 0===e?7:e}function Ga(t,e){return ga(Fr.count(Jr(t)-1,t),e,2)}function Xa(t){var e=t.getDay();return e>=4||0===e?Pr(t):Pr.ceil(t)}function Qa(t,e){return t=Xa(t),ga(Pr.count(Jr(t),t)+(4===Jr(t).getDay()),e,2)}function Ka(t){return t.getDay()}function Ja(t,e){return ga($r.count(Jr(t)-1,t),e,2)}function ts(t,e){return ga(t.getFullYear()%100,e,2)}function es(t,e){return ga((t=Xa(t)).getFullYear()%100,e,2)}function ns(t,e){return ga(t.getFullYear()%1e4,e,4)}function is(t,e){var n=t.getDay();return ga((t=n>=4||0===n?Pr(t):Pr.ceil(t)).getFullYear()%1e4,e,4)}function rs(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ga(e/60|0,"0",2)+ga(e%60,"0",2)}function as(t,e){return ga(t.getUTCDate(),e,2)}function ss(t,e){return ga(t.getUTCHours(),e,2)}function os(t,e){return ga(t.getUTCHours()%12||12,e,2)}function cs(t,e){return ga(1+Or.count(ta(t),t),e,3)}function ls(t,e){return ga(t.getUTCMilliseconds(),e,3)}function hs(t,e){return ls(t,e)+"000"}function us(t,e){return ga(t.getUTCMonth()+1,e,2)}function ds(t,e){return ga(t.getUTCMinutes(),e,2)}function ps(t,e){return ga(t.getUTCSeconds(),e,2)}function fs(t){var e=t.getUTCDay();return 0===e?7:e}function gs(t,e){return ga(Ur.count(ta(t)-1,t),e,2)}function ys(t){var e=t.getUTCDay();return e>=4||0===e?Vr(t):Vr.ceil(t)}function ms(t,e){return t=ys(t),ga(Vr.count(ta(t),t)+(4===ta(t).getUTCDay()),e,2)}function bs(t){return t.getUTCDay()}function _s(t,e){return ga(Wr.count(ta(t)-1,t),e,2)}function xs(t,e){return ga(t.getUTCFullYear()%100,e,2)}function vs(t,e){return ga((t=ys(t)).getUTCFullYear()%100,e,2)}function ks(t,e){return ga(t.getUTCFullYear()%1e4,e,4)}function ws(t,e){var n=t.getUTCDay();return ga((t=n>=4||0===n?Vr(t):Vr.ceil(t)).getUTCFullYear()%1e4,e,4)}function Cs(){return"+0000"}function Ts(){return"%"}function Es(t){return+t}function Ss(t){return Math.floor(+t/1e3)}function As(t){return new Date(t)}function Ls(t){return t instanceof Date?+t:+new Date(+t)}function Bs(t,e,n,i,r,a,s,o,c,l){var h=zi(),u=h.invert,d=h.domain,p=l(".%L"),f=l(":%S"),g=l("%I:%M"),y=l("%I %p"),m=l("%a %d"),b=l("%b %d"),_=l("%B"),x=l("%Y");function v(t){return(c(t)<t?p:o(t)<t?f:s(t)<t?g:a(t)<t?y:i(t)<t?r(t)<t?m:b:n(t)<t?_:x)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ls)):d().map(As)},h.ticks=function(e){var n=d();return t(n[0],n[n.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?v:l(e)},h.nice=function(t){var n=d();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?d(function(t,e){var n,i=0,r=(t=t.slice()).length-1,a=t[i],s=t[r];return s<a&&(n=i,i=r,r=n,n=a,a=s,s=n),t[i]=e.floor(a),t[r]=e.ceil(s),t}(n,t)):h},h.copy=function(){return ji(h,Bs(t,e,n,i,r,a,s,o,c,l))},h}function Ns(){return Ui.apply(Bs(ra,aa,Jr,Qr,Fr,Dr,Br,Ar,Sr,ha).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Ds(t){return"string"==typeof t?new Lt([[document.querySelector(t)]],[document.documentElement]):new Lt([[t]],At)}function Os(t){return"string"==typeof t?new Lt([document.querySelectorAll(t)],[document.documentElement]):new Lt([v(t)],At)}function Ms(t){return function(){return t}}!function(t){la=function(t){var e=t.dateTime,n=t.date,i=t.time,r=t.periods,a=t.days,s=t.shortDays,o=t.months,c=t.shortMonths,l=ma(r),h=ba(r),u=ma(a),d=ba(a),p=ma(s),f=ba(s),g=ma(o),y=ba(o),m=ma(c),b=ba(c),_={a:function(t){return s[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:Za,e:Za,f:Ua,g:es,G:is,H:Pa,I:ja,j:Ya,L:za,m:Wa,M:qa,p:function(t){return r[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Es,s:Ss,S:Ha,u:Va,U:Ga,V:Qa,w:Ka,W:Ja,x:null,X:null,y:ts,Y:ns,Z:rs,"%":Ts},x={a:function(t){return s[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:as,e:as,f:hs,g:vs,G:ws,H:ss,I:os,j:cs,L:ls,m:us,M:ds,p:function(t){return r[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Es,s:Ss,S:ps,u:fs,U:gs,V:ms,w:bs,W:_s,x:null,X:null,y:xs,Y:ks,Z:Cs,"%":Ts},v={a:function(t,e,n){var i=p.exec(e.slice(n));return i?(t.w=f.get(i[0].toLowerCase()),n+i[0].length):-1},A:function(t,e,n){var i=u.exec(e.slice(n));return i?(t.w=d.get(i[0].toLowerCase()),n+i[0].length):-1},b:function(t,e,n){var i=m.exec(e.slice(n));return i?(t.m=b.get(i[0].toLowerCase()),n+i[0].length):-1},B:function(t,e,n){var i=g.exec(e.slice(n));return i?(t.m=y.get(i[0].toLowerCase()),n+i[0].length):-1},c:function(t,n,i){return C(t,e,n,i)},d:La,e:La,f:Ia,g:Ta,G:Ca,H:Na,I:Na,j:Ba,L:Ma,m:Aa,M:Da,p:function(t,e,n){var i=l.exec(e.slice(n));return i?(t.p=h.get(i[0].toLowerCase()),n+i[0].length):-1},q:Sa,Q:$a,s:Ra,S:Oa,u:xa,U:va,V:ka,w:_a,W:wa,x:function(t,e,i){return C(t,n,e,i)},X:function(t,e,n){return C(t,i,e,n)},y:Ta,Y:Ca,Z:Ea,"%":Fa};function k(t,e){return function(n){var i,r,a,s=[],o=-1,c=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++o<l;)37===t.charCodeAt(o)&&(s.push(t.slice(c,o)),null!=(r=ua[i=t.charAt(++o)])?i=t.charAt(++o):r="e"===i?" ":"0",(a=e[i])&&(i=a(n,r)),s.push(i),c=o+1);return s.push(t.slice(c,o)),s.join("")}}function w(t,e){return function(n){var i,r,a=ca(1900,void 0,1);if(C(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=oa(ca(a.y,0,1))).getUTCDay(),i=r>4||0===r?Wr.ceil(i):Wr(i),i=Or.offset(i,7*(a.V-1)),a.y=i.getUTCFullYear(),a.m=i.getUTCMonth(),a.d=i.getUTCDate()+(a.w+6)%7):(r=(i=sa(ca(a.y,0,1))).getDay(),i=r>4||0===r?$r.ceil(i):$r(i),i=Dr.offset(i,7*(a.V-1)),a.y=i.getFullYear(),a.m=i.getMonth(),a.d=i.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),r="Z"in a?oa(ca(a.y,0,1)).getUTCDay():sa(ca(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(r+5)%7:a.w+7*a.U-(r+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,oa(a)):sa(a)}}function C(t,e,n,i){for(var r,a,s=0,o=e.length,c=n.length;s<o;){if(i>=c)return-1;if(37===(r=e.charCodeAt(s++))){if(r=e.charAt(s++),!(a=v[r in ua?e.charAt(s++):r])||(i=a(t,n,i))<0)return-1}else if(r!=n.charCodeAt(i++))return-1}return i}return _.x=k(n,_),_.X=k(i,_),_.c=k(e,_),x.x=k(n,x),x.X=k(i,x),x.c=k(e,x),{format:function(t){var e=k(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}(t),ha=la.format,la.parse,la.utcFormat,la.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const Is=Math.abs,Fs=Math.atan2,$s=Math.cos,Rs=Math.max,Zs=Math.min,Ps=Math.sin,js=Math.sqrt,Ys=1e-12,zs=Math.PI,Us=zs/2,Ws=2*zs;function qs(t){return t>=1?Us:t<=-1?-Us:Math.asin(t)}const Hs=Math.PI,Vs=2*Hs,Gs=1e-6,Xs=Vs-Gs;function Qs(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Ks{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Qs:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Qs;const n=10**e;return function(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,i){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(t,e,n,i,r,a){this._append`C${+t},${+e},${+n},${+i},${this._x1=+r},${this._y1=+a}`}arcTo(t,e,n,i,r){if(t=+t,e=+e,n=+n,i=+i,(r=+r)<0)throw new Error(`negative radius: ${r}`);let a=this._x1,s=this._y1,o=n-t,c=i-e,l=a-t,h=s-e,u=l*l+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Gs)if(Math.abs(h*o-c*l)>Gs&&r){let d=n-a,p=i-s,f=o*o+c*c,g=d*d+p*p,y=Math.sqrt(f),m=Math.sqrt(u),b=r*Math.tan((Hs-Math.acos((f+u-g)/(2*y*m)))/2),_=b/m,x=b/y;Math.abs(_-1)>Gs&&this._append`L${t+_*l},${e+_*h}`,this._append`A${r},${r},0,0,${+(h*d>l*p)},${this._x1=t+x*o},${this._y1=e+x*c}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,i,r,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(i),o=n*Math.sin(i),c=t+s,l=e+o,h=1^a,u=a?i-r:r-i;null===this._x1?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Gs||Math.abs(this._y1-l)>Gs)&&this._append`L${c},${l}`,n&&(u<0&&(u=u%Vs+Vs),u>Xs?this._append`A${n},${n},0,1,${h},${t-s},${e-o}A${n},${n},0,1,${h},${this._x1=c},${this._y1=l}`:u>Gs&&this._append`A${n},${n},0,${+(u>=Hs)},${h},${this._x1=t+n*Math.cos(r)},${this._y1=e+n*Math.sin(r)}`)}rect(t,e,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Js(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Ks(e)}function to(t){return t.innerRadius}function eo(t){return t.outerRadius}function no(t){return t.startAngle}function io(t){return t.endAngle}function ro(t){return t&&t.padAngle}function ao(t,e,n,i,r,a,s){var o=t-n,c=e-i,l=(s?a:-a)/js(o*o+c*c),h=l*c,u=-l*o,d=t+h,p=e+u,f=n+h,g=i+u,y=(d+f)/2,m=(p+g)/2,b=f-d,_=g-p,x=b*b+_*_,v=r-a,k=d*g-f*p,w=(_<0?-1:1)*js(Rs(0,v*v*x-k*k)),C=(k*_-b*w)/x,T=(-k*b-_*w)/x,E=(k*_+b*w)/x,S=(-k*b+_*w)/x,A=C-y,L=T-m,B=E-y,N=S-m;return A*A+L*L>B*B+N*N&&(C=E,T=S),{cx:C,cy:T,x01:-h,y01:-u,x11:C*(r/v-1),y11:T*(r/v-1)}}function so(){var t=to,e=eo,n=Ms(0),i=null,r=no,a=io,s=ro,o=null,c=Js(l);function l(){var l,h,u,d=+t.apply(this,arguments),p=+e.apply(this,arguments),f=r.apply(this,arguments)-Us,g=a.apply(this,arguments)-Us,y=Is(g-f),m=g>f;if(o||(o=l=c()),p<d&&(h=p,p=d,d=h),p>Ys)if(y>Ws-Ys)o.moveTo(p*$s(f),p*Ps(f)),o.arc(0,0,p,f,g,!m),d>Ys&&(o.moveTo(d*$s(g),d*Ps(g)),o.arc(0,0,d,g,f,m));else{var b,_,x=f,v=g,k=f,w=g,C=y,T=y,E=s.apply(this,arguments)/2,S=E>Ys&&(i?+i.apply(this,arguments):js(d*d+p*p)),A=Zs(Is(p-d)/2,+n.apply(this,arguments)),L=A,B=A;if(S>Ys){var N=qs(S/d*Ps(E)),D=qs(S/p*Ps(E));(C-=2*N)>Ys?(k+=N*=m?1:-1,w-=N):(C=0,k=w=(f+g)/2),(T-=2*D)>Ys?(x+=D*=m?1:-1,v-=D):(T=0,x=v=(f+g)/2)}var O=p*$s(x),M=p*Ps(x),I=d*$s(w),F=d*Ps(w);if(A>Ys){var $,R=p*$s(v),Z=p*Ps(v),P=d*$s(k),j=d*Ps(k);if(y<zs)if($=function(t,e,n,i,r,a,s,o){var c=n-t,l=i-e,h=s-r,u=o-a,d=u*c-h*l;if(!(d*d<Ys))return[t+(d=(h*(e-a)-u*(t-r))/d)*c,e+d*l]}(O,M,P,j,R,Z,I,F)){var Y=O-$[0],z=M-$[1],U=R-$[0],W=Z-$[1],q=1/Ps(((u=(Y*U+z*W)/(js(Y*Y+z*z)*js(U*U+W*W)))>1?0:u<-1?zs:Math.acos(u))/2),H=js($[0]*$[0]+$[1]*$[1]);L=Zs(A,(d-H)/(q-1)),B=Zs(A,(p-H)/(q+1))}else L=B=0}T>Ys?B>Ys?(b=ao(P,j,O,M,p,B,m),_=ao(R,Z,I,F,p,B,m),o.moveTo(b.cx+b.x01,b.cy+b.y01),B<A?o.arc(b.cx,b.cy,B,Fs(b.y01,b.x01),Fs(_.y01,_.x01),!m):(o.arc(b.cx,b.cy,B,Fs(b.y01,b.x01),Fs(b.y11,b.x11),!m),o.arc(0,0,p,Fs(b.cy+b.y11,b.cx+b.x11),Fs(_.cy+_.y11,_.cx+_.x11),!m),o.arc(_.cx,_.cy,B,Fs(_.y11,_.x11),Fs(_.y01,_.x01),!m))):(o.moveTo(O,M),o.arc(0,0,p,x,v,!m)):o.moveTo(O,M),d>Ys&&C>Ys?L>Ys?(b=ao(I,F,R,Z,d,-L,m),_=ao(O,M,P,j,d,-L,m),o.lineTo(b.cx+b.x01,b.cy+b.y01),L<A?o.arc(b.cx,b.cy,L,Fs(b.y01,b.x01),Fs(_.y01,_.x01),!m):(o.arc(b.cx,b.cy,L,Fs(b.y01,b.x01),Fs(b.y11,b.x11),!m),o.arc(0,0,d,Fs(b.cy+b.y11,b.cx+b.x11),Fs(_.cy+_.y11,_.cx+_.x11),m),o.arc(_.cx,_.cy,L,Fs(_.y11,_.x11),Fs(_.y01,_.x01),!m))):o.arc(0,0,d,w,k,m):o.lineTo(I,F)}else o.moveTo(0,0);if(o.closePath(),l)return o=null,l+""||null}return l.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,i=(+r.apply(this,arguments)+ +a.apply(this,arguments))/2-zs/2;return[$s(i)*n,Ps(i)*n]},l.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),l):t},l.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Ms(+t),l):e},l.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Ms(+t),l):n},l.padRadius=function(t){return arguments.length?(i=null==t?null:"function"==typeof t?t:Ms(+t),l):i},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ms(+t),l):r},l.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ms(+t),l):a},l.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:Ms(+t),l):s},l.context=function(t){return arguments.length?(o=null==t?null:t,l):o},l}Ks.prototype;Array.prototype.slice;function oo(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function co(t){this._context=t}function lo(t){return new co(t)}function ho(t){return t[0]}function uo(t){return t[1]}function po(t,e){var n=Ms(!0),i=null,r=lo,a=null,s=Js(o);function o(o){var c,l,h,u=(o=oo(o)).length,d=!1;for(null==i&&(a=r(h=s())),c=0;c<=u;++c)!(c<u&&n(l=o[c],c,o))===d&&((d=!d)?a.lineStart():a.lineEnd()),d&&a.point(+t(l,c,o),+e(l,c,o));if(h)return a=null,h+""||null}return t="function"==typeof t?t:void 0===t?ho:Ms(t),e="function"==typeof e?e:void 0===e?uo:Ms(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:Ms(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:Ms(!!t),o):n},o.curve=function(t){return arguments.length?(r=t,null!=i&&(a=r(i)),o):r},o.context=function(t){return arguments.length?(null==t?i=a=null:a=r(i=t),o):i},o}function fo(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function go(t){return t}function yo(){var t=go,e=fo,n=null,i=Ms(0),r=Ms(Ws),a=Ms(0);function s(s){var o,c,l,h,u,d=(s=oo(s)).length,p=0,f=new Array(d),g=new Array(d),y=+i.apply(this,arguments),m=Math.min(Ws,Math.max(-Ws,r.apply(this,arguments)-y)),b=Math.min(Math.abs(m)/d,a.apply(this,arguments)),_=b*(m<0?-1:1);for(o=0;o<d;++o)(u=g[f[o]=o]=+t(s[o],o,s))>0&&(p+=u);for(null!=e?f.sort((function(t,n){return e(g[t],g[n])})):null!=n&&f.sort((function(t,e){return n(s[t],s[e])})),o=0,l=p?(m-d*_)/p:0;o<d;++o,y=h)c=f[o],h=y+((u=g[c])>0?u*l:0)+_,g[c]={data:s[c],index:o,value:u,startAngle:y,endAngle:h,padAngle:b};return g}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ms(+t),s):i},s.endAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ms(+t),s):r},s.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ms(+t),s):a},s}function mo(){}function bo(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function _o(t){this._context=t}function xo(t){return new _o(t)}function vo(t){this._context=t}function ko(t){return new vo(t)}function wo(t){this._context=t}function Co(t){return new wo(t)}co.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_o.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:bo(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},vo.prototype={areaStart:mo,areaEnd:mo,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},wo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,i):this._context.moveTo(n,i);break;case 3:this._point=4;default:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class To{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Eo(t){return new To(t,!0)}function So(t){return new To(t,!1)}function Ao(t,e){this._basis=new _o(t),this._beta=e}Ao.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var i,r=t[0],a=e[0],s=t[n]-r,o=e[n]-a,c=-1;++c<=n;)i=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(r+i*s),this._beta*e[c]+(1-this._beta)*(a+i*o));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Lo=function t(e){function n(t){return 1===e?new _o(t):new Ao(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Bo(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function No(t,e){this._context=t,this._k=(1-e)/6}No.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Bo(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Bo(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Do=function t(e){function n(t){return new No(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Oo(t,e){this._context=t,this._k=(1-e)/6}Oo.prototype={areaStart:mo,areaEnd:mo,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Bo(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Mo=function t(e){function n(t){return new Oo(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Io(t,e){this._context=t,this._k=(1-e)/6}Io.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Bo(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Fo=function t(e){function n(t){return new Io(t,e)}return n.tension=function(e){return t(+e)},n}(0);function $o(t,e,n){var i=t._x1,r=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Ys){var o=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*o-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,r=(r*o-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Ys){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*l+t._x1*t._l23_2a-e*t._l12_2a)/h,s=(s*l+t._y1*t._l23_2a-n*t._l12_2a)/h}t._context.bezierCurveTo(i,r,a,s,t._x2,t._y2)}function Ro(t,e){this._context=t,this._alpha=e}Ro.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:$o(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Zo=function t(e){function n(t){return e?new Ro(t,e):new No(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Po(t,e){this._context=t,this._alpha=e}Po.prototype={areaStart:mo,areaEnd:mo,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:$o(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const jo=function t(e){function n(t){return e?new Po(t,e):new Oo(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Yo(t,e){this._context=t,this._alpha=e}Yo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:$o(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const zo=function t(e){function n(t){return e?new Yo(t,e):new Io(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Uo(t){this._context=t}function Wo(t){return new Uo(t)}function qo(t){return t<0?-1:1}function Ho(t,e,n){var i=t._x1-t._x0,r=e-t._x1,a=(t._y1-t._y0)/(i||r<0&&-0),s=(n-t._y1)/(r||i<0&&-0),o=(a*r+s*i)/(i+r);return(qo(a)+qo(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function Vo(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Go(t,e,n){var i=t._x0,r=t._y0,a=t._x1,s=t._y1,o=(a-i)/3;t._context.bezierCurveTo(i+o,r+o*e,a-o,s-o*n,a,s)}function Xo(t){this._context=t}function Qo(t){this._context=new Ko(t)}function Ko(t){this._context=t}function Jo(t){return new Xo(t)}function tc(t){return new Qo(t)}function ec(t){this._context=t}function nc(t){var e,n,i=t.length-1,r=new Array(i),a=new Array(i),s=new Array(i);for(r[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<i-1;++e)r[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(r[i-1]=2,a[i-1]=7,s[i-1]=8*t[i-1]+t[i],e=1;e<i;++e)n=r[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(r[i-1]=s[i-1]/a[i-1],e=i-2;e>=0;--e)r[e]=(s[e]-r[e+1])/a[e];for(a[i-1]=(t[i]+r[i-1])/2,e=0;e<i-1;++e)a[e]=2*t[e+1]-r[e+1];return[r,a]}function ic(t){return new ec(t)}function rc(t,e){this._context=t,this._t=e}function ac(t){return new rc(t,.5)}function sc(t){return new rc(t,0)}function oc(t){return new rc(t,1)}function cc(t,e,n){this.k=t,this.x=e,this.y=n}Uo.prototype={areaStart:mo,areaEnd:mo,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Xo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Go(this,this._t0,Vo(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Go(this,Vo(this,n=Ho(this,t,e)),n);break;default:Go(this,this._t0,n=Ho(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(Qo.prototype=Object.create(Xo.prototype)).point=function(t,e){Xo.prototype.point.call(this,e,t)},Ko.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,i,r,a){this._context.bezierCurveTo(e,t,i,n,a,r)}},ec.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var i=nc(t),r=nc(e),a=0,s=1;s<n;++a,++s)this._context.bezierCurveTo(i[0][a],r[0][a],i[1][a],r[1][a],t[s],e[s]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},rc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}},cc.prototype={constructor:cc,scale:function(t){return 1===t?this:new cc(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new cc(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new cc(1,0,0);cc.prototype},3352:(t,e,n)=>{"use strict";function i(t,e,n,i){var a,s,o,c,l,h,u,d,p,f,g,y,m;if(a=e.y-t.y,o=t.x-e.x,l=e.x*t.y-t.x*e.y,p=a*n.x+o*n.y+l,f=a*i.x+o*i.y+l,!(0!==p&&0!==f&&r(p,f)||(s=i.y-n.y,c=n.x-i.x,h=i.x*n.y-n.x*i.y,u=s*t.x+c*t.y+h,d=s*e.x+c*e.y+h,0!==u&&0!==d&&r(u,d)||0==(g=a*c-s*o))))return y=Math.abs(g/2),{x:(m=o*h-c*l)<0?(m-y)/g:(m+y)/g,y:(m=s*l-a*h)<0?(m-y)/g:(m+y)/g}}function r(t,e){return t*e>0}function a(t,e,n){var r=t.x,a=t.y,s=[],o=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){o=Math.min(o,t.x),c=Math.min(c,t.y)}));for(var l=r-t.width/2-o,h=a-t.height/2-c,u=0;u<e.length;u++){var d=e[u],p=e[u<e.length-1?u+1:0],f=i(t,n,{x:l+d.x,y:h+d.y},{x:l+p.x,y:h+p.y});f&&s.push(f)}return s.length?(s.length>1&&s.sort((function(t,e){var i=t.x-n.x,r=t.y-n.y,a=Math.sqrt(i*i+r*r),s=e.x-n.x,o=e.y-n.y,c=Math.sqrt(s*s+o*o);return a<c?-1:a===c?0:1})),s[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}n.d(e,{A:()=>a})},2930:(t,e,n)=>{"use strict";function i(t,e){var n,i,r=t.x,a=t.y,s=e.x-r,o=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=0===o?0:l*s/o,i=l):(s<0&&(c=-c),n=c,i=0===s?0:c*o/s),{x:r+n,y:a+i}}n.d(e,{q:()=>i})},3349:(t,e,n)=>{"use strict";n.d(e,{a:()=>r});var i=n(6225);function r(t,e){var n=t.append("foreignObject").attr("width","100000"),r=n.append("xhtml:div");r.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":r.insert(a);break;case"object":r.insert((function(){return a}));break;default:r.html(a)}i.bg(r,e.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap");var s=r.node().getBoundingClientRect();return n.attr("width",s.width).attr("height",s.height),n}},6225:(t,e,n)=>{"use strict";n.d(e,{$p:()=>h,O1:()=>s,WR:()=>u,bF:()=>a,bg:()=>l});var i=n(7514),r=n(3234);function a(t,e){return!!t.children(e).length}function s(t){return c(t.v)+":"+c(t.w)+":"+c(t.name)}var o=/:/g;function c(t){return t?String(t).replace(o,"\\:"):""}function l(t,e){e&&t.attr("style",e)}function h(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))}function u(t,e){var n=e.graph();if(i.Z(n)){var a=n.transition;if(r.Z(a))return a(t)}return t}},277:(t,e,n)=>{"use strict";n.d(e,{bK:()=>Ge});var i=n(870),r=n(6749),a=n(5123),s=n(2002),o=n(7961),c=n(3836),l=n(4379),h=n(5625);class u{constructor(){var t={};t._next=t._prev=t,this._sentinel=t}dequeue(){var t=this._sentinel,e=t._prev;if(e!==t)return d(e),e}enqueue(t){var e=this._sentinel;t._prev&&t._next&&d(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e}toString(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,p)),n=n._prev;return"["+t.join(", ")+"]"}}function d(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function p(t,e){if("_next"!==t&&"_prev"!==t)return e}var f=s.Z(1);function g(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new h.k,r=0,a=0;i.Z(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),i.Z(t.edges(),(function(t){var i=n.edge(t.v,t.w)||0,s=e(t),o=i+s;n.setEdge(t.v,t.w,o),a=Math.max(a,n.node(t.v).out+=s),r=Math.max(r,n.node(t.w).in+=s)}));var s=l.Z(a+r+3).map((function(){return new u})),o=r+1;return i.Z(n.nodes(),(function(t){m(s,o,n.node(t))})),{graph:n,buckets:s,zeroIdx:o}}(t,e||f),r=function(t,e,n){var i,r=[],a=e[e.length-1],s=e[0];for(;t.nodeCount();){for(;i=s.dequeue();)y(t,e,n,i);for(;i=a.dequeue();)y(t,e,n,i);if(t.nodeCount())for(var o=e.length-2;o>0;--o)if(i=e[o].dequeue()){r=r.concat(y(t,e,n,i,!0));break}}return r}(n.graph,n.buckets,n.zeroIdx);return o.Z(c.Z(r,(function(e){return t.outEdges(e.v,e.w)})))}function y(t,e,n,r,a){var s=a?[]:void 0;return i.Z(t.inEdges(r.v),(function(i){var r=t.edge(i),o=t.node(i.v);a&&s.push({v:i.v,w:i.w}),o.out-=r,m(e,n,o)})),i.Z(t.outEdges(r.v),(function(i){var r=t.edge(i),a=i.w,s=t.node(a);s.in-=r,m(e,n,s)})),t.removeNode(r.v),s}function m(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}function b(t){var e="greedy"===t.graph().acyclicer?g(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},r={};function s(o){a.Z(r,o)||(r[o]=!0,n[o]=!0,i.Z(t.outEdges(o),(function(t){a.Z(n,t.w)?e.push(t):s(t.w)})),delete n[o])}return i.Z(t.nodes(),s),e}(t);i.Z(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.Z("rev"))}))}var _=n(1667),x=n(4752),v=n(9651);const k=function(t,e,n){(void 0!==n&&!(0,v.Z)(t[e],n)||void 0===n&&!(e in t))&&(0,x.Z)(t,e,n)};var w=n(1395),C=n(1050),T=n(2701),E=n(7215),S=n(3658),A=n(9169),L=n(7771),B=n(836),N=n(7008),D=n(3234),O=n(7226),M=n(7514),I=n(8843);const F=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var $=n(1899),R=n(2957);const Z=function(t){return(0,$.Z)(t,(0,R.Z)(t))};const P=function(t,e,n,i,r,a,s){var o=F(t,n),c=F(e,n),l=s.get(c);if(l)k(t,n,l);else{var h=a?a(o,c,n+"",t,e,s):void 0,u=void 0===h;if(u){var d=(0,L.Z)(c),p=!d&&(0,N.Z)(c),f=!d&&!p&&(0,I.Z)(c);h=c,d||p||f?(0,L.Z)(o)?h=o:(0,B.Z)(o)?h=(0,E.Z)(o):p?(u=!1,h=(0,C.Z)(c,!0)):f?(u=!1,h=(0,T.Z)(c,!0)):h=[]:(0,M.Z)(c)||(0,A.Z)(c)?(h=o,(0,A.Z)(o)?h=Z(o):(0,O.Z)(o)&&!(0,D.Z)(o)||(h=(0,S.Z)(c))):u=!1}u&&(s.set(c,h),r(h,c,i,a,s),s.delete(c)),k(t,n,h)}};const j=function t(e,n,i,r,a){e!==n&&(0,w.Z)(n,(function(s,o){if(a||(a=new _.Z),(0,O.Z)(s))P(e,n,o,i,t,r,a);else{var c=r?r(F(e,o),s,o+"",e,n,a):void 0;void 0===c&&(c=s),k(e,o,c)}}),R.Z)};var Y=n(9581),z=n(439);const U=function(t){return(0,Y.Z)((function(e,n){var i=-1,r=n.length,a=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(r--,a):void 0,s&&(0,z.Z)(n[0],n[1],s)&&(a=r<3?void 0:a,r=1),e=Object(e);++i<r;){var o=n[i];o&&t(e,o,i,a)}return e}))}((function(t,e,n){j(t,e,n)}));var W=n(1666),q=n(3688),H=n(2714);const V=function(t,e,n){for(var i=-1,r=t.length;++i<r;){var a=t[i],s=e(a);if(null!=s&&(void 0===o?s==s&&!(0,H.Z)(s):n(s,o)))var o=s,c=a}return c};const G=function(t,e){return t>e};var X=n(9203);const Q=function(t){return t&&t.length?V(t,X.Z,G):void 0};const K=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0};var J=n(2693),tt=n(4765);const et=function(t,e){var n={};return e=(0,tt.Z)(e,3),(0,J.Z)(t,(function(t,i,r){(0,x.Z)(n,i,e(t,i,r))})),n};var nt=n(9360);const it=function(t,e){return t<e};const rt=function(t){return t&&t.length?V(t,X.Z,it):void 0};var at=n(6092);const st=function(){return at.Z.Date.now()};function ot(t,e,n,i){var a;do{a=r.Z(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function ct(t){var e=new h.k({multigraph:t.isMultigraph()}).setGraph(t.graph());return i.Z(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),i.Z(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e}function lt(t,e){var n,i,r=t.x,a=t.y,s=e.x-r,o=e.y-a,c=t.width/2,l=t.height/2;if(!s&&!o)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=l*s/o,i=l):(s<0&&(c=-c),n=c,i=c*o/s),{x:r+n,y:a+i}}function ht(t){var e=c.Z(l.Z(dt(t)+1),(function(){return[]}));return i.Z(t.nodes(),(function(n){var i=t.node(n),r=i.rank;nt.Z(r)||(e[r][i.order]=n)})),e}function ut(t,e,n,i){var r={width:0,height:0};return arguments.length>=4&&(r.rank=n,r.order=i),ot(t,"border",r,e)}function dt(t){return Q(c.Z(t.nodes(),(function(e){var n=t.node(e).rank;if(!nt.Z(n))return n})))}function pt(t,e){var n=st();try{return e()}finally{console.log(t+" time: "+(st()-n)+"ms")}}function ft(t,e){return e()}function gt(t,e,n,i,r,a){var s={width:0,height:0,rank:a,borderType:e},o=r[e][a-1],c=ot(t,"border",s,n);r[e][a]=c,t.setParent(c,i),o&&t.setEdge(o,c,{weight:1})}function yt(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){i.Z(t.nodes(),(function(e){_t(t.node(e))})),i.Z(t.edges(),(function(e){var n=t.edge(e);i.Z(n.points,_t),a.Z(n,"y")&&_t(n)}))}(t),"lr"!==e&&"rl"!==e||(!function(t){i.Z(t.nodes(),(function(e){xt(t.node(e))})),i.Z(t.edges(),(function(e){var n=t.edge(e);i.Z(n.points,xt),a.Z(n,"x")&&xt(n)}))}(t),mt(t))}function mt(t){i.Z(t.nodes(),(function(e){bt(t.node(e))})),i.Z(t.edges(),(function(e){bt(t.edge(e))}))}function bt(t){var e=t.width;t.width=t.height,t.height=e}function _t(t){t.y=-t.y}function xt(t){var e=t.x;t.x=t.y,t.y=e}function vt(t){t.graph().dummyChains=[],i.Z(t.edges(),(function(e){!function(t,e){var n,i,r,a=e.v,s=t.node(a).rank,o=e.w,c=t.node(o).rank,l=e.name,h=t.edge(e),u=h.labelRank;if(c===s+1)return;for(t.removeEdge(e),r=0,++s;s<c;++r,++s)h.points=[],n=ot(t,"edge",i={width:0,height:0,edgeLabel:h,edgeObj:e,rank:s},"_d"),s===u&&(i.width=h.width,i.height=h.height,i.dummy="edge-label",i.labelpos=h.labelpos),t.setEdge(a,n,{weight:h.weight},l),0===r&&t.graph().dummyChains.push(n),a=n;t.setEdge(a,o,{weight:h.weight},l)}(t,e)}))}const kt=function(t,e){return t&&t.length?V(t,(0,tt.Z)(e,2),it):void 0};function wt(t){var e={};i.Z(t.sources(),(function n(i){var r=t.node(i);if(a.Z(e,i))return r.rank;e[i]=!0;var s=rt(c.Z(t.outEdges(i),(function(e){return n(e.w)-t.edge(e).minlen})));return s!==Number.POSITIVE_INFINITY&&null!=s||(s=0),r.rank=s}))}function Ct(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}function Tt(t){var e,n,i=new h.k({directed:!1}),r=t.nodes()[0],a=t.nodeCount();for(i.setNode(r,{});Et(i,t)<a;)e=St(i,t),n=i.hasNode(e.v)?Ct(t,e):-Ct(t,e),At(i,t,n);return i}function Et(t,e){return i.Z(t.nodes(),(function n(r){i.Z(e.nodeEdges(r),(function(i){var a=i.v,s=r===a?i.w:a;t.hasNode(s)||Ct(e,i)||(t.setNode(s,{}),t.setEdge(r,s,{}),n(s))}))})),t.nodeCount()}function St(t,e){return kt(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return Ct(e,n)}))}function At(t,e,n){i.Z(t.nodes(),(function(t){e.node(t).rank+=n}))}var Lt=n(585),Bt=n(7179);const Nt=function(t){return function(e,n,i){var r=Object(e);if(!(0,Lt.Z)(e)){var a=(0,tt.Z)(n,3);e=(0,Bt.Z)(e),n=function(t){return a(r[t],t,r)}}var s=t(e,n,i);return s>-1?r[a?e[s]:s]:void 0}};var Dt=n(1692),Ot=n(4099);const Mt=function(t){var e=(0,Ot.Z)(t),n=e%1;return e==e?n?e-n:e:0};var It=Math.max;const Ft=Nt((function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var r=null==n?0:Mt(n);return r<0&&(r=It(i+r,0)),(0,Dt.Z)(t,(0,tt.Z)(e,3),r)}));var $t=n(3445);s.Z(1);s.Z(1);n(9473),n(3970),n(3589),n(8533);(0,n(4193).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Rt="\\ud800-\\udfff",Zt="["+Rt+"]",Pt="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",jt="\\ud83c[\\udffb-\\udfff]",Yt="[^"+Rt+"]",zt="(?:\\ud83c[\\udde6-\\uddff]){2}",Ut="[\\ud800-\\udbff][\\udc00-\\udfff]",Wt="(?:"+Pt+"|"+jt+")"+"?",qt="[\\ufe0e\\ufe0f]?",Ht=qt+Wt+("(?:\\u200d(?:"+[Yt,zt,Ut].join("|")+")"+qt+Wt+")*"),Vt="(?:"+[Yt+Pt+"?",Pt,zt,Ut,Zt].join("|")+")";RegExp(jt+"(?="+jt+")|"+Vt+Ht,"g");function Gt(){}function Xt(t,e,n){L.Z(e)||(e=[e]);var r=(t.isDirected()?t.successors:t.neighbors).bind(t),a=[],s={};return i.Z(e,(function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);Qt(t,e,"post"===n,s,r,a)})),a}function Qt(t,e,n,r,s,o){a.Z(r,e)||(r[e]=!0,n||o.push(e),i.Z(s(e),(function(e){Qt(t,e,n,r,s,o)})),n&&o.push(e))}Gt.prototype=new Error;n(2544);function Kt(t){t=function(t){var e=(new h.k).setGraph(t.graph());return i.Z(t.nodes(),(function(n){e.setNode(n,t.node(n))})),i.Z(t.edges(),(function(n){var i=e.edge(n.v,n.w)||{weight:0,minlen:1},r=t.edge(n);e.setEdge(n.v,n.w,{weight:i.weight+r.weight,minlen:Math.max(i.minlen,r.minlen)})})),e}(t),wt(t);var e,n=Tt(t);for(ee(n),Jt(n,t);e=ie(n);)ae(n,t,e,re(n,t,e))}function Jt(t,e){var n=function(t,e){return Xt(t,e,"post")}(t,t.nodes());n=n.slice(0,n.length-1),i.Z(n,(function(n){!function(t,e,n){var i=t.node(n),r=i.parent;t.edge(n,r).cutvalue=te(t,e,n)}(t,e,n)}))}function te(t,e,n){var r=t.node(n).parent,a=!0,s=e.edge(n,r),o=0;return s||(a=!1,s=e.edge(r,n)),o=s.weight,i.Z(e.nodeEdges(n),(function(i){var s,c,l=i.v===n,h=l?i.w:i.v;if(h!==r){var u=l===a,d=e.edge(i).weight;if(o+=u?d:-d,s=n,c=h,t.hasEdge(s,c)){var p=t.edge(n,h).cutvalue;o+=u?-p:p}}})),o}function ee(t,e){arguments.length<2&&(e=t.nodes()[0]),ne(t,{},1,e)}function ne(t,e,n,r,s){var o=n,c=t.node(r);return e[r]=!0,i.Z(t.neighbors(r),(function(i){a.Z(e,i)||(n=ne(t,e,n,i,r))})),c.low=o,c.lim=n++,s?c.parent=s:delete c.parent,n}function ie(t){return Ft(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function re(t,e,n){var i=n.v,r=n.w;e.hasEdge(i,r)||(i=n.w,r=n.v);var a=t.node(i),s=t.node(r),o=a,c=!1;a.lim>s.lim&&(o=s,c=!0);var l=$t.Z(e.edges(),(function(e){return c===se(t,t.node(e.v),o)&&c!==se(t,t.node(e.w),o)}));return kt(l,(function(t){return Ct(e,t)}))}function ae(t,e,n,r){var a=n.v,s=n.w;t.removeEdge(a,s),t.setEdge(r.v,r.w,{}),ee(t),Jt(t,e),function(t,e){var n=Ft(t.nodes(),(function(t){return!e.node(t).parent})),r=function(t,e){return Xt(t,e,"pre")}(t,n);r=r.slice(1),i.Z(r,(function(n){var i=t.node(n).parent,r=e.edge(n,i),a=!1;r||(r=e.edge(i,n),a=!0),e.node(n).rank=e.node(i).rank+(a?r.minlen:-r.minlen)}))}(t,e)}function se(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}function oe(t){switch(t.graph().ranker){case"network-simplex":default:le(t);break;case"tight-tree":!function(t){wt(t),Tt(t)}(t);break;case"longest-path":ce(t)}}Kt.initLowLimValues=ee,Kt.initCutValues=Jt,Kt.calcCutValue=te,Kt.leaveEdge=ie,Kt.enterEdge=re,Kt.exchangeEdges=ae;var ce=wt;function le(t){Kt(t)}var he=n(4148),ue=n(2344);function de(t){var e=ot(t,"root",{},"_root"),n=function(t){var e={};function n(r,a){var s=t.children(r);s&&s.length&&i.Z(s,(function(t){n(t,a+1)})),e[r]=a}return i.Z(t.children(),(function(t){n(t,1)})),e}(t),r=Q(he.Z(n))-1,a=2*r+1;t.graph().nestingRoot=e,i.Z(t.edges(),(function(e){t.edge(e).minlen*=a}));var s=function(t){return ue.Z(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;i.Z(t.children(),(function(i){pe(t,e,a,s,r,n,i)})),t.graph().nodeRankFactor=a}function pe(t,e,n,r,a,s,o){var c=t.children(o);if(c.length){var l=ut(t,"_bt"),h=ut(t,"_bb"),u=t.node(o);t.setParent(l,o),u.borderTop=l,t.setParent(h,o),u.borderBottom=h,i.Z(c,(function(i){pe(t,e,n,r,a,s,i);var c=t.node(i),u=c.borderTop?c.borderTop:i,d=c.borderBottom?c.borderBottom:i,p=c.borderTop?r:2*r,f=u!==d?1:a-s[o]+1;t.setEdge(l,u,{weight:p,minlen:f,nestingEdge:!0}),t.setEdge(d,h,{weight:p,minlen:f,nestingEdge:!0})})),t.parent(o)||t.setEdge(e,l,{weight:0,minlen:a+s[o]})}else o!==e&&t.setEdge(e,o,{weight:0,minlen:n})}var fe=n(8451);const ge=function(t){return(0,fe.Z)(t,5)};function ye(t,e,n){var s=function(t){var e;for(;t.hasNode(e=r.Z("_root")););return e}(t),o=new h.k({compound:!0}).setGraph({root:s}).setDefaultNodeLabel((function(e){return t.node(e)}));return i.Z(t.nodes(),(function(r){var c=t.node(r),l=t.parent(r);(c.rank===e||c.minRank<=e&&e<=c.maxRank)&&(o.setNode(r),o.setParent(r,l||s),i.Z(t[n](r),(function(e){var n=e.v===r?e.w:e.v,i=o.edge(n,r),a=nt.Z(i)?0:i.weight;o.setEdge(n,r,{weight:t.edge(e).weight+a})})),a.Z(c,"minRank")&&o.setNode(r,{borderLeft:c.borderLeft[e],borderRight:c.borderRight[e]}))})),o}var me=n(2954);const be=function(t,e,n){for(var i=-1,r=t.length,a=e.length,s={};++i<r;){var o=i<a?e[i]:void 0;n(s,t[i],o)}return s};const _e=function(t,e){return be(t||[],e||[],me.Z)};var xe=n(626),ve=n(4073),ke=n(3317),we=n(1018);const Ce=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t};var Te=n(1162);const Ee=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,r=t==t,a=(0,H.Z)(t),s=void 0!==e,o=null===e,c=e==e,l=(0,H.Z)(e);if(!o&&!l&&!a&&t>e||a&&s&&c&&!o&&!l||i&&s&&c||!n&&c||!r)return 1;if(!i&&!a&&!l&&t<e||l&&n&&r&&!i&&!a||o&&n&&r||!s&&r||!c)return-1}return 0};const Se=function(t,e,n){for(var i=-1,r=t.criteria,a=e.criteria,s=r.length,o=n.length;++i<s;){var c=Ee(r[i],a[i]);if(c)return i>=o?c:c*("desc"==n[i]?-1:1)}return t.index-e.index};const Ae=function(t,e,n){e=e.length?(0,ve.Z)(e,(function(t){return(0,L.Z)(t)?function(e){return(0,ke.Z)(e,1===t.length?t[0]:t)}:t})):[X.Z];var i=-1;e=(0,ve.Z)(e,(0,Te.Z)(tt.Z));var r=(0,we.Z)(t,(function(t,n,r){return{criteria:(0,ve.Z)(e,(function(e){return e(t)})),index:++i,value:t}}));return Ce(r,(function(t,e){return Se(t,e,n)}))};const Le=(0,Y.Z)((function(t,e){if(null==t)return[];var n=e.length;return n>1&&(0,z.Z)(t,e[0],e[1])?e=[]:n>2&&(0,z.Z)(e[0],e[1],e[2])&&(e=[e[0]]),Ae(t,(0,xe.Z)(e,1),[])}));function Be(t,e){for(var n=0,i=1;i<e.length;++i)n+=Ne(t,e[i-1],e[i]);return n}function Ne(t,e,n){for(var r=_e(n,c.Z(n,(function(t,e){return e}))),a=o.Z(c.Z(e,(function(e){return Le(c.Z(t.outEdges(e),(function(e){return{pos:r[e.w],weight:t.edge(e).weight}})),"pos")}))),s=1;s<n.length;)s<<=1;var l=2*s-1;s-=1;var h=c.Z(new Array(l),(function(){return 0})),u=0;return i.Z(a.forEach((function(t){var e=t.pos+s;h[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=h[e+1]),h[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}function De(t,e){var n={};return i.Z(t,(function(t,e){var i=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};nt.Z(t.barycenter)||(i.barycenter=t.barycenter,i.weight=t.weight)})),i.Z(e.edges(),(function(t){var e=n[t.v],i=n[t.w];nt.Z(e)||nt.Z(i)||(i.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){e.merged||(nt.Z(e.barycenter)||nt.Z(t.barycenter)||e.barycenter>=t.barycenter)&&function(t,e){var n=0,i=0;t.weight&&(n+=t.barycenter*t.weight,i+=t.weight);e.weight&&(n+=e.barycenter*e.weight,i+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/i,t.weight=i,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function r(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),i.Z(a.in.reverse(),n(a)),i.Z(a.out,r(a))}return c.Z($t.Z(e,(function(t){return!t.merged})),(function(t){return W.Z(t,["vs","i","barycenter","weight"])}))}($t.Z(n,(function(t){return!t.indegree})))}function Oe(t,e){var n,r=function(t,e){var n={lhs:[],rhs:[]};return i.Z(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n}(t,(function(t){return a.Z(t,"barycenter")})),s=r.lhs,c=Le(r.rhs,(function(t){return-t.i})),l=[],h=0,u=0,d=0;s.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),d=Me(l,c,d),i.Z(s,(function(t){d+=t.vs.length,l.push(t.vs),h+=t.barycenter*t.weight,u+=t.weight,d=Me(l,c,d)}));var p={vs:o.Z(l)};return u&&(p.barycenter=h/u,p.weight=u),p}function Me(t,e,n){for(var i;e.length&&(i=K(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}function Ie(t,e,n,r){var s=t.children(e),l=t.node(e),h=l?l.borderLeft:void 0,u=l?l.borderRight:void 0,d={};h&&(s=$t.Z(s,(function(t){return t!==h&&t!==u})));var p=function(t,e){return c.Z(e,(function(e){var n=t.inEdges(e);if(n.length){var i=ue.Z(n,(function(e,n){var i=t.edge(n),r=t.node(n.v);return{sum:e.sum+i.weight*r.order,weight:e.weight+i.weight}}),{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}}))}(t,s);i.Z(p,(function(e){if(t.children(e.v).length){var i=Ie(t,e.v,n,r);d[e.v]=i,a.Z(i,"barycenter")&&(s=e,o=i,nt.Z(s.barycenter)?(s.barycenter=o.barycenter,s.weight=o.weight):(s.barycenter=(s.barycenter*s.weight+o.barycenter*o.weight)/(s.weight+o.weight),s.weight+=o.weight))}var s,o}));var f=De(p,n);!function(t,e){i.Z(t,(function(t){t.vs=o.Z(t.vs.map((function(t){return e[t]?e[t].vs:t})))}))}(f,d);var g=Oe(f,r);if(h&&(g.vs=o.Z([h,g.vs,u]),t.predecessors(h).length)){var y=t.node(t.predecessors(h)[0]),m=t.node(t.predecessors(u)[0]);a.Z(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+y.order+m.order)/(g.weight+2),g.weight+=2}return g}function Fe(t){var e=dt(t),n=$e(t,l.Z(1,e+1),"inEdges"),r=$e(t,l.Z(e-1,-1,-1),"outEdges"),s=function(t){var e={},n=$t.Z(t.nodes(),(function(e){return!t.children(e).length})),r=Q(c.Z(n,(function(e){return t.node(e).rank}))),s=c.Z(l.Z(r+1),(function(){return[]})),o=Le(n,(function(e){return t.node(e).rank}));return i.Z(o,(function n(r){if(!a.Z(e,r)){e[r]=!0;var o=t.node(r);s[o.rank].push(r),i.Z(t.successors(r),n)}})),s}(t);Ze(t,s);for(var o,h=Number.POSITIVE_INFINITY,u=0,d=0;d<4;++u,++d){Re(u%2?n:r,u%4>=2);var p=Be(t,s=ht(t));p<h&&(d=0,o=ge(s),h=p)}Ze(t,o)}function $e(t,e,n){return c.Z(e,(function(e){return ye(t,e,n)}))}function Re(t,e){var n=new h.k;i.Z(t,(function(t){var r=t.graph().root,a=Ie(t,r,n,e);i.Z(a.vs,(function(e,n){t.node(e).order=n})),function(t,e,n){var r,a={};i.Z(n,(function(n){for(var i,s,o=t.parent(n);o;){if((i=t.parent(o))?(s=a[i],a[i]=o):(s=r,r=o),s&&s!==o)return void e.setEdge(s,o);o=i}}))}(t,n,a.vs)}))}function Ze(t,e){i.Z(e,(function(e){i.Z(e,(function(e,n){t.node(e).order=n}))}))}function Pe(t){var e=function(t){var e={},n=0;function r(a){var s=n;i.Z(t.children(a),r),e[a]={low:s,lim:n++}}return i.Z(t.children(),r),e}(t);i.Z(t.graph().dummyChains,(function(n){for(var i=t.node(n),r=i.edgeObj,a=function(t,e,n,i){var r,a,s=[],o=[],c=Math.min(e[n].low,e[i].low),l=Math.max(e[n].lim,e[i].lim);r=n;do{r=t.parent(r),s.push(r)}while(r&&(e[r].low>c||l>e[r].lim));a=r,r=i;for(;(r=t.parent(r))!==a;)o.push(r);return{path:s.concat(o.reverse()),lca:a}}(t,e,r.v,r.w),s=a.path,o=a.lca,c=0,l=s[c],h=!0;n!==r.w;){if(i=t.node(n),h){for(;(l=s[c])!==o&&t.node(l).maxRank<i.rank;)c++;l===o&&(h=!1)}if(!h){for(;c<s.length-1&&t.node(l=s[c+1]).minRank<=i.rank;)c++;l=s[c]}t.setParent(n,l),n=t.successors(n)[0]}}))}var je=n(8882);const Ye=function(t,e){return null==t?t:(0,w.Z)(t,(0,je.Z)(e),R.Z)};function ze(t,e){var n={};return ue.Z(e,(function(e,r){var a=0,s=0,o=e.length,c=K(r);return i.Z(r,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return Ft(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),u=h?t.node(h).order:o;(h||e===c)&&(i.Z(r.slice(s,l+1),(function(e){i.Z(t.predecessors(e),(function(i){var r=t.node(i),s=r.order;!(s<a||u<s)||r.dummy&&t.node(e).dummy||Ue(n,i,e)}))})),s=l+1,a=u)})),r})),n}function Ue(t,e,n){if(e>n){var i=e;e=n,n=i}var r=t[e];r||(t[e]=r={}),r[n]=!0}function We(t,e,n){if(e>n){var i=e;e=n,n=i}return a.Z(t[e],n)}function qe(t,e,n,r,s){var o={},c=function(t,e,n,r){var s=new h.k,o=t.graph(),c=function(t,e,n){return function(i,r,s){var o,c=i.node(r),l=i.node(s),h=0;if(h+=c.width/2,a.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":o=-c.width/2;break;case"r":o=c.width/2}if(o&&(h+=n?o:-o),o=0,h+=(c.dummy?e:t)/2,h+=(l.dummy?e:t)/2,h+=l.width/2,a.Z(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":o=l.width/2;break;case"r":o=-l.width/2}return o&&(h+=n?o:-o),o=0,h}}(o.nodesep,o.edgesep,r);return i.Z(e,(function(e){var r;i.Z(e,(function(e){var i=n[e];if(s.setNode(i),r){var a=n[r],o=s.edge(a,i);s.setEdge(a,i,Math.max(c(t,e,r),o||0))}r=e}))})),s}(t,e,n,s),l=s?"borderLeft":"borderRight";function u(t,e){for(var n=c.nodes(),i=n.pop(),r={};i;)r[i]?t(i):(r[i]=!0,n.push(i),n=n.concat(e(i))),i=n.pop()}return u((function(t){o[t]=c.inEdges(t).reduce((function(t,e){return Math.max(t,o[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),u((function(e){var n=c.outEdges(e).reduce((function(t,e){return Math.min(t,o[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),i=t.node(e);n!==Number.POSITIVE_INFINITY&&i.borderType!==l&&(o[e]=Math.max(o[e],n))}),c.successors.bind(c)),i.Z(r,(function(t){o[t]=o[n[t]]})),o}function He(t){var e,n=ht(t),r=U(ze(t,n),function(t,e){var n={};function r(e,r,a,s,o){var c;i.Z(l.Z(r,a),(function(r){c=e[r],t.node(c).dummy&&i.Z(t.predecessors(c),(function(e){var i=t.node(e);i.dummy&&(i.order<s||i.order>o)&&Ue(n,e,c)}))}))}return ue.Z(e,(function(e,n){var a,s=-1,o=0;return i.Z(n,(function(i,c){if("border"===t.node(i).dummy){var l=t.predecessors(i);l.length&&(a=t.node(l[0]).order,r(n,o,c,s,a),o=c,s=a)}r(n,o,n.length,a,e.length)})),n})),n}(t,n)),a={};i.Z(["u","d"],(function(s){e="u"===s?n:he.Z(n).reverse(),i.Z(["l","r"],(function(n){"r"===n&&(e=c.Z(e,(function(t){return he.Z(t).reverse()})));var o=("u"===s?t.predecessors:t.successors).bind(t),l=function(t,e,n,r){var a={},s={},o={};return i.Z(e,(function(t){i.Z(t,(function(t,e){a[t]=t,s[t]=t,o[t]=e}))})),i.Z(e,(function(t){var e=-1;i.Z(t,(function(t){var i=r(t);if(i.length){i=Le(i,(function(t){return o[t]}));for(var c=(i.length-1)/2,l=Math.floor(c),h=Math.ceil(c);l<=h;++l){var u=i[l];s[t]===t&&e<o[u]&&!We(n,t,u)&&(s[u]=t,s[t]=a[t]=a[u],e=o[u])}}}))})),{root:a,align:s}}(0,e,r,o),h=qe(t,e,l.root,l.align,"r"===n);"r"===n&&(h=et(h,(function(t){return-t}))),a[s+n]=h}))}));var s=function(t,e){return kt(he.Z(e),(function(e){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return Ye(e,(function(e,r){var a=function(t,e){return t.node(e).width}(t,r)/2;n=Math.max(e+a,n),i=Math.min(e-a,i)})),n-i}))}(t,a);return function(t,e){var n=he.Z(e),r=rt(n),a=Q(n);i.Z(["u","d"],(function(n){i.Z(["l","r"],(function(i){var s,o=n+i,c=t[o];if(c!==e){var l=he.Z(c);(s="l"===i?r-rt(l):a-Q(l))&&(t[o]=et(c,(function(t){return t+s})))}}))}))}(a,s),function(t,e){return et(t.ul,(function(n,i){if(e)return t[e.toLowerCase()][i];var r=Le(c.Z(t,i));return(r[1]+r[2])/2}))}(a,t.graph().align)}function Ve(t){(function(t){var e=ht(t),n=t.graph().ranksep,r=0;i.Z(e,(function(e){var a=Q(c.Z(e,(function(e){return t.node(e).height})));i.Z(e,(function(e){t.node(e).y=r+a/2})),r+=a+n}))})(t=ct(t)),i.Z(He(t),(function(e,n){t.node(n).x=e}))}function Ge(t,e){var n=e&&e.debugTiming?pt:ft;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new h.k({multigraph:!0,compound:!0}),n=sn(t.graph());return e.setGraph(U({},Qe,an(n,Xe),W.Z(n,Ke))),i.Z(t.nodes(),(function(n){var i=sn(t.node(n));e.setNode(n,q.Z(an(i,Je),tn)),e.setParent(n,t.parent(n))})),i.Z(t.edges(),(function(n){var i=sn(t.edge(n));e.setEdge(n,U({},nn,an(i,en),W.Z(i,rn)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,i.Z(t.edges(),(function(n){var i=t.edge(n);i.minlen*=2,"c"!==i.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?i.width+=i.labeloffset:i.height+=i.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){i.Z(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){b(t)})),e(" nestingGraph.run",(function(){de(t)})),e(" rank",(function(){oe(ct(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){i.Z(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var i=t.node(e.v),r={rank:(t.node(e.w).rank-i.rank)/2+i.rank,e:e};ot(t,"edge-proxy",r,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){!function(t){var e=rt(c.Z(t.nodes(),(function(e){return t.node(e).rank}))),n=[];i.Z(t.nodes(),(function(i){var r=t.node(i).rank-e;n[r]||(n[r]=[]),n[r].push(i)}));var r=0,a=t.graph().nodeRankFactor;i.Z(n,(function(e,n){nt.Z(e)&&n%a!=0?--r:r&&i.Z(e,(function(e){t.node(e).rank+=r}))}))}(t)})),e(" nestingGraph.cleanup",(function(){!function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,i.Z(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}(t)})),e(" normalizeRanks",(function(){!function(t){var e=rt(c.Z(t.nodes(),(function(e){return t.node(e).rank})));i.Z(t.nodes(),(function(n){var i=t.node(n);a.Z(i,"rank")&&(i.rank-=e)}))}(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;i.Z(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=Q(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){i.Z(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){vt(t)})),e(" parentDummyChains",(function(){Pe(t)})),e(" addBorderSegments",(function(){!function(t){i.Z(t.children(),(function e(n){var r=t.children(n),s=t.node(n);if(r.length&&i.Z(r,e),a.Z(s,"minRank")){s.borderLeft=[],s.borderRight=[];for(var o=s.minRank,c=s.maxRank+1;o<c;++o)gt(t,"borderLeft","_bl",n,s,o),gt(t,"borderRight","_br",n,s,o)}}))}(t)})),e(" order",(function(){Fe(t)})),e(" insertSelfEdges",(function(){!function(t){var e=ht(t);i.Z(e,(function(e){var n=0;i.Z(e,(function(e,r){var a=t.node(e);a.order=r+n,i.Z(a.selfEdges,(function(e){ot(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:r+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){!function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||mt(t)}(t)})),e(" position",(function(){Ve(t)})),e(" positionSelfEdges",(function(){!function(t){i.Z(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var i=t.node(n.e.v),r=i.x+i.width/2,a=i.y,s=n.x-r,o=i.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:r+2*s/3,y:a-o},{x:r+5*s/6,y:a-o},{x:r+s,y:a},{x:r+5*s/6,y:a+o},{x:r+2*s/3,y:a+o}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){i.Z(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),r=t.node(n.borderBottom),a=t.node(K(n.borderLeft)),s=t.node(K(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(r.y-i.y),n.x=a.x+n.width/2,n.y=i.y+n.height/2}})),i.Z(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){!function(t){i.Z(t.graph().dummyChains,(function(e){var n,i=t.node(e),r=i.edgeLabel;for(t.setEdge(i.edgeObj,r);i.dummy;)n=t.successors(e)[0],t.removeNode(e),r.points.push({x:i.x,y:i.y}),"edge-label"===i.dummy&&(r.x=i.x,r.y=i.y,r.width=i.width,r.height=i.height),e=n,i=t.node(e)}))}(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){i.Z(t.edges(),(function(e){var n=t.edge(e);if(a.Z(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){yt(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,r=Number.POSITIVE_INFINITY,s=0,o=t.graph(),c=o.marginx||0,l=o.marginy||0;function h(t){var i=t.x,a=t.y,o=t.width,c=t.height;e=Math.min(e,i-o/2),n=Math.max(n,i+o/2),r=Math.min(r,a-c/2),s=Math.max(s,a+c/2)}i.Z(t.nodes(),(function(e){h(t.node(e))})),i.Z(t.edges(),(function(e){var n=t.edge(e);a.Z(n,"x")&&h(n)})),e-=c,r-=l,i.Z(t.nodes(),(function(n){var i=t.node(n);i.x-=e,i.y-=r})),i.Z(t.edges(),(function(n){var s=t.edge(n);i.Z(s.points,(function(t){t.x-=e,t.y-=r})),a.Z(s,"x")&&(s.x-=e),a.Z(s,"y")&&(s.y-=r)})),o.width=n-e+c,o.height=s-r+l}(t)})),e(" assignNodeIntersects",(function(){!function(t){i.Z(t.edges(),(function(e){var n,i,r=t.edge(e),a=t.node(e.v),s=t.node(e.w);r.points?(n=r.points[0],i=r.points[r.points.length-1]):(r.points=[],n=s,i=a),r.points.unshift(lt(a,n)),r.points.push(lt(s,i))}))}(t)})),e(" reversePoints",(function(){!function(t){i.Z(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){!function(t){i.Z(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var i=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,i)}}))}(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){i.Z(t.nodes(),(function(n){var i=t.node(n),r=e.node(n);i&&(i.x=r.x,i.y=r.y,e.children(n).length&&(i.width=r.width,i.height=r.height))})),i.Z(t.edges(),(function(n){var i=t.edge(n),r=e.edge(n);i.points=r.points,a.Z(r,"x")&&(i.x=r.x,i.y=r.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))}var Xe=["nodesep","edgesep","ranksep","marginx","marginy"],Qe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},Ke=["acyclicer","ranker","rankdir","align"],Je=["width","height"],tn={width:0,height:0},en=["minlen","weight","width","height","labeloffset"],nn={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},rn=["labelpos"];function an(t,e){return et(W.Z(t,e),Number)}function sn(t){var e={};return i.Z(t,(function(t,n){e[n.toLowerCase()]=t})),e}},2544:(t,e,n)=>{"use strict";n.d(e,{k:()=>M});var i=n(5123),r=n(2002),a=n(3234),s=n(7179),o=n(3445),c=n(9697),l=n(870),h=n(9360),u=n(626),d=n(9581),p=n(3001),f=n(1692);const g=function(t){return t!=t};const y=function(t,e,n){for(var i=n-1,r=t.length;++i<r;)if(t[i]===e)return i;return-1};const m=function(t,e,n){return e==e?y(t,e,n):(0,f.Z)(t,g,n)};const b=function(t,e){return!!(null==t?0:t.length)&&m(t,e,0)>-1};const _=function(t,e,n){for(var i=-1,r=null==t?0:t.length;++i<r;)if(n(e,t[i]))return!0;return!1};var x=n(9548),v=n(3203);const k=function(){};var w=n(6545),C=v.Z&&1/(0,w.Z)(new v.Z([,-0]))[1]==1/0?function(t){return new v.Z(t)}:k;const T=C;const E=function(t,e,n){var i=-1,r=b,a=t.length,s=!0,o=[],c=o;if(n)s=!1,r=_;else if(a>=200){var l=e?null:T(t);if(l)return(0,w.Z)(l);s=!1,r=x.Z,c=new p.Z}else c=e?[]:o;t:for(;++i<a;){var h=t[i],u=e?e(h):h;if(h=n||0!==h?h:0,s&&u==u){for(var d=c.length;d--;)if(c[d]===u)continue t;e&&c.push(u),o.push(h)}else r(c,u,n)||(c!==o&&c.push(u),o.push(h))}return o};var S=n(836);const A=(0,d.Z)((function(t){return E((0,u.Z)(t,1,S.Z,!0))}));var L=n(4148),B=n(2344),N="\0",D="\0",O="\x01";class M{constructor(t={}){this._isDirected=!i.Z(t,"directed")||t.directed,this._isMultigraph=!!i.Z(t,"multigraph")&&t.multigraph,this._isCompound=!!i.Z(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.Z(void 0),this._defaultEdgeLabelFn=r.Z(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[D]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return a.Z(t)||(t=r.Z(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return s.Z(this._nodes)}sources(){var t=this;return o.Z(this.nodes(),(function(e){return c.Z(t._in[e])}))}sinks(){var t=this;return o.Z(this.nodes(),(function(e){return c.Z(t._out[e])}))}setNodes(t,e){var n=arguments,i=this;return l.Z(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this}setNode(t,e){return i.Z(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=D,this._children[t]={},this._children[D][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return i.Z(this._nodes,t)}removeNode(t){var e=this;if(i.Z(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],l.Z(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),l.Z(s.Z(this._in[t]),n),delete this._in[t],delete this._preds[t],l.Z(s.Z(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(h.Z(e))e=D;else{for(var n=e+="";!h.Z(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var e=this._parent[t];if(e!==D)return e}}children(t){if(h.Z(t)&&(t=D),this._isCompound){var e=this._children[t];if(e)return s.Z(e)}else{if(t===D)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.Z(e)}successors(t){var e=this._sucs[t];if(e)return s.Z(e)}neighbors(t){var e=this.predecessors(t);if(e)return A(e,this.successors(t))}isLeaf(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length}filterNodes(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;l.Z(this._nodes,(function(n,i){t(i)&&e.setNode(i,n)})),l.Z(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};function r(t){var a=n.parent(t);return void 0===a||e.hasNode(a)?(i[t]=a,a):a in i?i[a]:r(a)}return this._isCompound&&l.Z(e.nodes(),(function(t){e.setParent(t,r(t))})),e}setDefaultEdgeLabel(t){return a.Z(t)||(t=r.Z(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return L.Z(this._edgeObjs)}setPath(t,e){var n=this,i=arguments;return B.Z(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this}setEdge(){var t,e,n,r,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(r=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(r=arguments[2],a=!0)),t=""+t,e=""+e,h.Z(n)||(n=""+n);var o=$(this._isDirected,t,e,n);if(i.Z(this._edgeLabels,o))return a&&(this._edgeLabels[o]=r),this;if(!h.Z(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[o]=a?r:this._defaultEdgeLabelFn(t,e,n);var c=function(t,e,n,i){var r=""+e,a=""+n;if(!t&&r>a){var s=r;r=a,a=s}var o={v:r,w:a};i&&(o.name=i);return o}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[o]=c,I(this._preds[e],t),I(this._sucs[t],e),this._in[e][o]=c,this._out[t][o]=c,this._edgeCount++,this}edge(t,e,n){var i=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n);return this._edgeLabels[i]}hasEdge(t,e,n){var r=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n);return i.Z(this._edgeLabels,r)}removeEdge(t,e,n){var i=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n),r=this._edgeObjs[i];return r&&(t=r.v,e=r.w,delete this._edgeLabels[i],delete this._edgeObjs[i],F(this._preds[e],t),F(this._sucs[t],e),delete this._in[e][i],delete this._out[t][i],this._edgeCount--),this}inEdges(t,e){var n=this._in[t];if(n){var i=L.Z(n);return e?o.Z(i,(function(t){return t.v===e})):i}}outEdges(t,e){var n=this._out[t];if(n){var i=L.Z(n);return e?o.Z(i,(function(t){return t.w===e})):i}}nodeEdges(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}}function I(t,e){t[e]?t[e]++:t[e]=1}function F(t,e){--t[e]||delete t[e]}function $(t,e,n,i){var r=""+e,a=""+n;if(!t&&r>a){var s=r;r=a,a=s}return r+O+a+O+(h.Z(i)?N:i)}function R(t,e){return $(t,e.v,e.w,e.name)}M.prototype._nodeCount=0,M.prototype._edgeCount=0},5625:(t,e,n)=>{"use strict";n.d(e,{k:()=>i.k});var i=n(2544)},9354:(t,e,n)=>{"use strict";n.d(e,{c:()=>o});var i=n(9360),r=n(8451);const a=function(t){return(0,r.Z)(t,4)};var s=n(3836);n(2544);function o(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:c(t),edges:l(t)};return i.Z(t.graph())||(e.value=a(t.graph())),e}function c(t){return s.Z(t.nodes(),(function(e){var n=t.node(e),r=t.parent(e),a={v:e};return i.Z(n)||(a.value=n),i.Z(r)||(a.parent=r),a}))}function l(t){return s.Z(t.edges(),(function(e){var n=t.edge(e),r={v:e.v,w:e.w};return i.Z(e.name)||(r.name=e.name),i.Z(n)||(r.value=n),r}))}},1518:(t,e,n)=>{"use strict";n.d(e,{sY:()=>T});var i=n(9373),r=n(5123),a=n(3688),s=n(870),o=n(277),c=n(6225),l={normal:function(t,e,n,i){var r=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(r,n[i+"Style"]),n[i+"Class"]&&r.attr("class",n[i+"Class"])},vee:function(t,e,n,i){var r=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(r,n[i+"Style"]),n[i+"Class"]&&r.attr("class",n[i+"Class"])},undirected:function(t,e,n,i){var r=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(r,n[i+"Style"]),n[i+"Class"]&&r.attr("class",n[i+"Class"])}};var h=n(3349);function u(t,e,n){var i=e.label,r=t.append("g");"svg"===e.labelType?function(t,e){var n=t;n.node().appendChild(e.label),c.bg(n,e.labelStyle)}(r,e):"string"!=typeof i||"html"===e.labelType?(0,h.a)(r,e):function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",i=!1,r=0;r<t.length;++r)e=t[r],i?(n+="n"===e?"\n":e,i=!1):"\\"===e?i=!0:n+=e;return n}(e.label).split("\n"),r=0;r<i.length;r++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(i[r]);c.bg(n,e.labelStyle)}(r,e);var a,s=r.node().getBBox();switch(n){case"top":a=-e.height/2;break;case"bottom":a=e.height/2-s.height;break;default:a=-s.height/2}return r.attr("transform","translate("+-s.width/2+","+a+")"),r}var d=function(t,e){var n=e.nodes().filter((function(t){return c.bF(e,t)})),r=t.selectAll("g.cluster").data(n,(function(t){return t}));c.WR(r.exit(),e).style("opacity",0).remove();var a=r.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0).each((function(t){var n=e.node(t),r=i.Ys(this);i.Ys(this).append("rect"),u(r.append("g").attr("class","label"),n,n.clusterLabelPos)}));return r=r.merge(a),(r=c.WR(r,e).style("opacity",1)).selectAll("rect").each((function(t){var n=e.node(t),r=i.Ys(this);c.bg(r,n.style)})),r};let p=function(t,e){var n,a=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return c.O1(t)})).classed("update",!0);return a.exit().remove(),a.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(a=t.selectAll("g.edgeLabel")).each((function(t){var n=i.Ys(this);n.select(".label").remove();var a=e.edge(t),s=u(n,e.edge(t),0).classed("label",!0),o=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),r.Z(a,"width")||(a.width=o.width),r.Z(a,"height")||(a.height=o.height)})),n=a.exit?a.exit():a.selectAll(null),c.WR(n,e).style("opacity",0).remove(),a};var f=n(6749),g=n(4379);function y(t,e){return t.intersect(e)}var m=function(t,e,n){var r=t.selectAll("g.edgePath").data(e.edges(),(function(t){return c.O1(t)})).classed("update",!0),a=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),i=e.node(t.v).elem;return b(n,g.Z(n.points.length).map((function(){return e=(t=i).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(r,e);!function(t,e){var n=t.exit();c.WR(n,e).style("opacity",0).remove()}(r,e);var s=void 0!==r.merge?r.merge(a):r;return c.WR(s,e).style("opacity",1),s.each((function(t){var n=i.Ys(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),c.$p(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),s.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=f.Z("arrowhead");var r=i.Ys(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");c.WR(r,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),i=t.node(e.v),r=t.node(e.w),a=n.points.slice(1,n.points.length-1);return a.unshift(y(i,a[0])),a.push(y(r,a[a.length-1])),b(n,a)}(e,t)})),c.bg(r,n.style)})),s.selectAll("defs *").remove(),s.selectAll("defs").each((function(t){var r=e.edge(t);(0,n[r.arrowhead])(i.Ys(this),r.arrowheadId,r,"arrowhead")})),s};function b(t,e){var n=(i.jvg||i.YPS.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}var _=n(1666),x=function(t,e,n){var a,s=e.nodes().filter((function(t){return!c.bF(e,t)})),o=t.selectAll("g.node").data(s,(function(t){return t})).classed("update",!0);return o.exit().remove(),o.enter().append("g").attr("class","node").style("opacity",0),(o=t.selectAll("g.node")).each((function(t){var a=e.node(t),s=i.Ys(this);c.$p(s,a.class,(s.classed("update")?"update ":"")+"node"),s.select("g.label").remove();var o=s.append("g").attr("class","label"),l=u(o,a),h=n[a.shape],d=_.Z(l.node().getBBox(),"width","height");a.elem=this,a.id&&s.attr("id",a.id),a.labelId&&o.attr("id",a.labelId),r.Z(a,"width")&&(d.width=a.width),r.Z(a,"height")&&(d.height=a.height),d.width+=a.paddingLeft+a.paddingRight,d.height+=a.paddingTop+a.paddingBottom,o.attr("transform","translate("+(a.paddingLeft-a.paddingRight)/2+","+(a.paddingTop-a.paddingBottom)/2+")");var p=i.Ys(this);p.select(".label-container").remove();var f=h(p,d,a).classed("label-container",!0);c.bg(f,a.style);var g=f.node().getBBox();a.width=g.width,a.height=g.height})),a=o.exit?o.exit():o.selectAll(null),c.WR(a,e).style("opacity",0).remove(),o};function v(t,e,n,i){var r=t.x,a=t.y,s=r-i.x,o=a-i.y,c=Math.sqrt(e*e*o*o+n*n*s*s),l=Math.abs(e*n*s/c);i.x<r&&(l=-l);var h=Math.abs(e*n*o/c);return i.y<a&&(h=-h),{x:r+l,y:a+h}}var k=n(3352),w=n(2930),C={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return(0,w.q)(n,t)},i},ellipse:function(t,e,n){var i=e.width/2,r=e.height/2,a=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",i).attr("ry",r);return n.intersect=function(t){return v(n,i,r,t)},a},circle:function(t,e,n){var i=Math.max(e.width,e.height)/2,r=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",i);return n.intersect=function(t){return function(t,e,n){return v(t,e,e,n)}(n,i,t)},r},diamond:function(t,e,n){var i=e.width*Math.SQRT2/2,r=e.height*Math.SQRT2/2,a=[{x:0,y:-r},{x:-i,y:0},{x:0,y:r},{x:i,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return(0,k.A)(n,a,t)},s}};function T(){var t=function(t,e){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.Z(n,"label")||t.children(e).length||(n.label=e),r.Z(n,"paddingX")&&a.Z(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.Z(n,"paddingY")&&a.Z(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.Z(n,"padding")&&a.Z(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),a.Z(n,E),s.Z(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.Z(n,"width")&&(n._prevWidth=n.width),r.Z(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.Z(n,"label")||(n.label=""),a.Z(n,S)}))}(e);var n=A(t,"output"),h=A(n,"clusters"),u=A(n,"edgePaths"),f=p(A(n,"edgeLabels"),e),g=x(A(n,"nodes"),e,C);(0,o.bK)(e),function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!i.Ys(this).classed("update")})).attr("transform",n),c.WR(t,e).style("opacity",1).attr("transform",n)}(g,e),function(t,e){function n(t){var n=e.edge(t);return r.Z(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!i.Ys(this).classed("update")})).attr("transform",n),c.WR(t,e).style("opacity",1).attr("transform",n)}(f,e),m(u,e,l),function(t,e){var n=t.filter((function(){return!i.Ys(this).classed("update")}));function r(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",r),c.WR(t,e).style("opacity",1).attr("transform",r),c.WR(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}(d(h,e),e),function(t){s.Z(t.nodes(),(function(e){var n=t.node(e);r.Z(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.Z(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(e)};return t.createNodes=function(e){return arguments.length?(function(t){x=t}(e),t):x},t.createClusters=function(e){return arguments.length?(function(t){d=t}(e),t):d},t.createEdgeLabels=function(e){return arguments.length?(function(t){p=t}(e),t):p},t.createEdgePaths=function(e){return arguments.length?(function(t){m=t}(e),t):m},t.shapes=function(e){return arguments.length?(function(t){C=t}(e),t):C},t.arrows=function(e){return arguments.length?(function(t){l=t}(e),t):l},t}var E={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},S={arrowhead:"normal",curve:i.c_6};function A(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}n(5625)},1883:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(1691),r=n(2142);const a=class{constructor(){this.type=r.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=r.w.ALL}is(t){return this.type===t}};const s=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=r.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:n,l:r}=t;void 0===e&&(t.h=i.Z.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=i.Z.channel.rgb2hsl(t,"s")),void 0===r&&(t.l=i.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:n,b:r}=t;void 0===e&&(t.r=i.Z.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=i.Z.channel.hsl2rgb(t,"g")),void 0===r&&(t.b=i.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(r.w.HSL)||void 0===e?(this._ensureHSL(),i.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(r.w.HSL)||void 0===e?(this._ensureHSL(),i.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(r.w.HSL)||void 0===e?(this._ensureHSL(),i.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(r.w.RGB)||void 0===e?(this._ensureRGB(),i.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(r.w.RGB)||void 0===e?(this._ensureRGB(),i.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(r.w.RGB)||void 0===e?(this._ensureRGB(),i.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(r.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(r.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(r.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(r.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(r.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(r.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},1610:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var i=n(1883),r=n(2142);const a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(a.re);if(!e)return;const n=e[1],r=parseInt(n,16),s=n.length,o=s%4==0,c=s>4,l=c?1:17,h=c?8:4,u=o?0:-1,d=c?255:15;return i.Z.set({r:(r>>h*(u+3)&d)*l,g:(r>>h*(u+2)&d)*l,b:(r>>h*(u+1)&d)*l,a:o?(r&d)*l/255:1},t)},stringify:t=>{const{r:e,g:n,b:i,a:a}=t;return a<1?`#${r.Q[Math.round(e)]}${r.Q[Math.round(n)]}${r.Q[Math.round(i)]}${r.Q[Math.round(255*a)]}`:`#${r.Q[Math.round(e)]}${r.Q[Math.round(n)]}${r.Q[Math.round(i)]}`}},s=a;var o=n(1691);const c={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(c.hueRe);if(e){const[,t,n]=e;switch(n){case"grad":return o.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return o.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return o.Z.channel.clamp.h(360*parseFloat(t))}}return o.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const n=t.match(c.re);if(!n)return;const[,r,a,s,l,h]=n;return i.Z.set({h:c._hue2deg(r),s:o.Z.channel.clamp.s(parseFloat(a)),l:o.Z.channel.clamp.l(parseFloat(s)),a:l?o.Z.channel.clamp.a(h?parseFloat(l)/100:parseFloat(l)):1},t)},stringify:t=>{const{h:e,s:n,l:i,a:r}=t;return r<1?`hsla(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(i)}%, ${r})`:`hsl(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(i)}%)`}},l=c,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return s.parse(e)},stringify:t=>{const e=s.stringify(t);for(const n in h.colors)if(h.colors[n]===e)return n}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const n=t.match(d.re);if(!n)return;const[,r,a,s,c,l,h,u,p]=n;return i.Z.set({r:o.Z.channel.clamp.r(a?2.55*parseFloat(r):parseFloat(r)),g:o.Z.channel.clamp.g(c?2.55*parseFloat(s):parseFloat(s)),b:o.Z.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:u?o.Z.channel.clamp.a(p?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:n,b:i,a:r}=t;return r<1?`rgba(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(i)}, ${o.Z.lang.round(r)})`:`rgb(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(i)})`}},p=d,f={format:{keyword:h,hex:s,rgb:d,rgba:d,hsl:c,hsla:c},parse:t=>{if("string"!=typeof t)return t;const e=s.parse(t)||p.parse(t)||l.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(r.w.HSL)||void 0===t.data.r?l.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?p.stringify(t):s.stringify(t)},g=f},2142:(t,e,n)=>{"use strict";n.d(e,{Q:()=>r,w:()=>a});var i=n(1691);const r={};for(let s=0;s<=255;s++)r[s]=i.Z.unit.dec2hex(s);const a={ALL:0,RGB:1,HSL:2}},1506:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(1691),r=n(1610);const a=(t,e,n)=>{const a=r.Z.parse(t),s=a[e],o=i.Z.channel.clamp[e](s+n);return s!==o&&(a[e]=o),r.Z.stringify(a)}},7201:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(1506);const r=(t,e)=>(0,i.Z)(t,"l",-e)},5920:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(1506);const r=(t,e)=>(0,i.Z)(t,"l",e)},1691:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const i={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),hsl2rgb:({h:t,s:e,l:n},r)=>{if(!e)return 2.55*n;t/=360,e/=100;const a=(n/=100)<.5?n*(1+e):n+e-n*e,s=2*n-a;switch(r){case"r":return 255*i.hue2rgb(s,a,t+1/3);case"g":return 255*i.hue2rgb(s,a,t);case"b":return 255*i.hue2rgb(s,a,t-1/3)}},rgb2hsl:({r:t,g:e,b:n},i)=>{t/=255,e/=255,n/=255;const r=Math.max(t,e,n),a=Math.min(t,e,n),s=(r+a)/2;if("l"===i)return 100*s;if(r===a)return 0;const o=r-a;if("s"===i)return 100*(s>.5?o/(2-r-a):o/(r+a));switch(r){case t:return 60*((e-n)/o+(e<n?6:0));case e:return 60*((n-t)/o+2);case n:return 60*((t-e)/o+4);default:return-1}}},r={channel:i,lang:{clamp:(t,e,n)=>e>n?Math.min(e,Math.max(n,t)):Math.min(n,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},7308:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});const i=function(){this.__data__=[],this.size=0};var r=n(9651);const a=function(t,e){for(var n=t.length;n--;)if((0,r.Z)(t[n][0],e))return n;return-1};var s=Array.prototype.splice;const o=function(t){var e=this.__data__,n=a(e,t);return!(n<0)&&(n==e.length-1?e.pop():s.call(e,n,1),--this.size,!0)};const c=function(t){var e=this.__data__,n=a(e,t);return n<0?void 0:e[n][1]};const l=function(t){return a(this.__data__,t)>-1};const h=function(t,e){var n=this.__data__,i=a(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this};function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}u.prototype.clear=i,u.prototype.delete=o,u.prototype.get=c,u.prototype.has=l,u.prototype.set=h;const d=u},6183:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(2508),r=n(6092);const a=(0,i.Z)(r.Z,"Map")},7834:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});const i=(0,n(2508).Z)(Object,"create");const r=function(){this.__data__=i?i(null):{},this.size=0};const a=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var s=Object.prototype.hasOwnProperty;const o=function(t){var e=this.__data__;if(i){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return s.call(e,t)?e[t]:void 0};var c=Object.prototype.hasOwnProperty;const l=function(t){var e=this.__data__;return i?void 0!==e[t]:c.call(e,t)};const h=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}u.prototype.clear=r,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=l,u.prototype.set=h;const d=u;var p=n(7308),f=n(6183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(f.Z||p.Z),string:new d}};const y=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const m=function(t,e){var n=t.__data__;return y(e)?n["string"==typeof e?"string":"hash"]:n.map};const b=function(t){var e=m(this,t).delete(t);return this.size-=e?1:0,e};const _=function(t){return m(this,t).get(t)};const x=function(t){return m(this,t).has(t)};const v=function(t,e){var n=m(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this};function k(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}k.prototype.clear=g,k.prototype.delete=b,k.prototype.get=_,k.prototype.has=x,k.prototype.set=v;const w=k},3203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(2508),r=n(6092);const a=(0,i.Z)(r.Z,"Set")},3001:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(7834);const r=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const a=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new i.Z;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=r,s.prototype.has=a;const o=s},1667:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var i=n(7308);const r=function(){this.__data__=new i.Z,this.size=0};const a=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n};const s=function(t){return this.__data__.get(t)};const o=function(t){return this.__data__.has(t)};var c=n(6183),l=n(7834);const h=function(t,e){var n=this.__data__;if(n instanceof i.Z){var r=n.__data__;if(!c.Z||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new l.Z(r)}return n.set(t,e),this.size=n.size,this};function u(t){var e=this.__data__=new i.Z(t);this.size=e.size}u.prototype.clear=r,u.prototype.delete=a,u.prototype.get=s,u.prototype.has=o,u.prototype.set=h;const d=u},7685:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n(6092).Z.Symbol},7623:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n(6092).Z.Uint8Array},6579:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i&&!1!==e(t[n],n,t););return t}},8774:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){for(var n=-1,i=null==t?0:t.length,r=0,a=[];++n<i;){var s=t[n];e(s,n,t)&&(a[r++]=s)}return a}},7668:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});const i=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i};var r=n(9169),a=n(7771),s=n(7008),o=n(6009),c=n(8843),l=Object.prototype.hasOwnProperty;const h=function(t,e){var n=(0,a.Z)(t),h=!n&&(0,r.Z)(t),u=!n&&!h&&(0,s.Z)(t),d=!n&&!h&&!u&&(0,c.Z)(t),p=n||h||u||d,f=p?i(t.length,String):[],g=f.length;for(var y in t)!e&&!l.call(t,y)||p&&("length"==y||u&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||(0,o.Z)(y,g))||f.push(y);return f}},4073:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){for(var n=-1,i=null==t?0:t.length,r=Array(i);++n<i;)r[n]=e(t[n],n,t);return r}},8694:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){for(var n=-1,i=e.length,r=t.length;++n<i;)t[r+n]=e[n];return t}},2954:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(4752),r=n(9651),a=Object.prototype.hasOwnProperty;const s=function(t,e,n){var s=t[e];a.call(t,e)&&(0,r.Z)(s,n)&&(void 0!==n||e in t)||(0,i.Z)(t,e,n)}},4752:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(7904);const r=function(t,e,n){"__proto__"==e&&i.Z?(0,i.Z)(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},8451:(t,e,n)=>{"use strict";n.d(e,{Z:()=>J});var i=n(1667),r=n(6579),a=n(2954),s=n(1899),o=n(7179);const c=function(t,e){return t&&(0,s.Z)(e,(0,o.Z)(e),t)};var l=n(2957);const h=function(t,e){return t&&(0,s.Z)(e,(0,l.Z)(e),t)};var u=n(1050),d=n(7215),p=n(5695);const f=function(t,e){return(0,s.Z)(t,(0,p.Z)(t),e)};var g=n(8694),y=n(2513),m=n(532);const b=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,g.Z)(e,(0,p.Z)(t)),t=(0,y.Z)(t);return e}:m.Z;const _=function(t,e){return(0,s.Z)(t,b(t),e)};var x=n(1808),v=n(3327);const k=function(t){return(0,v.Z)(t,l.Z,b)};var w=n(3970),C=Object.prototype.hasOwnProperty;const T=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&C.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var E=n(1884);const S=function(t,e){var n=e?(0,E.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var A=/\w*$/;const L=function(t){var e=new t.constructor(t.source,A.exec(t));return e.lastIndex=t.lastIndex,e};var B=n(7685),N=B.Z?B.Z.prototype:void 0,D=N?N.valueOf:void 0;const O=function(t){return D?Object(D.call(t)):{}};var M=n(2701);const I=function(t,e,n){var i=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,E.Z)(t);case"[object Boolean]":case"[object Date]":return new i(+t);case"[object DataView]":return S(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,M.Z)(t,n);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(t);case"[object RegExp]":return L(t);case"[object Symbol]":return O(t)}};var F=n(3658),$=n(7771),R=n(7008),Z=n(8533);const P=function(t){return(0,Z.Z)(t)&&"[object Map]"==(0,w.Z)(t)};var j=n(1162),Y=n(8351),z=Y.Z&&Y.Z.isMap;const U=z?(0,j.Z)(z):P;var W=n(7226);const q=function(t){return(0,Z.Z)(t)&&"[object Set]"==(0,w.Z)(t)};var H=Y.Z&&Y.Z.isSet;const V=H?(0,j.Z)(H):q;var G="[object Arguments]",X="[object Function]",Q="[object Object]",K={};K[G]=K["[object Array]"]=K["[object ArrayBuffer]"]=K["[object DataView]"]=K["[object Boolean]"]=K["[object Date]"]=K["[object Float32Array]"]=K["[object Float64Array]"]=K["[object Int8Array]"]=K["[object Int16Array]"]=K["[object Int32Array]"]=K["[object Map]"]=K["[object Number]"]=K[Q]=K["[object RegExp]"]=K["[object Set]"]=K["[object String]"]=K["[object Symbol]"]=K["[object Uint8Array]"]=K["[object Uint8ClampedArray]"]=K["[object Uint16Array]"]=K["[object Uint32Array]"]=!0,K["[object Error]"]=K[X]=K["[object WeakMap]"]=!1;const J=function t(e,n,s,p,g,y){var m,b=1&n,v=2&n,C=4&n;if(s&&(m=g?s(e,p,g,y):s(e)),void 0!==m)return m;if(!(0,W.Z)(e))return e;var E=(0,$.Z)(e);if(E){if(m=T(e),!b)return(0,d.Z)(e,m)}else{var S=(0,w.Z)(e),A=S==X||"[object GeneratorFunction]"==S;if((0,R.Z)(e))return(0,u.Z)(e,b);if(S==Q||S==G||A&&!g){if(m=v||A?{}:(0,F.Z)(e),!b)return v?_(e,h(m,e)):f(e,c(m,e))}else{if(!K[S])return g?e:{};m=I(e,S,b)}}y||(y=new i.Z);var L=y.get(e);if(L)return L;y.set(e,m),V(e)?e.forEach((function(i){m.add(t(i,n,s,i,e,y))})):U(e)&&e.forEach((function(i,r){m.set(r,t(i,n,s,r,e,y))}));var B=C?v?k:x.Z:v?l.Z:o.Z,N=E?void 0:B(e);return(0,r.Z)(N||e,(function(i,r){N&&(i=e[r=i]),(0,a.Z)(m,r,t(i,n,s,r,e,y))})),m}},9811:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(2693),r=n(585);const a=function(t,e){return function(n,i){if(null==n)return n;if(!(0,r.Z)(n))return t(n,i);for(var a=n.length,s=e?a:-1,o=Object(n);(e?s--:++s<a)&&!1!==i(o[s],s,o););return n}}(i.Z)},1692:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e,n,i){for(var r=t.length,a=n+(i?1:-1);i?a--:++a<r;)if(e(t[a],a,t))return a;return-1}},626:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var i=n(8694),r=n(7685),a=n(9169),s=n(7771),o=r.Z?r.Z.isConcatSpreadable:void 0;const c=function(t){return(0,s.Z)(t)||(0,a.Z)(t)||!!(o&&t&&t[o])};const l=function t(e,n,r,a,s){var o=-1,l=e.length;for(r||(r=c),s||(s=[]);++o<l;){var h=e[o];n>0&&r(h)?n>1?t(h,n-1,r,a,s):(0,i.Z)(s,h):a||(s[s.length]=h)}return s}},1395:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return function(e,n,i){for(var r=-1,a=Object(e),s=i(e),o=s.length;o--;){var c=s[t?o:++r];if(!1===n(a[c],c,a))break}return e}}()},2693:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(1395),r=n(7179);const a=function(t,e){return t&&(0,i.Z)(t,e,r.Z)}},3317:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(2823),r=n(2281);const a=function(t,e){for(var n=0,a=(e=(0,i.Z)(e,t)).length;null!=t&&n<a;)t=t[(0,r.Z)(e[n++])];return n&&n==a?t:void 0}},3327:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(8694),r=n(7771);const a=function(t,e,n){var a=e(t);return(0,r.Z)(t)?a:(0,i.Z)(a,n(t))}},3589:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var i=n(7685),r=Object.prototype,a=r.hasOwnProperty,s=r.toString,o=i.Z?i.Z.toStringTag:void 0;const c=function(t){var e=a.call(t,o),n=t[o];try{t[o]=void 0;var i=!0}catch(c){}var r=s.call(t);return i&&(e?t[o]=n:delete t[o]),r};var l=Object.prototype.toString;const h=function(t){return l.call(t)};var u=i.Z?i.Z.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?c(t):h(t)}},4765:(t,e,n)=>{"use strict";n.d(e,{Z:()=>H});var i=n(1667),r=n(3001);const a=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i;)if(e(t[n],n,t))return!0;return!1};var s=n(9548);const o=function(t,e,n,i,o,c){var l=1&n,h=t.length,u=e.length;if(h!=u&&!(l&&u>h))return!1;var d=c.get(t),p=c.get(e);if(d&&p)return d==e&&p==t;var f=-1,g=!0,y=2&n?new r.Z:void 0;for(c.set(t,e),c.set(e,t);++f<h;){var m=t[f],b=e[f];if(i)var _=l?i(b,m,f,e,t,c):i(m,b,f,t,e,c);if(void 0!==_){if(_)continue;g=!1;break}if(y){if(!a(e,(function(t,e){if(!(0,s.Z)(y,e)&&(m===t||o(m,t,n,i,c)))return y.push(e)}))){g=!1;break}}else if(m!==b&&!o(m,b,n,i,c)){g=!1;break}}return c.delete(t),c.delete(e),g};var c=n(7685),l=n(7623),h=n(9651);const u=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,i){n[++e]=[i,t]})),n};var d=n(6545),p=c.Z?c.Z.prototype:void 0,f=p?p.valueOf:void 0;const g=function(t,e,n,i,r,a,s){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new l.Z(t),new l.Z(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,h.Z)(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var c=u;case"[object Set]":var p=1&i;if(c||(c=d.Z),t.size!=e.size&&!p)return!1;var g=s.get(t);if(g)return g==e;i|=2,s.set(t,e);var y=o(c(t),c(e),i,r,a,s);return s.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1};var y=n(1808),m=Object.prototype.hasOwnProperty;const b=function(t,e,n,i,r,a){var s=1&n,o=(0,y.Z)(t),c=o.length;if(c!=(0,y.Z)(e).length&&!s)return!1;for(var l=c;l--;){var h=o[l];if(!(s?h in e:m.call(e,h)))return!1}var u=a.get(t),d=a.get(e);if(u&&d)return u==e&&d==t;var p=!0;a.set(t,e),a.set(e,t);for(var f=s;++l<c;){var g=t[h=o[l]],b=e[h];if(i)var _=s?i(b,g,h,e,t,a):i(g,b,h,t,e,a);if(!(void 0===_?g===b||r(g,b,n,i,a):_)){p=!1;break}f||(f="constructor"==h)}if(p&&!f){var x=t.constructor,v=e.constructor;x==v||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof v&&v instanceof v||(p=!1)}return a.delete(t),a.delete(e),p};var _=n(3970),x=n(7771),v=n(7008),k=n(8843),w="[object Arguments]",C="[object Array]",T="[object Object]",E=Object.prototype.hasOwnProperty;const S=function(t,e,n,r,a,s){var c=(0,x.Z)(t),l=(0,x.Z)(e),h=c?C:(0,_.Z)(t),u=l?C:(0,_.Z)(e),d=(h=h==w?T:h)==T,p=(u=u==w?T:u)==T,f=h==u;if(f&&(0,v.Z)(t)){if(!(0,v.Z)(e))return!1;c=!0,d=!1}if(f&&!d)return s||(s=new i.Z),c||(0,k.Z)(t)?o(t,e,n,r,a,s):g(t,e,h,n,r,a,s);if(!(1&n)){var y=d&&E.call(t,"__wrapped__"),m=p&&E.call(e,"__wrapped__");if(y||m){var S=y?t.value():t,A=m?e.value():e;return s||(s=new i.Z),a(S,A,n,r,s)}}return!!f&&(s||(s=new i.Z),b(t,e,n,r,a,s))};var A=n(8533);const L=function t(e,n,i,r,a){return e===n||(null==e||null==n||!(0,A.Z)(e)&&!(0,A.Z)(n)?e!=e&&n!=n:S(e,n,i,r,t,a))};const B=function(t,e,n,r){var a=n.length,s=a,o=!r;if(null==t)return!s;for(t=Object(t);a--;){var c=n[a];if(o&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a<s;){var l=(c=n[a])[0],h=t[l],u=c[1];if(o&&c[2]){if(void 0===h&&!(l in t))return!1}else{var d=new i.Z;if(r)var p=r(h,u,l,t,e,d);if(!(void 0===p?L(u,h,3,r,d):p))return!1}}return!0};var N=n(7226);const D=function(t){return t==t&&!(0,N.Z)(t)};var O=n(7179);const M=function(t){for(var e=(0,O.Z)(t),n=e.length;n--;){var i=e[n],r=t[i];e[n]=[i,r,D(r)]}return e};const I=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}};const F=function(t){var e=M(t);return 1==e.length&&e[0][2]?I(e[0][0],e[0][1]):function(n){return n===t||B(n,t,e)}};var $=n(3317);const R=function(t,e,n){var i=null==t?void 0:(0,$.Z)(t,e);return void 0===i?n:i};var Z=n(5487),P=n(9365),j=n(2281);const Y=function(t,e){return(0,P.Z)(t)&&D(e)?I((0,j.Z)(t),e):function(n){var i=R(n,t);return void 0===i&&i===e?(0,Z.Z)(n,t):L(e,i,3)}};var z=n(9203),U=n(4193);const W=function(t){return function(e){return(0,$.Z)(e,t)}};const q=function(t){return(0,P.Z)(t)?(0,U.Z)((0,j.Z)(t)):W(t)};const H=function(t){return"function"==typeof t?t:null==t?z.Z:"object"==typeof t?(0,x.Z)(t)?Y(t[0],t[1]):F(t):q(t)}},9473:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(2764);const r=(0,n(1851).Z)(Object.keys,Object);var a=Object.prototype.hasOwnProperty;const s=function(t){if(!(0,i.Z)(t))return r(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},1018:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(9811),r=n(585);const a=function(t,e){var n=-1,a=(0,r.Z)(t)?Array(t.length):[];return(0,i.Z)(t,(function(t,i,r){a[++n]=e(t,i,r)})),a}},4193:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return function(e){return null==e?void 0:e[t]}}},9581:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(9203),r=n(1211),a=n(7227);const s=function(t,e){return(0,a.Z)((0,r.Z)(t,e,i.Z),t+"")}},1162:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return function(e){return t(e)}}},9548:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){return t.has(e)}},8882:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(9203);const r=function(t){return"function"==typeof t?t:i.Z}},2823:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var i=n(7771),r=n(9365),a=n(2454);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g;const c=function(t){var e=(0,a.Z)(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,n,i,r){e.push(i?r.replace(o,"$1"):n||t)})),e}));var l=n(751);const h=function(t,e){return(0,i.Z)(t)?t:(0,r.Z)(t,e)?[t]:c((0,l.Z)(t))}},1884:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(7623);const r=function(t){var e=new t.constructor(t.byteLength);return new i.Z(e).set(new i.Z(t)),e}},1050:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(6092),r="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=r&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===r?i.Z.Buffer:void 0,o=s?s.allocUnsafe:void 0;const c=function(t,e){if(e)return t.slice();var n=t.length,i=o?o(n):new t.constructor(n);return t.copy(i),i}},2701:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(1884);const r=function(t,e){var n=e?(0,i.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},7215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){var n=-1,i=t.length;for(e||(e=Array(i));++n<i;)e[n]=t[n];return e}},1899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(2954),r=n(4752);const a=function(t,e,n,a){var s=!n;n||(n={});for(var o=-1,c=e.length;++o<c;){var l=e[o],h=a?a(n[l],t[l],l,n,t):void 0;void 0===h&&(h=t[l]),s?(0,r.Z)(n,l,h):(0,i.Z)(n,l,h)}return n}},7904:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(2508);const r=function(){try{var t=(0,i.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},3413:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i="object"==typeof global&&global&&global.Object===Object&&global},1808:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(3327),r=n(5695),a=n(7179);const s=function(t){return(0,i.Z)(t,a.Z,r.Z)}},2508:(t,e,n)=>{"use strict";n.d(e,{Z:()=>b});var i=n(3234);const r=n(6092).Z["__core-js_shared__"];var a,s=(a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";const o=function(t){return!!s&&s in t};var c=n(7226),l=n(19),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,p=u.toString,f=d.hasOwnProperty,g=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const y=function(t){return!(!(0,c.Z)(t)||o(t))&&((0,i.Z)(t)?g:h).test((0,l.Z)(t))};const m=function(t,e){return null==t?void 0:t[e]};const b=function(t,e){var n=m(t,e);return y(n)?n:void 0}},2513:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=(0,n(1851).Z)(Object.getPrototypeOf,Object)},5695:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(8774),r=n(532),a=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const o=s?function(t){return null==t?[]:(t=Object(t),(0,i.Z)(s(t),(function(e){return a.call(t,e)})))}:r.Z},3970:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});var i=n(2508),r=n(6092);const a=(0,i.Z)(r.Z,"DataView");var s=n(6183);const o=(0,i.Z)(r.Z,"Promise");var c=n(3203);const l=(0,i.Z)(r.Z,"WeakMap");var h=n(3589),u=n(19),d="[object Map]",p="[object Promise]",f="[object Set]",g="[object WeakMap]",y="[object DataView]",m=(0,u.Z)(a),b=(0,u.Z)(s.Z),_=(0,u.Z)(o),x=(0,u.Z)(c.Z),v=(0,u.Z)(l),k=h.Z;(a&&k(new a(new ArrayBuffer(1)))!=y||s.Z&&k(new s.Z)!=d||o&&k(o.resolve())!=p||c.Z&&k(new c.Z)!=f||l&&k(new l)!=g)&&(k=function(t){var e=(0,h.Z)(t),n="[object Object]"==e?t.constructor:void 0,i=n?(0,u.Z)(n):"";if(i)switch(i){case m:return y;case b:return d;case _:return p;case x:return f;case v:return g}return e});const w=k},6174:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var i=n(2823),r=n(9169),a=n(7771),s=n(6009),o=n(1656),c=n(2281);const l=function(t,e,n){for(var l=-1,h=(e=(0,i.Z)(e,t)).length,u=!1;++l<h;){var d=(0,c.Z)(e[l]);if(!(u=null!=t&&n(t,d)))break;t=t[d]}return u||++l!=h?u:!!(h=null==t?0:t.length)&&(0,o.Z)(h)&&(0,s.Z)(d,h)&&((0,a.Z)(t)||(0,r.Z)(t))}},3658:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(7226),r=Object.create;const a=function(){function t(){}return function(e){if(!(0,i.Z)(e))return{};if(r)return r(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();var s=n(2513),o=n(2764);const c=function(t){return"function"!=typeof t.constructor||(0,o.Z)(t)?{}:a((0,s.Z)(t))}},6009:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=/^(?:0|[1-9]\d*)$/;const r=function(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&i.test(t))&&t>-1&&t%1==0&&t<e}},439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(9651),r=n(585),a=n(6009),s=n(7226);const o=function(t,e,n){if(!(0,s.Z)(n))return!1;var o=typeof e;return!!("number"==o?(0,r.Z)(n)&&(0,a.Z)(e,n.length):"string"==o&&e in n)&&(0,i.Z)(n[e],t)}},9365:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(7771),r=n(2714),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const o=function(t,e){if((0,i.Z)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,r.Z)(t))||(s.test(t)||!a.test(t)||null!=e&&t in Object(e))}},2764:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=Object.prototype;const r=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||i)}},8351:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(3413),r="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=r&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===r&&i.Z.process;const o=function(){try{var t=a&&a.require&&a.require("util").types;return t||s&&s.binding&&s.binding("util")}catch(e){}}()},1851:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){return function(n){return t(e(n))}}},1211:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const i=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)};var r=Math.max;const a=function(t,e,n){return e=r(void 0===e?t.length-1:e,0),function(){for(var a=arguments,s=-1,o=r(a.length-e,0),c=Array(o);++s<o;)c[s]=a[e+s];s=-1;for(var l=Array(e+1);++s<e;)l[s]=a[s];return l[e]=n(c),i(t,this,l)}}},6092:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(3413),r="object"==typeof self&&self&&self.Object===Object&&self;const a=i.Z||r||Function("return this")()},6545:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},7227:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(2002),r=n(7904),a=n(9203);const s=r.Z?function(t,e){return(0,r.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,i.Z)(e),writable:!0})}:a.Z;var o=Date.now;const c=function(t){var e=0,n=0;return function(){var i=o(),r=16-(i-n);if(n=i,r>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(s)},2281:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(2714);const r=function(t){if("string"==typeof t||(0,i.Z)(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},19:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=Function.prototype.toString;const r=function(t){if(null!=t){try{return i.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},2002:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return function(){return t}}},3688:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var i=n(9581),r=n(9651),a=n(439),s=n(2957),o=Object.prototype,c=o.hasOwnProperty;const l=(0,i.Z)((function(t,e){t=Object(t);var n=-1,i=e.length,l=i>2?e[2]:void 0;for(l&&(0,a.Z)(e[0],e[1],l)&&(i=1);++n<i;)for(var h=e[n],u=(0,s.Z)(h),d=-1,p=u.length;++d<p;){var f=u[d],g=t[f];(void 0===g||(0,r.Z)(g,o[f])&&!c.call(t,f))&&(t[f]=h[f])}return t}))},9651:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t,e){return t===e||t!=t&&e!=e}},3445:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(8774),r=n(9811);const a=function(t,e){var n=[];return(0,r.Z)(t,(function(t,i,r){e(t,i,r)&&n.push(t)})),n};var s=n(4765),o=n(7771);const c=function(t,e){return((0,o.Z)(t)?i.Z:a)(t,(0,s.Z)(e,3))}},7961:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(626);const r=function(t){return(null==t?0:t.length)?(0,i.Z)(t,1):[]}},870:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(6579),r=n(9811),a=n(8882),s=n(7771);const o=function(t,e){return((0,s.Z)(t)?i.Z:r.Z)(t,(0,a.Z)(e))}},5123:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=Object.prototype.hasOwnProperty;const r=function(t,e){return null!=t&&i.call(t,e)};var a=n(6174);const s=function(t,e){return null!=t&&(0,a.Z)(t,e,r)}},5487:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const i=function(t,e){return null!=t&&e in Object(t)};var r=n(6174);const a=function(t,e){return null!=t&&(0,r.Z)(t,e,i)}},9203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return t}},9169:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var i=n(3589),r=n(8533);const a=function(t){return(0,r.Z)(t)&&"[object Arguments]"==(0,i.Z)(t)};var s=Object.prototype,o=s.hasOwnProperty,c=s.propertyIsEnumerable;const l=a(function(){return arguments}())?a:function(t){return(0,r.Z)(t)&&o.call(t,"callee")&&!c.call(t,"callee")}},7771:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=Array.isArray},585:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(3234),r=n(1656);const a=function(t){return null!=t&&(0,r.Z)(t.length)&&!(0,i.Z)(t)}},836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(585),r=n(8533);const a=function(t){return(0,r.Z)(t)&&(0,i.Z)(t)}},7008:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(6092);const r=function(){return!1};var a="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=a&&"object"==typeof module&&module&&!module.nodeType&&module,o=s&&s.exports===a?i.Z.Buffer:void 0;const c=(o?o.isBuffer:void 0)||r},9697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var i=n(9473),r=n(3970),a=n(9169),s=n(7771),o=n(585),c=n(7008),l=n(2764),h=n(8843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,o.Z)(t)&&((0,s.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,c.Z)(t)||(0,h.Z)(t)||(0,a.Z)(t)))return!t.length;var e=(0,r.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,l.Z)(t))return!(0,i.Z)(t).length;for(var n in t)if(u.call(t,n))return!1;return!0}},3234:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(3589),r=n(7226);const a=function(t){if(!(0,r.Z)(t))return!1;var e=(0,i.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},7226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},8533:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return null!=t&&"object"==typeof t}},7514:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var i=n(3589),r=n(2513),a=n(8533),s=Function.prototype,o=Object.prototype,c=s.toString,l=o.hasOwnProperty,h=c.call(Object);const u=function(t){if(!(0,a.Z)(t)||"[object Object]"!=(0,i.Z)(t))return!1;var e=(0,r.Z)(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==h}},2714:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(3589),r=n(8533);const a=function(t){return"symbol"==typeof t||(0,r.Z)(t)&&"[object Symbol]"==(0,i.Z)(t)}},8843:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var i=n(3589),r=n(1656),a=n(8533),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;const o=function(t){return(0,a.Z)(t)&&(0,r.Z)(t.length)&&!!s[(0,i.Z)(t)]};var c=n(1162),l=n(8351),h=l.Z&&l.Z.isTypedArray;const u=h?(0,c.Z)(h):o},9360:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(t){return void 0===t}},7179:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(7668),r=n(9473),a=n(585);const s=function(t){return(0,a.Z)(t)?(0,i.Z)(t):(0,r.Z)(t)}},2957:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var i=n(7668),r=n(7226),a=n(2764);const s=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e};var o=Object.prototype.hasOwnProperty;const c=function(t){if(!(0,r.Z)(t))return s(t);var e=(0,a.Z)(t),n=[];for(var i in t)("constructor"!=i||!e&&o.call(t,i))&&n.push(i);return n};var l=n(585);const h=function(t){return(0,l.Z)(t)?(0,i.Z)(t,!0):c(t)}},3836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(4073),r=n(4765),a=n(1018),s=n(7771);const o=function(t,e){return((0,s.Z)(t)?i.Z:a.Z)(t,(0,r.Z)(e,3))}},2454:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(7834);function r(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var i=arguments,r=e?e.apply(this,i):i[0],a=n.cache;if(a.has(r))return a.get(r);var s=t.apply(this,i);return n.cache=a.set(r,s)||a,s};return n.cache=new(r.Cache||i.Z),n}r.Cache=i.Z;const a=r},1666:(t,e,n)=>{"use strict";n.d(e,{Z:()=>y});var i=n(3317),r=n(2954),a=n(2823),s=n(6009),o=n(7226),c=n(2281);const l=function(t,e,n,i){if(!(0,o.Z)(t))return t;for(var l=-1,h=(e=(0,a.Z)(e,t)).length,u=h-1,d=t;null!=d&&++l<h;){var p=(0,c.Z)(e[l]),f=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return t;if(l!=u){var g=d[p];void 0===(f=i?i(g,p,d):void 0)&&(f=(0,o.Z)(g)?g:(0,s.Z)(e[l+1])?[]:{})}(0,r.Z)(d,p,f),d=d[p]}return t};const h=function(t,e,n){for(var r=-1,s=e.length,o={};++r<s;){var c=e[r],h=(0,i.Z)(t,c);n(h,c)&&l(o,(0,a.Z)(c,t),h)}return o};var u=n(5487);const d=function(t,e){return h(t,e,(function(e,n){return(0,u.Z)(t,n)}))};var p=n(7961),f=n(1211),g=n(7227);const y=function(t){return(0,g.Z)((0,f.Z)(t,void 0,p.Z),t+"")}((function(t,e){return null==t?{}:d(t,e)}))},4379:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=Math.ceil,r=Math.max;const a=function(t,e,n,a){for(var s=-1,o=r(i((e-t)/(n||1)),0),c=Array(o);o--;)c[a?o:++s]=t,t+=n;return c};var s=n(439),o=n(4099);const c=function(t){return function(e,n,i){return i&&"number"!=typeof i&&(0,s.Z)(e,n,i)&&(n=i=void 0),e=(0,o.Z)(e),void 0===n?(n=e,e=0):n=(0,o.Z)(n),i=void 0===i?e<n?1:-1:(0,o.Z)(i),a(e,n,i,t)}}()},2344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});const i=function(t,e,n,i){var r=-1,a=null==t?0:t.length;for(i&&a&&(n=t[++r]);++r<a;)n=e(n,t[r],r,t);return n};var r=n(9811),a=n(4765);const s=function(t,e,n,i,r){return r(t,(function(t,r,a){n=i?(i=!1,t):e(n,t,r,a)})),n};var o=n(7771);const c=function(t,e,n){var c=(0,o.Z)(t)?i:s,l=arguments.length<3;return c(t,(0,a.Z)(e,4),n,l,r.Z)}},532:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=function(){return[]}},4099:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var i=/\s/;const r=function(t){for(var e=t.length;e--&&i.test(t.charAt(e)););return e};var a=/^\s+/;const s=function(t){return t?t.slice(0,r(t)+1).replace(a,""):t};var o=n(7226),c=n(2714),l=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,u=/^0o[0-7]+$/i,d=parseInt;const p=function(t){if("number"==typeof t)return t;if((0,c.Z)(t))return NaN;if((0,o.Z)(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=(0,o.Z)(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=s(t);var n=h.test(t);return n||u.test(t)?d(t.slice(2),n?2:8):l.test(t)?NaN:+t};var f=1/0;const g=function(t){return t?(t=p(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},751:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var i=n(7685),r=n(4073),a=n(7771),s=n(2714),o=i.Z?i.Z.prototype:void 0,c=o?o.toString:void 0;const l=function t(e){if("string"==typeof e)return e;if((0,a.Z)(e))return(0,r.Z)(e,t)+"";if((0,s.Z)(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-Infinity?"-0":n};const h=function(t){return null==t?"":l(t)}},6749:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(751),r=0;const a=function(t){var e=++r;return(0,i.Z)(t)+e}},4148:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(4073);const r=function(t,e){return(0,i.Z)(e,(function(e){return t[e]}))};var a=n(7179);const s=function(t){return null==t?[]:r(t,(0,a.Z)(t))}}}]); \ No newline at end of file diff --git a/assets/js/8954.296edd99.js.LICENSE.txt b/assets/js/8954.296edd99.js.LICENSE.txt new file mode 100644 index 0000000..f253ee2 --- /dev/null +++ b/assets/js/8954.296edd99.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 2.4.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.3/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/assets/js/8b1802c5.6f267f4c.js b/assets/js/8b1802c5.6f267f4c.js new file mode 100644 index 0000000..45b3d2b --- /dev/null +++ b/assets/js/8b1802c5.6f267f4c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8480],{832:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/advent-of-code","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/8c0e532b.9cbc1be0.js b/assets/js/8c0e532b.9cbc1be0.js new file mode 100644 index 0000000..b0d81cb --- /dev/null +++ b/assets/js/8c0e532b.9cbc1be0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[822],{3968:s=>{s.exports=JSON.parse('{"label":"vps","permalink":"/blog/tags/vps","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/8e1fadd0.b5230023.js b/assets/js/8e1fadd0.b5230023.js new file mode 100644 index 0000000..699ba58 --- /dev/null +++ b/assets/js/8e1fadd0.b5230023.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6554],{9278:e=>{e.exports=JSON.parse('{"title":"Algorithms and Correctness","description":"Materials related to basic ideas behind algorithms and proofs of their\\ncorrectness.\\n","slug":"/category/algorithms-and-correctness","permalink":"/ib002/category/algorithms-and-correctness","navigation":{"previous":{"title":"Introduction","permalink":"/ib002/"},"next":{"title":"Vague postconditions and proving correctness of algorithms","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"}}}')}}]); \ No newline at end of file diff --git a/assets/js/90425ffc.955d8c56.js b/assets/js/90425ffc.955d8c56.js new file mode 100644 index 0000000..df40a0c --- /dev/null +++ b/assets/js/90425ffc.955d8c56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8769],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||c[d]||i;return n?a.createElement(h,r(r({ref:t},m),{},{components:n})):a.createElement(h,r({ref:t},m))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},3167:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const i={id:"seminar-03",title:"3rd seminar",description:"Select sort implementation on arrays.\n",last_update:{date:new Date("2023-03-07T00:00:00.000Z")}},r=void 0,s={unversionedId:"bonuses/seminar-03",id:"bonuses/seminar-03",title:"3rd seminar",description:"Select sort implementation on arrays.\n",source:"@site/pb071/bonuses/03.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-03",permalink:"/pb071/bonuses/seminar-03",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/bonuses/03.md",tags:[],version:"current",lastUpdatedAt:1678147200,formattedLastUpdatedAt:"Mar 7, 2023",frontMatter:{id:"seminar-03",title:"3rd seminar",description:"Select sort implementation on arrays.\n",last_update:{date:"2023-03-07T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Bonuses",permalink:"/pb071/category/bonuses"},next:{title:"4th seminar",permalink:"/pb071/bonuses/seminar-04"}},l={},p=[{value:"Light version (<code>main_light.c</code>)",id:"light-version-main_lightc",level:2},{value:"Full fat version (<code>main.c</code>)",id:"full-fat-version-mainc",level:2},{value:"Submitting",id:"submitting",level:2}],m={toc:p},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Deadline for the submission of the bonus is ",(0,o.kt)("strong",{parentName:"p"},"March 16th 24:00"),".")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In case you have any questions, feel free to reach out either by email, Discord\nor just by submitting an issue ",(0,o.kt)("a",{parentName:"p",href:"https://gitlab.fi.muni.cz/xfocko/kb/-/issues/new"},"here"),".")),(0,o.kt)("p",null,"This assignment has two versions. For the light version you can get 1.5 K\u20a1. For\nthe ",(0,o.kt)("em",{parentName:"p"},"full fat")," 3 K\u20a1. ",(0,o.kt)("strong",{parentName:"p"},"You can choose only one of them"),"."),(0,o.kt)("p",null,"To both of them you are given some basic tests. You can also have a look at the\ncode used by the tests and use it to your advantage."),(0,o.kt)("p",null,"Details can be found in the doxygen comments included in the source files."),(0,o.kt)("h2",{id:"light-version-main_lightc"},"Light version (",(0,o.kt)("inlineCode",{parentName:"h2"},"main_light.c"),")"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/03/main_light.c"},"Source")),(0,o.kt)("p",null,"For the light version you have 3 functions to finish:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"swap")," - that swaps two ints passed by pointers."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"maximum")," - that returns index of the biggest ",(0,o.kt)("inlineCode",{parentName:"li"},"int")," in the array."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"select_sort")," - that sorts passed array using Select Sort.")),(0,o.kt)("h2",{id:"full-fat-version-mainc"},"Full fat version (",(0,o.kt)("inlineCode",{parentName:"h2"},"main.c"),")"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/03/main.c"},"Source")),(0,o.kt)("p",null,"For the full fat version you have 4 functions to implement:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"swap")," - that swaps two variables passed by pointers."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"maximum")," - that returns index of the biggest element in the array using the\ncomparator."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"select_sort")," - that sorts passed array using Select Sort."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"int_comparator")," - that is used for generic sort and maximum")),(0,o.kt)("p",null,"To 2nd and 3rd function you are given a pseudocode that you can use to implement\nit."),(0,o.kt)("admonition",{title:"Function pointers",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In the skeleton of the \u201cfull fat\u201d version you might have noticed a weird type\nsignature of both the ",(0,o.kt)("inlineCode",{parentName:"p"},"maximum")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"select_sort")," functions. Those functions get\npassed a ",(0,o.kt)("em",{parentName:"p"},"function pointer")," to the comparator that you use for comparing the\nrespective elements in the passed in array."),(0,o.kt)("p",{parentName:"admonition"},"If we take the parameter from one of the functions from the skeleton:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-c"},"int (*comp)(const void *, const void *)\n")),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"comp")," is a function pointer to a function that takes two pointers of unspecified\ntype, i.e. pure address to the memory (you don't know what stored in there), and\nreturns an ",(0,o.kt)("inlineCode",{parentName:"p"},"int"),"."),(0,o.kt)("p",{parentName:"admonition"},"You can pass the function by simply using its name. (There is no need to use ",(0,o.kt)("inlineCode",{parentName:"p"},"&"),"\nto get its address.) And you can also call the function by \u201ccalling\u201d the function\npointer, e.g. ",(0,o.kt)("inlineCode",{parentName:"p"},"comp(left, right)"),".")),(0,o.kt)("h2",{id:"submitting"},"Submitting"),(0,o.kt)("p",null,"For submitting the bonus assignment you can follow the same procedure as for\nsubmitting the homeworks, that is:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"On branch ",(0,o.kt)("inlineCode",{parentName:"li"},"main")," add the provided skeleton."),(0,o.kt)("li",{parentName:"ol"},"Checkout new branch ",(0,o.kt)("inlineCode",{parentName:"li"},"seminar-bonus-03"),"."),(0,o.kt)("li",{parentName:"ol"},"Add your solution to the newly created branch."),(0,o.kt)("li",{parentName:"ol"},"Create a MR to the ",(0,o.kt)("inlineCode",{parentName:"li"},"main")," branch with me (",(0,o.kt)("inlineCode",{parentName:"li"},"@xfocko"),") as the reviewer.")),(0,o.kt)("admonition",{title:"Directory structure for bonuses",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Ideally create a directory ",(0,o.kt)("inlineCode",{parentName:"p"},"seminar-bonuses")," in the root of your repository with\nbonuses in their own subdirectories."),(0,o.kt)("p",{parentName:"admonition"},"Structure of your repository can look like this:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 bonuses\n\u2502 \u2514\u2500\u2500 seminar-03\n\u251c\u2500\u2500 hello\n\u251c\u2500\u2500 hw01\n\u251c\u2500\u2500 hw02\n\u251c\u2500\u2500 seminar-01\n\u251c\u2500\u2500 seminar-02\n\u2514\u2500\u2500 seminar-03\n")),(0,o.kt)("p",{parentName:"admonition"},"or"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 bonus-seminar-03\n\u251c\u2500\u2500 hello\n\u251c\u2500\u2500 hw01\n\u251c\u2500\u2500 hw02\n\u251c\u2500\u2500 seminar-01\n\u251c\u2500\u2500 seminar-02\n\u2514\u2500\u2500 seminar-03\n")),(0,o.kt)("p",{parentName:"admonition"},"Structure of the bonuses is entirely up to you, just keep it consistent.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9287eafd.8885dd15.js b/assets/js/9287eafd.8885dd15.js new file mode 100644 index 0000000..7671475 --- /dev/null +++ b/assets/js/9287eafd.8885dd15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5521],{716:s=>{s.exports=JSON.parse('{"label":"rust","permalink":"/blog/tags/rust","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/assets/js/94036ea2.8be2e014.js b/assets/js/94036ea2.8be2e014.js new file mode 100644 index 0000000..63fcead --- /dev/null +++ b/assets/js/94036ea2.8be2e014.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4477],{6996:e=>{e.exports=JSON.parse('{"pluginId":"pb161","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"autogeneratedBar":[{"type":"link","label":"Introduction","href":"/pb161/","docId":"pb161-intro"},{"type":"link","label":"Environment","href":"/pb161/environment","docId":"environment"}]},"docs":{"environment":{"id":"environment","title":"Environment","description":"Suggestions for setting up a local environment for C++ course.\\n","sidebar":"autogeneratedBar"},"pb161-intro":{"id":"pb161-intro","title":"Introduction","description":"","sidebar":"autogeneratedBar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9487.b3a824a3.js b/assets/js/9487.b3a824a3.js new file mode 100644 index 0000000..ac76972 --- /dev/null +++ b/assets/js/9487.b3a824a3.js @@ -0,0 +1 @@ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9487],{7295:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,u){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var o=new Error("Cannot find module '"+a+"'");throw o.code="MODULE_NOT_FOUND",o}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,u=e.algorithms,o=void 0===u?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:u,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:o}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,u=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:u}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function u(){}function o(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function v(){}function m(){}function y(){}function k(){}function j(){}function E(){}function T(){}function M(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function $(){}function L(){}function N(){}function x(){}function D(){}function R(){}function K(){}function _(){}function F(){}function B(){}function H(){}function q(){}function G(){}function z(){}function U(){}function X(){}function W(){}function V(){}function Q(){}function Y(){}function J(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function un(){}function on(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function vn(){}function mn(){}function yn(){}function kn(){}function jn(){}function En(){}function Tn(){}function Mn(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function $n(){}function Ln(){}function Nn(){}function xn(){}function Dn(){}function Rn(){}function Kn(){}function _n(){}function Fn(){}function Bn(){}function Hn(){}function qn(){}function Gn(){}function zn(){}function Un(){}function Xn(){}function Wn(){}function Vn(){}function Qn(){}function Yn(){}function Jn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ut(){}function ot(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function vt(){}function mt(){}function yt(){}function kt(){}function jt(){}function Et(){}function Tt(){}function Mt(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function $t(){}function Lt(){}function Nt(){}function xt(){}function Dt(){}function Rt(){}function Kt(){}function _t(){}function Ft(){}function Bt(){}function Ht(){}function qt(){}function Gt(){}function zt(){}function Ut(){}function Xt(){}function Wt(){}function Vt(){}function Qt(){}function Yt(){}function Jt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function ue(){}function oe(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function ve(){}function me(){}function ye(){}function ke(){}function je(){}function Ee(){}function Te(){}function Me(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function $e(){}function Le(){}function Ne(){}function xe(){}function De(){}function Re(){}function Ke(){}function _e(){}function Fe(){}function Be(){}function He(){}function qe(){}function Ge(){}function ze(){}function Ue(){}function Xe(){}function We(){}function Ve(){}function Qe(){}function Ye(){}function Je(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function ui(){}function oi(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function vi(){}function mi(){}function yi(){}function ki(){}function ji(){}function Ei(){}function Ti(){}function Mi(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function $i(){}function Li(){}function Ni(){}function xi(){}function Di(){}function Ri(){}function Ki(){}function _i(){}function Fi(){}function Bi(){}function Hi(){}function qi(){}function Gi(){}function zi(){}function Ui(){}function Xi(){}function Wi(){}function Vi(){}function Qi(){}function Yi(){}function Ji(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function ur(){}function or(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function vr(){}function mr(){}function yr(){}function kr(){}function jr(){}function Er(){}function Tr(){}function Mr(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function $r(){}function Lr(){}function Nr(){}function xr(){}function Dr(){}function Rr(){}function Kr(){}function _r(){}function Fr(){}function Br(){}function Hr(){}function qr(){}function Gr(){}function zr(){}function Ur(){}function Xr(){}function Wr(){}function Vr(){}function Qr(){}function Yr(){}function Jr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function uc(){}function oc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function vc(){}function mc(){}function yc(){}function kc(){}function jc(){}function Ec(){}function Tc(){}function Mc(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function $c(){}function Lc(){}function Nc(){}function xc(){}function Dc(){}function Rc(){}function Kc(){}function _c(){}function Fc(){}function Bc(){}function Hc(){}function qc(){}function Gc(){}function zc(){}function Uc(){}function Xc(){}function Wc(){}function Vc(){}function Qc(){}function Yc(){}function Jc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function ua(){}function oa(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function va(){}function ma(){}function ya(){}function ka(){}function ja(){}function Ea(){}function Ta(){}function Ma(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function $a(){}function La(){}function Na(){}function xa(){}function Da(){}function Ra(){}function Ka(){}function _a(){}function Fa(){}function Ba(){}function Ha(){}function qa(){}function Ga(){}function za(){}function Ua(){}function Xa(){}function Wa(){}function Va(){}function Qa(){}function Ya(){}function Ja(){}function Za(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function uu(){}function ou(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function vu(){}function mu(){}function yu(){}function ku(){}function ju(){}function Eu(){}function Tu(){}function Mu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function $u(){}function Lu(){}function Nu(){}function xu(){}function Du(){}function Ru(){}function Ku(){}function _u(){}function Fu(){}function Bu(){}function Hu(){}function qu(){}function Gu(){}function zu(){}function Uu(){}function Xu(){}function Wu(){}function Vu(){}function Qu(){}function Yu(){}function Ju(){}function Zu(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function uo(){}function oo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function vo(){}function mo(){}function yo(){}function ko(){}function jo(){}function Eo(){}function To(){}function Mo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function $o(){}function Lo(){}function No(){}function xo(){}function Do(){}function Ro(){}function Ko(){}function _o(){}function Fo(){}function Bo(){}function Ho(){}function qo(){}function Go(){}function zo(){}function Uo(){}function Xo(){}function Wo(){}function Vo(){}function Qo(){}function Yo(){}function Jo(){}function Zo(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function us(){}function os(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function vs(){}function ms(){}function ys(){}function ks(){}function js(){}function Es(){}function Ts(){}function Ms(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function $s(){}function Ls(){}function Ns(){}function xs(){}function Ds(){}function Rs(){}function Ks(){}function _s(){}function Fs(){}function Bs(){}function Hs(){}function qs(){}function Gs(){}function zs(){}function Us(){}function Xs(){}function Ws(){}function Vs(){}function Qs(){}function Ys(){}function Js(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function uh(){}function oh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function vh(){}function mh(){}function yh(){}function kh(){}function jh(){}function Eh(){}function Th(){}function Mh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function $h(){}function Lh(){}function Nh(){}function xh(){}function Dh(){}function Rh(){}function Kh(){}function _h(n){}function Fh(n){}function Bh(){iy()}function Hh(){Gsn()}function qh(){Epn()}function Gh(){_kn()}function zh(){jSn()}function Uh(){fRn()}function Xh(){Kyn()}function Wh(){rkn()}function Vh(){EM()}function Qh(){mM()}function Yh(){q_()}function Jh(){TM()}function Zh(){Irn()}function nf(){SM()}function tf(){I6()}function ef(){Pin()}function rf(){Q8()}function cf(){_Z()}function af(){zsn()}function uf(){_Mn()}function of(){Cin()}function sf(){U2()}function hf(){fWn()}function ff(){Gyn()}function lf(){FZ()}function bf(){HXn()}function wf(){RZ()}function df(){Iin()}function gf(){Yun()}function pf(){GZ()}function vf(){C9()}function mf(){PM()}function yf(){KAn()}function kf(){Uyn()}function jf(){Fcn()}function Ef(){MMn()}function Tf(){bRn()}function Mf(){Bvn()}function Sf(){CAn()}function Pf(){Ran()}function Cf(){HZ()}function If(){s_n()}function Of(){$An()}function Af(){W$n()}function $f(){x9()}function Lf(){SMn()}function Nf(){sWn()}function xf(){Xsn()}function Df(){vdn()}function Rf(){qBn()}function Kf(){u_()}function _f(){wcn()}function Ff(){fFn()}function Bf(n){kW(n)}function Hf(n){this.a=n}function qf(n){this.a=n}function Gf(n){this.a=n}function zf(n){this.a=n}function Uf(n){this.a=n}function Xf(n){this.a=n}function Wf(n){this.a=n}function Vf(n){this.a=n}function Qf(n){this.a=n}function Yf(n){this.a=n}function Jf(n){this.a=n}function Zf(n){this.a=n}function nl(n){this.a=n}function tl(n){this.a=n}function el(n){this.a=n}function il(n){this.a=n}function rl(n){this.a=n}function cl(n){this.a=n}function al(n){this.a=n}function ul(n){this.a=n}function ol(n){this.a=n}function sl(n){this.b=n}function hl(n){this.c=n}function fl(n){this.a=n}function ll(n){this.a=n}function bl(n){this.a=n}function wl(n){this.a=n}function dl(n){this.a=n}function gl(n){this.a=n}function pl(n){this.a=n}function vl(n){this.a=n}function ml(n){this.a=n}function yl(n){this.a=n}function kl(n){this.a=n}function jl(n){this.a=n}function El(n){this.a=n}function Tl(n){this.a=n}function Ml(n){this.a=n}function Sl(n){this.a=n}function Pl(n){this.a=n}function Cl(){this.a=[]}function Il(n,t){n.a=t}function Ol(n,t){n.a=t}function Al(n,t){n.b=t}function $l(n,t){n.b=t}function Ll(n,t){n.b=t}function Nl(n,t){n.j=t}function xl(n,t){n.g=t}function Dl(n,t){n.i=t}function Rl(n,t){n.c=t}function Kl(n,t){n.d=t}function _l(n,t){n.d=t}function Fl(n,t){n.c=t}function Bl(n,t){n.k=t}function Hl(n,t){n.c=t}function ql(n,t){n.c=t}function Gl(n,t){n.a=t}function zl(n,t){n.a=t}function Ul(n,t){n.f=t}function Xl(n,t){n.a=t}function Wl(n,t){n.b=t}function Vl(n,t){n.d=t}function Ql(n,t){n.i=t}function Yl(n,t){n.o=t}function Jl(n,t){n.r=t}function Zl(n,t){n.a=t}function nb(n,t){n.b=t}function tb(n,t){n.e=t}function eb(n,t){n.f=t}function ib(n,t){n.g=t}function rb(n,t){n.e=t}function cb(n,t){n.f=t}function ab(n,t){n.f=t}function ub(n,t){n.n=t}function ob(n,t){n.a=t}function sb(n,t){n.a=t}function hb(n,t){n.c=t}function fb(n,t){n.c=t}function lb(n,t){n.d=t}function bb(n,t){n.e=t}function wb(n,t){n.g=t}function db(n,t){n.a=t}function gb(n,t){n.c=t}function pb(n,t){n.d=t}function vb(n,t){n.e=t}function mb(n,t){n.f=t}function yb(n,t){n.j=t}function kb(n,t){n.a=t}function jb(n,t){n.b=t}function Eb(n,t){n.a=t}function Tb(n){n.b=n.a}function Mb(n){n.c=n.d.d}function Sb(n){this.d=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(n){this.a=n}function Ob(n){this.a=n}function Ab(n){this.a=n}function $b(n){this.a=n}function Lb(n){this.a=n}function Nb(n){this.a=n}function xb(n){this.a=n}function Db(n){this.a=n}function Rb(n){this.a=n}function Kb(n){this.a=n}function _b(n){this.a=n}function Fb(n){this.a=n}function Bb(n){this.b=n}function Hb(n){this.b=n}function qb(n){this.b=n}function Gb(n){this.a=n}function zb(n){this.a=n}function Ub(n){this.a=n}function Xb(n){this.c=n}function Wb(n){this.c=n}function Vb(n){this.c=n}function Qb(n){this.a=n}function Yb(n){this.a=n}function Jb(n){this.a=n}function Zb(n){this.a=n}function nw(n){this.a=n}function tw(n){this.a=n}function ew(n){this.a=n}function iw(n){this.a=n}function rw(n){this.a=n}function cw(n){this.a=n}function aw(n){this.a=n}function uw(n){this.a=n}function ow(n){this.a=n}function sw(n){this.a=n}function hw(n){this.a=n}function fw(n){this.a=n}function lw(n){this.a=n}function bw(n){this.a=n}function ww(n){this.a=n}function dw(n){this.a=n}function gw(n){this.a=n}function pw(n){this.a=n}function vw(n){this.a=n}function mw(n){this.a=n}function yw(n){this.a=n}function kw(n){this.a=n}function jw(n){this.a=n}function Ew(n){this.a=n}function Tw(n){this.a=n}function Mw(n){this.a=n}function Sw(n){this.a=n}function Pw(n){this.a=n}function Cw(n){this.a=n}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function $w(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function xw(n){this.a=n}function Dw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function _w(n){this.a=n}function Fw(n){this.a=n}function Bw(n){this.e=n}function Hw(n){this.a=n}function qw(n){this.a=n}function Gw(n){this.a=n}function zw(n){this.a=n}function Uw(n){this.a=n}function Xw(n){this.a=n}function Ww(n){this.a=n}function Vw(n){this.a=n}function Qw(n){this.a=n}function Yw(n){this.a=n}function Jw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function ud(n){this.a=n}function od(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function vd(n){this.a=n}function md(n){this.a=n}function yd(n){this.a=n}function kd(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Td(n){this.a=n}function Md(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function $d(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function xd(n){this.a=n}function Dd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function _d(n){this.a=n}function Fd(n){this.a=n}function Bd(n){this.c=n}function Hd(n){this.b=n}function qd(n){this.a=n}function Gd(n){this.a=n}function zd(n){this.a=n}function Ud(n){this.a=n}function Xd(n){this.a=n}function Wd(n){this.a=n}function Vd(n){this.a=n}function Qd(n){this.a=n}function Yd(n){this.a=n}function Jd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function ug(n){this.a=n}function og(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function vg(n){this.a=n}function mg(n){this.a=n}function yg(n){this.a=n}function kg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Tg(n){this.a=n}function Mg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function $g(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function xg(n){this.a=n}function Dg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function _g(n){this.a=n}function Fg(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function qg(n){this.a=n}function Gg(n){this.a=n}function zg(n){this.a=n}function Ug(n){this.a=n}function Xg(n){this.a=n}function Wg(n){this.a=n}function Vg(n){this.a=n}function Qg(n){this.a=n}function Yg(n){this.a=n}function Jg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function up(n){this.b=n}function op(n){this.f=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function vp(n){this.a=n}function mp(n){this.a=n}function yp(n){this.b=n}function kp(n){this.c=n}function jp(n){this.e=n}function Ep(n){this.a=n}function Tp(n){this.a=n}function Mp(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.d=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.e=n}function $p(){this.a=0}function Lp(){DA(this)}function Np(){xA(this)}function xp(){$U(this)}function Dp(){wV(this)}function Rp(){_h(this)}function Kp(){this.c=L$t}function _p(n,t){t.Wb(n)}function Fp(n,t){n.b+=t}function Bp(n){n.b=new ok}function Hp(n){return n.e}function qp(n){return n.a}function Gp(n){return n.a}function zp(n){return n.a}function Up(n){return n.a}function Xp(n){return n.a}function Wp(){return null}function Vp(){return null}function Qp(){aE(),dXn()}function Yp(n){n.b.tf(n.e)}function Jp(n,t){n.b=t-n.b}function Zp(n,t){n.a=t-n.a}function nv(n,t){t.ad(n.a)}function tv(n,t){qCn(t,n)}function ev(n,t,e){n.Od(e,t)}function iv(n,t){n.e=t,t.b=n}function rv(n){s_(),this.a=n}function cv(n){s_(),this.a=n}function av(n){s_(),this.a=n}function uv(n){WX(),this.a=n}function ov(n){PY(),ett.be(n)}function sv(){gN.call(this)}function hv(){gN.call(this)}function fv(){sv.call(this)}function lv(){sv.call(this)}function bv(){sv.call(this)}function wv(){sv.call(this)}function dv(){sv.call(this)}function gv(){sv.call(this)}function pv(){sv.call(this)}function vv(){sv.call(this)}function mv(){sv.call(this)}function yv(){sv.call(this)}function kv(){sv.call(this)}function jv(){this.a=this}function Ev(){this.Bb|=256}function Tv(){this.b=new PO}function Mv(){Mv=O,new xp}function Sv(){fv.call(this)}function Pv(n,t){n.length=t}function Cv(n,t){WB(n.a,t)}function Iv(n,t){USn(n.c,t)}function Ov(n,t){TU(n.b,t)}function Av(n,t){Ivn(n.a,t)}function $v(n,t){Oln(n.a,t)}function Lv(n,t){ban(n.e,t)}function Nv(n){AOn(n.c,n.b)}function xv(n,t){n.kc().Nb(t)}function Dv(n){this.a=gbn(n)}function Rv(){this.a=new xp}function Kv(){this.a=new xp}function _v(){this.a=new Np}function Fv(){this.a=new Np}function Bv(){this.a=new Np}function Hv(){this.a=new kn}function qv(){this.a=new k6}function Gv(){this.a=new bt}function zv(){this.a=new WT}function Uv(){this.a=new D0}function Xv(){this.a=new cZ}function Wv(){this.a=new AR}function Vv(){this.a=new Np}function Qv(){this.a=new Np}function Yv(){this.a=new Np}function Jv(){this.a=new Np}function Zv(){this.d=new Np}function nm(){this.a=new Rv}function tm(){this.a=new xp}function em(){this.b=new xp}function im(){this.b=new Np}function rm(){this.e=new Np}function cm(){this.d=new Np}function am(){this.a=new uf}function um(){Np.call(this)}function om(){_v.call(this)}function sm(){NR.call(this)}function hm(){Qv.call(this)}function fm(){lm.call(this)}function lm(){Rp.call(this)}function bm(){Rp.call(this)}function wm(){bm.call(this)}function dm(){dY.call(this)}function gm(){dY.call(this)}function pm(){Wm.call(this)}function vm(){Wm.call(this)}function mm(){Wm.call(this)}function ym(){Vm.call(this)}function km(){YT.call(this)}function jm(){eo.call(this)}function Em(){eo.call(this)}function Tm(){ny.call(this)}function Mm(){ny.call(this)}function Sm(){xp.call(this)}function Pm(){xp.call(this)}function Cm(){xp.call(this)}function Im(){Rv.call(this)}function Om(){jin.call(this)}function Am(){Ev.call(this)}function $m(){OL.call(this)}function Lm(){OL.call(this)}function Nm(){xp.call(this)}function xm(){xp.call(this)}function Dm(){xp.call(this)}function Rm(){yo.call(this)}function Km(){yo.call(this)}function _m(){Rm.call(this)}function Fm(){Dh.call(this)}function Bm(n){dtn.call(this,n)}function Hm(n){dtn.call(this,n)}function qm(n){Qf.call(this,n)}function Gm(n){MT.call(this,n)}function zm(n){Gm.call(this,n)}function Um(n){MT.call(this,n)}function Xm(){this.a=new YT}function Wm(){this.a=new Rv}function Vm(){this.a=new xp}function Qm(){this.a=new Np}function Ym(){this.j=new Np}function Jm(){this.a=new Xa}function Zm(){this.a=new LE}function ny(){this.a=new mo}function ty(){ty=O,_nt=new xk}function ey(){ey=O,Knt=new Nk}function iy(){iy=O,Ont=new c}function ry(){ry=O,znt=new cN}function cy(n){Gm.call(this,n)}function ay(n){Gm.call(this,n)}function uy(n){d4.call(this,n)}function oy(n){d4.call(this,n)}function sy(n){VK.call(this,n)}function hy(n){ySn.call(this,n)}function fy(n){CT.call(this,n)}function ly(n){OT.call(this,n)}function by(n){OT.call(this,n)}function wy(n){OT.call(this,n)}function dy(n){fz.call(this,n)}function gy(n){dy.call(this,n)}function py(){Pl.call(this,{})}function vy(n){CL(),this.a=n}function my(n){n.b=null,n.c=0}function yy(n,t){n.e=t,Cxn(n,t)}function ky(n,t){n.a=t,aCn(n)}function jy(n,t,e){n.a[t.g]=e}function Ey(n,t,e){wjn(e,n,t)}function Ty(n,t){ZR(t.i,n.n)}function My(n,t){ssn(n).td(t)}function Sy(n,t){return n*n/t}function Py(n,t){return n.g-t.g}function Cy(n){return new Sl(n)}function Iy(n){return new GX(n)}function Oy(n){dy.call(this,n)}function Ay(n){dy.call(this,n)}function $y(n){dy.call(this,n)}function Ly(n){fz.call(this,n)}function Ny(n){_cn(),this.a=n}function xy(n){a_(),this.a=n}function Dy(n){FG(),this.f=n}function Ry(n){FG(),this.f=n}function Ky(n){dy.call(this,n)}function _y(n){dy.call(this,n)}function Fy(n){dy.call(this,n)}function By(n){dy.call(this,n)}function Hy(n){dy.call(this,n)}function qy(n){return kW(n),n}function Gy(n){return kW(n),n}function zy(n){return kW(n),n}function Uy(n){return kW(n),n}function Xy(n){return kW(n),n}function Wy(n){return n.b==n.c}function Vy(n){return!!n&&n.b}function Qy(n){return!!n&&n.k}function Yy(n){return!!n&&n.j}function Jy(n){kW(n),this.a=n}function Zy(n){return Zon(n),n}function nk(n){vU(n,n.length)}function tk(n){dy.call(this,n)}function ek(n){dy.call(this,n)}function ik(n){dy.call(this,n)}function rk(n){dy.call(this,n)}function ck(n){dy.call(this,n)}function ak(n){dy.call(this,n)}function uk(n){ZN.call(this,n,0)}function ok(){o1.call(this,12,3)}function sk(){sk=O,ttt=new j}function hk(){hk=O,Ynt=new r}function fk(){fk=O,rtt=new g}function lk(){lk=O,htt=new v}function bk(){throw Hp(new pv)}function wk(){throw Hp(new pv)}function dk(){throw Hp(new pv)}function gk(){throw Hp(new pv)}function pk(){throw Hp(new pv)}function vk(){throw Hp(new pv)}function mk(){this.a=SD(yX(FWn))}function yk(n){s_(),this.a=yX(n)}function kk(n,t){n.Td(t),t.Sd(n)}function jk(n,t){n.a.ec().Mc(t)}function Ek(n,t,e){n.c.lf(t,e)}function Tk(n){Ay.call(this,n)}function Mk(n){_y.call(this,n)}function Sk(){Ab.call(this,"")}function Pk(){Ab.call(this,"")}function Ck(){Ab.call(this,"")}function Ik(){Ab.call(this,"")}function Ok(n){Ay.call(this,n)}function Ak(n){Hb.call(this,n)}function $k(n){bN.call(this,n)}function Lk(n){Ak.call(this,n)}function Nk(){tl.call(this,null)}function xk(){tl.call(this,null)}function Dk(){Dk=O,PY()}function Rk(){Rk=O,ket=mEn()}function Kk(n){return n.a?n.b:0}function _k(n){return n.a?n.b:0}function Fk(n,t){return n.a-t.a}function Bk(n,t){return n.a-t.a}function Hk(n,t){return n.a-t.a}function qk(n,t){return m7(n,t)}function Gk(n,t){return gZ(n,t)}function zk(n,t){return t in n.a}function Uk(n,t){return n.f=t,n}function Xk(n,t){return n.b=t,n}function Wk(n,t){return n.c=t,n}function Vk(n,t){return n.g=t,n}function Qk(n,t){return n.a=t,n}function Yk(n,t){return n.f=t,n}function Jk(n,t){return n.k=t,n}function Zk(n,t){return n.a=t,n}function nj(n,t){return n.e=t,n}function tj(n,t){return n.e=t,n}function ej(n,t){return n.f=t,n}function ij(n,t){n.b=!0,n.d=t}function rj(n,t){n.b=new wA(t)}function cj(n,t,e){t.td(n.a[e])}function aj(n,t,e){t.we(n.a[e])}function uj(n,t){return n.b-t.b}function oj(n,t){return n.g-t.g}function sj(n,t){return n.s-t.s}function hj(n,t){return n?0:t-1}function fj(n,t){return n?0:t-1}function lj(n,t){return n?t-1:0}function bj(n,t){return t.Yf(n)}function wj(n,t){return n.b=t,n}function dj(n,t){return n.a=t,n}function gj(n,t){return n.c=t,n}function pj(n,t){return n.d=t,n}function vj(n,t){return n.e=t,n}function mj(n,t){return n.f=t,n}function yj(n,t){return n.a=t,n}function kj(n,t){return n.b=t,n}function jj(n,t){return n.c=t,n}function Ej(n,t){return n.c=t,n}function Tj(n,t){return n.b=t,n}function Mj(n,t){return n.d=t,n}function Sj(n,t){return n.e=t,n}function Pj(n,t){return n.f=t,n}function Cj(n,t){return n.g=t,n}function Ij(n,t){return n.a=t,n}function Oj(n,t){return n.i=t,n}function Aj(n,t){return n.j=t,n}function $j(n,t){return n.k=t,n}function Lj(n,t){return n.j=t,n}function Nj(n,t){_Mn(),CZ(t,n)}function xj(n,t,e){GG(n.a,t,e)}function Dj(n){BV.call(this,n)}function Rj(n){BV.call(this,n)}function Kj(n){n_.call(this,n)}function _j(n){qbn.call(this,n)}function Fj(n){gtn.call(this,n)}function Bj(n){pQ.call(this,n)}function Hj(n){pQ.call(this,n)}function qj(){O$.call(this,"")}function Gj(){this.a=0,this.b=0}function zj(){this.b=0,this.a=0}function Uj(n,t){n.b=0,Nen(n,t)}function Xj(n,t){n.c=t,n.b=!0}function Wj(n,t){return n.c._b(t)}function Vj(n){return n.e&&n.e()}function Qj(n){return n?n.d:null}function Yj(n,t){return gfn(n.b,t)}function Jj(n){return n?n.g:null}function Zj(n){return n?n.i:null}function nE(n){return ED(n),n.o}function tE(){tE=O,dOt=Xkn()}function eE(){eE=O,gOt=oTn()}function iE(){iE=O,n$t=Vkn()}function rE(){rE=O,dLt=Wkn()}function cE(){cE=O,gLt=iCn()}function aE(){aE=O,lAt=cin()}function uE(){throw Hp(new pv)}function oE(){throw Hp(new pv)}function sE(){throw Hp(new pv)}function hE(){throw Hp(new pv)}function fE(){throw Hp(new pv)}function lE(){throw Hp(new pv)}function bE(n){this.a=new XT(n)}function wE(n){lUn(),DXn(this,n)}function dE(n){this.a=new Wz(n)}function gE(n,t){for(;n.ye(t););}function pE(n,t){for(;n.sd(t););}function vE(n,t){return n.a+=t,n}function mE(n,t){return n.a+=t,n}function yE(n,t){return n.a+=t,n}function kE(n,t){return n.a+=t,n}function jE(n){return EW(n),n.a}function EE(n){return n.b!=n.d.c}function TE(n){return n.l|n.m<<22}function ME(n,t){return n.d[t.p]}function SE(n,t){return Sxn(n,t)}function PE(n,t,e){n.splice(t,e)}function CE(n){n.c?NDn(n):xDn(n)}function IE(n){this.a=0,this.b=n}function OE(){this.a=new CNn(ijt)}function AE(){this.b=new CNn(qyt)}function $E(){this.b=new CNn(WEt)}function LE(){this.b=new CNn(WEt)}function NE(){throw Hp(new pv)}function xE(){throw Hp(new pv)}function DE(){throw Hp(new pv)}function RE(){throw Hp(new pv)}function KE(){throw Hp(new pv)}function _E(){throw Hp(new pv)}function FE(){throw Hp(new pv)}function BE(){throw Hp(new pv)}function HE(){throw Hp(new pv)}function qE(){throw Hp(new pv)}function GE(){throw Hp(new yv)}function zE(){throw Hp(new yv)}function UE(n){this.a=new XE(n)}function XE(n){Gin(this,n,OEn())}function WE(n){return!n||pW(n)}function VE(n){return-1!=WLt[n]}function QE(){0!=ctt&&(ctt=0),utt=-1}function YE(){null==PWn&&(PWn=[])}function JE(n,t){tAn(QQ(n.a),t)}function ZE(n,t){tAn(QQ(n.a),t)}function nT(n,t){HL.call(this,n,t)}function tT(n,t){nT.call(this,n,t)}function eT(n,t){this.b=n,this.c=t}function iT(n,t){this.b=n,this.a=t}function rT(n,t){this.a=n,this.b=t}function cT(n,t){this.a=n,this.b=t}function aT(n,t){this.a=n,this.b=t}function uT(n,t){this.a=n,this.b=t}function oT(n,t){this.a=n,this.b=t}function sT(n,t){this.a=n,this.b=t}function hT(n,t){this.a=n,this.b=t}function fT(n,t){this.a=n,this.b=t}function lT(n,t){this.b=n,this.a=t}function bT(n,t){this.b=n,this.a=t}function wT(n,t){this.b=n,this.a=t}function dT(n,t){this.b=n,this.a=t}function gT(n,t){this.f=n,this.g=t}function pT(n,t){this.e=n,this.d=t}function vT(n,t){this.g=n,this.i=t}function mT(n,t){this.a=n,this.b=t}function yT(n,t){this.a=n,this.f=t}function kT(n,t){this.b=n,this.c=t}function jT(n,t){this.a=n,this.b=t}function ET(n,t){this.a=n,this.b=t}function TT(n,t){this.a=n,this.b=t}function MT(n){aN(n.dc()),this.c=n}function ST(n){this.b=BB(yX(n),83)}function PT(n){this.a=BB(yX(n),83)}function CT(n){this.a=BB(yX(n),15)}function IT(n){this.a=BB(yX(n),15)}function OT(n){this.b=BB(yX(n),47)}function AT(){this.q=new e.Date}function $T(){$T=O,Btt=new A}function LT(){LT=O,bet=new P}function NT(n){return n.f.c+n.g.c}function xT(n,t){return n.b.Hc(t)}function DT(n,t){return n.b.Ic(t)}function RT(n,t){return n.b.Qc(t)}function KT(n,t){return n.b.Hc(t)}function _T(n,t){return n.c.uc(t)}function FT(n,t){return n.a._b(t)}function BT(n,t){return Nfn(n.c,t)}function HT(n,t){return hU(n.b,t)}function qT(n,t){return n>t&&t<OVn}function GT(n,t){return n.Gc(t),n}function zT(n,t){return Frn(n,t),n}function UT(n){return XX(),n?stt:ott}function XT(n){non.call(this,n,0)}function WT(){Wz.call(this,null)}function VT(){B8.call(this,null)}function QT(n){this.c=n,Ann(this)}function YT(){P$(this),yQ(this)}function JT(n,t){EW(n),n.a.Nb(t)}function ZT(n,t){return n.Gc(t),n}function nM(n,t){return n.a.f=t,n}function tM(n,t){return n.a.d=t,n}function eM(n,t){return n.a.g=t,n}function iM(n,t){return n.a.j=t,n}function rM(n,t){return n.a.a=t,n}function cM(n,t){return n.a.d=t,n}function aM(n,t){return n.a.e=t,n}function uM(n,t){return n.a.g=t,n}function oM(n,t){return n.a.f=t,n}function sM(n){return n.b=!1,n}function hM(){hM=O,Pet=new CO}function fM(){fM=O,Cet=new IO}function lM(){lM=O,Het=new U}function bM(){bM=O,vut=new Kt}function wM(){wM=O,rct=new Ix}function dM(){dM=O,tit=new hn}function gM(){gM=O,kut=new _t}function pM(){pM=O,sit=new dn}function vM(){vM=O,Gat=new yt}function mM(){mM=O,Fut=new Gj}function yM(){yM=O,zat=new Pt}function kM(){kM=O,Vat=new DG}function jM(){jM=O,hut=new Mt}function EM(){EM=O,But=new be}function TM(){TM=O,nst=new Ye}function MM(){MM=O,wst=new Lr}function SM(){SM=O,Qst=new rc}function PM(){PM=O,Wkt=new B2}function CM(){CM=O,XEt=new LM}function IM(){IM=O,QEt=new vD}function OM(){OM=O,GTt=new XW}function AM(){AM=O,Wpt=new Wu}function $M(){Sin(),this.c=new ok}function LM(){gT.call(this,H1n,0)}function NM(n,t){Jgn(n.c.b,t.c,t)}function xM(n,t){Jgn(n.c.c,t.b,t)}function DM(n,t,e){mZ(n.d,t.f,e)}function RM(n,t,e,i){Jpn(n,i,t,e)}function KM(n,t,e,i){uNn(i,n,t,e)}function _M(n,t,e,i){oUn(i,n,t,e)}function FM(n,t){return n.a=t.g,n}function BM(n,t){return ekn(n.a,t)}function HM(n){return n.b?n.b:n.a}function qM(n){return(n.c+n.a)/2}function GM(){GM=O,lOt=new to}function zM(){zM=O,COt=new ho}function UM(){UM=O,RAt=new Pm}function XM(){XM=O,UAt=new Cm}function WM(){WM=O,zAt=new Nm}function VM(){VM=O,ZAt=new Dm}function QM(){QM=O,N$t=new z$}function YM(){YM=O,x$t=new U$}function JM(){JM=O,rLt=new Ns}function ZM(){ZM=O,aLt=new xs}function nS(){nS=O,mAt=new xp}function tS(){tS=O,V$t=new Np}function eS(){eS=O,MNt=new Kh}function iS(n){e.clearTimeout(n)}function rS(n){this.a=BB(yX(n),224)}function cS(n){return BB(n,42).cd()}function aS(n){return n.b<n.d.gc()}function uS(n,t){return CG(n.a,t)}function oS(n,t){return Vhn(n,t)>0}function sS(n,t){return Vhn(n,t)<0}function hS(n,t){return n.a.get(t)}function fS(n,t){return t.split(n)}function lS(n,t){return hU(n.e,t)}function bS(n){return kW(n),!1}function wS(n){w1.call(this,n,21)}function dS(n,t){_J.call(this,n,t)}function gS(n,t){gT.call(this,n,t)}function pS(n,t){gT.call(this,n,t)}function vS(n){VX(),VK.call(this,n)}function mS(n,t){jG(n,n.length,t)}function yS(n,t){QU(n,n.length,t)}function kS(n,t,e){t.ud(n.a.Ge(e))}function jS(n,t,e){t.we(n.a.Fe(e))}function ES(n,t,e){t.td(n.a.Kb(e))}function TS(n,t,e){n.Mb(e)&&t.td(e)}function MS(n,t,e){n.splice(t,0,e)}function SS(n,t){return SN(n.e,t)}function PS(n,t){this.d=n,this.e=t}function CS(n,t){this.b=n,this.a=t}function IS(n,t){this.b=n,this.a=t}function OS(n,t){this.b=n,this.a=t}function AS(n,t){this.a=n,this.b=t}function $S(n,t){this.a=n,this.b=t}function LS(n,t){this.a=n,this.b=t}function NS(n,t){this.a=n,this.b=t}function xS(n,t){this.a=n,this.b=t}function DS(n,t){this.b=n,this.a=t}function RS(n,t){this.b=n,this.a=t}function KS(n,t){gT.call(this,n,t)}function _S(n,t){gT.call(this,n,t)}function FS(n,t){gT.call(this,n,t)}function BS(n,t){gT.call(this,n,t)}function HS(n,t){gT.call(this,n,t)}function qS(n,t){gT.call(this,n,t)}function GS(n,t){gT.call(this,n,t)}function zS(n,t){gT.call(this,n,t)}function US(n,t){gT.call(this,n,t)}function XS(n,t){gT.call(this,n,t)}function WS(n,t){gT.call(this,n,t)}function VS(n,t){gT.call(this,n,t)}function QS(n,t){gT.call(this,n,t)}function YS(n,t){gT.call(this,n,t)}function JS(n,t){gT.call(this,n,t)}function ZS(n,t){gT.call(this,n,t)}function nP(n,t){gT.call(this,n,t)}function tP(n,t){gT.call(this,n,t)}function eP(n,t){this.a=n,this.b=t}function iP(n,t){this.a=n,this.b=t}function rP(n,t){this.a=n,this.b=t}function cP(n,t){this.a=n,this.b=t}function aP(n,t){this.a=n,this.b=t}function uP(n,t){this.a=n,this.b=t}function oP(n,t){this.a=n,this.b=t}function sP(n,t){this.a=n,this.b=t}function hP(n,t){this.a=n,this.b=t}function fP(n,t){this.b=n,this.a=t}function lP(n,t){this.b=n,this.a=t}function bP(n,t){this.b=n,this.a=t}function wP(n,t){this.b=n,this.a=t}function dP(n,t){this.c=n,this.d=t}function gP(n,t){this.e=n,this.d=t}function pP(n,t){this.a=n,this.b=t}function vP(n,t){this.b=t,this.c=n}function mP(n,t){gT.call(this,n,t)}function yP(n,t){gT.call(this,n,t)}function kP(n,t){gT.call(this,n,t)}function jP(n,t){gT.call(this,n,t)}function EP(n,t){gT.call(this,n,t)}function TP(n,t){gT.call(this,n,t)}function MP(n,t){gT.call(this,n,t)}function SP(n,t){gT.call(this,n,t)}function PP(n,t){gT.call(this,n,t)}function CP(n,t){gT.call(this,n,t)}function IP(n,t){gT.call(this,n,t)}function OP(n,t){gT.call(this,n,t)}function AP(n,t){gT.call(this,n,t)}function $P(n,t){gT.call(this,n,t)}function LP(n,t){gT.call(this,n,t)}function NP(n,t){gT.call(this,n,t)}function xP(n,t){gT.call(this,n,t)}function DP(n,t){gT.call(this,n,t)}function RP(n,t){gT.call(this,n,t)}function KP(n,t){gT.call(this,n,t)}function _P(n,t){gT.call(this,n,t)}function FP(n,t){gT.call(this,n,t)}function BP(n,t){gT.call(this,n,t)}function HP(n,t){gT.call(this,n,t)}function qP(n,t){gT.call(this,n,t)}function GP(n,t){gT.call(this,n,t)}function zP(n,t){gT.call(this,n,t)}function UP(n,t){gT.call(this,n,t)}function XP(n,t){gT.call(this,n,t)}function WP(n,t){gT.call(this,n,t)}function VP(n,t){gT.call(this,n,t)}function QP(n,t){gT.call(this,n,t)}function YP(n,t){gT.call(this,n,t)}function JP(n,t){gT.call(this,n,t)}function ZP(n,t){this.b=n,this.a=t}function nC(n,t){this.a=n,this.b=t}function tC(n,t){this.a=n,this.b=t}function eC(n,t){this.a=n,this.b=t}function iC(n,t){this.a=n,this.b=t}function rC(n,t){gT.call(this,n,t)}function cC(n,t){gT.call(this,n,t)}function aC(n,t){this.b=n,this.d=t}function uC(n,t){gT.call(this,n,t)}function oC(n,t){gT.call(this,n,t)}function sC(n,t){this.a=n,this.b=t}function hC(n,t){this.a=n,this.b=t}function fC(n,t){gT.call(this,n,t)}function lC(n,t){gT.call(this,n,t)}function bC(n,t){gT.call(this,n,t)}function wC(n,t){gT.call(this,n,t)}function dC(n,t){gT.call(this,n,t)}function gC(n,t){gT.call(this,n,t)}function pC(n,t){gT.call(this,n,t)}function vC(n,t){gT.call(this,n,t)}function mC(n,t){gT.call(this,n,t)}function yC(n,t){gT.call(this,n,t)}function kC(n,t){gT.call(this,n,t)}function jC(n,t){gT.call(this,n,t)}function EC(n,t){gT.call(this,n,t)}function TC(n,t){gT.call(this,n,t)}function MC(n,t){gT.call(this,n,t)}function SC(n,t){gT.call(this,n,t)}function PC(n,t){return SN(n.c,t)}function CC(n,t){return SN(t.b,n)}function IC(n,t){return-n.b.Je(t)}function OC(n,t){return SN(n.g,t)}function AC(n,t){gT.call(this,n,t)}function $C(n,t){gT.call(this,n,t)}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function xC(n,t){this.a=n,this.b=t}function DC(n,t){gT.call(this,n,t)}function RC(n,t){gT.call(this,n,t)}function KC(n,t){gT.call(this,n,t)}function _C(n,t){gT.call(this,n,t)}function FC(n,t){gT.call(this,n,t)}function BC(n,t){gT.call(this,n,t)}function HC(n,t){gT.call(this,n,t)}function qC(n,t){gT.call(this,n,t)}function GC(n,t){gT.call(this,n,t)}function zC(n,t){gT.call(this,n,t)}function UC(n,t){gT.call(this,n,t)}function XC(n,t){gT.call(this,n,t)}function WC(n,t){gT.call(this,n,t)}function VC(n,t){gT.call(this,n,t)}function QC(n,t){gT.call(this,n,t)}function YC(n,t){gT.call(this,n,t)}function JC(n,t){this.a=n,this.b=t}function ZC(n,t){this.a=n,this.b=t}function nI(n,t){this.a=n,this.b=t}function tI(n,t){this.a=n,this.b=t}function eI(n,t){this.a=n,this.b=t}function iI(n,t){this.a=n,this.b=t}function rI(n,t){this.a=n,this.b=t}function cI(n,t){gT.call(this,n,t)}function aI(n,t){this.a=n,this.b=t}function uI(n,t){this.a=n,this.b=t}function oI(n,t){this.a=n,this.b=t}function sI(n,t){this.a=n,this.b=t}function hI(n,t){this.a=n,this.b=t}function fI(n,t){this.a=n,this.b=t}function lI(n,t){this.b=n,this.a=t}function bI(n,t){this.b=n,this.a=t}function wI(n,t){this.b=n,this.a=t}function dI(n,t){this.b=n,this.a=t}function gI(n,t){this.a=n,this.b=t}function pI(n,t){this.a=n,this.b=t}function vI(n,t){JLn(n.a,BB(t,56))}function mI(n,t){v7(n.a,BB(t,11))}function yI(n,t){return hH(),t!=n}function kI(){return Rk(),new ket}function jI(){qZ(),this.b=new Rv}function EI(){dxn(),this.a=new Rv}function TI(){KZ(),KG.call(this)}function MI(n,t){gT.call(this,n,t)}function SI(n,t){this.a=n,this.b=t}function PI(n,t){this.a=n,this.b=t}function CI(n,t){this.a=n,this.b=t}function II(n,t){this.a=n,this.b=t}function OI(n,t){this.a=n,this.b=t}function AI(n,t){this.a=n,this.b=t}function $I(n,t){this.d=n,this.b=t}function LI(n,t){this.d=n,this.e=t}function NI(n,t){this.f=n,this.c=t}function xI(n,t){this.b=n,this.c=t}function DI(n,t){this.i=n,this.g=t}function RI(n,t){this.e=n,this.a=t}function KI(n,t){this.a=n,this.b=t}function _I(n,t){n.i=null,arn(n,t)}function FI(n,t){n&&VW(hAt,n,t)}function BI(n,t){return rdn(n.a,t)}function HI(n){return adn(n.c,n.b)}function qI(n){return n?n.dd():null}function GI(n){return null==n?null:n}function zI(n){return typeof n===$Wn}function UI(n){return typeof n===LWn}function XI(n){return typeof n===NWn}function WI(n,t){return n.Hd().Xb(t)}function VI(n,t){return Qcn(n.Kc(),t)}function QI(n,t){return 0==Vhn(n,t)}function YI(n,t){return Vhn(n,t)>=0}function JI(n,t){return 0!=Vhn(n,t)}function ZI(n){return""+(kW(n),n)}function nO(n,t){return n.substr(t)}function tO(n){return zbn(n),n.d.gc()}function eO(n){return zOn(n,n.c),n}function iO(n){return JH(null==n),n}function rO(n,t){return n.a+=""+t,n}function cO(n,t){return n.a+=""+t,n}function aO(n,t){return n.a+=""+t,n}function uO(n,t){return n.a+=""+t,n}function oO(n,t){return n.a+=""+t,n}function sO(n,t){return n.a+=""+t,n}function hO(n,t){r5(n,t,n.a,n.a.a)}function fO(n,t){r5(n,t,n.c.b,n.c)}function lO(n,t,e){Kjn(t,RPn(n,e))}function bO(n,t,e){Kjn(t,RPn(n,e))}function wO(n,t){Tnn(new AL(n),t)}function dO(n,t){n.q.setTime(j2(t))}function gO(n,t){zz.call(this,n,t)}function pO(n,t){zz.call(this,n,t)}function vO(n,t){zz.call(this,n,t)}function mO(n){$U(this),Tcn(this,n)}function yO(n){return l1(n,0),null}function kO(n){return n.a=0,n.b=0,n}function jO(n,t){return n.a=t.g+1,n}function EO(n,t){return 2==n.j[t.p]}function TO(n){return sX(BB(n,79))}function MO(){MO=O,Art=lhn(tpn())}function SO(){SO=O,Zot=lhn(ENn())}function PO(){this.b=new XT(etn(12))}function CO(){this.b=0,this.a=!1}function IO(){this.b=0,this.a=!1}function OO(n){this.a=n,Bh.call(this)}function AO(n){this.a=n,Bh.call(this)}function $O(n,t){iR.call(this,n,t)}function LO(n,t){tK.call(this,n,t)}function NO(n,t){DI.call(this,n,t)}function xO(n,t){Aan.call(this,n,t)}function DO(n,t){QN.call(this,n,t)}function RO(n,t){nS(),VW(mAt,n,t)}function KO(n,t){return fx(n.a,0,t)}function _O(n,t){return n.a.a.a.cc(t)}function FO(n,t){return GI(n)===GI(t)}function BO(n,t){return Pln(n.a,t.a)}function HO(n,t){return E$(n.a,t.a)}function qO(n,t){return FU(n.a,t.a)}function GO(n,t){return n.indexOf(t)}function zO(n,t){return n==t?0:n?1:-1}function UO(n){return n<10?"0"+n:""+n}function XO(n){return yX(n),new OO(n)}function WO(n){return M$(n.l,n.m,n.h)}function VO(n){return CJ((kW(n),n))}function QO(n){return CJ((kW(n),n))}function YO(n,t){return E$(n.g,t.g)}function JO(n){return typeof n===LWn}function ZO(n){return n==Zat||n==eut}function nA(n){return n==Zat||n==nut}function tA(n){return E7(n.b.b,n,0)}function eA(n){this.a=kI(),this.b=n}function iA(n){this.a=kI(),this.b=n}function rA(n,t){return WB(n.a,t),t}function cA(n,t){return WB(n.c,t),n}function aA(n,t){return Jcn(n.a,t),n}function uA(n,t){return G_(),t.a+=n}function oA(n,t){return G_(),t.a+=n}function sA(n,t){return G_(),t.c+=n}function hA(n,t){z9(n,0,n.length,t)}function fA(){ew.call(this,new v4)}function lA(){uG.call(this,0,0,0,0)}function bA(){UV.call(this,0,0,0,0)}function wA(n){this.a=n.a,this.b=n.b}function dA(n){return n==_Pt||n==FPt}function gA(n){return n==HPt||n==KPt}function pA(n){return n==fvt||n==hvt}function vA(n){return n!=QCt&&n!=YCt}function mA(n){return n.Lg()&&n.Mg()}function yA(n){return mV(BB(n,118))}function kA(n){return Jcn(new B2,n)}function jA(n,t){return new Aan(t,n)}function EA(n,t){return new Aan(t,n)}function TA(n,t,e){jen(n,t),Een(n,e)}function MA(n,t,e){Sen(n,t),Men(n,e)}function SA(n,t,e){Pen(n,t),Cen(n,e)}function PA(n,t,e){Ten(n,t),Oen(n,e)}function CA(n,t,e){Ien(n,t),Aen(n,e)}function IA(n,t){Dsn(n,t),xen(n,n.D)}function OA(n){NI.call(this,n,!0)}function AA(n,t,e){ND.call(this,n,t,e)}function $A(n){ODn(),san.call(this,n)}function LA(){gS.call(this,"Head",1)}function NA(){gS.call(this,"Tail",3)}function xA(n){n.c=x8(Ant,HWn,1,0,5,1)}function DA(n){n.a=x8(Ant,HWn,1,8,5,1)}function RA(n){Otn(n.xf(),new Sw(n))}function KA(n){return null!=n?nsn(n):0}function _A(n,t){return Ctn(t,WJ(n))}function FA(n,t){return Ctn(t,WJ(n))}function BA(n,t){return n[n.length]=t}function HA(n,t){return n[n.length]=t}function qA(n){return FB(n.b.Kc(),n.a)}function GA(n,t){return Uin(PX(n.d),t)}function zA(n,t){return Uin(PX(n.g),t)}function UA(n,t){return Uin(PX(n.j),t)}function XA(n,t){iR.call(this,n.b,t)}function WA(n){uG.call(this,n,n,n,n)}function VA(n){return n.b&&VBn(n),n.a}function QA(n){return n.b&&VBn(n),n.c}function YA(n,t){Qet||(n.b=t)}function JA(n,t,e){return $X(n,t,e),e}function ZA(n,t,e){$X(n.c[t.g],t.g,e)}function n$(n,t,e){BB(n.c,69).Xh(t,e)}function t$(n,t,e){SA(e,e.i+n,e.j+t)}function e$(n,t){f9(a4(n.a),e1(t))}function i$(n,t){f9(H7(n.a),i1(t))}function r$(n){wWn(),Ap.call(this,n)}function c$(n){return null==n?0:nsn(n)}function a$(){a$=O,syt=new Hbn(oCt)}function u$(){u$=O,new o$,new Np}function o$(){new xp,new xp,new xp}function s$(){s$=O,Mv(),itt=new xp}function h$(){h$=O,e.Math.log(2)}function f$(){f$=O,zM(),R$t=COt}function l$(){throw Hp(new tk(Tnt))}function b$(){throw Hp(new tk(Tnt))}function w$(){throw Hp(new tk(Mnt))}function d$(){throw Hp(new tk(Mnt))}function g$(n){this.a=n,QB.call(this,n)}function p$(n){this.a=n,ST.call(this,n)}function v$(n){this.a=n,ST.call(this,n)}function m$(n,t){yG(n.c,n.c.length,t)}function y$(n){return n.a<n.c.c.length}function k$(n){return n.a<n.c.a.length}function j$(n,t){return n.a?n.b:t.De()}function E$(n,t){return n<t?-1:n>t?1:0}function T$(n,t){return Vhn(n,t)>0?n:t}function M$(n,t,e){return{l:n,m:t,h:e}}function S$(n,t){null!=n.a&&mI(t,n.a)}function P$(n){n.a=new $,n.c=new $}function C$(n){this.b=n,this.a=new Np}function I$(n){this.b=new et,this.a=n}function O$(n){LR.call(this),this.a=n}function A$(){gS.call(this,"Range",2)}function $$(){tjn(),this.a=new CNn(Uat)}function L$(n,t){yX(t),EV(n).Jc(new b)}function N$(n,t){return BZ(),t.n.b+=n}function x$(n,t,e){return VW(n.g,e,t)}function D$(n,t,e){return VW(n.k,e,t)}function R$(n,t){return VW(n.a,t.a,t)}function K$(n,t,e){return Idn(t,e,n.c)}function _$(n){return new xC(n.c,n.d)}function F$(n){return new xC(n.c,n.d)}function B$(n){return new xC(n.a,n.b)}function H$(n,t){return tzn(n.a,t,null)}function q$(n){SZ(n,null),MZ(n,null)}function G$(n){WZ(n,null),VZ(n,null)}function z$(){QN.call(this,null,null)}function U$(){YN.call(this,null,null)}function X$(n){this.a=n,xp.call(this)}function W$(n){this.b=(SQ(),new Xb(n))}function V$(n){n.j=x8(Ftt,sVn,310,0,0,1)}function Q$(n,t,e){n.c.Vc(t,BB(e,133))}function Y$(n,t,e){n.c.ji(t,BB(e,133))}function J$(n,t){sqn(n),n.Gc(BB(t,15))}function Z$(n,t){return Bqn(n.c,n.b,t)}function nL(n,t){return new pN(n.Kc(),t)}function tL(n,t){return-1!=Fun(n.Kc(),t)}function eL(n,t){return null!=n.a.Bc(t)}function iL(n){return n.Ob()?n.Pb():null}function rL(n){return Bdn(n,0,n.length)}function cL(n,t){return null!=n&&Qpn(n,t)}function aL(n,t){n.q.setHours(t),lBn(n,t)}function uL(n,t){n.c&&(RH(t),kJ(t))}function oL(n,t,e){BB(n.Kb(e),164).Nb(t)}function sL(n,t,e){return HGn(n,t,e),e}function hL(n,t,e){n.a=1502^t,n.b=e^aYn}function fL(n,t,e){return n.a[t.g][e.g]}function lL(n,t){return n.a[t.c.p][t.p]}function bL(n,t){return n.e[t.c.p][t.p]}function wL(n,t){return n.c[t.c.p][t.p]}function dL(n,t){return n.j[t.p]=pLn(t)}function gL(n,t){return f6(n.f,t.tg())}function pL(n,t){return f6(n.b,t.tg())}function vL(n,t){return n.a<XK(t)?-1:1}function mL(n,t,e){return e?0!=t:t!=n-1}function yL(n,t,e){return n.a=t,n.b=e,n}function kL(n,t){return n.a*=t,n.b*=t,n}function jL(n,t,e){return $X(n.g,t,e),e}function EL(n,t,e,i){$X(n.a[t.g],e.g,i)}function TL(n,t){_x(t,n.a.a.a,n.a.a.b)}function ML(n){n.a=BB(yan(n.b.a,4),126)}function SL(n){n.a=BB(yan(n.b.a,4),126)}function PL(n){OY(n,i8n),HLn(n,IUn(n))}function CL(){CL=O,Set=new vy(null)}function IL(){(IL=O)(),$et=new z}function OL(){this.Bb|=256,this.Bb|=512}function AL(n){this.i=n,this.f=this.i.j}function $L(n,t,e){yH.call(this,n,t,e)}function LL(n,t,e){$L.call(this,n,t,e)}function NL(n,t,e){$L.call(this,n,t,e)}function xL(n,t,e){LL.call(this,n,t,e)}function DL(n,t,e){yH.call(this,n,t,e)}function RL(n,t,e){yH.call(this,n,t,e)}function KL(n,t,e){MH.call(this,n,t,e)}function _L(n,t,e){MH.call(this,n,t,e)}function FL(n,t,e){KL.call(this,n,t,e)}function BL(n,t,e){DL.call(this,n,t,e)}function HL(n,t){this.a=n,ST.call(this,t)}function qL(n,t){this.a=n,uk.call(this,t)}function GL(n,t){this.a=n,uk.call(this,t)}function zL(n,t){this.a=n,uk.call(this,t)}function UL(n){this.a=n,hl.call(this,n.d)}function XL(n){this.c=n,this.a=this.c.a}function WL(n,t){this.a=t,uk.call(this,n)}function VL(n,t){this.a=t,d4.call(this,n)}function QL(n,t){this.a=n,d4.call(this,t)}function YL(n,t){return wz(bz(n.c)).Xb(t)}function JL(n,t){return ebn(n,new Ck,t).a}function ZL(n,t){return yX(t),new nN(n,t)}function nN(n,t){this.a=t,OT.call(this,n)}function tN(n){this.b=n,this.a=this.b.a.e}function eN(n){n.b.Qb(),--n.d.f.d,$G(n.d)}function iN(n){tl.call(this,BB(yX(n),35))}function rN(n){tl.call(this,BB(yX(n),35))}function cN(){gT.call(this,"INSTANCE",0)}function aN(n){if(!n)throw Hp(new wv)}function uN(n){if(!n)throw Hp(new dv)}function oN(n){if(!n)throw Hp(new yv)}function sN(){sN=O,JM(),cLt=new Ff}function hN(){hN=O,ptt=!1,vtt=!0}function fN(n){Ab.call(this,(kW(n),n))}function lN(n){Ab.call(this,(kW(n),n))}function bN(n){Hb.call(this,n),this.a=n}function wN(n){qb.call(this,n),this.a=n}function dN(n){Ak.call(this,n),this.a=n}function gN(){V$(this),jQ(this),this._d()}function pN(n,t){this.a=t,OT.call(this,n)}function vN(n,t){return new KPn(n.a,n.b,t)}function mN(n,t){return n.lastIndexOf(t)}function yN(n,t,e){return n.indexOf(t,e)}function kN(n){return null==n?zWn:Bbn(n)}function jN(n){return null==n?null:n.name}function EN(n){return null!=n.a?n.a:null}function TN(n){return EE(n.a)?u1(n):null}function MN(n,t){return null!=$J(n.a,t)}function SN(n,t){return!!t&&n.b[t.g]==t}function PN(n){return n.$H||(n.$H=++cit)}function CN(n){return n.l+n.m*IQn+n.h*OQn}function IN(n,t){return WB(t.a,n.a),n.a}function ON(n,t){return WB(t.b,n.a),n.a}function AN(n,t){return WB(t.a,n.a),n.a}function $N(n){return Px(null!=n.a),n.a}function LN(n){ew.call(this,new q8(n))}function NN(n,t){Sgn.call(this,n,t,null)}function xN(n){this.a=n,Bb.call(this,n)}function DN(){DN=O,Lrt=new iR(dJn,0)}function RN(n,t){return++n.b,WB(n.a,t)}function KN(n,t){return++n.b,y7(n.a,t)}function _N(n,t){return Pln(n.n.a,t.n.a)}function FN(n,t){return Pln(n.c.d,t.c.d)}function BN(n,t){return Pln(n.c.c,t.c.c)}function HN(n,t){return BB(h6(n.b,t),15)}function qN(n,t){return n.n.b=(kW(t),t)}function GN(n,t){return n.n.b=(kW(t),t)}function zN(n){return y$(n.a)||y$(n.b)}function UN(n,t,e){return p3(n,t,e,n.b)}function XN(n,t,e){return p3(n,t,e,n.c)}function WN(n,t,e){BB(D7(n,t),21).Fc(e)}function VN(n,t,e){Oln(n.a,e),Ivn(n.a,t)}function QN(n,t){QM(),this.a=n,this.b=t}function YN(n,t){YM(),this.b=n,this.c=t}function JN(n,t){FG(),this.f=t,this.d=n}function ZN(n,t){w6(t,n),this.d=n,this.c=t}function nx(n){var t;t=n.a,n.a=n.b,n.b=t}function tx(n){return G_(),!!n&&!n.dc()}function ex(n){return new h4(3,n)}function ix(n,t){return new bK(n,n.gc(),t)}function rx(n){return ry(),Cnn((DZ(),Xnt),n)}function cx(n){this.d=n,AL.call(this,n)}function ax(n){this.c=n,AL.call(this,n)}function ux(n){this.c=n,cx.call(this,n)}function ox(){MM(),this.b=new yd(this)}function sx(n){return lin(n,AVn),new J6(n)}function hx(n){return PY(),parseInt(n)||-1}function fx(n,t,e){return n.substr(t,e-t)}function lx(n,t,e){return yN(n,YTn(t),e)}function bx(n){return VU(n.c,n.c.length)}function wx(n){return null!=n.f?n.f:""+n.g}function dx(n){return null!=n.f?n.f:""+n.g}function gx(n){return Px(0!=n.b),n.a.a.c}function px(n){return Px(0!=n.b),n.c.b.c}function vx(n){cL(n,150)&&BB(n,150).Gh()}function mx(n){return n.b=BB(mQ(n.a),42)}function yx(n){hM(),this.b=n,this.a=!0}function kx(n){fM(),this.b=n,this.a=!0}function jx(n){n.d=new Cx(n),n.e=new xp}function Ex(n){if(!n)throw Hp(new vv)}function Tx(n){if(!n)throw Hp(new wv)}function Mx(n){if(!n)throw Hp(new dv)}function Sx(n){if(!n)throw Hp(new lv)}function Px(n){if(!n)throw Hp(new yv)}function Cx(n){nH.call(this,n,null,null)}function Ix(){gT.call(this,"POLYOMINO",0)}function Ox(n,t,e,i){sz.call(this,n,t,e,i)}function Ax(n,t){return _Mn(),JIn(n,t.e,t)}function $x(n,t,e){return AM(),e.qg(n,t)}function Lx(n,t){return!!n.q&&hU(n.q,t)}function Nx(n,t){return n>0?t*t/n:t*t*100}function xx(n,t){return n>0?t/(n*n):100*t}function Dx(n,t,e){return WB(t,own(n,e))}function Rx(n,t,e){x9(),n.Xe(t)&&e.td(n)}function Kx(n,t,e){n.Zc(t).Rb(e)}function _x(n,t,e){return n.a+=t,n.b+=e,n}function Fx(n,t,e){return n.a*=t,n.b*=e,n}function Bx(n,t,e){return n.a-=t,n.b-=e,n}function Hx(n,t){return n.a=t.a,n.b=t.b,n}function qx(n){return n.a=-n.a,n.b=-n.b,n}function Gx(n){this.c=n,this.a=1,this.b=1}function zx(n){this.c=n,Pen(n,0),Cen(n,0)}function Ux(n){YT.call(this),nin(this,n)}function Xx(n){RXn(),Bp(this),this.mf(n)}function Wx(n,t){QM(),QN.call(this,n,t)}function Vx(n,t){YM(),YN.call(this,n,t)}function Qx(n,t){YM(),YN.call(this,n,t)}function Yx(n,t){YM(),Vx.call(this,n,t)}function Jx(n,t,e){y9.call(this,n,t,e,2)}function Zx(n,t){f$(),cG.call(this,n,t)}function nD(n,t){f$(),Zx.call(this,n,t)}function tD(n,t){f$(),Zx.call(this,n,t)}function eD(n,t){f$(),tD.call(this,n,t)}function iD(n,t){f$(),cG.call(this,n,t)}function rD(n,t){f$(),iD.call(this,n,t)}function cD(n,t){f$(),cG.call(this,n,t)}function aD(n,t){return n.c.Fc(BB(t,133))}function uD(n,t,e){return NHn(F7(n,t),e)}function oD(n,t,e){return t.Qk(n.e,n.c,e)}function sD(n,t,e){return t.Rk(n.e,n.c,e)}function hD(n,t){return tfn(n.e,BB(t,49))}function fD(n,t,e){sln(H7(n.a),t,i1(e))}function lD(n,t,e){sln(a4(n.a),t,e1(e))}function bD(n,t){t.$modCount=n.$modCount}function wD(){wD=O,Vkt=new up("root")}function dD(){dD=O,pAt=new Tm,new Mm}function gD(){this.a=new pJ,this.b=new pJ}function pD(){jin.call(this),this.Bb|=BQn}function vD(){gT.call(this,"GROW_TREE",0)}function mD(n){return null==n?null:wUn(n)}function yD(n){return null==n?null:LSn(n)}function kD(n){return null==n?null:Bbn(n)}function jD(n){return null==n?null:Bbn(n)}function ED(n){null==n.o&&g$n(n)}function TD(n){return JH(null==n||zI(n)),n}function MD(n){return JH(null==n||UI(n)),n}function SD(n){return JH(null==n||XI(n)),n}function PD(n){this.q=new e.Date(j2(n))}function CD(n,t){this.c=n,pT.call(this,n,t)}function ID(n,t){this.a=n,CD.call(this,n,t)}function OD(n,t){this.d=n,Mb(this),this.b=t}function AD(n,t){B8.call(this,n),this.a=t}function $D(n,t){B8.call(this,n),this.a=t}function LD(n){qwn.call(this,0,0),this.f=n}function ND(n,t,e){W6.call(this,n,t,e,null)}function xD(n,t,e){W6.call(this,n,t,e,null)}function DD(n,t,e){return n.ue(t,e)<=0?e:t}function RD(n,t,e){return n.ue(t,e)<=0?t:e}function KD(n,t){return BB(lnn(n.b,t),149)}function _D(n,t){return BB(lnn(n.c,t),229)}function FD(n){return BB(xq(n.a,n.b),287)}function BD(n){return new xC(n.c,n.d+n.a)}function HD(n){return BZ(),pA(BB(n,197))}function qD(){qD=O,$rt=nbn((mdn(),_It))}function GD(n,t){t.a?Fxn(n,t):MN(n.a,t.b)}function zD(n,t){Qet||WB(n.a,t)}function UD(n,t){return mM(),wan(t.d.i,n)}function XD(n,t){return Irn(),new cKn(t,n)}function WD(n,t){return OY(t,uJn),n.f=t,n}function VD(n,t,e){return e=T_n(n,t,3,e)}function QD(n,t,e){return e=T_n(n,t,6,e)}function YD(n,t,e){return e=T_n(n,t,9,e)}function JD(n,t,e){++n.j,n.Ki(),L8(n,t,e)}function ZD(n,t,e){++n.j,n.Hi(t,n.oi(t,e))}function nR(n,t,e){n.Zc(t).Rb(e)}function tR(n,t,e){return ZBn(n.c,n.b,t,e)}function eR(n,t){return(t&DWn)%n.d.length}function iR(n,t){up.call(this,n),this.a=t}function rR(n,t){kp.call(this,n),this.a=t}function cR(n,t){kp.call(this,n),this.a=t}function aR(n,t){this.c=n,gtn.call(this,t)}function uR(n,t){this.a=n,yp.call(this,t)}function oR(n,t){this.a=n,yp.call(this,t)}function sR(n){this.a=(lin(n,AVn),new J6(n))}function hR(n){this.a=(lin(n,AVn),new J6(n))}function fR(n){return!n.a&&(n.a=new w),n.a}function lR(n){return n>8?0:n+1}function bR(n,t){return hN(),n==t?0:n?1:-1}function wR(n,t,e){return mG(n,BB(t,22),e)}function dR(n,t,e){return n.apply(t,e)}function gR(n,t,e){return n.a+=Bdn(t,0,e),n}function pR(n,t){var e;return e=n.e,n.e=t,e}function vR(n,t){n[iYn].call(n,t)}function mR(n,t){n[iYn].call(n,t)}function yR(n,t){n.a.Vc(n.b,t),++n.b,n.c=-1}function kR(n){$U(n.e),n.d.b=n.d,n.d.a=n.d}function jR(n){n.b?jR(n.b):n.f.c.zc(n.e,n.d)}function ER(n,t,e){dM(),Il(n,t.Ce(n.a,e))}function TR(n,t){return Qj(Mdn(n.a,t,!0))}function MR(n,t){return Qj(Sdn(n.a,t,!0))}function SR(n,t){return qk(new Array(t),n)}function PR(n){return String.fromCharCode(n)}function CR(n){return null==n?null:n.message}function IR(){this.a=new Np,this.b=new Np}function OR(){this.a=new bt,this.b=new Tv}function AR(){this.b=new Gj,this.c=new Np}function $R(){this.d=new Gj,this.e=new Gj}function LR(){this.n=new Gj,this.o=new Gj}function NR(){this.n=new bm,this.i=new bA}function xR(){this.a=new nf,this.b=new uc}function DR(){this.a=new Np,this.d=new Np}function RR(){this.b=new Rv,this.a=new Rv}function KR(){this.b=new xp,this.a=new xp}function _R(){this.b=new AE,this.a=new da}function FR(){NR.call(this),this.a=new Gj}function BR(n){Oan.call(this,n,(Z9(),Net))}function HR(n,t,e,i){uG.call(this,n,t,e,i)}function qR(n,t,e){null!=e&&Lin(t,Amn(n,e))}function GR(n,t,e){null!=e&&Nin(t,Amn(n,e))}function zR(n,t,e){return e=T_n(n,t,11,e)}function UR(n,t){return n.a+=t.a,n.b+=t.b,n}function XR(n,t){return n.a-=t.a,n.b-=t.b,n}function WR(n,t){return n.n.a=(kW(t),t+10)}function VR(n,t){return n.n.a=(kW(t),t+10)}function QR(n,t){return t==n||Sjn(CLn(t),n)}function YR(n,t){return null==VW(n.a,t,"")}function JR(n,t){return mM(),!wan(t.d.i,n)}function ZR(n,t){dA(n.f)?c$n(n,t):ITn(n,t)}function nK(n,t){return t.Hh(n.a)}function tK(n,t){Ay.call(this,e9n+n+o8n+t)}function eK(n,t,e,i){eU.call(this,n,t,e,i)}function iK(n,t,e,i){eU.call(this,n,t,e,i)}function rK(n,t,e,i){iK.call(this,n,t,e,i)}function cK(n,t,e,i){iU.call(this,n,t,e,i)}function aK(n,t,e,i){iU.call(this,n,t,e,i)}function uK(n,t,e,i){iU.call(this,n,t,e,i)}function oK(n,t,e,i){aK.call(this,n,t,e,i)}function sK(n,t,e,i){aK.call(this,n,t,e,i)}function hK(n,t,e,i){uK.call(this,n,t,e,i)}function fK(n,t,e,i){sK.call(this,n,t,e,i)}function lK(n,t,e,i){Zz.call(this,n,t,e,i)}function bK(n,t,e){this.a=n,ZN.call(this,t,e)}function wK(n,t,e){this.c=t,this.b=e,this.a=n}function dK(n,t,e){return n.d=BB(t.Kb(e),164)}function gK(n,t){return n.Aj().Nh().Kh(n,t)}function pK(n,t){return n.Aj().Nh().Ih(n,t)}function vK(n,t){return kW(n),GI(n)===GI(t)}function mK(n,t){return kW(n),GI(n)===GI(t)}function yK(n,t){return Qj(Mdn(n.a,t,!1))}function kK(n,t){return Qj(Sdn(n.a,t,!1))}function jK(n,t){return n.b.sd(new $S(n,t))}function EK(n,t){return n.b.sd(new LS(n,t))}function TK(n,t){return n.b.sd(new NS(n,t))}function MK(n,t,e){return n.lastIndexOf(t,e)}function SK(n,t,e){return Pln(n[t.b],n[e.b])}function PK(n,t){return hon(t,(HXn(),Rdt),n)}function CK(n,t){return E$(t.a.d.p,n.a.d.p)}function IK(n,t){return E$(n.a.d.p,t.a.d.p)}function OK(n,t){return Pln(n.c-n.s,t.c-t.s)}function AK(n){return n.c?E7(n.c.a,n,0):-1}function $K(n){return n<100?null:new Fj(n)}function LK(n){return n==UCt||n==WCt||n==XCt}function NK(n,t){return cL(t,15)&&QDn(n.c,t)}function xK(n,t){Qet||t&&(n.d=t)}function DK(n,t){return!!lsn(n,t)}function RK(n,t){this.c=n,GU.call(this,n,t)}function KK(n){this.c=n,vO.call(this,bVn,0)}function _K(n,t){JB.call(this,n,n.length,t)}function FK(n,t,e){return BB(n.c,69).lk(t,e)}function BK(n,t,e){return BB(n.c,69).mk(t,e)}function HK(n,t,e){return oD(n,BB(t,332),e)}function qK(n,t,e){return sD(n,BB(t,332),e)}function GK(n,t,e){return IEn(n,BB(t,332),e)}function zK(n,t,e){return QTn(n,BB(t,332),e)}function UK(n,t){return null==t?null:lfn(n.b,t)}function XK(n){return UI(n)?(kW(n),n):n.ke()}function WK(n){return!isNaN(n)&&!isFinite(n)}function VK(n){s_(),this.a=(SQ(),new Ak(n))}function QK(n){hH(),this.d=n,this.a=new Lp}function YK(n,t,e){this.a=n,this.b=t,this.c=e}function JK(n,t,e){this.a=n,this.b=t,this.c=e}function ZK(n,t,e){this.d=n,this.b=e,this.a=t}function n_(n){P$(this),yQ(this),Frn(this,n)}function t_(n){xA(this),tH(this.c,0,n.Pc())}function e_(n){fW(n.a),z8(n.c,n.b),n.b=null}function i_(n){this.a=n,$T(),fan(Date.now())}function r_(){r_=O,iit=new r,rit=new r}function c_(){c_=O,Tet=new L,Met=new N}function a_(){a_=O,wAt=x8(Ant,HWn,1,0,5,1)}function u_(){u_=O,M$t=x8(Ant,HWn,1,0,5,1)}function o_(){o_=O,S$t=x8(Ant,HWn,1,0,5,1)}function s_(){s_=O,new rv((SQ(),SQ(),set))}function h_(n){return Z9(),Cnn((n7(),_et),n)}function f_(n){return qsn(),Cnn((e8(),Zet),n)}function l_(n){return hpn(),Cnn((I4(),pit),n)}function b_(n){return Rnn(),Cnn((O4(),kit),n)}function w_(n){return tRn(),Cnn((xan(),Fit),n)}function d_(n){return Dtn(),Cnn((Z6(),Wit),n)}function g_(n){return J9(),Cnn((n8(),trt),n)}function p_(n){return G7(),Cnn((t8(),urt),n)}function v_(n){return dWn(),Cnn((MO(),Art),n)}function m_(n){return Dan(),Cnn((e7(),_rt),n)}function y_(n){return Hpn(),Cnn((i7(),zrt),n)}function k_(n){return qpn(),Cnn((r7(),ict),n)}function j_(n){return wM(),Cnn((Q2(),act),n)}function E_(n){return Knn(),Cnn((A4(),_ct),n)}function T_(n){return q7(),Cnn((i8(),Lat),n)}function M_(n){return yMn(),Cnn((Xnn(),qat),n)}function S_(n){return Aun(),Cnn((t7(),rut),n)}function P_(n){return Bfn(),Cnn((r8(),gut),n)}function C_(n,t){if(!n)throw Hp(new _y(t))}function I_(n){return uSn(),Cnn((hen(),Aut),n)}function O_(n){uG.call(this,n.d,n.c,n.a,n.b)}function A_(n){uG.call(this,n.d,n.c,n.a,n.b)}function $_(n,t,e){this.b=n,this.c=t,this.a=e}function L_(n,t,e){this.b=n,this.a=t,this.c=e}function N_(n,t,e){this.a=n,this.b=t,this.c=e}function x_(n,t,e){this.a=n,this.b=t,this.c=e}function D_(n,t,e){this.a=n,this.b=t,this.c=e}function R_(n,t,e){this.a=n,this.b=t,this.c=e}function K_(n,t,e){this.b=n,this.a=t,this.c=e}function __(n,t,e){this.e=t,this.b=n,this.d=e}function F_(n,t,e){return dM(),n.a.Od(t,e),t}function B_(n){var t;return(t=new jn).e=n,t}function H_(n){var t;return(t=new Zv).b=n,t}function q_(){q_=O,Uut=new Ne,Xut=new xe}function G_(){G_=O,dst=new vr,gst=new mr}function z_(n){return Iun(),Cnn((a7(),ost),n)}function U_(n){return Oun(),Cnn((o7(),Est),n)}function X_(n){return kDn(),Cnn((Gcn(),Vst),n)}function W_(n){return $Pn(),Cnn((ben(),rht),n)}function V_(n){return V8(),Cnn((R4(),oht),n)}function Q_(n){return Oin(),Cnn((c8(),bht),n)}function Y_(n){return LEn(),Cnn((Hnn(),Ost),n)}function J_(n){return Crn(),Cnn((o8(),_st),n)}function Z_(n){return uin(),Cnn((a8(),vht),n)}function nF(n){return Vvn(),Cnn((Fnn(),Mht),n)}function tF(n){return _nn(),Cnn((L4(),Iht),n)}function eF(n){return Jun(),Cnn((u8(),Nht),n)}function iF(n){return gSn(),Cnn((pen(),Hht),n)}function rF(n){return g7(),Cnn((N4(),Uht),n)}function cF(n){return Bjn(),Cnn((den(),nft),n)}function aF(n){return JMn(),Cnn((wen(),oft),n)}function uF(n){return bDn(),Cnn((Vun(),yft),n)}function oF(n){return Kan(),Cnn((h8(),Mft),n)}function sF(n){return z7(),Cnn((s8(),Oft),n)}function hF(n){return z2(),Cnn((K4(),Nft),n)}function fF(n){return Tbn(),Cnn((qnn(),zlt),n)}function lF(n){return TTn(),Cnn((gen(),rvt),n)}function bF(n){return Mhn(),Cnn((f8(),svt),n)}function wF(n){return bvn(),Cnn((s7(),dvt),n)}function dF(n){return ain(),Cnn((w8(),Uvt),n)}function gF(n){return sNn(),Cnn((qcn(),$vt),n)}function pF(n){return mon(),Cnn((b8(),Rvt),n)}function vF(n){return U7(),Cnn((D4(),Bvt),n)}function mF(n){return Hcn(),Cnn((l8(),Yvt),n)}function yF(n){return Nvn(),Cnn((Bnn(),jvt),n)}function kF(n){return A6(),Cnn((x4(),tmt),n)}function jF(n){return Usn(),Cnn((g8(),amt),n)}function EF(n){return dcn(),Cnn((p8(),fmt),n)}function TF(n){return $un(),Cnn((d8(),gmt),n)}function MF(n){return oin(),Cnn((v8(),Nmt),n)}function SF(n){return Q4(),Cnn((F4(),Gmt),n)}function PF(n){return gJ(),Cnn((B4(),iyt),n)}function CF(n){return oZ(),Cnn((H4(),uyt),n)}function IF(n){return O6(),Cnn((_4(),Pyt),n)}function OF(n){return dJ(),Cnn((q4(),Dyt),n)}function AF(n){return zyn(),Cnn((c7(),Hyt),n)}function $F(n){return DPn(),Cnn((ven(),Jyt),n)}function LF(n){return sZ(),Cnn((U4(),Fkt),n)}function NF(n){return Prn(),Cnn((z4(),Zkt),n)}function xF(n){return B0(),Cnn((G4(),Gkt),n)}function DF(n){return Cbn(),Cnn((m8(),rjt),n)}function RF(n){return D9(),Cnn((X4(),ojt),n)}function KF(n){return Hsn(),Cnn((y8(),bjt),n)}function _F(n){return Omn(),Cnn((u7(),zjt),n)}function FF(n){return Bcn(),Cnn((j8(),Qjt),n)}function BF(n){return Sbn(),Cnn((k8(),eEt),n)}function HF(n){return YLn(),Cnn((Unn(),BEt),n)}function qF(n){return Pbn(),Cnn((E8(),UEt),n)}function GF(n){return CM(),Cnn((W2(),VEt),n)}function zF(n){return IM(),Cnn((X2(),JEt),n)}function UF(n){return $6(),Cnn((V4(),eTt),n)}function XF(n){return $Sn(),Cnn((Gnn(),sTt),n)}function WF(n){return OM(),Cnn((V2(),UTt),n)}function VF(n){return Lun(),Cnn((W4(),QTt),n)}function QF(n){return rpn(),Cnn((znn(),bMt),n)}function YF(n){return PPn(),Cnn((zcn(),EMt),n)}function JF(n){return wvn(),Cnn((len(),xMt),n)}function ZF(n){return wEn(),Cnn((fen(),tSt),n)}function nB(n){return lWn(),Cnn((SO(),Zot),n)}function tB(n){return Srn(),Cnn(($4(),zut),n)}function eB(n){return Ffn(),Cnn((Wnn(),GPt),n)}function iB(n){return Rtn(),Cnn((M8(),VPt),n)}function rB(n){return Mbn(),Cnn((l7(),tCt),n)}function cB(n){return nMn(),Cnn((yen(),sCt),n)}function aB(n){return ufn(),Cnn((T8(),kCt),n)}function uB(n){return Xyn(),Cnn((f7(),PCt),n)}function oB(n){return n$n(),Cnn((Nan(),KCt),n)}function sB(n){return cpn(),Cnn((Vnn(),zCt),n)}function hB(n){return QEn(),Cnn((Htn(),ZCt),n)}function fB(n){return lIn(),Cnn((men(),uIt),n)}function lB(n){return mdn(),Cnn((w7(),BIt),n)}function bB(n){return n_n(),Cnn((Qun(),JIt),n)}function wB(n){return kUn(),Cnn((Qnn(),OIt),n)}function dB(n){return Fwn(),Cnn((b7(),rOt),n)}function gB(n){return Bsn(),Cnn((h7(),fOt),n)}function pB(n){return hAn(),Cnn((Ucn(),cAt),n)}function vB(n,t){return kW(n),n+(kW(t),t)}function mB(n,t){return $T(),f9(QQ(n.a),t)}function yB(n,t){return $T(),f9(QQ(n.a),t)}function kB(n,t){this.c=n,this.a=t,this.b=t-n}function jB(n,t,e){this.a=n,this.b=t,this.c=e}function EB(n,t,e){this.a=n,this.b=t,this.c=e}function TB(n,t,e){this.a=n,this.b=t,this.c=e}function MB(n,t,e){this.a=n,this.b=t,this.c=e}function SB(n,t,e){this.a=n,this.b=t,this.c=e}function PB(n,t,e){this.e=n,this.a=t,this.c=e}function CB(n,t,e){f$(),mJ.call(this,n,t,e)}function IB(n,t,e){f$(),rW.call(this,n,t,e)}function OB(n,t,e){f$(),rW.call(this,n,t,e)}function AB(n,t,e){f$(),rW.call(this,n,t,e)}function $B(n,t,e){f$(),IB.call(this,n,t,e)}function LB(n,t,e){f$(),IB.call(this,n,t,e)}function NB(n,t,e){f$(),LB.call(this,n,t,e)}function xB(n,t,e){f$(),OB.call(this,n,t,e)}function DB(n,t,e){f$(),AB.call(this,n,t,e)}function RB(n,t){return yX(n),yX(t),new hT(n,t)}function KB(n,t){return yX(n),yX(t),new _H(n,t)}function _B(n,t){return yX(n),yX(t),new FH(n,t)}function FB(n,t){return yX(n),yX(t),new lT(n,t)}function BB(n,t){return JH(null==n||Qpn(n,t)),n}function HB(n){var t;return fnn(t=new Np,n),t}function qB(n){var t;return fnn(t=new Rv,n),t}function GB(n){var t;return qrn(t=new zv,n),t}function zB(n){var t;return qrn(t=new YT,n),t}function UB(n){return!n.e&&(n.e=new Np),n.e}function XB(n){return!n.c&&(n.c=new Bo),n.c}function WB(n,t){return n.c[n.c.length]=t,!0}function VB(n,t){this.c=n,this.b=t,this.a=!1}function QB(n){this.d=n,Mb(this),this.b=rz(n.d)}function YB(){this.a=";,;",this.b="",this.c=""}function JB(n,t,e){Uz.call(this,t,e),this.a=n}function ZB(n,t,e){this.b=n,gO.call(this,t,e)}function nH(n,t,e){this.c=n,PS.call(this,t,e)}function tH(n,t,e){_Cn(e,0,n,t,e.length,!1)}function eH(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function iH(n,t){t&&(n.b=t,n.a=(EW(t),t.a))}function rH(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function cH(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function aH(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function uH(n){return uan(xU(JO(n)?Pan(n):n))}function oH(n,t){return E$(oq(n.d),oq(t.d))}function sH(n,t){return t==(kUn(),CIt)?n.c:n.d}function hH(){hH=O,kUn(),Rmt=CIt,Kmt=oIt}function fH(){this.b=Gy(MD(mpn((fRn(),aat))))}function lH(n){return dM(),x8(Ant,HWn,1,n,5,1)}function bH(n){return new xC(n.c+n.b,n.d+n.a)}function wH(n,t){return SM(),E$(n.d.p,t.d.p)}function dH(n){return Px(0!=n.b),Atn(n,n.a.a)}function gH(n){return Px(0!=n.b),Atn(n,n.c.b)}function pH(n,t){if(!n)throw Hp(new $y(t))}function vH(n,t){if(!n)throw Hp(new _y(t))}function mH(n,t,e){dP.call(this,n,t),this.b=e}function yH(n,t,e){LI.call(this,n,t),this.c=e}function kH(n,t,e){btn.call(this,t,e),this.d=n}function jH(n){o_(),yo.call(this),this.th(n)}function EH(n,t,e){this.a=n,NO.call(this,t,e)}function TH(n,t,e){this.a=n,NO.call(this,t,e)}function MH(n,t,e){LI.call(this,n,t),this.c=e}function SH(){R5(),oW.call(this,(WM(),zAt))}function PH(n){return null!=n&&!Xbn(n,LAt,NAt)}function CH(n,t){return(Wfn(n)<<4|Wfn(t))&QVn}function IH(n,t){return nV(),zvn(n,t),new GW(n,t)}function OH(n,t){var e;n.n&&(e=t,WB(n.f,e))}function AH(n,t,e){rtn(n,t,new GX(e))}function $H(n,t){var e;return e=n.c,Kin(n,t),e}function LH(n,t){return n.g=t<0?-1:t,n}function NH(n,t){return ztn(n),n.a*=t,n.b*=t,n}function xH(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function DH(n,t){return r5(n,t,n.c.b,n.c),!0}function RH(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function KH(n){this.b=n,this.a=lz(this.b.a).Ed()}function _H(n,t){this.b=n,this.a=t,Bh.call(this)}function FH(n,t){this.a=n,this.b=t,Bh.call(this)}function BH(n,t){Uz.call(this,t,1040),this.a=n}function HH(n){return 0==n||isNaN(n)?n:n<0?-1:1}function qH(n){return MQ(),PMn(n)==JJ(OMn(n))}function GH(n){return MQ(),OMn(n)==JJ(PMn(n))}function zH(n,t){return Yjn(n,new dP(t.a,t.b))}function UH(n){return!b5(n)&&n.c.i.c==n.d.i.c}function XH(n){var t;return t=n.n,n.a.b+t.d+t.a}function WH(n){var t;return t=n.n,n.e.b+t.d+t.a}function VH(n){var t;return t=n.n,n.e.a+t.b+t.c}function QH(n){return wWn(),new oG(0,n)}function YH(n){return n.a?n.a:eQ(n)}function JH(n){if(!n)throw Hp(new Ky(null))}function ZH(){ZH=O,SQ(),uLt=new Gb(P7n)}function nq(){nq=O,new svn((ty(),_nt),(ey(),Knt))}function tq(){tq=O,Itt=x8(Att,sVn,19,256,0,1)}function eq(n,t,e,i){awn.call(this,n,t,e,i,0,0)}function iq(n,t,e){return VW(n.b,BB(e.b,17),t)}function rq(n,t,e){return VW(n.b,BB(e.b,17),t)}function cq(n,t){return WB(n,new xC(t.a,t.b))}function aq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function uq(n){return n.e.c.length+n.g.c.length}function oq(n){return n.e.c.length-n.g.c.length}function sq(n){return n.b.c.length-n.e.c.length}function hq(n){return BZ(),(kUn(),bIt).Hc(n.j)}function fq(n){o_(),jH.call(this,n),this.a=-1}function lq(n,t){xI.call(this,n,t),this.a=this}function bq(n,t){var e;return(e=mX(n,t)).i=2,e}function wq(n,t){return++n.j,n.Ti(t)}function dq(n,t,e){return n.a=-1,WN(n,t.g,e),n}function gq(n,t,e){Kzn(n.a,n.b,n.c,BB(t,202),e)}function pq(n,t){Bin(n,null==t?null:(kW(t),t))}function vq(n,t){Rin(n,null==t?null:(kW(t),t))}function mq(n,t){Rin(n,null==t?null:(kW(t),t))}function yq(n,t,e){return new wK(dW(n).Ie(),e,t)}function kq(n,t,e,i,r,c){return Vjn(n,t,e,i,r,0,c)}function jq(){jq=O,jtt=x8(Ttt,sVn,217,256,0,1)}function Eq(){Eq=O,$tt=x8(Rtt,sVn,162,256,0,1)}function Tq(){Tq=O,Ktt=x8(_tt,sVn,184,256,0,1)}function Mq(){Mq=O,Mtt=x8(Stt,sVn,172,128,0,1)}function Sq(){eH(this,!1,!1,!1,!1)}function Pq(n){WX(),this.a=(SQ(),new Gb(yX(n)))}function Cq(n){for(yX(n);n.Ob();)n.Pb(),n.Qb()}function Iq(n){n.a.cd(),BB(n.a.dd(),14).gc(),wk()}function Oq(n){this.c=n,this.b=this.c.d.vc().Kc()}function Aq(n){this.c=n,this.a=new QT(this.c.a)}function $q(n){this.a=new XT(n.gc()),Frn(this,n)}function Lq(n){ew.call(this,new v4),Frn(this,n)}function Nq(n,t){return n.a+=Bdn(t,0,t.length),n}function xq(n,t){return l1(t,n.c.length),n.c[t]}function Dq(n,t){return l1(t,n.a.length),n.a[t]}function Rq(n,t){dM(),B8.call(this,n),this.a=t}function Kq(n,t){return jgn(rbn(jgn(n.a).a,t.a))}function _q(n,t){return kW(n),Ncn(n,(kW(t),t))}function Fq(n,t){return kW(t),Ncn(t,(kW(n),n))}function Bq(n,t){return $X(t,0,Hq(t[0],jgn(1)))}function Hq(n,t){return Kq(BB(n,162),BB(t,162))}function qq(n){return n.c-BB(xq(n.a,n.b),287).b}function Gq(n){return n.q?n.q:(SQ(),SQ(),het)}function zq(n){return n.e.Hd().gc()*n.c.Hd().gc()}function Uq(n,t,e){return E$(t.d[n.g],e.d[n.g])}function Xq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Wq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Vq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Qq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Yq(n,t,i){return e.Math.min(i/n,1/t)}function Jq(n,t){return n?0:e.Math.max(0,t-1)}function Zq(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function nG(n){var t;return(t=uEn(n))?nG(t):n}function tG(n,t){return null==n.a&&wRn(n),n.a[t]}function eG(n){return n.c?n.c.f:n.e.b}function iG(n){return n.c?n.c.g:n.e.a}function rG(n){gtn.call(this,n.gc()),pX(this,n)}function cG(n,t){f$(),jp.call(this,t),this.a=n}function aG(n,t,e){this.a=n,$L.call(this,t,e,2)}function uG(n,t,e,i){_h(this),rH(this,n,t,e,i)}function oG(n,t){wWn(),Ap.call(this,n),this.a=t}function sG(n){this.b=new YT,this.a=n,this.c=-1}function hG(){this.d=new xC(0,0),this.e=new Rv}function fG(n){ZN.call(this,0,0),this.a=n,this.b=0}function lG(n){this.a=n,this.c=new xp,ron(this)}function bG(n){if(n.e.c!=n.b)throw Hp(new vv)}function wG(n){if(n.c.e!=n.a)throw Hp(new vv)}function dG(n){return JO(n)?0|n:TE(n)}function gG(n,t){return wWn(),new UU(n,t)}function pG(n,t){return null==n?null==t:mK(n,t)}function vG(n,t){return null==n?null==t:mgn(n,t)}function mG(n,t,e){return orn(n.a,t),EU(n,t.g,e)}function yG(n,t,e){ihn(0,t,n.length),z9(n,0,t,e)}function kG(n,t,e){LZ(t,n.c.length),MS(n.c,t,e)}function jG(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function EG(n,t){var e;return $on(e=nbn(n),t),e}function TG(n,t){return!n&&(n=[]),n[n.length]=t,n}function MG(n,t){return!(void 0===n.a.get(t))}function SG(n,t){return Xin(new nn,new uw(n),t)}function PG(n){return null==n?Set:new vy(kW(n))}function CG(n,t){return cL(t,22)&&SN(n,BB(t,22))}function IG(n,t){return cL(t,22)&&$tn(n,BB(t,22))}function OG(n){return H$n(n,26)*rYn+H$n(n,27)*cYn}function AG(n){return Array.isArray(n)&&n.im===I}function $G(n){n.b?$G(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function LG(n,t){UR(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function NG(n,t){LG(n,XR(new xC(t.a,t.b),n.c))}function xG(n,t){this.b=new YT,this.a=n,this.c=t}function DG(){this.b=new Ot,this.c=new lY(this)}function RG(){this.d=new mn,this.e=new fY(this)}function KG(){KZ(),this.f=new YT,this.e=new YT}function _G(){BZ(),this.k=new xp,this.d=new Rv}function FG(){FG=O,bOt=new XA((sWn(),aPt),0)}function BG(){BG=O,qnt=new fG(x8(Ant,HWn,1,0,5,1))}function HG(n,t,e){VAn(e,n,1),WB(t,new cP(e,n))}function qG(n,t,e){Fkn(e,n,1),WB(t,new bP(e,n))}function GG(n,t,e){return TU(n,new xS(t.a,e.a))}function zG(n,t,e){return-E$(n.f[t.p],n.f[e.p])}function UG(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XG(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function WG(n,t,e){return n.a=-1,WN(n,t.g+1,e),n}function VG(n,t,e){return e=T_n(n,BB(t,49),7,e)}function QG(n,t,e){return e=T_n(n,BB(t,49),3,e)}function YG(n,t,e){this.a=n,LL.call(this,t,e,22)}function JG(n,t,e){this.a=n,LL.call(this,t,e,14)}function ZG(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function nz(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function tz(n,t){0!=(t.Bb&h6n)&&!n.a.o&&(n.a.o=t)}function ez(n){return null!=n&&DU(n)&&!(n.im===I)}function iz(n){return!Array.isArray(n)&&n.im===I}function rz(n){return cL(n,15)?BB(n,15).Yc():n.Kc()}function cz(n){return n.Qc(x8(Ant,HWn,1,n.gc(),5,1))}function az(n,t){return lgn(F7(n,t))?t.Qh():null}function uz(n){n?Fmn(n,($T(),Btt),""):$T()}function oz(n){this.a=(BG(),qnt),this.d=BB(yX(n),47)}function sz(n,t,e,i){this.a=n,W6.call(this,n,t,e,i)}function hz(n){eS(),this.a=0,this.b=n-1,this.c=1}function fz(n){V$(this),this.g=n,jQ(this),this._d()}function lz(n){return n.c?n.c:n.c=n.Id()}function bz(n){return n.d?n.d:n.d=n.Jd()}function wz(n){return n.c||(n.c=n.Dd())}function dz(n){return n.f||(n.f=n.Dc())}function gz(n){return n.i||(n.i=n.bc())}function pz(n){return wWn(),new vJ(10,n,0)}function vz(n){return JO(n)?""+n:GDn(n)}function mz(n){if(n.e.j!=n.d)throw Hp(new vv)}function yz(n,t){return uan(lSn(JO(n)?Pan(n):n,t))}function kz(n,t){return uan(jAn(JO(n)?Pan(n):n,t))}function jz(n,t){return uan(JSn(JO(n)?Pan(n):n,t))}function Ez(n,t){return bR((kW(n),n),(kW(t),t))}function Tz(n,t){return Pln((kW(n),n),(kW(t),t))}function Mz(n,t){return yX(t),n.a.Ad(t)&&!n.b.Ad(t)}function Sz(n,t){return M$(n.l&t.l,n.m&t.m,n.h&t.h)}function Pz(n,t){return M$(n.l|t.l,n.m|t.m,n.h|t.h)}function Cz(n,t){return M$(n.l^t.l,n.m^t.m,n.h^t.h)}function Iz(n,t){return $fn(n,(kW(t),new rw(t)))}function Oz(n,t){return $fn(n,(kW(t),new cw(t)))}function Az(n){return gcn(),0!=BB(n,11).e.c.length}function $z(n){return gcn(),0!=BB(n,11).g.c.length}function Lz(n,t){return Irn(),Pln(t.a.o.a,n.a.o.a)}function Nz(n,t,e){return TUn(n,BB(t,11),BB(e,11))}function xz(n){return n.e?D6(n.e):null}function Dz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Rz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.td(e))}function Kz(n,t){if(n<0||n>=t)throw Hp(new Sv)}function _z(n,t,e){return $X(t,0,Hq(t[0],e[0])),t}function Fz(n,t,e){t.Ye(e,Gy(MD(RX(n.b,e)))*n.a)}function Bz(n,t,e){return jDn(),Dcn(n,t)&&Dcn(n,e)}function Hz(n){return lIn(),!n.Hc(eIt)&&!n.Hc(rIt)}function qz(n){return new xC(n.c+n.b/2,n.d+n.a/2)}function Gz(n,t){return t.kh()?tfn(n.b,BB(t,49)):t}function zz(n,t){this.e=n,this.d=0!=(64&t)?t|hVn:t}function Uz(n,t){this.c=0,this.d=n,this.b=64|t|hVn}function Xz(n){this.b=new J6(11),this.a=(PQ(),n)}function Wz(n){this.b=null,this.a=(PQ(),n||wet)}function Vz(n){this.a=rvn(n.a),this.b=new t_(n.b)}function Qz(n){this.b=n,cx.call(this,n),ML(this)}function Yz(n){this.b=n,ux.call(this,n),SL(this)}function Jz(n,t,e){this.a=n,eK.call(this,t,e,5,6)}function Zz(n,t,e,i){this.b=n,$L.call(this,t,e,i)}function nU(n,t,e,i,r){k9.call(this,n,t,e,i,r,-1)}function tU(n,t,e,i,r){j9.call(this,n,t,e,i,r,-1)}function eU(n,t,e,i){$L.call(this,n,t,e),this.b=i}function iU(n,t,e,i){yH.call(this,n,t,e),this.b=i}function rU(n){NI.call(this,n,!1),this.a=!1}function cU(n,t){this.b=n,hl.call(this,n.b),this.a=t}function aU(n,t){WX(),jT.call(this,n,sfn(new Jy(t)))}function uU(n,t){return wWn(),new cW(n,t,0)}function oU(n,t){return wWn(),new cW(6,n,t)}function sU(n,t){return mK(n.substr(0,t.length),t)}function hU(n,t){return XI(t)?eY(n,t):!!AY(n.f,t)}function fU(n,t){for(kW(t);n.Ob();)t.td(n.Pb())}function lU(n,t,e){ODn(),this.e=n,this.d=t,this.a=e}function bU(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function wU(n){var t;for(t=n;t.f;)t=t.f;return t}function dU(n){var t;return Px(null!=(t=Eon(n))),t}function gU(n){var t;return Px(null!=(t=mln(n))),t}function pU(n,t){var e;return w6(t,e=n.a.gc()),e-t}function vU(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function mU(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function yU(n,t,e,i){ihn(t,e,n.length),mU(n,t,e,i)}function kU(n,t,e){Kz(e,n.a.c.length),c5(n.a,e,t)}function jU(n,t,e){this.c=n,this.a=t,SQ(),this.b=e}function EU(n,t,e){var i;return i=n.b[t],n.b[t]=e,i}function TU(n,t){return null==n.a.zc(t,n)}function MU(n){if(!n)throw Hp(new yv);return n.d}function SU(n,t){if(null==n)throw Hp(new Hy(t))}function PU(n,t){return!!t&&Frn(n,t)}function CU(n,t,e){return ehn(n,t.g,e),orn(n.c,t),n}function IU(n){return Mzn(n,(Ffn(),_Pt)),n.d=!0,n}function OU(n){return!n.j&&yb(n,FKn(n.g,n.b)),n.j}function AU(n){Mx(-1!=n.b),s6(n.c,n.a=n.b),n.b=-1}function $U(n){n.f=new eA(n),n.g=new iA(n),oY(n)}function LU(n){return new Rq(null,qU(n,n.length))}function NU(n){return new oz(new WL(n.a.length,n.a))}function xU(n){return M$(~n.l&SQn,~n.m&SQn,~n.h&PQn)}function DU(n){return typeof n===AWn||typeof n===xWn}function RU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function KU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function _U(n,t){return n>0?e.Math.log(n/t):-100}function FU(n,t){return Vhn(n,t)<0?-1:Vhn(n,t)>0?1:0}function BU(n,t,e){return SHn(n,BB(t,46),BB(e,167))}function HU(n,t){return BB(wz(lz(n.a)).Xb(t),42).cd()}function qU(n,t){return ptn(t,n.length),new BH(n,t)}function GU(n,t){this.d=n,AL.call(this,n),this.e=t}function zU(n){this.d=(kW(n),n),this.a=0,this.c=bVn}function UU(n,t){Ap.call(this,1),this.a=n,this.b=t}function XU(n,t){return n.c?XU(n.c,t):WB(n.b,t),n}function WU(n,t,e){var i;return i=dnn(n,t),r4(n,t,e),i}function VU(n,t){return m7(n.slice(0,t),n)}function QU(n,t,e){var i;for(i=0;i<t;++i)$X(n,i,e)}function YU(n,t,e,i,r){for(;t<e;)i[r++]=fV(n,t++)}function JU(n,t){return Pln(n.c.c+n.c.b,t.c.c+t.c.b)}function ZU(n,t){return null==Mon(n.a,t,(hN(),ptt))}function nX(n,t){r5(n.d,t,n.b.b,n.b),++n.a,n.c=null}function tX(n,t){J$(n,cL(t,153)?t:BB(t,1937).gl())}function eX(n,t){JT($V(n.Oc(),new Yr),new Id(t))}function iX(n,t,e,i,r){NEn(n,BB(h6(t.k,e),15),e,i,r)}function rX(n){n.s=NaN,n.c=NaN,ZOn(n,n.e),ZOn(n,n.j)}function cX(n){n.a=null,n.e=null,$U(n.b),n.d=0,++n.c}function aX(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function uX(n,t,e){return BB(n.c._c(t,BB(e,133)),42)}function oX(){return ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])}function sX(n){return MQ(),JJ(PMn(n))==JJ(OMn(n))}function hX(n){$R.call(this),this.a=n,WB(n.a,this)}function fX(n,t){this.d=Sln(n),this.c=t,this.a=.5*t}function lX(){v4.call(this),this.a=!0,this.b=!0}function bX(n){return(null==n.i&&qFn(n),n.i).length}function wX(n){return cL(n,99)&&0!=(BB(n,18).Bb&h6n)}function dX(n,t){++n.j,sTn(n,n.i,t),zIn(n,BB(t,332))}function gX(n,t){return t=n.nk(null,t),$Tn(n,null,t)}function pX(n,t){return n.hi()&&(t=nZ(n,t)),n.Wh(t)}function vX(n,t,e){var i;return Qen(e,i=mX(n,t)),i}function mX(n,t){var e;return(e=new pon).j=n,e.d=t,e}function yX(n){if(null==n)throw Hp(new gv);return n}function kX(n){return n.j||(n.j=new wl(n))}function jX(n){return n.f||(n.f=new UL(n))}function EX(n){return n.k||(n.k=new Yf(n))}function TX(n){return n.k||(n.k=new Yf(n))}function MX(n){return n.g||(n.g=new Qf(n))}function SX(n){return n.i||(n.i=new nl(n))}function PX(n){return n.d||(n.d=new il(n))}function CX(n){return yX(n),cL(n,475)?BB(n,475):Bbn(n)}function IX(n){return cL(n,607)?n:new bJ(n)}function OX(n,t){return w2(t,n.c.b.c.gc()),new sT(n,t)}function AX(n,t,e){return wWn(),new T0(n,t,e)}function $X(n,t,e){return Sx(null==e||Q_n(n,e)),n[t]=e}function LX(n,t){var e;return w2(t,e=n.a.gc()),e-1-t}function NX(n,t){return n.a+=String.fromCharCode(t),n}function xX(n,t){return n.a+=String.fromCharCode(t),n}function DX(n,t){for(kW(t);n.c<n.d;)n.ze(t,n.c++)}function RX(n,t){return XI(t)?SJ(n,t):qI(AY(n.f,t))}function KX(n,t){return MQ(),n==PMn(t)?OMn(t):PMn(t)}function _X(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function FX(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function BX(n){this.b=new Np,this.a=new Np,this.c=n}function HX(n){this.c=new Gj,this.a=new Np,this.b=n}function qX(n){$R.call(this),this.a=new Gj,this.c=n}function GX(n){if(null==n)throw Hp(new gv);this.a=n}function zX(n){Mv(),this.b=new Np,this.a=n,vGn(this,n)}function UX(n){this.c=n,this.a=new YT,this.b=new YT}function XX(){XX=O,ott=new Ml(!1),stt=new Ml(!0)}function WX(){WX=O,s_(),Fnt=new SY((SQ(),SQ(),set))}function VX(){VX=O,s_(),Vnt=new vS((SQ(),SQ(),fet))}function QX(){QX=O,t$t=GIn(),gWn(),i$t&&Rkn()}function YX(n,t){return Irn(),BB(oV(n,t.d),15).Fc(t)}function JX(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function ZX(n,t,e){return NRn(n,yrn(n,t,e))}function nW(n,t){var e;dnn(n,e=n.a.length),r4(n,e,t)}function tW(n,t){console[n].call(console,t)}function eW(n,t){var e;++n.j,e=n.Vi(),n.Ii(n.oi(e,t))}function iW(n,t,e){BB(t.b,65),Otn(t.a,new EB(n,e,t))}function rW(n,t,e){jp.call(this,t),this.a=n,this.b=e}function cW(n,t,e){Ap.call(this,n),this.a=t,this.b=e}function aW(n,t,e){this.a=n,kp.call(this,t),this.b=e}function uW(n,t,e){this.a=n,H2.call(this,8,t,null,e)}function oW(n){this.a=(kW(_9n),_9n),this.b=n,new Nm}function sW(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function hW(n){this.c=n,this.b=n.a.d.a,bD(n.a.e,this)}function fW(n){Mx(-1!=n.c),n.d.$c(n.c),n.b=n.c,n.c=-1}function lW(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function bW(n,t){return Kz(t,n.a.c.length),xq(n.a,t)}function wW(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function dW(n){return 0>=n?new VT:Win(n-1)}function gW(n){return!!SNt&&eY(SNt,n)}function pW(n){return n?n.dc():!n.Kc().Ob()}function vW(n){return!n.a&&n.c?n.c.b:n.a}function mW(n){return!n.a&&(n.a=new $L(LOt,n,4)),n.a}function yW(n){return!n.d&&(n.d=new $L(VAt,n,1)),n.d}function kW(n){if(null==n)throw Hp(new gv);return n}function jW(n){n.c?n.c.He():(n.d=!0,QNn(n))}function EW(n){n.c?EW(n.c):(Qln(n),n.d=!0)}function TW(n){TV(n.a),n.b=x8(Ant,HWn,1,n.b.length,5,1)}function MW(n,t){return E$(t.j.c.length,n.j.c.length)}function SW(n,t){n.c<0||n.b.b<n.c?fO(n.b,t):n.a._e(t)}function PW(n,t){var e;(e=n.Yg(t))>=0?n.Bh(e):cIn(n,t)}function CW(n){return n.c.i.c==n.d.i.c}function IW(n){if(4!=n.p)throw Hp(new dv);return n.e}function OW(n){if(3!=n.p)throw Hp(new dv);return n.e}function AW(n){if(6!=n.p)throw Hp(new dv);return n.f}function $W(n){if(6!=n.p)throw Hp(new dv);return n.k}function LW(n){if(3!=n.p)throw Hp(new dv);return n.j}function NW(n){if(4!=n.p)throw Hp(new dv);return n.j}function xW(n){return!n.b&&(n.b=new Tp(new xm)),n.b}function DW(n){return-2==n.c&&gb(n,uMn(n.g,n.b)),n.c}function RW(n,t){var e;return(e=mX("",n)).n=t,e.i=1,e}function KW(n,t){LG(BB(t.b,65),n),Otn(t.a,new Aw(n))}function _W(n,t){f9((!n.a&&(n.a=new oR(n,n)),n.a),t)}function FW(n,t){this.b=n,GU.call(this,n,t),ML(this)}function BW(n,t){this.b=n,RK.call(this,n,t),SL(this)}function HW(n,t,e,i){vT.call(this,n,t),this.d=e,this.a=i}function qW(n,t,e,i){vT.call(this,n,e),this.a=t,this.f=i}function GW(n,t){W$.call(this,Vin(yX(n),yX(t))),this.a=t}function zW(){dMn.call(this,S7n,(rE(),dLt)),Wqn(this)}function UW(){dMn.call(this,V9n,(iE(),n$t)),OHn(this)}function XW(){gT.call(this,"DELAUNAY_TRIANGULATION",0)}function WW(n){return String.fromCharCode.apply(null,n)}function VW(n,t,e){return XI(t)?mZ(n,t,e):jCn(n.f,t,e)}function QW(n){return SQ(),n?n.ve():(PQ(),PQ(),get)}function YW(n,t,e){return Nun(),e.pg(n,BB(t.cd(),146))}function JW(n,t){return nq(),new svn(new rN(n),new iN(t))}function ZW(n){return lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))}function nV(){nV=O,Bnt=new hy(Pun(Gk(Hnt,1),kVn,42,0,[]))}function tV(n){return!n.d&&(n.d=new Hb(n.c.Cc())),n.d}function eV(n){return!n.a&&(n.a=new Lk(n.c.vc())),n.a}function iV(n){return!n.b&&(n.b=new Ak(n.c.ec())),n.b}function rV(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function cV(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function aV(n,t){return hN(),BB(t.b,19).a<n}function uV(n,t){return hN(),BB(t.a,19).a<n}function oV(n,t){return CG(n.a,t)?n.b[BB(t,22).g]:null}function sV(n,t,e,i){n.a=fx(n.a,0,t)+""+i+nO(n.a,e)}function hV(n,t){n.u.Hc((lIn(),eIt))&&PIn(n,t),z6(n,t)}function fV(n,t){return b1(t,n.length),n.charCodeAt(t)}function lV(){dy.call(this,"There is no more element.")}function bV(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function wV(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function dV(n,t,e,i){return Rcn(n,t,e,!1),Zfn(n,i),n}function gV(n){return n.j.c=x8(Ant,HWn,1,0,5,1),n.a=-1,n}function pV(n){return!n.c&&(n.c=new hK(KOt,n,5,8)),n.c}function vV(n){return!n.b&&(n.b=new hK(KOt,n,4,7)),n.b}function mV(n){return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n}function yV(n){return!n.c&&(n.c=new eU(XOt,n,9,9)),n.c}function kV(n){return n.e==C7n&&vb(n,Tgn(n.g,n.b)),n.e}function jV(n){return n.f==C7n&&mb(n,pkn(n.g,n.b)),n.f}function EV(n){var t;return!(t=n.b)&&(n.b=t=new Jf(n)),t}function TV(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function MV(n){if(zbn(n.d),n.d.d!=n.c)throw Hp(new vv)}function SV(n,t){this.b=n,this.c=t,this.a=new QT(this.b)}function PV(n,t,e){this.a=XVn,this.d=n,this.b=t,this.c=e}function CV(n,t){this.d=(kW(n),n),this.a=16449,this.c=t}function IV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function OV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function AV(n,t){return Qln(n),new Rq(n,new Q9(t,n.a))}function $V(n,t){return Qln(n),new Rq(n,new M6(t,n.a))}function LV(n,t){return Qln(n),new AD(n,new E6(t,n.a))}function NV(n,t){return Qln(n),new $D(n,new T6(t,n.a))}function xV(n,t){return new pY(BB(yX(n),62),BB(yX(t),62))}function DV(n,t){return jM(),Pln((kW(n),n),(kW(t),t))}function RV(){return wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])}function KV(){return CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])}function _V(){return IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])}function FV(){return OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])}function BV(n){this.a=new Np,this.e=x8(ANt,sVn,48,n,0,2)}function HV(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function qV(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function GV(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function zV(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function UV(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function XV(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function WV(n,t,e,i){gT.call(this,n,t),this.a=e,this.b=i}function VV(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function QV(n,t,e){EHn(n.a,e),nun(e),AAn(n.b,e),rqn(t,e)}function YV(n,t,e){var i;return i=$Un(n),t.Kh(e,i)}function JV(n,t){var e,i;return(e=n/t)>(i=CJ(e))&&++i,i}function ZV(n){var t;return cen(t=new Kp,n),t}function nQ(n){var t;return DMn(t=new Kp,n),t}function tQ(n,t){return Kcn(t,RX(n.f,t)),null}function eQ(n){return Yin(n)||null}function iQ(n){return!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b}function rQ(n){return null!=n&&xT(jAt,n.toLowerCase())}function cQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function aQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function uQ(n,t){return Pln(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function oQ(n,t){return Pln(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function sQ(n,t,e){e.a?Cen(n,t.b-n.f/2):Pen(n,t.a-n.g/2)}function hQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function fQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function lQ(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function bQ(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function wQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function dQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function gQ(n,t){this.a=n,OD.call(this,n,BB(n.d,15).Zc(t))}function pQ(n){this.f=n,this.c=this.f.e,n.f>0&&ujn(this)}function vQ(n,t,e,i){this.b=n,this.c=i,vO.call(this,t,e)}function mQ(n){return Px(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function yQ(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function kQ(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function jQ(n){return n.n&&(n.e!==FVn&&n._d(),n.j=null),n}function EQ(n){return JH(null==n||DU(n)&&!(n.im===I)),n}function TQ(n){this.b=new Np,gun(this.b,this.b),this.a=n}function MQ(){MQ=O,Sct=new Np,Mct=new xp,Tct=new Np}function SQ(){SQ=O,set=new S,het=new C,fet=new M}function PQ(){PQ=O,wet=new R,det=new R,get=new K}function CQ(){CQ=O,hit=new gn,lit=new RG,fit=new pn}function IQ(){256==ait&&(iit=rit,rit=new r,ait=0),++ait}function OQ(n){return n.f||(n.f=new pT(n,n.c))}function AQ(n){return QIn(n)&&qy(TD(ZAn(n,(HXn(),dgt))))}function $Q(n,t){return JIn(n,BB(mMn(t,(HXn(),Wgt)),19),t)}function LQ(n,t){return Tfn(n.j,t.s,t.c)+Tfn(t.e,n.s,n.c)}function NQ(n,t){n.e&&!n.e.a&&(Fp(n.e,t),NQ(n.e,t))}function xQ(n,t){n.d&&!n.d.a&&(Fp(n.d,t),xQ(n.d,t))}function DQ(n,t){return-Pln(iG(n)*eG(n),iG(t)*eG(t))}function RQ(n){return BB(n.cd(),146).tg()+":"+Bbn(n.dd())}function KQ(n){var t;G_(),(t=BB(n.g,10)).n.a=n.d.c+t.d.b}function _Q(n,t,e){return MM(),xbn(BB(RX(n.e,t),522),e)}function FQ(n,t){return tsn(n),tsn(t),Py(BB(n,22),BB(t,22))}function BQ(n,t,e){n.i=0,n.e=0,t!=e&&Xon(n,t,e)}function HQ(n,t,e){n.i=0,n.e=0,t!=e&&Won(n,t,e)}function qQ(n,t,e){rtn(n,t,new Sl(XK(e)))}function GQ(n,t,e,i,r,c){j9.call(this,n,t,e,i,r,c?-2:-1)}function zQ(n,t,e,i){LI.call(this,t,e),this.b=n,this.a=i}function UQ(n,t){new YT,this.a=new km,this.b=n,this.c=t}function XQ(n,t){return BB(mMn(n,(hWn(),clt)),15).Fc(t),t}function WQ(n,t){if(null==n)throw Hp(new Hy(t));return n}function VQ(n){return!n.q&&(n.q=new eU(QAt,n,11,10)),n.q}function QQ(n){return!n.s&&(n.s=new eU(FAt,n,21,17)),n.s}function YQ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a}function JQ(n){return cL(n,14)?new $q(BB(n,14)):qB(n.Kc())}function ZQ(n){return new qL(n,n.e.Hd().gc()*n.c.Hd().gc())}function nY(n){return new GL(n,n.e.Hd().gc()*n.c.Hd().gc())}function tY(n){return n&&n.hashCode?n.hashCode():PN(n)}function eY(n,t){return null==t?!!AY(n.f,null):MG(n.g,t)}function iY(n){return yX(n),emn(new oz(ZL(n.a.Kc(),new h)))}function rY(n){return SQ(),cL(n,54)?new $k(n):new bN(n)}function cY(n,t,e){return!!n.f&&n.f.Ne(t,e)}function aY(n,t){return n.a=fx(n.a,0,t)+""+nO(n.a,t+1),n}function uY(n,t){var e;return(e=eL(n.a,t))&&(t.d=null),e}function oY(n){var t,e;t=0|(e=n).$modCount,e.$modCount=t+1}function sY(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function hY(n){this.b=n,this.a=new dE(BB(yX(new tt),62))}function fY(n){this.c=n,this.b=new dE(BB(yX(new vn),62))}function lY(n){this.c=n,this.b=new dE(BB(yX(new It),62))}function bY(){this.a=new Qv,this.b=new hm,this.d=new Dt}function wY(){this.a=new km,this.b=(lin(3,AVn),new J6(3))}function dY(){this.b=new Rv,this.d=new YT,this.e=new om}function gY(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function pY(n,t){zm.call(this,new Wz(n)),this.a=n,this.b=t}function vY(){iSn(this,new Rf),this.wb=(QX(),t$t),iE()}function mY(n){OTn(n,"No crossing minimization",1),HSn(n)}function yY(n){Dk(),e.setTimeout((function(){throw n}),0)}function kY(n){return n.u||(P5(n),n.u=new uR(n,n)),n.u}function jY(n){return BB(yan(n,16),26)||n.zh()}function EY(n,t){return cL(t,146)&&mK(n.b,BB(t,146).tg())}function TY(n,t){return n.a?t.Wg().Kc():BB(t.Wg(),69).Zh()}function MY(n){return n.k==(uSn(),Cut)&&Lx(n,(hWn(),zft))}function SY(n){this.a=(SQ(),cL(n,54)?new $k(n):new bN(n))}function PY(){var n,t;PY=O,t=!Ddn(),n=new d,ett=t?new E:n}function CY(n,t){var e;return e=nE(n.gm),null==t?e:e+": "+t}function IY(n,t){var e;return j4(e=n.b.Qc(t),n.b.gc()),e}function OY(n,t){if(null==n)throw Hp(new Hy(t));return n}function AY(n,t){return hhn(n,t,pZ(n,null==t?0:n.b.se(t)))}function $Y(n,t,e){return e>=0&&mK(n.substr(e,t.length),t)}function LY(n,t,e,i,r,c,a){return new b4(n.e,t,e,i,r,c,a)}function NY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function xY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function DY(n,t){this.g=n,this.d=Pun(Gk(Out,1),a1n,10,0,[t])}function RY(n,t){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t}function KY(n,t){NR.call(this),xtn(this),this.a=n,this.c=t}function _Y(n,t,e,i){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i)}function FY(n,t,e,i){$X(n.c[t.g],t.g,e),$X(n.b[t.g],t.g,i)}function BY(){return A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])}function HY(){return g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])}function qY(){return _nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])}function GY(){return V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])}function zY(){return z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])}function UY(){return U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])}function XY(){return Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])}function WY(){return O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])}function VY(){return gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])}function QY(){return oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])}function YY(){return dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])}function JY(){return B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])}function ZY(){return sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])}function nJ(){return Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])}function tJ(){return D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])}function eJ(){return Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])}function iJ(){return $6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])}function rJ(){return hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])}function cJ(){return Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])}function aJ(){return Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])}function uJ(){return Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])}function oJ(n,t,e,i){return e>=0?n.jh(t,e,i):n.Sg(null,e,i)}function sJ(n){return 0==n.b.b?n.a.$e():dH(n.b)}function hJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.f)}function fJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.k)}function lJ(n){return GI(n.a)===GI((wcn(),I$t))&&Rqn(n),n.a}function bJ(n){this.a=BB(yX(n),271),this.b=(SQ(),new dN(n))}function wJ(n,t){Zl(this,new xC(n.a,n.b)),nb(this,zB(t))}function dJ(){dJ=O,Lyt=new oC(cJn,0),Nyt=new oC(aJn,1)}function gJ(){gJ=O,tyt=new cC(aJn,0),nyt=new cC(cJn,1)}function pJ(){ay.call(this,new XT(etn(12))),aN(!0),this.a=2}function vJ(n,t,e){wWn(),Ap.call(this,n),this.b=t,this.a=e}function mJ(n,t,e){f$(),jp.call(this,t),this.a=n,this.b=e}function yJ(n){NR.call(this),xtn(this),this.a=n,this.c=!0}function kJ(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function jJ(n){pin(n.a),RA(n.a),twn(new Pw(n.a))}function EJ(n,t){oRn(n,!0),Otn(n.e.wf(),new $_(n,!0,t))}function TJ(n,t){return c4(t),Yen(n,x8(ANt,hQn,25,t,15,1),t)}function MJ(n,t){return MQ(),n==JJ(PMn(t))||n==JJ(OMn(t))}function SJ(n,t){return null==t?qI(AY(n.f,null)):hS(n.g,t)}function PJ(n){return 0==n.b?null:(Px(0!=n.b),Atn(n,n.a.a))}function CJ(n){return 0|Math.max(Math.min(n,DWn),-2147483648)}function IJ(n,t){var e=Znt[n.charCodeAt(0)];return null==e?n:e}function OJ(n,t){return WQ(n,"set1"),WQ(t,"set2"),new ET(n,t)}function AJ(n,t){return UR(qx(nen(n.f,t)),n.f.d)}function $J(n,t){var e;return YGn(n,t,e=new q),e.d}function LJ(n,t,e,i){var r;r=new FR,t.a[e.g]=r,mG(n.b,i,r)}function NJ(n,t,e){var i;(i=n.Yg(t))>=0?n.sh(i,e):TLn(n,t,e)}function xJ(n,t,e){hZ(),n&&VW(fAt,n,t),n&&VW(hAt,n,e)}function DJ(n,t,e){this.i=new Np,this.b=n,this.g=t,this.a=e}function RJ(n,t,e){this.c=new Np,this.e=n,this.f=t,this.b=e}function KJ(n,t,e){this.a=new Np,this.e=n,this.f=t,this.c=e}function _J(n,t){V$(this),this.f=t,this.g=n,jQ(this),this._d()}function FJ(n,t){var e;e=n.q.getHours(),n.q.setDate(t),lBn(n,e)}function BJ(n,t){var e;for(yX(t),e=n.a;e;e=e.c)t.Od(e.g,e.i)}function HJ(n){var t;return $on(t=new bE(etn(n.length)),n),t}function qJ(n){function t(){}return t.prototype=n||{},new t}function GJ(n,t){return!!wun(n,t)&&(ein(n),!0)}function zJ(n,t){if(null==t)throw Hp(new gv);return ugn(n,t)}function UJ(n){if(n.qe())return null;var t=n.n;return SWn[t]}function XJ(n){return n.Db>>16!=3?null:BB(n.Cb,33)}function WJ(n){return n.Db>>16!=9?null:BB(n.Cb,33)}function VJ(n){return n.Db>>16!=6?null:BB(n.Cb,79)}function QJ(n){return n.Db>>16!=7?null:BB(n.Cb,235)}function YJ(n){return n.Db>>16!=7?null:BB(n.Cb,160)}function JJ(n){return n.Db>>16!=11?null:BB(n.Cb,33)}function ZJ(n,t){var e;return(e=n.Yg(t))>=0?n.lh(e):qIn(n,t)}function nZ(n,t){var e;return oMn(e=new Lq(t),n),new t_(e)}function tZ(n){var t;return t=n.d,t=n.si(n.f),f9(n,t),t.Ob()}function eZ(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function iZ(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function rZ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a.i>0}function cZ(){this.a=new fA,this.e=new Rv,this.g=0,this.i=0}function aZ(n){this.a=n,this.b=x8(_mt,sVn,1944,n.e.length,0,2)}function uZ(n,t,e){var i;i=Non(n,t,e),n.b=new mrn(i.c.length)}function oZ(){oZ=O,ryt=new rC(pJn,0),cyt=new rC("UP",1)}function sZ(){sZ=O,Rkt=new bC(U3n,0),Kkt=new bC("FAN",1)}function hZ(){hZ=O,fAt=new xp,hAt=new xp,FI(yet,new wo)}function fZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.f,0)}function lZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.k,0)}function bZ(n){return n.Db>>16!=3?null:BB(n.Cb,147)}function wZ(n){return n.Db>>16!=6?null:BB(n.Cb,235)}function dZ(n){return n.Db>>16!=17?null:BB(n.Cb,26)}function gZ(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.le(t))}function pZ(n,t){var e;return null==(e=n.a.get(t))?new Array:e}function vZ(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),lBn(n,e)}function mZ(n,t,e){return null==t?jCn(n.f,null,e):ubn(n.g,t,e)}function yZ(n,t,e,i,r,c){return new N7(n.e,t,n.aj(),e,i,r,c)}function kZ(n,t,e){return n.a=fx(n.a,0,t)+""+e+nO(n.a,t),n}function jZ(n,t,e){return WB(n.a,(nV(),zvn(t,e),new vT(t,e))),n}function EZ(n){return oN(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function TZ(n){return oN(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function MZ(n,t){n.d&&y7(n.d.e,n),n.d=t,n.d&&WB(n.d.e,n)}function SZ(n,t){n.c&&y7(n.c.g,n),n.c=t,n.c&&WB(n.c.g,n)}function PZ(n,t){n.c&&y7(n.c.a,n),n.c=t,n.c&&WB(n.c.a,n)}function CZ(n,t){n.i&&y7(n.i.j,n),n.i=t,n.i&&WB(n.i.j,n)}function IZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function OZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function AZ(n,t){this.a=n,this.c=B$(this.a),this.b=new gY(t)}function $Z(n){return Qln(n),AV(n,new vw(new Rv))}function LZ(n,t){if(n<0||n>t)throw Hp(new Ay(jYn+n+EYn+t))}function NZ(n,t){return IG(n.a,t)?EU(n,BB(t,22).g,null):null}function xZ(n){return Shn(),hN(),0!=BB(n.a,81).d.e}function DZ(){DZ=O,Xnt=lhn((ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])))}function RZ(){RZ=O,pmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function KZ(){KZ=O,vmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function _Z(){_Z=O,ymt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function FZ(){FZ=O,zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function BZ(){BZ=O,Qmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function HZ(){HZ=O,Zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function qZ(){qZ=O,oyt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function GZ(){GZ=O,zkt=WG(new B2,(zyn(),Fyt),(DPn(),zyt))}function zZ(n,t,e,i){this.c=n,this.d=i,WZ(this,t),VZ(this,e)}function UZ(n){this.c=new YT,this.b=n.b,this.d=n.c,this.a=n.a}function XZ(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function WZ(n,t){n.a&&y7(n.a.k,n),n.a=t,n.a&&WB(n.a.k,n)}function VZ(n,t){n.b&&y7(n.b.f,n),n.b=t,n.b&&WB(n.b.f,n)}function QZ(n,t){iW(n,n.b,n.c),BB(n.b.b,65),t&&BB(t.b,65).b}function YZ(n,t){zln(n,t),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2)}function JZ(n,t){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,t)}function ZZ(n,t){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,t)}function n1(n,t){return ZM(),hnn(t)?new lq(t,n):new xI(t,n)}function t1(n,t){null!=t.c&&nW(n,new GX(t.c))}function e1(n){var t;return iE(),cen(t=new Kp,n),t}function i1(n){var t;return iE(),cen(t=new Kp,n),t}function r1(n,t){var e;return e=new HX(n),t.c[t.c.length]=e,e}function c1(n,t){var e;return(e=BB(lfn(OQ(n.a),t),14))?e.gc():0}function a1(n){return Qln(n),PQ(),PQ(),ytn(n,det)}function u1(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function o1(n,t){Um.call(this,new XT(etn(n))),lin(t,oVn),this.a=t}function s1(n,t,e){Hfn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function h1(n,t,e){var i;Hfn(t,e,n.c.length),i=e-t,PE(n.c,t,i)}function f1(n,t){hL(n,dG(e0(kz(t,24),sYn)),dG(e0(t,sYn)))}function l1(n,t){if(n<0||n>=t)throw Hp(new Ay(jYn+n+EYn+t))}function b1(n,t){if(n<0||n>=t)throw Hp(new Ok(jYn+n+EYn+t))}function w1(n,t){this.b=(kW(n),n),this.a=0==(t&_Qn)?64|t|hVn:t}function d1(n){DA(this),Pv(this.a,kon(e.Math.max(8,n))<<1)}function g1(n){return Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))}function p1(){return qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])}function v1(){return Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])}function m1(){return J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])}function y1(){return G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])}function k1(){return Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])}function j1(){return q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])}function E1(){return Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])}function T1(){return Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])}function M1(){return uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])}function S1(){return Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])}function P1(){return Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])}function C1(){return z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])}function I1(){return Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])}function O1(){return ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])}function A1(){return mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])}function $1(){return Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])}function L1(){return $un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])}function N1(){return Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])}function x1(){return dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])}function D1(){return oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])}function R1(){return Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])}function K1(){return Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])}function _1(){return Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])}function F1(){return Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])}function B1(){return Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])}function H1(){return ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])}function q1(){return Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])}function G1(n,t){return k$n(n,t,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z1(n,t,e){var i;return(i=cHn(n,t,!1)).b<=t&&i.a<=e}function U1(n,t,e){var i;(i=new ca).b=t,i.a=e,++t.b,WB(n.d,i)}function X1(n,t){var e;return Tx(!!(e=(kW(n),n).g)),kW(t),e(t)}function W1(n,t){var e,i;return i=pU(n,t),e=n.a.Zc(i),new kT(n,e)}function V1(n){return n.Db>>16!=6?null:BB(cAn(n),235)}function Q1(n){if(2!=n.p)throw Hp(new dv);return dG(n.f)&QVn}function Y1(n){if(2!=n.p)throw Hp(new dv);return dG(n.k)&QVn}function J1(n){return n.a==(R5(),eLt)&&db(n,eLn(n.g,n.b)),n.a}function Z1(n){return n.d==(R5(),eLt)&&pb(n,NKn(n.g,n.b)),n.d}function n0(n){return Px(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function t0(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function e0(n,t){return uan(Sz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function i0(n,t){return uan(Pz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function r0(n,t){return uan(Cz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function c0(n){return rbn(yz(fan(H$n(n,32)),32),fan(H$n(n,32)))}function a0(n){return yX(n),cL(n,14)?new t_(BB(n,14)):HB(n.Kc())}function u0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(n.c,t.c)}function o0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(n.c,t.c)}function s0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(t.c,n.c)}function h0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(t.c,n.c)}function f0(n,t){var e;e=Gy(MD(n.a.We((sWn(),OPt)))),VUn(n,t,e)}function l0(n,t){var e;e=BB(RX(n.g,t),57),Otn(t.d,new oP(n,e))}function b0(n,t){var e,i;return(e=oyn(n))<(i=oyn(t))?-1:e>i?1:0}function w0(n,t){var e;return e=S7(t),BB(RX(n.c,e),19).a}function d0(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function g0(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function p0(n){return null==n.c||0==n.c.length?"n_"+n.b:"n_"+n.c}function v0(n,t){return n&&n.equals?n.equals(t):GI(n)===GI(t)}function m0(n,t){return 0==t?!!n.o&&0!=n.o.f:vpn(n,t)}function y0(n,t,e){var i;n.n&&t&&e&&(i=new Zu,WB(n.e,i))}function k0(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function j0(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function E0(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function T0(n,t,e){Ap.call(this,25),this.b=n,this.a=t,this.c=e}function M0(n){wWn(),Ap.call(this,n),this.c=!1,this.a=!1}function S0(n,t,e,i,r,c){Hen.call(this,n,t,e,i,r),c&&(this.o=-2)}function P0(n,t,e,i,r,c){qen.call(this,n,t,e,i,r),c&&(this.o=-2)}function C0(n,t,e,i,r,c){J5.call(this,n,t,e,i,r),c&&(this.o=-2)}function I0(n,t,e,i,r,c){Uen.call(this,n,t,e,i,r),c&&(this.o=-2)}function O0(n,t,e,i,r,c){Z5.call(this,n,t,e,i,r),c&&(this.o=-2)}function A0(n,t,e,i,r,c){Gen.call(this,n,t,e,i,r),c&&(this.o=-2)}function $0(n,t,e,i,r,c){zen.call(this,n,t,e,i,r),c&&(this.o=-2)}function L0(n,t,e,i,r,c){n6.call(this,n,t,e,i,r),c&&(this.o=-2)}function N0(n,t,e,i){jp.call(this,e),this.b=n,this.c=t,this.d=i}function x0(n,t){this.a=new Np,this.d=new Np,this.f=n,this.c=t}function D0(){this.c=new $$,this.a=new bY,this.b=new em,bM()}function R0(){Nun(),this.b=new xp,this.a=new xp,this.c=new Np}function K0(n,t){this.g=n,this.d=(R5(),eLt),this.a=eLt,this.b=t}function _0(n,t){this.f=n,this.a=(R5(),tLt),this.c=tLt,this.b=t}function F0(n,t){!n.c&&(n.c=new Ecn(n,0)),MHn(n.c,(Uqn(),LLt),t)}function B0(){B0=O,Hkt=new wC("DFS",0),Bkt=new wC("BFS",1)}function H0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Hc(e)}function q0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Mc(e)}function G0(n,t,e,i){return n.a+=""+fx(null==t?zWn:Bbn(t),e,i),n}function z0(n,t,e,i,r,c){return Rcn(n,t,e,c),Jfn(n,i),tln(n,r),n}function U0(n){return Px(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function X0(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function W0(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function V0(n){return!(!n.a||0==H7(n.a.a).i||n.b&&Kvn(n.b))}function Q0(n){return!(!n.u||0==a4(n.u.a).i||n.n&&Rvn(n.n))}function Y0(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),16,new zf(n))}function J0(n,t){return FU(fan(n.q.getTime()),fan(t.q.getTime()))}function Z0(n){return BB(Qgn(n,x8(yut,c1n,17,n.c.length,0,1)),474)}function n2(n){return BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193)}function t2(n){return BZ(),!(b5(n)||!b5(n)&&n.c.i.c==n.d.i.c)}function e2(n,t,e){yX(n),xyn(new IZ(new t_(n),t,e))}function i2(n,t,e){yX(n),Dyn(new OZ(new t_(n),t,e))}function r2(n,t){var e;return e=1-t,n.a[e]=wrn(n.a[e],e),wrn(n,t)}function c2(n,t){var e;n.e=new Jm,m$(e=wDn(t),n.c),IDn(n,e,0)}function a2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.a,r)}function u2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.b,r)}function o2(n){var t,e;return e=t_n(t=new lX,n),yzn(t),e}function s2(){var n,t;return n=new Kp,WB(V$t,t=n),t}function h2(n){return n.j.c=x8(Ant,HWn,1,0,5,1),TV(n.c),gV(n.a),n}function f2(n){return MM(),cL(n.g,10)?BB(n.g,10):null}function l2(n){return!EV(n).dc()&&(L$(n,new m),!0)}function b2(n){if(!("stack"in n))try{throw n}catch(t){}return n}function w2(n,t){if(n<0||n>=t)throw Hp(new Ay(LCn(n,t)));return n}function d2(n,t,e){if(n<0||t<n||t>e)throw Hp(new Ay(oPn(n,t,e)))}function g2(n,t){if(TU(n.a,t),t.d)throw Hp(new dy(IYn));t.d=n}function p2(n,t){if(t.$modCount!=n.$modCount)throw Hp(new vv)}function v2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function m2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function y2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function k2(n,t){return n.a<=n.b&&(t.ud(n.a++),!0)}function j2(n){var t;return JO(n)?-0==(t=n)?0:t:pnn(n)}function E2(n){var t;return EW(n),t=new F,gE(n.a,new gw(t)),t}function T2(n){var t;return EW(n),t=new _,gE(n.a,new dw(t)),t}function M2(n,t){this.a=n,Sb.call(this,n),LZ(t,n.gc()),this.b=t}function S2(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function P2(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),273,new Gf(n))}function C2(n){return new J6((lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))))}function I2(n){return BB(Qgn(n,x8(Gut,u1n,11,n.c.length,0,1)),1943)}function O2(n,t,e){return e.f.c.length>0?BU(n.a,t,e):BU(n.b,t,e)}function A2(n,t,e){n.d&&y7(n.d.e,n),n.d=t,n.d&&kG(n.d.e,e,n)}function $2(n,t){vXn(t,n),aH(n.d),aH(BB(mMn(n,(HXn(),Agt)),207))}function L2(n,t){pXn(t,n),cH(n.d),cH(BB(mMn(n,(HXn(),Agt)),207))}function N2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.fe()),i}function x2(n,t){var e,i;return i=null,(e=dnn(n,t))&&(i=e.ie()),i}function D2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.ie()),i}function R2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=yPn(e)),i}function K2(n,t,e){var i;return i=Qdn(e),wKn(n.g,i,t),wKn(n.i,t,e),t}function _2(n,t,e){var i;i=Ldn();try{return dR(n,t,e)}finally{y3(i)}}function F2(n){var t;t=n.Wg(),this.a=cL(t,69)?BB(t,69).Zh():t.Kc()}function B2(){Ym.call(this),this.j.c=x8(Ant,HWn,1,0,5,1),this.a=-1}function H2(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function q2(n,t,e,i){this.e=i,this.d=null,this.c=n,this.a=t,this.b=e}function G2(n,t,e){this.d=new Fd(this),this.e=n,this.i=t,this.f=e}function z2(){z2=O,Aft=new DP(eJn,0),$ft=new DP("TOP_LEFT",1)}function U2(){U2=O,Tmt=JW(iln(1),iln(4)),Emt=JW(iln(1),iln(2))}function X2(){X2=O,JEt=lhn((IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])))}function W2(){W2=O,VEt=lhn((CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])))}function V2(){V2=O,UTt=lhn((OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])))}function Q2(){Q2=O,act=lhn((wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])))}function Y2(){return Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])}function J2(){return Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])}function Z2(){return qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])}function n3(){return Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])}function t3(){return Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])}function e3(){return Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])}function i3(n,t,e,i){return cL(e,54)?new Ox(n,t,e,i):new sz(n,t,e,i)}function r3(){return Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])}function c3(n){return n.j==(kUn(),SIt)&&SN(UOn(n),oIt)}function a3(n,t){var e;SZ(e=t.a,t.c.d),MZ(e,t.d.d),Ztn(e.a,n.n)}function u3(n,t){return BB($N(Iz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function o3(n,t){return BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function s3(n){return new w1(tcn(BB(n.a.dd(),14).gc(),n.a.cd()),16)}function h3(n){return cL(n,14)?BB(n,14).dc():!n.Kc().Ob()}function f3(n){return MM(),cL(n.g,145)?BB(n.g,145):null}function l3(n){if(n.e.g!=n.b)throw Hp(new vv);return!!n.c&&n.d>0}function b3(n){return Px(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function w3(n,t){kW(t),$X(n.a,n.c,t),n.c=n.c+1&n.a.length-1,wyn(n)}function d3(n,t){kW(t),n.b=n.b-1&n.a.length-1,$X(n.a,n.b,t),wyn(n)}function g3(n,t){var e;for(e=n.j.c.length;e<t;e++)WB(n.j,n.rg())}function p3(n,t,e,i){var r;return r=i[t.g][e.g],Gy(MD(mMn(n.a,r)))}function v3(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function m3(n,t,e,i,r){this.a=n,this.e=t,this.f=e,this.b=i,this.g=r}function y3(n){n&&Inn((sk(),ttt)),--ctt,n&&-1!=utt&&(iS(utt),utt=-1)}function k3(){return bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])}function j3(){return zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])}function E3(){return Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])}function T3(){return mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])}function M3(){return Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])}function S3(){return Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])}function P3(){return Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])}function C3(){return Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])}function I3(n){return hZ(),hU(fAt,n)?BB(RX(fAt,n),331).ug():null}function O3(n,t,e){return t<0?qIn(n,e):BB(e,66).Nj().Sj(n,n.yh(),t)}function A3(n,t,e){var i;return i=Qdn(e),wKn(n.d,i,t),VW(n.e,t,e),t}function $3(n,t,e){var i;return i=Qdn(e),wKn(n.j,i,t),VW(n.k,t,e),t}function L3(n){var t;return tE(),t=new io,n&&HLn(t,n),t}function N3(n){var t;return t=n.ri(n.i),n.i>0&&aHn(n.g,0,t,0,n.i),t}function x3(n,t){var e;return nS(),!(e=BB(RX(mAt,n),55))||e.wj(t)}function D3(n){if(1!=n.p)throw Hp(new dv);return dG(n.f)<<24>>24}function R3(n){if(1!=n.p)throw Hp(new dv);return dG(n.k)<<24>>24}function K3(n){if(7!=n.p)throw Hp(new dv);return dG(n.k)<<16>>16}function _3(n){if(7!=n.p)throw Hp(new dv);return dG(n.f)<<16>>16}function F3(n){var t;for(t=0;n.Ob();)n.Pb(),t=rbn(t,1);return ttn(t)}function B3(n,t){var e;return e=new Ik,n.xd(e),e.a+="..",t.yd(e),e.a}function H3(n,t,e){var i;i=BB(RX(n.g,e),57),WB(n.a.c,new rI(t,i))}function q3(n,t,e){return Tz(MD(qI(AY(n.f,t))),MD(qI(AY(n.f,e))))}function G3(n,t,e){return UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z3(n,t,e){return pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function U3(n,t,e){return x$n(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function X3(n,t){return n==(uSn(),Cut)&&t==Cut?4:n==Cut||t==Cut?8:32}function W3(n,t){return GI(t)===GI(n)?"(this Map)":null==t?zWn:Bbn(t)}function V3(n,t){return BB(null==t?qI(AY(n.f,null)):hS(n.g,t),281)}function Q3(n,t,e){var i;return i=Qdn(e),VW(n.b,i,t),VW(n.c,t,e),t}function Y3(n,t){var e;for(e=t;e;)_x(n,e.i,e.j),e=JJ(e);return n}function J3(n,t){var e;return e=rY(HB(new C7(n,t))),Cq(new C7(n,t)),e}function Z3(n,t){var e;return ZM(),TSn(e=BB(n,66).Mj(),t),e.Ok(t)}function n4(n,t,e,i,r){WB(t,mCn(r,X$n(r,e,i))),UMn(n,r,t)}function t4(n,t,e){n.i=0,n.e=0,t!=e&&(Won(n,t,e),Xon(n,t,e))}function e4(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+sQn),lBn(n,e)}function i4(n,t,e){if(e){var i=e.ee();n.a[t]=i(e)}else delete n.a[t]}function r4(n,t,e){if(e){var i=e.ee();e=i(e)}else e=void 0;n.a[t]=e}function c4(n){if(n<0)throw Hp(new By("Negative array size: "+n))}function a4(n){return n.n||(P5(n),n.n=new YG(n,VAt,n),kY(n)),n.n}function u4(n){return Px(n.a<n.c.a.length),n.b=n.a,Ann(n),n.c.b[n.b]}function o4(n){n.b!=n.c&&(n.a=x8(Ant,HWn,1,8,5,1),n.b=0,n.c=0)}function s4(n){this.b=new xp,this.c=new xp,this.d=new xp,this.a=n}function h4(n,t){wWn(),Ap.call(this,n),this.a=t,this.c=-1,this.b=-1}function f4(n,t,e,i){j0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function l4(n,t,e,i){E0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function b4(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),this.c=n,this.a=e}function w4(n,t,e){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t,this.d=e}function d4(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function g4(n){this.c=n,this.a=BB(Ikn(n),148),this.b=this.a.Aj().Nh()}function p4(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function v4(){xp.call(this),jx(this),this.d.b=this.d,this.d.a=this.d}function m4(n,t){$R.call(this),this.a=n,this.b=t,WB(this.a.b,this)}function y4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function k4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function j4(n,t){var e;for(e=0;e<t;++e)$X(n,e,new Ub(BB(n[e],42)))}function E4(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function T4(n,t){var e;return zsn(),0!=(e=n.j.g-t.j.g)?e:0}function M4(n,t){return kW(t),null!=n.a?PG(t.Kb(n.a)):Set}function S4(n){var t;return n?new Lq(n):(qrn(t=new fA,n),t)}function P4(n,t){return t.b.Kb(T7(n,t.c.Ee(),new yw(t)))}function C4(n){yTn(),hL(this,dG(e0(kz(n,24),sYn)),dG(e0(n,sYn)))}function I4(){I4=O,pit=lhn((hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])))}function O4(){O4=O,kit=lhn((Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])))}function A4(){A4=O,_ct=lhn((Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])))}function $4(){$4=O,zut=lhn((Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])))}function L4(){L4=O,Iht=lhn((_nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])))}function N4(){N4=O,Uht=lhn((g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])))}function x4(){x4=O,tmt=lhn((A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])))}function D4(){D4=O,Bvt=lhn((U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])))}function R4(){R4=O,oht=lhn((V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])))}function K4(){K4=O,Nft=lhn((z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])))}function _4(){_4=O,Pyt=lhn((O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])))}function F4(){F4=O,Gmt=lhn((Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])))}function B4(){B4=O,iyt=lhn((gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])))}function H4(){H4=O,uyt=lhn((oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])))}function q4(){q4=O,Dyt=lhn((dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])))}function G4(){G4=O,Gkt=lhn((B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])))}function z4(){z4=O,Zkt=lhn((Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])))}function U4(){U4=O,Fkt=lhn((sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])))}function X4(){X4=O,ojt=lhn((D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])))}function W4(){W4=O,QTt=lhn((Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])))}function V4(){V4=O,eTt=lhn(($6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])))}function Q4(){Q4=O,Hmt=new JP("UPPER",0),Bmt=new JP("LOWER",1)}function Y4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function J4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function Z4(n,t){var e,i;i=!1;do{i|=e=bon(n,t)}while(e);return i}function n5(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function t5(n,t){var e;for(e=t;e;)_x(n,-e.i,-e.j),e=JJ(e);return n}function e5(n,t){var e,i;for(kW(t),i=n.Kc();i.Ob();)e=i.Pb(),t.td(e)}function i5(n,t){var e;return new vT(e=t.cd(),n.e.pc(e,BB(t.dd(),14)))}function r5(n,t,e,i){var r;(r=new $).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function c5(n,t,e){var i;return l1(t,n.c.length),i=n.c[t],n.c[t]=e,i}function a5(n,t,e){return BB(null==t?jCn(n.f,null,e):ubn(n.g,t,e),281)}function u5(n){return n.c&&n.d?p0(n.c)+"->"+p0(n.d):"e_"+PN(n)}function o5(n,t){return(Qln(n),jE(new Rq(n,new Q9(t,n.a)))).sd(tit)}function s5(){return yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])}function h5(){return kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])}function f5(n){return Dk(),function(){return _2(n,this,arguments)}}function l5(){return Date.now?Date.now():(new Date).getTime()}function b5(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function w5(n){if(!n.c.Sb())throw Hp(new yv);return n.a=!0,n.c.Ub()}function d5(n){n.i=0,yS(n.b,null),yS(n.c,null),n.a=null,n.e=null,++n.g}function g5(n){dS.call(this,null==n?zWn:Bbn(n),cL(n,78)?BB(n,78):null)}function p5(n){eWn(),Bp(this),this.a=new YT,dsn(this,n),DH(this.a,n)}function v5(){xA(this),this.b=new xC(RQn,RQn),this.a=new xC(KQn,KQn)}function m5(n,t){this.c=0,this.b=t,pO.call(this,n,17493),this.a=this.c}function y5(n){k5(),Qet||(this.c=n,this.e=!0,this.a=new Np)}function k5(){k5=O,Qet=!0,Wet=!1,Vet=!1,Jet=!1,Yet=!1}function j5(n,t){return!!cL(t,149)&&mK(n.c,BB(t,149).c)}function E5(n,t){var e;return e=0,n&&(e+=n.f.a/2),t&&(e+=t.f.a/2),e}function T5(n,t){return BB(lnn(n.d,t),23)||BB(lnn(n.e,t),23)}function M5(n){this.b=n,AL.call(this,n),this.a=BB(yan(this.b.a,4),126)}function S5(n){this.b=n,ax.call(this,n),this.a=BB(yan(this.b.a,4),126)}function P5(n){return n.t||(n.t=new dp(n),sln(new xy(n),0,n.t)),n.t}function C5(){return Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])}function I5(){return cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])}function O5(){return rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])}function A5(){return $Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])}function $5(){return Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])}function L5(){return Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])}function N5(){return YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])}function x5(){return LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])}function D5(){return Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])}function R5(){var n,t;R5=O,iE(),t=new Ev,tLt=t,n=new Om,eLt=n}function K5(n){var t;return n.c||cL(t=n.r,88)&&(n.c=BB(t,26)),n.c}function _5(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function F5(n){return M$(n&SQn,n>>22&SQn,n<0?PQn:0)}function B5(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)jW(t[e])}function H5(n,t){var e,i;(e=BB(bfn(n.c,t),14))&&(i=e.gc(),e.$b(),n.d-=i)}function q5(n,t){var e;return!!(e=lsn(n,t.cd()))&&cV(e.e,t.dd())}function G5(n,t){return 0==t||0==n.e?n:t>0?Edn(n,t):Ixn(n,-t)}function z5(n,t){return 0==t||0==n.e?n:t>0?Ixn(n,t):Edn(n,-t)}function U5(n){if(dAn(n))return n.c=n.a,n.a.Pb();throw Hp(new yv)}function X5(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(uSn(),Mut)&&e.k==Mut}function W5(n){var t;return qan(t=new wY,n),hon(t,(HXn(),vgt),null),t}function V5(n,t,e){var i;return(i=n.Yg(t))>=0?n._g(i,e,!0):cOn(n,t,e)}function Q5(n,t,e,i){var r;for(r=0;r<Zit;r++)XG(n.a[t.g][r],e,i[t.g])}function Y5(n,t,e,i){var r;for(r=0;r<nrt;r++)UG(n.a[r][t.g],e,i[t.g])}function J5(n,t,e,i,r){j0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function Z5(n,t,e,i,r){E0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function n6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function t6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.b=e}function e6(n,t,e){jp.call(this,e),this.b=n,this.c=t,this.d=(Bwn(),z$t)}function i6(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function r6(n,t,e){var i;Tcn(i=new X$(n.a),n.a.a),jCn(i.f,t,e),n.a.a=i}function c6(n,t){n.qi(n.i+1),jL(n,n.i,n.oi(n.i,t)),n.bi(n.i++,t),n.ci()}function a6(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.di(e,t),n.ci()}function u6(n){var t;return yX(n),$on(t=new J6(ZW(n.length)),n),t}function o6(n){var t;return yX(n),JPn(t=n?new t_(n):HB(n.Kc())),sfn(t)}function s6(n,t){var e;return l1(t,n.c.length),e=n.c[t],PE(n.c,t,1),e}function h6(n,t){var e;return!(e=BB(n.c.xc(t),14))&&(e=n.ic(t)),n.pc(t,e)}function f6(n,t){var e,i;return kW(n),e=n,kW(t),e==(i=t)?0:e<i?-1:1}function l6(n){var t;return t=n.e+n.f,isNaN(t)&&WK(n.d)?n.d:t}function b6(n,t){return n.a?oO(n.a,n.b):n.a=new lN(n.d),aO(n.a,t),n}function w6(n,t){if(n<0||n>t)throw Hp(new Ay(dCn(n,t,"index")));return n}function d6(n,t,e,i){var r;return vTn(r=x8(ANt,hQn,25,t,15,1),n,t,e,i),r}function g6(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),lBn(n,e)}function p6(n,t){return e.Math.min(W8(t.a,n.d.d.c),W8(t.b,n.d.d.c))}function v6(n,t){return XI(t)?null==t?gAn(n.f,null):Gan(n.g,t):gAn(n.f,t)}function m6(n){this.c=n,this.a=new Wb(this.c.a),this.b=new Wb(this.c.b)}function y6(){this.e=new Np,this.c=new Np,this.d=new Np,this.b=new Np}function k6(){this.g=new Bv,this.b=new Bv,this.a=new Np,this.k=new Np}function j6(n,t,e){this.a=n,this.c=t,this.d=e,WB(t.e,this),WB(e.b,this)}function E6(n,t){gO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function T6(n,t){pO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function M6(n,t){vO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function S6(n,t,e){this.a=n,this.b=t,this.c=e,WB(n.t,this),WB(t.i,this)}function P6(){this.b=new YT,this.a=new YT,this.b=new YT,this.a=new YT}function C6(){C6=O,TMt=new up("org.eclipse.elk.labels.labelManager")}function I6(){I6=O,est=new iR("separateLayerConnections",(Iun(),ast))}function O6(){O6=O,Myt=new uC("REGULAR",0),Tyt=new uC("CRITICAL",1)}function A6(){A6=O,Zvt=new XP("STACKED",0),Jvt=new XP("SEQUENCED",1)}function $6(){$6=O,nTt=new TC("FIXED",0),ZEt=new TC("CENTER_NODE",1)}function L6(n,t){var e;return e=xGn(n,t),n.b=new mrn(e.c.length),yqn(n,e)}function N6(n,t,e){return++n.e,--n.f,BB(n.d[t].$c(e),133).dd()}function x6(n){var t;return n.a||cL(t=n.r,148)&&(n.a=BB(t,148)),n.a}function D6(n){return n.a?n.e?D6(n.e):null:n}function R6(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function K6(n,t){return kW(t),n.c<n.d&&(n.ze(t,n.c++),!0)}function _6(n,t){return!!hU(n.a,t)&&(v6(n.a,t),!0)}function F6(n){var t;return t=n.cd(),RB(BB(n.dd(),14).Nc(),new Vf(t))}function B6(n){var t;return t=BB(VU(n.b,n.b.length),9),new YK(n.a,t,n.c)}function H6(n){return Qln(n),new AD(n,new ZB(n,n.a.e,4|n.a.d))}function q6(n){var t;for(EW(n),t=0;n.a.sd(new fn);)t=rbn(t,1);return t}function G6(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.$f(t[r],i,e)}function z6(n,t){var e;n.C&&((e=BB(oV(n.b,t),124).n).d=n.C.d,e.a=n.C.a)}function U6(n,t,e){return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),n.a[t][e]}function X6(n,t){ODn(),this.e=n,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[t])}function W6(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function V6(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Q6(n,t,e,i){mFn(n,t,e,pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))}function Y6(n,t){OTn(t,"Label management",1),iO(mMn(n,(C6(),TMt))),HSn(t)}function J6(n){xA(this),vH(n>=0,"Initial capacity must not be negative")}function Z6(){Z6=O,Wit=lhn((Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])))}function n8(){n8=O,trt=lhn((J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])))}function t8(){t8=O,urt=lhn((G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])))}function e8(){e8=O,Zet=lhn((qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])))}function i8(){i8=O,Lat=lhn((q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])))}function r8(){r8=O,gut=lhn((Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])))}function c8(){c8=O,bht=lhn((Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])))}function a8(){a8=O,vht=lhn((uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])))}function u8(){u8=O,Nht=lhn((Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])))}function o8(){o8=O,_st=lhn((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))}function s8(){s8=O,Oft=lhn((z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])))}function h8(){h8=O,Mft=lhn((Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])))}function f8(){f8=O,svt=lhn((Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])))}function l8(){l8=O,Yvt=lhn((Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])))}function b8(){b8=O,Rvt=lhn((mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])))}function w8(){w8=O,Uvt=lhn((ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])))}function d8(){d8=O,gmt=lhn(($un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])))}function g8(){g8=O,amt=lhn((Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])))}function p8(){p8=O,fmt=lhn((dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])))}function v8(){v8=O,Nmt=lhn((oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])))}function m8(){m8=O,rjt=lhn((Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])))}function y8(){y8=O,bjt=lhn((Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])))}function k8(){k8=O,eEt=lhn((Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])))}function j8(){j8=O,Qjt=lhn((Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])))}function E8(){E8=O,UEt=lhn((Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])))}function T8(){T8=O,kCt=lhn((ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])))}function M8(){M8=O,VPt=lhn((Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])))}function S8(){return QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])}function P8(n,t){return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),rdn(n.o,t)}function C8(n){return!n.g&&(n.g=new oo),!n.g.d&&(n.g.d=new lp(n)),n.g.d}function I8(n){return!n.g&&(n.g=new oo),!n.g.a&&(n.g.a=new bp(n)),n.g.a}function O8(n){return!n.g&&(n.g=new oo),!n.g.b&&(n.g.b=new fp(n)),n.g.b}function A8(n){return!n.g&&(n.g=new oo),!n.g.c&&(n.g.c=new wp(n)),n.g.c}function $8(n,t,e){var i,r;for(r=new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function L8(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.fi(i,r)}function N8(n,t,e,i){var r;return AFn(r=x8(ANt,hQn,25,t+1,15,1),n,t,e,i),r}function x8(n,t,e,i,r,c){var a;return a=Bmn(r,i),10!=r&&Pun(Gk(n,c),t,e,r,a),a}function D8(n,t,e,i){return e&&(i=e.gh(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function R8(n,t,e,i){return e&&(i=e.ih(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function K8(n,t,e){BB(n.b,65),BB(n.b,65),BB(n.b,65),Otn(n.a,new N_(e,t,n))}function _8(n,t,e){if(n<0||t>e||t<n)throw Hp(new Ok(mYn+n+kYn+t+hYn+e))}function F8(n){if(!n)throw Hp(new Fy("Unable to add element to queue"))}function B8(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Np)}function H8(n,t){PS.call(this,n,t),this.a=x8(Ket,kVn,436,2,0,1),this.b=!0}function q8(n){non.call(this,n,0),jx(this),this.d.b=this.d,this.d.a=this.d}function G8(n){var t;return 0==(t=n.b).b?null:BB(Dpn(t,0),188).b}function z8(n,t){var e;return(e=new q).c=!0,e.d=t.dd(),YGn(n,t.cd(),e)}function U8(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),lBn(n,e)}function X8(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function W8(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function V8(){V8=O,cht=new EP("QUADRATIC",0),aht=new EP("SCANLINE",1)}function Q8(){Q8=O,mmt=WG(dq(new B2,(yMn(),Rat),(lWn(),kot)),Bat,qot)}function Y8(){return wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])}function J8(){return wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])}function Z8(){return $Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])}function n9(){return JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])}function t9(){return Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])}function e9(){return TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])}function i9(){return gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])}function r9(){return DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])}function c9(){return lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])}function a9(){return nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])}function u9(){return uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])}function o9(n){Mx(!!n.c),p2(n.e,n),n.c.Qb(),n.c=null,n.b=dun(n),bD(n.e,n)}function s9(n){return p2(n.c.a.e,n),Px(n.b!=n.c.a.d),n.a=n.b,n.b=n.b.a,n.a}function h9(n){var t;return n.a||-1==n.b||(t=n.c.Tg(),n.a=itn(t,n.b)),n.a}function f9(n,t){return!(n.hi()&&n.Hc(t)||(n.Yh(t),0))}function l9(n,t){return OY(t,"Horizontal alignment cannot be null"),n.b=t,n}function b9(n,t,e){var i;return wWn(),i=ZUn(n,t),e&&i&&gW(n)&&(i=null),i}function w9(n,t,e){var i;for(i=n.Kc();i.Ob();)ZRn(BB(i.Pb(),37),t,e)}function d9(n,t){var e;for(e=t.Kc();e.Ob();)$Kn(n,BB(e.Pb(),37),0,0)}function g9(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function p9(n,t){var e,i,r;return r=n.r,i=n.d,(e=cHn(n,t,!0)).b!=r||e.a!=i}function v9(n,t){return lS(n.e,t)||Jgn(n.e,t,new ipn(t)),BB(lnn(n.e,t),113)}function m9(n,t,e,i){return kW(n),kW(t),kW(e),kW(i),new jU(n,t,new G)}function y9(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=new Zz(this,t,e,i)}function k9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.b=e}function j9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.a=e}function E9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function T9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function M9(n,t,e){var i;return(i=$$n(n.b,t))?NHn(F7(n,i),e):null}function S9(n,t){var e;return(e=n.Yg(t))>=0?n._g(e,!0,!0):cOn(n,t,!0)}function P9(n,t){return Pln(Gy(MD(mMn(n,(hWn(),Tlt)))),Gy(MD(mMn(t,Tlt))))}function C9(){C9=O,Ukt=ogn(ogn(FM(new B2,(zyn(),Kyt)),(DPn(),Qyt)),Uyt)}function I9(n,t,e){var i;return i=Non(n,t,e),n.b=new mrn(i.c.length),sDn(n,i)}function O9(n){if(n.b<=0)throw Hp(new yv);return--n.b,n.a-=n.c.c,iln(n.a)}function A9(n){var t;if(!n.a)throw Hp(new lV);return t=n.a,n.a=JJ(n.a),t}function $9(n){for(;!n.a;)if(!TK(n.c,new pw(n)))return!1;return!0}function L9(n){return yX(n),cL(n,198)?BB(n,198):new ol(n)}function N9(n){x9(),BB(n.We((sWn(),fPt)),174).Fc((lIn(),iIt)),n.Ye(hPt,null)}function x9(){x9=O,tMt=new bu,iMt=new wu,eMt=vsn((sWn(),hPt),tMt,qSt,iMt)}function D9(){D9=O,cjt=new pC("LEAF_NUMBER",0),ajt=new pC("NODE_SIZE",1)}function R9(n,t,e){n.a=t,n.c=e,n.b.a.$b(),yQ(n.d),n.e.a.c=x8(Ant,HWn,1,0,5,1)}function K9(n){n.a=x8(ANt,hQn,25,n.b+1,15,1),n.c=x8(ANt,hQn,25,n.b,15,1),n.d=0}function _9(n,t){n.a.ue(t.d,n.b)>0&&(WB(n.c,new mH(t.c,t.d,n.d)),n.b=t.d)}function F9(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.g[t]}function B9(n,t,e){if(xsn(n,e),null!=e&&!n.wj(e))throw Hp(new lv);return e}function H9(n){var t;if(n.Ek())for(t=n.i-1;t>=0;--t)Wtn(n,t);return N3(n)}function q9(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function G9(n,t){var e;return c4(t),(e=m7(n.slice(0,t),n)).length=t,e}function z9(n,t,e,i){PQ(),i=i||wet,gCn(n.slice(t,e),n,t,e,-t,i)}function U9(n,t,e,i,r){return t<0?cOn(n,e,i):BB(e,66).Nj().Pj(n,n.yh(),t,i,r)}function X9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function W9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function V9(n,t){if(t.a)throw Hp(new dy(IYn));TU(n.a,t),t.a=n,!n.j&&(n.j=t)}function Q9(n,t){vO.call(this,t.rd(),-16449&t.qd()),kW(n),this.a=n,this.c=t}function Y9(n,t){var e,i;return i=t/n.c.Hd().gc()|0,e=t%n.c.Hd().gc(),U6(n,i,e)}function J9(){J9=O,Yit=new GS(cJn,0),Qit=new GS(eJn,1),Jit=new GS(aJn,2)}function Z9(){Z9=O,Net=new gS("All",0),xet=new LA,Det=new A$,Ret=new NA}function n7(){n7=O,_et=lhn((Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])))}function t7(){t7=O,rut=lhn((Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])))}function e7(){e7=O,_rt=lhn((Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])))}function i7(){i7=O,zrt=lhn((Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])))}function r7(){r7=O,ict=lhn((qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])))}function c7(){c7=O,Hyt=lhn((zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])))}function a7(){a7=O,ost=lhn((Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])))}function u7(){u7=O,zjt=lhn((Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])))}function o7(){o7=O,Est=lhn((Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])))}function s7(){s7=O,dvt=lhn((bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])))}function h7(){h7=O,fOt=lhn((Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])))}function f7(){f7=O,PCt=lhn((Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])))}function l7(){l7=O,tCt=lhn((Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])))}function b7(){b7=O,rOt=lhn((Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])))}function w7(){w7=O,BIt=lhn((mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])))}function d7(){d7=O,qBn(),HLt=RQn,BLt=KQn,GLt=new Nb(RQn),qLt=new Nb(KQn)}function g7(){g7=O,Ght=new OP(QZn,0),qht=new OP("IMPROVE_STRAIGHTNESS",1)}function p7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function v7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function m7(n,t){return 10!=vnn(t)&&Pun(tsn(t),t.hm,t.__elementTypeId$,vnn(t),n),n}function y7(n,t){var e;return-1!=(e=E7(n,t,0))&&(s6(n,e),!0)}function k7(n,t){var e;return(e=BB(v6(n.e,t),387))?(RH(e),e.e):null}function j7(n){var t;return JO(n)&&(t=0-n,!isNaN(t))?t:uan(aon(n))}function E7(n,t,e){for(;e<n.c.length;++e)if(cV(t,n.c[e]))return e;return-1}function T7(n,t,e){var i;return EW(n),(i=new sn).a=t,n.a.Nb(new IS(i,e)),i.a}function M7(n){var t;return EW(n),t=x8(xNt,qQn,25,0,15,1),gE(n.a,new ww(t)),t}function S7(n){var t;return t=BB(xq(n.j,0),11),BB(mMn(t,(hWn(),dlt)),11)}function P7(n){var t;if(!Zin(n))throw Hp(new yv);return n.e=1,t=n.d,n.d=null,t}function C7(n,t){var e;this.f=n,this.b=t,e=BB(RX(n.b,t),283),this.c=e?e.b:null}function I7(){G_(),this.b=new xp,this.f=new xp,this.g=new xp,this.e=new xp}function O7(n,t){this.a=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.a),this.b=t}function A7(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--BB(xq(n.c.a,t),10).p}function $7(n){var t;null!=(t=n.Ai())&&-1!=n.d&&BB(t,92).Ng(n),n.i&&n.i.Fi()}function L7(n){V$(this),this.g=n?CY(n,n.$d()):null,this.f=n,jQ(this),this._d()}function N7(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),Fh(this),this.c=n,this.b=e}function x7(n,t,e,i,r){return kW(n),kW(t),kW(e),kW(i),kW(r),new jU(n,t,i)}function D7(n,t){if(t<0)throw Hp(new Ay(n5n+t));return g3(n,t+1),xq(n.j,t)}function R7(n,t,e,i){if(!n)throw Hp(new _y($Rn(t,Pun(Gk(Ant,1),HWn,1,5,[e,i]))))}function K7(n,t){return cV(t,xq(n.f,0))||cV(t,xq(n.f,1))||cV(t,xq(n.f,2))}function _7(n,t){LK(BB(BB(n.f,33).We((sWn(),uPt)),98))&&Qbn(yV(BB(n.f,33)),t)}function F7(n,t){var e,i;return!(i=(e=BB(t,675)).Oh())&&e.Rh(i=new RI(n,t)),i}function B7(n,t){var e,i;return!(i=(e=BB(t,677)).pk())&&e.tk(i=new K0(n,t)),i}function H7(n){return n.b||(n.b=new JG(n,VAt,n),!n.a&&(n.a=new oR(n,n))),n.b}function q7(){q7=O,Oat=new WS("XY",0),Iat=new WS("X",1),Aat=new WS("Y",2)}function G7(){G7=O,crt=new zS("TOP",0),rrt=new zS(eJn,1),irt=new zS(oJn,2)}function z7(){z7=O,Pft=new xP(QZn,0),Cft=new xP("TOP",1),Sft=new xP(oJn,2)}function U7(){U7=O,Kvt=new GP("INPUT_ORDER",0),_vt=new GP("PORT_DEGREE",1)}function X7(){X7=O,btt=M$(SQn,SQn,524287),wtt=M$(0,0,CQn),dtt=F5(1),F5(2),gtt=F5(0)}function W7(n,t,e){n.a.c=x8(Ant,HWn,1,0,5,1),Xqn(n,t,e),0==n.a.c.length||f_n(n,t)}function V7(n){var t,e;return YU(n,0,e=n.length,t=x8(ONt,WVn,25,e,15,1),0),t}function Q7(n){var t;return n.dh()||(t=bX(n.Tg())-n.Ah(),n.ph().bk(t)),n.Pg()}function Y7(n){var t;return null==(t=een(yan(n,32)))&&(fgn(n),t=een(yan(n,32))),t}function J7(n,t){var e;return(e=Awn(n.d,t))>=0?Zpn(n,e,!0,!0):cOn(n,t,!0)}function Z7(n,t){var e,i;return MM(),e=f3(n),i=f3(t),!!e&&!!i&&!Kpn(e.k,i.k)}function nnn(n,t){Pen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function tnn(n,t){Cen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function enn(n,t){Sen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function inn(n,t){Men(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function rnn(n){(this.q?this.q:(SQ(),SQ(),het)).Ac(n.q?n.q:(SQ(),SQ(),het))}function cnn(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function ann(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function unn(n,t){Vrt=new it,ect=t,BB((Wrt=n).b,65),K8(Wrt,Vrt,null),uqn(Wrt)}function onn(n,t,e){var i;return i=n.g[t],jL(n,t,n.oi(t,e)),n.gi(t,e,i),n.ci(),i}function snn(n,t){var e;return(e=n.Xc(t))>=0&&(n.$c(e),!0)}function hnn(n){var t;return n.d!=n.r&&(t=Ikn(n),n.e=!!t&&t.Cj()==E9n,n.d=t),n.e}function fnn(n,t){var e;for(yX(n),yX(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function lnn(n,t){var e;return(e=BB(RX(n.e,t),387))?(uL(n,e),e.e):null}function bnn(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function wnn(n,t){return Qln(n),new Rq(n,new KK(new M6(t,n.a)))}function dnn(n,t){var e=n.a[t],i=(Zun(),ftt)[typeof e];return i?i(e):khn(typeof e)}function gnn(n){switch(n.g){case 0:return DWn;case 1:return-1;default:return 0}}function pnn(n){return Kkn(n,(X7(),gtt))<0?-CN(aon(n)):n.l+n.m*IQn+n.h*OQn}function vnn(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function mnn(n){var t;return null!=(t=0==n.b.c.length?null:xq(n.b,0))&&hrn(n,0),t}function ynn(n,t){for(;t[0]<n.length&&GO(" \t\r\n",YTn(fV(n,t[0])))>=0;)++t[0]}function knn(n,t){this.e=t,this.a=Van(n),this.a<54?this.f=j2(n):this.c=npn(n)}function jnn(n,t,e,i){wWn(),Ap.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function Enn(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function Tnn(n,t){var e;for(e=0;n.e!=n.i.gc();)gq(t,kpn(n),iln(e)),e!=DWn&&++e}function Mnn(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function Snn(n,t){var e,i,r;r=t.c.i,i=(e=BB(RX(n.f,r),57)).d.c-e.e.c,Yrn(t.a,i,0)}function Pnn(n){var t,e;return t=n+128,!(e=(jq(),jtt)[t])&&(e=jtt[t]=new $b(n)),e}function Cnn(n,t){var e;return kW(t),xnn(!!(e=n[":"+t]),Pun(Gk(Ant,1),HWn,1,5,[t])),e}function Inn(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=sPn(t,e)}while(n.b);n.b=e}}function Onn(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=sPn(t,e)}while(n.a);n.a=e}}function Ann(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function $nn(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lnn(n,t){var e;return 0==(e=Ibn(n.e.c,t.e.c))?Pln(n.e.d,t.e.d):e}function Nnn(n,t){return 0==t.e||0==n.e?eet:($On(),ANn(n,t))}function xnn(n,t){if(!n)throw Hp(new _y(YNn("Enum constant undefined: %s",t)))}function Dnn(){Dnn=O,uut=new St,out=new Tt,cut=new At,aut=new $t,sut=new Lt}function Rnn(){Rnn=O,vit=new BS("BY_SIZE",0),mit=new BS("BY_SIZE_AND_SHAPE",1)}function Knn(){Knn=O,Dct=new XS("EADES",0),Rct=new XS("FRUCHTERMAN_REINGOLD",1)}function _nn(){_nn=O,Sht=new PP("READING_DIRECTION",0),Pht=new PP("ROTATION",1)}function Fnn(){Fnn=O,Mht=lhn((Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])))}function Bnn(){Bnn=O,jvt=lhn((Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])))}function Hnn(){Hnn=O,Ost=lhn((LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])))}function qnn(){qnn=O,zlt=lhn((Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])))}function Gnn(){Gnn=O,sTt=lhn(($Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])))}function znn(){znn=O,bMt=lhn((rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])))}function Unn(){Unn=O,BEt=lhn((YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])))}function Xnn(){Xnn=O,qat=lhn((yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])))}function Wnn(){Wnn=O,GPt=lhn((Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])))}function Vnn(){Vnn=O,zCt=lhn((cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])))}function Qnn(){Qnn=O,OIt=lhn((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])))}function Ynn(n,t){var e;return(e=BB(RX(n.a,t),134))||(e=new Zn,VW(n.a,t,e)),e}function Jnn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.a==n}function Znn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.i==n}function ntn(n,t){return kW(t),Dz(n),!!n.d.Ob()&&(t.td(n.d.Pb()),!0)}function ttn(n){return Vhn(n,DWn)>0?DWn:Vhn(n,_Vn)<0?_Vn:dG(n)}function etn(n){return n<3?(lin(n,IVn),n+1):n<OVn?CJ(n/.75+1):DWn}function itn(n,t){var e;return null==n.i&&qFn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function rtn(n,t,e){var i;if(null==t)throw Hp(new gv);return i=zJ(n,t),i4(n,t,e),i}function ctn(n){return n.a>=-.01&&n.a<=fJn&&(n.a=0),n.b>=-.01&&n.b<=fJn&&(n.b=0),n}function atn(n,t){return t==(c_(),c_(),Met)?n.toLocaleLowerCase():n.toLowerCase()}function utn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(ED(n),n.o)}function otn(n){var t;t=new $m,f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),t)}function stn(n,t){var e;return e=t>0?t-1:t,$j(Lj(Fen(LH(new Xm,e),n.n),n.j),n.k)}function htn(n,t,e,i){n.j=-1,qOn(n,EPn(n,t,e),(ZM(),BB(t,66).Mj().Ok(i)))}function ftn(n){this.g=n,this.f=new Np,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function ltn(n){this.b=new Np,this.a=new Np,this.c=new Np,this.d=new Np,this.e=n}function btn(n,t){this.a=new xp,this.e=new xp,this.b=(Mhn(),uvt),this.c=n,this.b=t}function wtn(n,t,e){NR.call(this),xtn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function dtn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(ry(),znt)}function gtn(n){if(n<0)throw Hp(new _y("Illegal Capacity: "+n));this.g=this.ri(n)}function ptn(n,t){if(0>n||n>t)throw Hp(new Tk("fromIndex: 0, toIndex: "+n+hYn+t))}function vtn(n){var t;if(n.a==n.b.a)throw Hp(new yv);return t=n.a,n.c=t,n.a=n.a.e,t}function mtn(n){var t;Mx(!!n.c),t=n.c.a,Atn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function ytn(n,t){var e;return Qln(n),e=new vQ(n,n.a.rd(),4|n.a.qd(),t),new Rq(n,e)}function ktn(n,t){var e,i;return(e=BB(lfn(n.d,t),14))?(i=t,n.e.pc(i,e)):null}function jtn(n,t){var e;for(e=n.Kc();e.Ob();)hon(BB(e.Pb(),70),(hWn(),ult),t)}function Etn(n){var t;return(t=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,t=0),t}function Ttn(n,t,i){var r;Fkn(i,r=e.Math.max(0,n.b/2-.5),1),WB(t,new iP(i,r))}function Mtn(n,t,e){return CJ(HH(n.a.e[BB(t.a,10).p]-n.a.e[BB(e.a,10).p]))}function Stn(n,t,e,i,r,c){var a;SZ(a=W5(i),r),MZ(a,c),JIn(n.a,i,new L_(a,t,e.f))}function Ptn(n,t){var e;if(!(e=NNn(n.Tg(),t)))throw Hp(new _y(r6n+t+u6n));return e}function Ctn(n,t){var e;for(e=n;JJ(e);)if((e=JJ(e))==t)return!0;return!1}function Itn(n,t){var e,i,r;for(i=t.a.cd(),e=BB(t.a.dd(),14).gc(),r=0;r<e;r++)n.td(i)}function Otn(n,t){var e,i,r,c;for(kW(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.td(e)}function Atn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function $tn(n,t){return!(!t||n.b[t.g]!=t||($X(n.b,t.g,null),--n.c,0))}function Ltn(n,t){return!!Zrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))}function Ntn(n,t){LK(BB(mMn(BB(n.e,10),(HXn(),ept)),98))&&(SQ(),m$(BB(n.e,10).j,t))}function xtn(n){n.b=(J9(),Qit),n.f=(G7(),rrt),n.d=(lin(2,AVn),new J6(2)),n.e=new Gj}function Dtn(){Dtn=O,Git=new qS("BEGIN",0),zit=new qS(eJn,1),Uit=new qS("END",2)}function Rtn(){Rtn=O,zPt=new _C(eJn,0),UPt=new _C("HEAD",1),XPt=new _C("TAIL",2)}function Ktn(){return hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])}function _tn(){return PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])}function Ftn(){return kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])}function Btn(){return sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])}function Htn(){Htn=O,ZCt=lhn((QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])))}function qtn(){qtn=O,nrt=(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,Zit=nrt}function Gtn(n){this.b=(yX(n),new t_(n)),this.a=new Np,this.d=new Np,this.e=new Gj}function ztn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Utn(n){var t;return n.w?n.w:((t=V1(n))&&!t.kh()&&(n.w=t),t)}function Xtn(n){var t;return null==n?null:VTn(t=BB(n,190),t.length)}function Wtn(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.li(t,n.g[t])}function Vtn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)orn(n.b,t),t=Mln(t);orn(n.b,t)}function Qtn(n){var t;for(t=0;t<n.c.length;t++)(l1(t,n.c.length),BB(n.c[t],11)).p=t}function Ytn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Jtn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],lL(n.g,e).a=t}function Ztn(n,t){var e;for(e=spn(n,0);e.b!=e.d.c;)UR(BB(b3(e),8),t);return n}function nen(n,t){return XR(B$(BB(RX(n.g,t),8)),_$(BB(RX(n.f,t),460).b))}function ten(n){var t;return p2(n.e,n),Px(n.b),n.c=n.a,t=BB(n.a.Pb(),42),n.b=dun(n),t}function een(n){var t;return JH(null==n||Array.isArray(n)&&!((t=vnn(n))>=14&&t<=16)),n}function ien(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function ren(n,t,e){var i,r;i=t;do{r=Gy(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function cen(n,t){var e,i;i=n.a,e=Qfn(n,t,null),i!=t&&!n.e&&(e=azn(n,t,e)),e&&e.Fi()}function aen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function uen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function oen(n,t){return _Mn(),E$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function sen(n,t){return Zj(Jrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function hen(){hen=O,Aut=lhn((uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])))}function fen(){fen=O,tSt=lhn((wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])))}function len(){len=O,xMt=lhn((wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])))}function ben(){ben=O,rht=lhn(($Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])))}function wen(){wen=O,oft=lhn((JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])))}function den(){den=O,nft=lhn((Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])))}function gen(){gen=O,rvt=lhn((TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])))}function pen(){pen=O,Hht=lhn((gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])))}function ven(){ven=O,Jyt=lhn((DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])))}function men(){men=O,uIt=lhn((lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])))}function yen(){yen=O,sCt=lhn((nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])))}function ken(){return n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])}function jen(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,0,e,n.a))}function Een(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.b))}function Ten(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.b))}function Men(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.f))}function Sen(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.g))}function Pen(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,5,e,n.i))}function Cen(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,6,e,n.j))}function Ien(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.j))}function Oen(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.c))}function Aen(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,2,e,n.k))}function $en(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,2,e,n.d))}function Len(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,4,e,n.s))}function Nen(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,5,e,n.t))}function xen(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,e,t))}function Den(n,t){var e;return(e=BB(RX((nS(),mAt),n),55))?e.xj(t):x8(Ant,HWn,1,t,5,1)}function Ren(n,t){var e;return t in n.a&&(e=zJ(n,t).he())?e.a:null}function Ken(n,t){var e,i;return tE(),i=new uo,!!t&&INn(i,t),xin(e=i,n),e}function _en(n,t,e){if(xsn(n,e),!n.Bk()&&null!=e&&!n.wj(e))throw Hp(new lv);return e}function Fen(n,t){return n.n=t,n.n?(n.f=new Np,n.e=new Np):(n.f=null,n.e=null),n}function Ben(n,t,e,i,r,c){var a;return Qen(e,a=mX(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Hen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function qen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Gen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function zen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function Uen(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xen(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],V9(n.a,e);return n}function Wen(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)yX(t[e]);return new AO(n)}function Ven(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||zVn}function Qen(n,t){if(n){t.n=n;var e=UJ(t);e?e.gm=t:SWn[n]=[t]}}function Yen(n,t,i){var r;return r=n.length,_Cn(n,0,t,0,e.Math.min(i,r),!0),t}function Jen(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=BB(r.Pb(),79),TU(n,BB(e.Kb(i),33))}function Zen(){YE();for(var n=PWn,t=0;t<arguments.length;t++)n.push(arguments[t])}function nin(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)r5(n,e[i],n.c.b,n.c)}function tin(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),WB(n.a,t)}function ein(n){Mx(n.c>=0),rgn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function iin(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=yhn(n.f)),n.c).e}function rin(n){if(!(n>=0))throw Hp(new _y("tolerance ("+n+") must be >= 0"));return n}function cin(){return cMt||ksn(cMt=new ORn,Pun(Gk(_it,1),HWn,130,0,[new Nf])),cMt}function ain(){ain=O,Gvt=new zP(hJn,0),Hvt=new zP("INPUT",1),qvt=new zP("OUTPUT",2)}function uin(){uin=O,wht=new MP("ARD",0),ght=new MP("MSD",1),dht=new MP("MANUAL",2)}function oin(){oin=O,Omt=new YP("BARYCENTER",0),Amt=new YP(E1n,1),$mt=new YP(T1n,2)}function sin(n,t){var e;if(e=n.gc(),t<0||t>e)throw Hp(new tK(t,e));return new RK(n,t)}function hin(n,t){var e;return cL(t,42)?n.c.Mc(t):(e=rdn(n,t),Wdn(n,t),e)}function fin(n,t,e){return Ihn(n,t),Nrn(n,e),Len(n,0),Nen(n,1),nln(n,!0),Yfn(n,!0),n}function lin(n,t){if(n<0)throw Hp(new _y(t+" cannot be negative but was: "+n));return n}function bin(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(cV(t,n.Xb(e)))return e;return-1}function win(n){var t;for(t=n.c.Cc().Kc();t.Ob();)BB(t.Pb(),14).$b();n.c.$b(),n.d=0}function din(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)QU(t=e[i],t.length,null)}function gin(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function pin(n){var t;for(t=new Wb(eyn(n));t.a<t.c.c.length;)BB(n0(t),680).Gf()}function vin(n){vM(),this.g=new xp,this.f=new xp,this.b=new xp,this.c=new pJ,this.i=n}function min(){this.f=new Gj,this.d=new wm,this.c=new Gj,this.a=new Np,this.b=new Np}function yin(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=null,this.c=new lK(this,t,e,i)}function kin(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function jin(){OL.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=k6n}function Ein(){return n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])}function Tin(){return tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])}function Min(){Min=O,Ott=Pun(Gk(ANt,1),hQn,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Sin(){Sin=O,kmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Pin(){Pin=O,jmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Cin(){Cin=O,Mmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Iin(){Iin=O,Cmt=WG(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat,$ot)}function Oin(){Oin=O,hht=new TP("LAYER_SWEEP",0),sht=new TP(B1n,1),fht=new TP(QZn,2)}function Ain(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?BB(xq(e.a,i-1),10):null}function $in(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.k))}function Lin(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.f))}function Nin(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,e,n.i))}function xin(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.a))}function Din(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Rin(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Kin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function _in(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function Fin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,e,n.c))}function Bin(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.d))}function Hin(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.D))}function qin(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&qin(n.i,t/n.r*n.i.d))}function Gin(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new Fm:new Dh,n.c=MDn(i,n.b,n.a)}function zin(n,t){return $xn(n.e,t)?(ZM(),hnn(t)?new lq(t,n):new xI(t,n)):new KI(t,n)}function Uin(n,t){return Jj(Zrn(n.a,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function Xin(n,t,e){return x7(n,new fw(t),new un,new lw(e),Pun(Gk(nit,1),$Vn,132,0,[]))}function Win(n){return 0>n?new VT:new $D(null,new m5(n+1,n))}function Vin(n,t){var e;return SQ(),e=new XT(1),XI(n)?mZ(e,n,t):jCn(e.f,n,t),new Xb(e)}function Qin(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function Yin(n){var t;return cL(t=mMn(n,(hWn(),dlt)),160)?mwn(BB(t,160)):null}function Jin(n){var t;return(n=e.Math.max(n,2))>(t=kon(n))?(t<<=1)>0?t:OVn:t}function Zin(n){switch(uN(3!=n.e),n.e){case 2:return!1;case 0:return!0}return _5(n)}function nrn(n,t){var e;return!!cL(t,8)&&(e=BB(t,8),n.a==e.a&&n.b==e.b)}function trn(n,t,e){var i,r;return r=t>>5,i=31&t,e0(jz(n.n[e][r],dG(yz(i,1))),3)}function ern(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)vjn(n,(e=BB(i.Pb(),42)).cd(),e.dd())}function irn(n,t){var e;e=new it,BB(t.b,65),BB(t.b,65),BB(t.b,65),Otn(t.a,new TB(n,e,t))}function rrn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,21,e,n.b))}function crn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,e,n.d))}function arn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,13,e,n.j))}function urn(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)$X(t,i,n.a[r])}function orn(n,t){var e;return kW(t),e=t.g,!n.b[e]&&($X(n.b,e,t),++n.c,!0)}function srn(n,t){var e;return!((e=null==t?-1:E7(n.b,t,0))<0||(hrn(n,e),0))}function hrn(n,t){var e;e=s6(n.b,n.b.c.length-1),t<n.b.c.length&&(c5(n.b,t,e),KCn(n,t))}function frn(n,t){0==(k5(),Qet?null:t.c).length&&zD(t,new X),mZ(n.a,Qet?null:t.c,t)}function lrn(n,t){OTn(t,"Hierarchical port constraint processing",1),bpn(n),YXn(n),HSn(t)}function brn(n,t){var e,i;for(i=t.Kc();i.Ob();)e=BB(i.Pb(),266),n.b=!0,TU(n.e,e),e.b=n}function wrn(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function drn(n,t){var e,i;return e=BB(mMn(n,(HXn(),spt)),8),i=BB(mMn(t,spt),8),Pln(e.b,i.b)}function grn(n){RG.call(this),this.b=Gy(MD(mMn(n,(HXn(),ypt)))),this.a=BB(mMn(n,Zdt),218)}function prn(n,t,e){G2.call(this,n,t,e),this.a=new xp,this.b=new xp,this.d=new Wd(this)}function vrn(n){this.e=n,this.d=new bE(etn(gz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function mrn(n){this.b=n,this.a=x8(ANt,hQn,25,n+1,15,1),this.c=x8(ANt,hQn,25,n,15,1),this.d=0}function yrn(n,t,e){var i;return jxn(n,t,i=new Np,e,!0,!0),n.b=new mrn(i.c.length),i}function krn(n,t){var e;return(e=BB(RX(n.c,t),458))||((e=new cm).c=t,VW(n.c,e.c,e)),e}function jrn(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Ern(n){return null==n.b?(YM(),YM(),x$t):n.Lk()?n.Kk():n.Jk()}function Trn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)Pen(t=BB(kpn(e),33),0),Cen(t,0)}function Mrn(){Mrn=O,sat=new up(OZn),hat=new up(AZn),oat=new up($Zn),uat=new up(LZn)}function Srn(){Srn=O,qut=new ZS("TO_INTERNAL_LTR",0),Hut=new ZS("TO_INPUT_DIRECTION",1)}function Prn(){Prn=O,Qkt=new dC("P1_NODE_PLACEMENT",0),Ykt=new dC("P2_EDGE_ROUTING",1)}function Crn(){Crn=O,Rst=new kP("START",0),Dst=new kP("MIDDLE",1),xst=new kP("END",2)}function Irn(){Irn=O,tst=new iR("edgelabelcenterednessanalysis.includelabel",(hN(),ptt))}function Orn(n,t){JT(AV(new Rq(null,new w1(new Cb(n.b),1)),new JC(n,t)),new nI(n,t))}function Arn(){this.c=new IE(0),this.b=new IE(B3n),this.d=new IE(F3n),this.a=new IE(JJn)}function $rn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Ul(t=BB(e.Pb(),214),new HMn(t.e))}function Lrn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zl(t=BB(e.Pb(),214),new Vz(t.f))}function Nrn(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.zb))}function xrn(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,e,n.xb))}function Drn(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.yb))}function Rrn(n,t){var e;(e=new Om).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function Krn(n,t){var e;(e=new pD).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function _rn(n,t){var e,i;for(z9(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n._c(i,e[i])}function Frn(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Brn(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?nsn(e):0);return t}function Hrn(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+bnn(n))}function qrn(n,t){var e;return cL(t,14)?(e=BB(t,14),n.Gc(e)):fnn(n,BB(yX(t),20).Kc())}function Grn(n,t,e){btn.call(this,t,e),this.d=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.d)}function zrn(n){n.a=null,n.e=null,n.b.c=x8(Ant,HWn,1,0,5,1),n.f.c=x8(Ant,HWn,1,0,5,1),n.c=null}function Urn(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function Xrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new xd(n)),t))))}function Wrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new Nd(n)),t))))}function Vrn(n,t){OTn(t,k1n,1),JT(wnn(new Rq(null,new w1(n.b,16)),new Zt),new ne),HSn(t)}function Qrn(n,t){var e,i;return e=BB(ZAn(n,(Uyn(),Ljt)),19),i=BB(ZAn(t,Ljt),19),E$(e.a,i.a)}function Yrn(n,t,e){var i,r;for(r=spn(n,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a+=t,i.b+=e;return n}function Jrn(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&wW(t,i.g))return i;return null}function Zrn(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&wW(t,i.i))return i;return null}function ncn(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function tcn(n,t){var e,i;for(SQ(),i=new Np,e=0;e<n;++e)i.c[i.c.length]=t;return new $k(i)}function ecn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.b))}function icn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.c))}function rcn(n){var t;return QI((t=E2(n)).a,0)?(fM(),fM(),Cet):(fM(),new kx(t.b))}function ccn(n){return n.b.c.i.k==(uSn(),Mut)?BB(mMn(n.b.c.i,(hWn(),dlt)),11):n.b.c}function acn(n){return n.b.d.i.k==(uSn(),Mut)?BB(mMn(n.b.d.i,(hWn(),dlt)),11):n.b.d}function ucn(n,t,e,i,r,c,a,u,o,s,h,f,l){return bCn(n,t,e,i,r,c,a,u,o,s,h,f,l),Gln(n,!1),n}function ocn(n,t,e,i,r,c,a){gT.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=u6(a)}function scn(n,t){typeof window===AWn&&typeof window.$gwt===AWn&&(window.$gwt[n]=t)}function hcn(n,t){return Aun(),n==Zat&&t==eut||n==eut&&t==Zat||n==tut&&t==nut||n==nut&&t==tut}function fcn(n,t){return Aun(),n==Zat&&t==nut||n==Zat&&t==tut||n==eut&&t==tut||n==eut&&t==nut}function lcn(n,t){return h$(),rin(fJn),e.Math.abs(0-t)<=fJn||0==t||isNaN(0)&&isNaN(t)?0:n/t}function bcn(){return bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])}function wcn(){wcn=O,P$t=new Im,I$t=Pun(Gk(FAt,1),N9n,170,0,[]),C$t=Pun(Gk(QAt,1),x9n,59,0,[])}function dcn(){dcn=O,smt=new VP("NO",0),umt=new VP("GREEDY",1),omt=new VP("LOOK_BACK",2)}function gcn(){gcn=O,Dut=new Ht,Nut=new Bt,xut=new qt,Lut=new Gt,Rut=new zt,Kut=new Ut}function pcn(n){var t,e;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),29).p=e,++e}function vcn(n,t){var e;return $In(new xC((e=_Tn(n)).c,e.d),new xC(e.b,e.a),n.rf(),t,n.Hf())}function mcn(n,t){var e;return n.b?null:(e=stn(n,n.g),DH(n.a,e),e.i=n,n.d=t,e)}function ycn(n,t,e){OTn(e,"DFS Treeifying phase",1),jdn(n,t),cxn(n,t),n.a=null,n.b=null,HSn(e)}function kcn(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Np,UCn(this),SQ(),m$(this.a,null)}function jcn(n){this.i=n.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Ecn(n,t){MH.call(this,W$t,n,t),this.b=this,this.a=axn(n.Tg(),itn(this.e.Tg(),this.c))}function Tcn(n,t){var e,i;for(kW(t),i=t.vc().Kc();i.Ob();)e=BB(i.Pb(),42),n.zc(e.cd(),e.dd())}function Mcn(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!G3(n,t,i.Pb()))return!1;return!0}function Scn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.gh(t,-1-(-1==c?i:c),null,r)),r}function Pcn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.ih(t,-1-(-1==c?i:c),null,r)),r}function Ccn(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Icn(n){switch(n.g){case 2:return kUn(),CIt;case 4:return kUn(),oIt;default:return n}}function Ocn(n){switch(n.g){case 1:return kUn(),SIt;case 3:return kUn(),sIt;default:return n}}function Acn(n){var t,e,i;return n.j==(kUn(),sIt)&&(e=SN(t=UOn(n),oIt),(i=SN(t,CIt))||i&&e)}function $cn(n){var t;return new YK(t=BB(n.e&&n.e(),9),BB(VU(t,t.length),9),t.length)}function Lcn(n,t){OTn(t,k1n,1),twn(sM(new Pw((gM(),new HV(n,!1,!1,new Ft))))),HSn(t)}function Ncn(n,t){return hN(),XI(n)?f6(n,SD(t)):UI(n)?Tz(n,MD(t)):zI(n)?Ez(n,TD(t)):n.wd(t)}function xcn(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),WB(n.a,t)}function Dcn(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.a<e&&t.b>c&&t.b<i}function Rcn(n,t,e,i){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,e),t&&_In(n,t),i&&n.xk(!0)}function Kcn(n,t){var e;qQ(e=BB(t,183),"x",n.i),qQ(e,"y",n.j),qQ(e,C6n,n.g),qQ(e,P6n,n.f)}function _cn(){_cn=O,Imt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Fcn(){Fcn=O,Dmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Bcn(){Bcn=O,Xjt=new yC(QZn,0),Wjt=new yC("POLAR_COORDINATE",1),Ujt=new yC("ID",2)}function Hcn(){Hcn=O,Xvt=new UP("EQUALLY",0),Wvt=new UP(mJn,1),Vvt=new UP("NORTH_SOUTH",2)}function qcn(){qcn=O,$vt=lhn((sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])))}function Gcn(){Gcn=O,Vst=lhn((kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])))}function zcn(){zcn=O,EMt=lhn((PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])))}function Ucn(){Ucn=O,cAt=lhn((hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])))}function Xcn(){Xcn=O,Qrt=new iR("debugSVG",(hN(),!1)),Yrt=new iR("overlapsExisted",!0)}function Wcn(n,t){return x7(new ow(n),new sw(t),new hw(t),new tn,Pun(Gk(nit,1),$Vn,132,0,[]))}function Vcn(){var n;return qet||(qet=new Kv,YA(n=new y5(""),(lM(),Het)),frn(qet,n)),qet}function Qcn(n,t){for(yX(t);n.Ob();)if(!Qan(BB(n.Pb(),10)))return!1;return!0}function Ycn(n,t){var e;return!!(e=XRn(cin(),n))&&(Ypn(t,(sWn(),mPt),e),!0)}function Jcn(n,t){var e;for(e=0;e<t.j.c.length;e++)BB(D7(n,e),21).Gc(BB(D7(t,e),14));return n}function Zcn(n,t){var e,i;for(i=new Wb(t.b);i.a<i.c.c.length;)e=BB(n0(i),29),n.a[e.p]=QMn(e)}function nan(n,t){var e,i;for(kW(t),i=n.vc().Kc();i.Ob();)e=BB(i.Pb(),42),t.Od(e.cd(),e.dd())}function tan(n,t){cL(t,83)?(BB(n.c,76).Xj(),ern(n,BB(t,83))):BB(n.c,76).Wb(t)}function ean(n){return cL(n,152)?o6(BB(n,152)):cL(n,131)?BB(n,131).a:cL(n,54)?new fy(n):new CT(n)}function ian(n,t){return t<n.b.gc()?BB(n.b.Xb(t),10):t==n.b.gc()?n.a:BB(xq(n.e,t-n.b.gc()-1),10)}function ran(n,t){n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=rbn(n.d,t)}function can(n,t){OTn(t,"Edge and layer constraint edge reversal",1),Fzn(LRn(n)),HSn(t)}function aan(n){var t;null==n.d?(++n.e,n.f=0,rfn(null)):(++n.e,t=n.d,n.d=null,n.f=0,rfn(t))}function uan(n){var t;return 0==(t=n.h)?n.l+n.m*IQn:t==PQn?n.l+n.m*IQn-OQn:n}function oan(n){return qD(),n.A.Hc((mdn(),DIt))&&!n.B.Hc((n_n(),UIt))?ndn(n):null}function san(n){if(kW(n),0==n.length)throw Hp(new Mk("Zero length BigInteger"));iKn(this,n)}function han(n){if(!n)throw Hp(new Fy("no calls to next() since the last call to remove()"))}function fan(n){return $Qn<n&&n<OQn?n<0?e.Math.ceil(n):e.Math.floor(n):uan(gNn(n))}function lan(n,t){var e,i,r;for(e=n.c.Ee(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Od(e,i);return n.b.Kb(e)}function ban(n,t){var e,i,r;if(null!=(e=n.Jg())&&n.Mg())for(i=0,r=e.length;i<r;++i)e[i].ui(t)}function wan(n,t){var e,i;for(i=vW(e=n).e;i;){if((e=i)==t)return!0;i=vW(e).e}return!1}function dan(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function gan(n,t,e){var i,r;return r=BB(UK(n.d,t),19),i=BB(UK(n.b,e),19),r&&i?U6(n,r.a,i.a):null}function pan(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)SA(e=BB(kpn(i),33),e.i+t.b,e.j+t.d)}function van(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),70),WB(n.d,e),KMn(n,e)}function man(n,t){var e,i;i=new Np,e=t;do{i.c[i.c.length]=e,e=BB(RX(n.k,e),17)}while(e);return i}function yan(n,t){var e;return 0!=(n.Db&t)?-1==(e=Rmn(n,t))?n.Eb:een(n.Eb)[e]:null}function kan(n,t){var e;return(e=new _f).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function jan(n,t){var e;return(e=new Ev).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function Ean(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return m0(n,t)}function Tan(n){switch(n.a.g){case 1:return new EI;case 3:return new hyn;default:return new If}}function Man(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw Hp(new yv)}function San(n){var t;return a$(),uS(syt,n)||((t=new ua).a=n,wR(syt,n,t)),BB(oV(syt,n),635)}function Pan(n){var t,e,i;return e=0,(i=n)<0&&(i+=OQn,e=PQn),t=CJ(i/IQn),M$(CJ(i-t*IQn),t,e)}function Can(n){var t,e,i;for(i=0,e=new QT(n.a);e.a<e.c.a.length;)t=u4(e),n.b.Hc(t)&&++i;return i}function Ian(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:nsn(e)));return t}function Oan(n,t){var e;this.c=n,gmn(n,e=new Np,t,n.b,null,!1,null,!1),this.a=new M2(e,0)}function Aan(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(ZM(),BB(n,66).Oj()),this.k=axn(t.e.Tg(),n)}function $an(n,t,e){this.b=(kW(n),n),this.d=(kW(t),t),this.e=(kW(e),e),this.c=this.d+""+this.e}function Lan(){this.a=BB(mpn((fRn(),qct)),19).a,this.c=Gy(MD(mpn(cat))),this.b=Gy(MD(mpn(tat)))}function Nan(){Nan=O,KCt=lhn((n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])))}function xan(){xan=O,Fit=lhn((tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])))}function Dan(){Dan=O,Rrt=new US("UP",0),Nrt=new US(pJn,1),xrt=new US(cJn,2),Drt=new US(aJn,3)}function Ran(){Ran=O,sZ(),ykt=new $O(X3n,kkt=Rkt),B0(),vkt=new $O(W3n,mkt=Hkt)}function Kan(){Kan=O,jft=new NP("ONE_SIDED",0),Eft=new NP("TWO_SIDED",1),kft=new NP("OFF",2)}function _an(n){n.r=new Rv,n.w=new Rv,n.t=new Np,n.i=new Np,n.d=new Rv,n.a=new bA,n.c=new xp}function Fan(n){this.n=new Np,this.e=new YT,this.j=new YT,this.k=new Np,this.f=new Np,this.p=n}function Ban(n,t){n.c&&(JKn(n,t,!0),JT(new Rq(null,new w1(t,16)),new qd(n))),JKn(n,t,!1)}function Han(n,t,e){return n==(oin(),$mt)?new Pc:0!=H$n(t,1)?new Rj(e.length):new Dj(e.length)}function qan(n,t){var e;return t?((e=t.Ve()).dc()||(n.q?Tcn(n.q,e):n.q=new mO(e)),n):n}function Gan(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(mR(n.a,t),--n.c,oY(n.b)),e}function zan(n,t){var e;return 0==(e=t.p-n.p)?Pln(n.f.a*n.f.b,t.f.a*t.f.b):e}function Uan(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function Xan(n){return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:eQ(n)}function Wan(n){var t;if(n){if((t=n).dc())throw Hp(new yv);return t.Xb(t.gc()-1)}return u1(n.Kc())}function Van(n){var t;return Vhn(n,0)<0&&(n=uH(n)),64-(0!=(t=dG(kz(n,32)))?ZIn(t):ZIn(dG(n))+32)}function Qan(n){var t;return t=BB(mMn(n,(hWn(),Qft)),61),n.k==(uSn(),Mut)&&(t==(kUn(),CIt)||t==oIt)}function Yan(n,t,e){var i,r;(r=BB(mMn(n,(HXn(),vgt)),74))&&(Wsn(i=new km,0,r),Ztn(i,e),Frn(t,i))}function Jan(n,t,e){var i,r,c,a;i=(a=vW(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function Zan(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(kUn(),sIt)?n.p-t.p:t.p-n.p}function nun(n){var t,e;for(PUn(n),e=new Wb(n.d);e.a<e.c.c.length;)(t=BB(n0(e),101)).i&&XSn(t)}function tun(n,t,e,i,r){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i),$X(n.b[t.g],e.g,r),$X(n.b[e.g],t.g,r)}function eun(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),BB(i.b,65),Otn(i.a,new EB(n,t,i))}function iun(n,t){n.d==(Ffn(),_Pt)||n.d==HPt?BB(t.a,57).c.Fc(BB(t.b,57)):BB(t.b,57).c.Fc(BB(t.a,57))}function run(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),_pn(n.n,t,i)):eSn(n,t,e,i)}function cun(n,t){var e;return Nrn(e=new Ho,t),f9((!n.A&&(n.A=new NL(O$t,n,7)),n.A),e),e}function aun(n,t,e){var i,r;return r=N2(t,A6n),pjn((i=new aI(n,e)).a,i.b,r),r}function uun(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.kh())&&cL(t=Ikn(n),148)&&(n.a=BB(t,148)),n.a}function oun(n,t){var e,i;for(kW(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function sun(n,t){var e,i,r;return e=n.l+t.l,i=n.m+t.m+(e>>22),r=n.h+t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function hun(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function fun(n){var t;return n<128?(!(t=(Mq(),Mtt)[n])&&(t=Mtt[n]=new Lb(n)),t):new Lb(n)}function lun(n){var t;return cL(n,78)?n:((t=n&&n.__java$exception)||ov(t=new jhn(n)),t)}function bun(n){if(cL(n,186))return BB(n,118);if(n)return null;throw Hp(new Hy(e8n))}function wun(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(Nfn(t,_hn(n)))return!0;return!1}function dun(n){return!!n.a.Ob()||n.a==n.d&&(n.a=new S2(n.e.f),n.a.Ob())}function gun(n,t){var e;return 0!=(e=t.Pc()).length&&(tH(n.c,n.c.length,e),!0)}function pun(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=BB(r.Pb(),42),n.yc(i.cd(),i.dd(),e);return n}function vun(n,t){var e;for(e=new Wb(n.b);e.a<e.c.c.length;)hon(BB(n0(e),70),(hWn(),ult),t)}function mun(n,t,e){var i,r;for(r=new Wb(n.b);r.a<r.c.c.length;)SA(i=BB(n0(r),33),i.i+t,i.j+e)}function yun(n,t){if(!n)throw Hp(new _y($Rn("value already present: %s",Pun(Gk(Ant,1),HWn,1,5,[t]))))}function kun(n,t){return!(!n||!t||n==t)&&_dn(n.d.c,t.d.c+t.d.b)&&_dn(t.d.c,n.d.c+n.d.b)}function jun(){return k5(),Qet?new y5(null):FOn(Vcn(),"com.google.common.base.Strings")}function Eun(n,t){var e;return e=sx(t.a.gc()),JT(ytn(new Rq(null,new w1(t,1)),n.i),new NC(n,e)),e}function Tun(n){var t;return Nrn(t=new Ho,"T"),f9((!n.d&&(n.d=new NL(O$t,n,11)),n.d),t),t}function Mun(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.ki(e))?0:nsn(i));return t}function Sun(n,t,e,i){var r;return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),r=n.a[t][e],$X(n.a[t],e,i),r}function Pun(n,t,e,i,r){return r.gm=n,r.hm=t,r.im=I,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Cun(n,t,i,r,c){return jDn(),e.Math.min(zGn(n,t,i,r,c),zGn(i,r,n,t,qx(new xC(c.a,c.b))))}function Iun(){Iun=O,ast=new tP(QZn,0),rst=new tP(C1n,1),cst=new tP(I1n,2),ist=new tP("BOTH",3)}function Oun(){Oun=O,vst=new mP(eJn,0),mst=new mP(cJn,1),yst=new mP(aJn,2),kst=new mP("TOP",3)}function Aun(){Aun=O,Zat=new QS("Q1",0),eut=new QS("Q4",1),nut=new QS("Q2",2),tut=new QS("Q3",3)}function $un(){$un=O,bmt=new QP("OFF",0),wmt=new QP("SINGLE_EDGE",1),lmt=new QP("MULTI_EDGE",2)}function Lun(){Lun=O,WTt=new SC("MINIMUM_SPANNING_TREE",0),XTt=new SC("MAXIMUM_SPANNING_TREE",1)}function Nun(){Nun=O,new up("org.eclipse.elk.addLayoutConfig"),ZTt=new ou,JTt=new au,new uu}function xun(n){var t,e;for(t=new YT,e=spn(n.d,0);e.b!=e.d.c;)DH(t,BB(b3(e),188).c);return t}function Dun(n){var t,e;for(e=new Np,t=n.Kc();t.Ob();)gun(e,wDn(BB(t.Pb(),33)));return e}function Run(n){var t;tBn(n,!0),t=VVn,Lx(n,(HXn(),fpt))&&(t+=BB(mMn(n,fpt),19).a),hon(n,fpt,iln(t))}function Kun(n,t,e){var i;$U(n.a),Otn(e.i,new jg(n)),kgn(n,i=new C$(BB(RX(n.a,t.b),65)),t),e.f=i}function _un(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?BB(xq(e.a,i+1),10):null}function Fun(n,t){var e,i;for(WQ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Bun(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=i0(i,yz(1,e));return i}function Hun(n){var t,e,i;for(SQ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?nsn(t):0,i|=0;return i}function qun(n){var t;return tE(),t=new co,n&&f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),t),t}function Gun(n){var t;return(t=new p).a=n,t.b=yon(n),t.c=x8(Qtt,sVn,2,2,6,1),t.c[0]=Hrn(n),t.c[1]=Hrn(n),t}function zun(n,t){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void n.o.c.$b();mPn(n,t)}function Uun(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function Xun(n){switch(n.g){case 1:return ECt;case 2:return jCt;case 3:return TCt;default:return MCt}}function Wun(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 2:case 4:return!0;default:return!1}}function Vun(){Vun=O,yft=lhn((bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])))}function Qun(){Qun=O,JIt=lhn((n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])))}function Yun(){Yun=O,Xkt=dq(ogn(ogn(FM(dq(new B2,(zyn(),Kyt),(DPn(),Qyt)),_yt),Xyt),Wyt),Fyt,Vyt)}function Jun(){Jun=O,Aht=new CP(QZn,0),Oht=new CP("INCOMING_ONLY",1),$ht=new CP("OUTGOING_ONLY",2)}function Zun(){Zun=O,ftt={boolean:UT,number:Cy,string:Iy,object:TCn,function:TCn,undefined:Wp}}function non(n,t){vH(n>=0,"Negative initial capacity"),vH(t>=0,"Non-positive load factor"),$U(this)}function ton(n,t,e){return!(n>=128)&&JI(n<64?e0(yz(1,n),e):e0(yz(1,n-64),t),0)}function eon(n,t){return!(!n||!t||n==t)&&Ibn(n.b.c,t.b.c+t.b.b)<0&&Ibn(t.b.c,n.b.c+n.b.b)<0}function ion(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new UV(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ron(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Son(n,t=e[i],(kUn(),SIt)),Son(n,t,sIt)}function con(n){var t,e;for(null==n.j&&(n.j=(PY(),Ijn(ett.ce(n)))),t=0,e=n.j.length;t<e;++t);}function aon(n){var t,e;return M$(t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,~n.h+(0==t&&0==e?1:0)&PQn)}function uon(n,t){return TFn(BB(BB(RX(n.g,t.a),46).a,65),BB(BB(RX(n.g,t.b),46).a,65))}function oon(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));return n.hi()&&(e=nZ(n,e)),n.Vh(t,e)}function son(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function hon(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function fon(n){var t,e;return qan(e=new y6,n),hon(e,(Mrn(),sat),n),eBn(n,e,t=new xp),Szn(n,e,t),e}function lon(n){var t,e,i;for(jDn(),e=x8(PMt,sVn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=lmn(i,n);return e}function bon(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=Pdn(n,t,r,r+1);return e}function won(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)vmn(n,c,a)||FRn(n,c,a,!0,!1)}function don(n,t){this.b=n,NO.call(this,(BB(Wtn(QQ((QX(),t$t).o),10),18),t.i),t.g),this.a=(wcn(),I$t)}function gon(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function pon(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function von(n,t,i){this.q=new e.Date,this.q.setFullYear(n+sQn,t,i),this.q.setHours(0,0,0,0),lBn(this,0)}function mon(){mon=O,Nvt=new qP(QZn,0),Lvt=new qP("NODES_AND_EDGES",1),xvt=new qP("PREFER_EDGES",2)}function yon(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+bnn(n))}function kon(n){var t;if(n<0)return _Vn;if(0==n)return 0;for(t=OVn;0==(t&n);t>>=1);return t}function jon(n){var t,e;return 32==(e=ZIn(n.h))?32==(t=ZIn(n.m))?ZIn(n.l)+32:t+20-10:e-12}function Eon(n){var t;return null==(t=n.a[n.b])?null:($X(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Ton(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Mon(n,t,e){var i,r;return i=new H8(t,e),r=new q,n.b=Wxn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Son(n,t,e){var i,r,c;for(c=0,r=Lfn(t,e).Kc();r.Ob();)i=BB(r.Pb(),11),VW(n.c,i,iln(c++))}function Pon(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).g.c=-t.g.c-t.g.b;kNn(n)}function Con(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).d.c=-t.d.c-t.d.b;yNn(n)}function Ion(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&cL(t=Ikn(n),88)&&(n.c=BB(t,26)),n.c}function Oon(n){var t,e,i;t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,i=~n.h+(0==t&&0==e?1:0)&PQn,n.l=t,n.m=e,n.h=i}function Aon(n){var t,e,i,r,c;for(t=new Gj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function $on(n,t){var e,i,r,c,a;for(SQ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function Lon(n){var t,e;for(jDn(),e=-17976931348623157e292,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function Non(n,t,e){var i;return jxn(n,t,i=new Np,(kUn(),oIt),!0,!1),jxn(n,e,i,CIt,!1,!1),i}function xon(n,t,e){var i,r;return r=N2(t,"labels"),XAn((i=new gI(n,e)).a,i.b,r),r}function Don(n,t,e,i){var r;return(r=m$n(n,t,e,i))||!(r=aln(n,e,i))||Fqn(n,t,r)?r:null}function Ron(n,t,e,i){var r;return(r=y$n(n,t,e,i))||!(r=uln(n,e,i))||Fqn(n,t,r)?r:null}function Kon(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!BB(Dq(n.a,e),169).Lb(t))return!1;return!0}function _on(n,t,e){if(yX(t),e.Ob())for(sO(t,CX(e.Pb()));e.Ob();)sO(t,n.a),sO(t,CX(e.Pb()));return t}function Fon(n){var t,e,i;for(SQ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?nsn(t):0),i|=0;return i}function Bon(n,t,e,i,r){var c;return c=jAn(n,t),e&&Oon(c),r&&(n=Smn(n,t),ltt=i?aon(n):M$(n.l,n.m,n.h)),c}function Hon(n,t){var e;try{t.Vd()}catch(i){if(!cL(i=lun(i),78))throw Hp(i);e=i,n.c[n.c.length]=e}}function qon(n,t,e){var i,r;return cL(t,144)&&e?(i=BB(t,144),r=e,n.a[i.b][r.b]+n.a[r.b][i.b]):0}function Gon(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return fwn(n,t)}function zon(n,t){switch(t.g){case 0:cL(n.b,631)||(n.b=new Lan);break;case 1:cL(n.b,632)||(n.b=new fH)}}function Uon(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&BB(n.g[n.i-1],47).Ob():tZ(n);)vI(t,aLn(n))}function Xon(n,t,e){n.g=APn(n,t,(kUn(),oIt),n.b),n.d=APn(n,e,oIt,n.b),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Won(n,t,e){n.g=APn(n,t,(kUn(),CIt),n.j),n.d=APn(n,e,CIt,n.j),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Von(n,t,e){return!jE(AV(new Rq(null,new w1(n.c,16)),new aw(new ZC(t,e)))).sd((dM(),tit))}function Qon(n){var t;return EW(n),t=new sn,n.a.sd(t)?(CL(),new vy(kW(t.a))):(CL(),CL(),Set)}function Yon(n){var t;return!(n.b<=0)&&((t=GO("MLydhHmsSDkK",YTn(fV(n.c,0))))>1||t>=0&&n.b<3)}function Jon(n){var t,e;for(t=new km,e=spn(n,0);e.b!=e.d.c;)Kx(t,0,new wA(BB(b3(e),8)));return t}function Zon(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),81).f.$b();ky(n.b,n),BNn(n)}function nsn(n){return XI(n)?vvn(n):UI(n)?VO(n):zI(n)?(kW(n),n?1231:1237):iz(n)?n.Hb():AG(n)?PN(n):tY(n)}function tsn(n){return XI(n)?Qtt:UI(n)?Ptt:zI(n)?ktt:iz(n)||AG(n)?n.gm:n.gm||Array.isArray(n)&&Gk(ntt,1)||ntt}function esn(n){if(0===n.g)return new cu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function isn(n){if(0===n.g)return new iu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function rsn(n,t,e){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void tan(n.o,e);yCn(n,t,e)}function csn(n,t,e){this.g=n,this.e=new Gj,this.f=new Gj,this.d=new YT,this.b=new YT,this.a=t,this.c=e}function asn(n,t,e,i){this.b=new Np,this.n=new Np,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function usn(n){this.e=n,this.d=new p4(this.e.g),this.a=this.d,this.b=dun(this),this.$modCount=n.$modCount}function osn(n){for(;!n.d||!n.d.Ob();){if(!n.b||Wy(n.b))return null;n.d=BB(dU(n.b),47)}return n.d}function ssn(n){return WB(n.c,(Nun(),ZTt)),uen(n.a,Gy(MD(mpn((Rwn(),Vpt)))))?new qu:new Cg(n)}function hsn(n){switch(n.g){case 1:return F3n;default:case 2:return 0;case 3:return JJn;case 4:return B3n}}function fsn(){var n;return wWn(),PNt||(n=ex(ZUn("M",!0)),n=gG(ZUn("M",!1),n),PNt=n)}function lsn(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.ue(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function bsn(n,t,e){var i,r;hN(),i=!!TO(e),(r=BB(t.xc(i),15))||(r=new Np,t.zc(i,r)),r.Fc(e)}function wsn(n,t){var e,i;return(e=BB(ZAn(n,(W$n(),dEt)),19).a)==(i=BB(ZAn(t,dEt),19).a)||e<i?-1:e>i?1:0}function dsn(n,t){return!!bNn(n,t)&&(JIn(n.b,BB(mMn(t,(hWn(),Xft)),21),t),DH(n.a,t),!0)}function gsn(n){var t,e;(t=BB(mMn(n,(hWn(),Elt)),10))&&(y7((e=t.c).a,t),0==e.a.c.length&&y7(vW(t).b,e))}function psn(n){return Qet?x8(Get,dYn,572,0,0,1):BB(Qgn(n.a,x8(Get,dYn,572,n.a.c.length,0,1)),842)}function vsn(n,t,e,i){return nV(),new hy(Pun(Gk(Hnt,1),kVn,42,0,[(zvn(n,t),new vT(n,t)),(zvn(e,i),new vT(e,i))]))}function msn(n,t,e){var i;return fin(i=new $m,t,e),f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),i),i}function ysn(n){var t,e,i,r;for(e=(r=fS(AOt,n)).length,i=x8(Qtt,sVn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function ksn(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new UX(n),e.Qe(a),NBn(a);$U(n.f)}function jsn(n,t){var e;return t===n||!!cL(t,224)&&(e=BB(t,224),Nfn(n.Zb(),e.Zb()))}function Esn(n,t){var e;2*t+1>=n.b.c.length||(Esn(n,2*t+1),(e=2*t+2)<n.b.c.length&&Esn(n,e),KCn(n,t))}function Tsn(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=Jin(e),i=x8(Qnt,CVn,330,r,0,1),this.b=i}function Msn(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:sS(e0(n[i],UQn),e0(t[i],UQn))?-1:1}function Ssn(n,t){var e,i;for(i=spn(n,0);i.b!=i.d.c;)(e=BB(b3(i),214)).e.length>0&&(t.td(e),e.i&&pln(e))}function Psn(n,t){var e,i;return i=BB(yan(n.a,4),126),e=x8(dAt,i9n,415,t,0,1),null!=i&&aHn(i,0,e,0,i.length),e}function Csn(n,t){var e;return e=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Isn(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(BB(e.Pb(),14).Hc(t))return!0;return!1}function Osn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(vmn(n,c,a))return!0;return!1}function Asn(n,t,e){var i,r,c,a;for(kW(e),a=!1,c=n.Zc(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function $sn(n,t){var e;return n===t||!!cL(t,83)&&(e=BB(t,83),zSn(lz(n),e.vc()))}function Lsn(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=BB(r.Pb(),42),n.re(t,i.dd()))return!0;return!1}function Nsn(n,t,e){return n.d[t.p][e.p]||(ivn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function xsn(n,t){if(!n.ai()&&null==t)throw Hp(new _y("The 'no null' constraint is violated"));return t}function Dsn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),Hin(n,null==t?null:(kW(t),t)),n.C&&n.yk(null)}function Rsn(n,t){return!(!n||n==t||!Lx(t,(hWn(),rlt)))&&BB(mMn(t,(hWn(),rlt)),10)!=n}function Ksn(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function _sn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function Fsn(n){_J.call(this,"The given string does not match the expected format for individual spacings.",n)}function Bsn(){Bsn=O,uOt=new cI("ELK",0),oOt=new cI("JSON",1),aOt=new cI("DOT",2),sOt=new cI("SVG",3)}function Hsn(){Hsn=O,sjt=new vC(QZn,0),hjt=new vC("RADIAL_COMPACTION",1),fjt=new vC("WEDGE_COMPACTION",2)}function qsn(){qsn=O,zet=new pS("CONCURRENT",0),Uet=new pS("IDENTITY_FINISH",1),Xet=new pS("UNORDERED",2)}function Gsn(){Gsn=O,wM(),oct=new $O(BJn,sct=rct),uct=new up(HJn),hct=new up(qJn),fct=new up(GJn)}function zsn(){zsn=O,lst=new ji,bst=new Ei,fst=new Ti,hst=new Mi,kW(new Si),sst=new D}function Usn(){Usn=O,emt=new WP("CONSERVATIVE",0),imt=new WP("CONSERVATIVE_SOFT",1),rmt=new WP("SLOPPY",2)}function Xsn(){Xsn=O,dCt=new WA(15),wCt=new XA((sWn(),XSt),dCt),gCt=gPt,hCt=aSt,fCt=KSt,bCt=BSt,lCt=FSt}function Wsn(n,t,e){var i,r;for(i=new YT,r=spn(e,0);r.b!=r.d.c;)DH(i,new wA(BB(b3(r),8)));Asn(n,t,i)}function Vsn(n){var t,e,i;for(t=0,i=x8(PMt,sVn,8,n.b,0,1),e=spn(n,0);e.b!=e.d.c;)i[t++]=BB(b3(e),8);return i}function Qsn(n){var t;return!n.a&&(n.a=new eU(WAt,n,9,5)),0!=(t=n.a).i?HM(BB(Wtn(t,0),678)):null}function Ysn(n,t){var e;return e=rbn(n,t),sS(r0(n,t),0)|YI(r0(n,e),0)?e:rbn(bVn,r0(jz(e,63),1))}function Jsn(n,t){var e;e=null!=mpn((Rwn(),Vpt))&&null!=t.wg()?Gy(MD(t.wg()))/Gy(MD(mpn(Vpt))):1,VW(n.b,t,e)}function Zsn(n,t){var e,i;return(e=BB(n.d.Bc(t),14))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function nhn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function thn(n){var t;if((t=n.a.c.length)>0)return Kz(t-1,n.a.c.length),s6(n.a,t-1);throw Hp(new mv)}function ehn(n,t,e){if(t<0)throw Hp(new Ay(n5n+t));t<n.j.c.length?c5(n.j,t,e):(g3(n,t),WB(n.j,e))}function ihn(n,t,e){if(n>t)throw Hp(new _y(mYn+n+yYn+t));if(n<0||t>e)throw Hp(new Tk(mYn+n+kYn+t+hYn+e))}function rhn(n){if(!n.a||0==(8&n.a.i))throw Hp(new Fy("Enumeration class expected for layout option "+n.f))}function chn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.ri(n.i),aHn(t,0,n.g,0,n.i))}function ahn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.c,null)}function uhn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.b,null),n.b=n.b+1&e}function ohn(n,t,e){var i;return LZ(t,n.c.length),0!=(i=e.Pc()).length&&(tH(n.c,t,i),!0)}function shn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return n[t];return null}function hhn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.re(t,i.cd()))return i;return null}function fhn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?nsn(t):0),c|=0;return c}function lhn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function bhn(n){var t;for(yX(n),C_(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&dAn(n);t++)U5(n);return t}function whn(n){var t,e,i;for(i=0,e=new oz(ZL(n.a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||++i;return i}function dhn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw Hp(new wv);e=vW(i),++r}}function ghn(n,t){var e,i,r;for(r=t-n.f,i=new Wb(n.d);i.a<i.c.c.length;)kdn(e=BB(n0(i),443),e.e,e.f+r);n.f=t}function phn(n,t,i){return e.Math.abs(t-n)<_3n||e.Math.abs(i-n)<_3n||(t-n>_3n?n-i>_3n:i-n>_3n)}function vhn(n,t){return n?t&&!n.j||cL(n,124)&&0==BB(n,124).a.b?0:n.Re():0}function mhn(n,t){return n?t&&!n.k||cL(n,124)&&0==BB(n,124).a.a?0:n.Se():0}function yhn(n){return ODn(),n<0?-1!=n?new Rpn(-1,-n):Ytt:n<=10?Ztt[CJ(n)]:new Rpn(1,n)}function khn(n){throw Zun(),Hp(new gy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function jhn(n){hk(),V$(this),jQ(this),this.e=n,Cxn(this,n),this.g=null==n?zWn:Bbn(n),this.a="",this.b=n,this.a=""}function Ehn(){this.a=new nu,this.f=new dg(this),this.b=new gg(this),this.i=new pg(this),this.e=new vg(this)}function Thn(){cy.call(this,new q8(etn(16))),lin(2,oVn),this.b=2,this.a=new HW(null,null,0,null),iv(this.a,this.a)}function Mhn(){Mhn=O,cvt=new KP("DUMMY_NODE_OVER",0),avt=new KP("DUMMY_NODE_UNDER",1),uvt=new KP("EQUAL",2)}function Shn(){Shn=O,Xat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[(Ffn(),_Pt),FPt])),Wat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[HPt,KPt]))}function Phn(n){return(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b}function Chn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Q$n(BB(t.Pb(),561),n.e,n.f),WB(n.g,e)}function Ihn(n,t){var e,i;e=n.nk(t,null),i=null,t&&(iE(),cen(i=new Kp,n.r)),(e=HTn(n,i,e))&&e.Fi()}function Ohn(n,t){var e,i;for(i=0!=H$n(n.d,1),e=!0;e;)e=!1,e=t.c.Tf(t.e,i),e|=DNn(n,t,i,!1),i=!i;$rn(n)}function Ahn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=dNn(t.q,n.b),t.q.d>r&&(aEn(t.q,r),i=e!=t.q.d)),i}function $hn(n,t){var i,r,c,a,u;return a=t.i,u=t.j,r=a-(i=n.f).i,c=u-i.j,e.Math.sqrt(r*r+c*c)}function Lhn(n,t){var e;return(e=Ydn(n))||(!$Ot&&($Ot=new Oo),RHn(),f9((e=new Cp(YPn(t))).Vk(),n)),e}function Nhn(n,t){var e,i;return(e=BB(n.c.Bc(t),14))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function xhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Dhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Rhn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return!1;return!0}function Khn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function _hn(n){var t;return Px(n.a!=n.b),t=n.d.a[n.a],Ex(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function Fhn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw Hp(new yv);return t=n.a,n.a+=n.c.c,++n.b,iln(t)}function Bhn(n){var t;return t=new ftn(n),i2(n.a,sut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[t]))),t.d&&WB(t.f,t.d),t.f}function Hhn(n){var t;return qan(t=new O$(n.a),n),hon(t,(hWn(),dlt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function qhn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),70)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function Ghn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(cY(n,BB(i.Pb(),57),e))return!0;return!1}function zhn(n){var t,e;for(e=new Wb(n.r);e.a<e.c.c.length;)if(t=BB(n0(e),10),n.n[t.p]<=0)return t;return null}function Uhn(n){var t,e;for(e=new Rv,t=new Wb(n);t.a<t.c.c.length;)Frn(e,dDn(BB(n0(t),33)));return e}function Xhn(n){var t;return t=kA(Cmt),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),dft))&&dq(t,(yMn(),_at),(lWn(),Bot)),t}function Whn(n,t,e){var i;i=new MOn(n,t),JIn(n.r,t.Hf(),i),e&&!Hz(n.u)&&(i.c=new yJ(n.d),Otn(t.wf(),new Cw(i)))}function Vhn(n,t){var e;return JO(n)&&JO(t)&&(e=n-t,!isNaN(e))?e:Kkn(JO(n)?Pan(n):n,JO(t)?Pan(t):t)}function Qhn(n,t){return t<n.length&&(b1(t,n.length),63!=n.charCodeAt(t))&&(b1(t,n.length),35!=n.charCodeAt(t))}function Yhn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new ZSn(n.c,n.a,e,c),new uRn(e,n.a,r,n.e,n.b,n.c==(oin(),Amt)))}function Jhn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,1,r,t),e?e.Ei(i):e=i),e}function Zhn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,3,r,t),e?e.Ei(i):e=i),e}function nfn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,0,r,t),e?e.Ei(i):e=i),e}function tfn(n,t){var e,i,r,c;return(c=kCn((i=t,(r=n?Ydn(n):null)&&r.Xk(),i)))==t&&(e=Ydn(n))&&e.Xk(),c}function efn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function ifn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function rfn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(BB(t.g,367),r=t.i,i=0;i<r;++i);}function cfn(n){var t,i,r;for(r=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),r=e.Math.max(r,t.g);return r}function afn(n){var t,e,i;for(i=new Wb(n.b);i.a<i.c.c.length;)(t=(e=BB(n0(i),214)).c.Rf()?e.f:e.a)&&wqn(t,e.j)}function ufn(){ufn=O,vCt=new HC("INHERIT",0),pCt=new HC("INCLUDE_CHILDREN",1),mCt=new HC("SEPARATE_CHILDREN",2)}function ofn(n,t){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),void sqn(n.n);case 2:return void $in(n,null)}zun(n,t)}function sfn(n){switch(n.gc()){case 0:return Fnt;case 1:return new Pq(yX(n.Xb(0)));default:return new SY(n)}}function hfn(n){switch(s_(),n.gc()){case 0:return VX(),Vnt;case 1:return new yk(n.Kc().Pb());default:return new vS(n)}}function ffn(n){switch(s_(),n.c){case 0:return VX(),Vnt;case 1:return new yk(JCn(new QT(n)));default:return new sy(n)}}function lfn(n,t){yX(n);try{return n.xc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function bfn(n,t){yX(n);try{return n.Bc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function wfn(n,t){yX(n);try{return n.Hc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function dfn(n,t){yX(n);try{return n.Mc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function gfn(n,t){yX(n);try{return n._b(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function pfn(n,t){n.a.c.length>0&&dsn(BB(xq(n.a,n.a.c.length-1),570),t)||WB(n.a,new p5(t))}function vfn(n){var t,e;G_(),t=n.d.c-n.e.c,Otn((e=BB(n.g,145)).b,new jd(t)),Otn(e.c,new Ed(t)),e5(e.i,new Td(t))}function mfn(n){var t;return(t=new Ck).a+="VerticalSegment ",uO(t,n.e),t.a+=" ",oO(t,JL(new mk,new Wb(n.k))),t.a}function yfn(n){var t;return(t=BB(lnn(n.c.c,""),229))||(t=new UZ(jj(kj(new pu,""),"Other")),Jgn(n.c.c,"",t)),t}function kfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (name: ",cO(t,n.zb),t.a+=")",t.a)}function jfn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),e}function Efn(n,t){var e,i;for(e=0,i=abn(n,t).Kc();i.Ob();)e+=null!=mMn(BB(i.Pb(),11),(hWn(),Elt))?1:0;return e}function Tfn(n,t,e){var i,r,c;for(i=0,c=spn(n,0);c.b!=c.d.c&&!((r=Gy(MD(b3(c))))>e);)r>=t&&++i;return i}function Mfn(n,t,e){var i;return i=new N7(n.e,3,13,null,t.c||(gWn(),l$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function Sfn(n,t,e){var i;return i=new N7(n.e,4,13,t.c||(gWn(),l$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Pfn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,8,r,n.r),e?e.Ei(i):e=i),e}function Cfn(n,t){var e,i;return!(i=(e=BB(t,676)).vk())&&e.wk(i=cL(t,88)?new $I(n,BB(t,26)):new _0(n,BB(t,148))),i}function Ifn(n,t,e){var i;n.qi(n.i+1),i=n.oi(t,e),t!=n.i&&aHn(n.g,t,n.g,t+1,n.i-t),$X(n.g,t,i),++n.i,n.bi(t,e),n.ci()}function Ofn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?oO(n.a,n.b):n.a=new lN(n.d),G0(n.a,t.a,t.d.length,e)),n}function Afn(n,t){var e,i,r;if(t.vi(n.a),null!=(r=BB(yan(n.a,8),1936)))for(e=0,i=r.length;e<i;++e)null.jm()}function $fn(n,t){var e;return e=new sn,n.a.sd(e)?(CL(),new vy(kW(T7(n,e.a,t)))):(EW(n),CL(),CL(),Set)}function Lfn(n,t){switch(t.g){case 2:case 1:return abn(n,t);case 3:case 4:return ean(abn(n,t))}return SQ(),SQ(),set}function Nfn(n,t){return XI(n)?mK(n,t):UI(n)?vK(n,t):zI(n)?(kW(n),GI(n)===GI(t)):iz(n)?n.Fb(t):AG(n)?FO(n,t):v0(n,t)}function xfn(n){return n?0!=(1&n.i)?n==$Nt?ktt:n==ANt?Att:n==DNt?Ctt:n==xNt?Ptt:n==LNt?Rtt:n==RNt?_tt:n==NNt?Ttt:Stt:n:null}function Dfn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=dvn(r,e,i,n[0]):1==i?r[t]=dvn(r,n,t,e[0]):YOn(n,e,r,t,i))}function Rfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Oe),eOn(e,t))}function Kfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Ae),eOn(e,t))}function _fn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n;case 2:return n.k}return Eyn(n,t,e,i)}function Ffn(){Ffn=O,BPt=new KC(hJn,0),FPt=new KC(aJn,1),_Pt=new KC(cJn,2),KPt=new KC(pJn,3),HPt=new KC("UP",4)}function Bfn(){Bfn=O,wut=new YS(QZn,0),but=new YS("INSIDE_PORT_SIDE_GROUPS",1),lut=new YS("FORCE_MODEL_ORDER",2)}function Hfn(n,t,e){if(n<0||t>e)throw Hp(new Ay(mYn+n+kYn+t+", size: "+e));if(n>t)throw Hp(new _y(mYn+n+yYn+t))}function qfn(n,t,e){if(t<0)cIn(n,e);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Vj(n,n.yh(),t)}}function Gfn(n,t,e,i,r,c,a,u){var o;for(o=e;c<a;)o>=i||t<e&&u.ue(n[t],n[o])<=0?$X(r,c++,n[t++]):$X(r,c++,n[o++])}function zfn(n,t,e,i,r,c){this.e=new Np,this.f=(ain(),Gvt),WB(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Ufn(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),26),GI(t)===GI(e))return!0;return!1}function Xfn(n){var t,e,i,r;for(dWn(),i=0,r=(e=tpn()).length;i<r;++i)if(-1!=E7((t=e[i]).a,n,0))return t;return Irt}function Wfn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function Vfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (source: ",cO(t,n.d),t.a+=")",t.a)}function Qfn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,5,r,n.a),e?KEn(e,i):e=i),e}function Yfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,2,e,t))}function Jfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function Zfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function nln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,3,e,t))}function tln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,9,e,t))}function eln(n,t){var e;return-1==n.b&&n.a&&(e=n.a.Gj(),n.b=e?n.c.Xg(n.a.aj(),e):Awn(n.c.Tg(),n.a)),n.c.Og(n.b,t)}function iln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(tq(),Itt)[t])&&(e=Itt[t]=new xb(n)),e):new xb(n)}function rln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(Tq(),Ktt)[t])&&(e=Ktt[t]=new Rb(n)),e):new Rb(n)}function cln(n){var t;return n.k==(uSn(),Mut)&&((t=BB(mMn(n,(hWn(),Qft)),61))==(kUn(),sIt)||t==SIt)}function aln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?m$n(n,i,t,e):null}function uln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?y$n(n,i,t,e):null}function oln(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),138),GI(t)===GI(e))return!0;return!1}function sln(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));if(n.hi()&&n.Hc(e))throw Hp(new _y(a8n));n.Xh(t,e)}function hln(n,t){var e;if(null==(e=sen(n.i,t)))throw Hp(new ek("Node did not exist in input."));return Kcn(t,e),null}function fln(n,t){var e;if(cL(e=NNn(n,t),322))return BB(e,34);throw Hp(new _y(r6n+t+"' is not a valid attribute"))}function lln(n,t,e){var i,r;for(r=cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function bln(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function wln(n){var t,e,i;for(t=new Np,i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),594),gun(t,BB(e.jf(),14));return t}function dln(n){var t,e;for(e=BB(mMn(n,(qqn(),lkt)),15).Kc();e.Ob();)DH((t=BB(e.Pb(),188)).b.d,t),DH(t.c.b,t)}function gln(n){switch(BB(mMn(n,(hWn(),ilt)),303).g){case 1:hon(n,ilt,(z7(),Sft));break;case 2:hon(n,ilt,(z7(),Cft))}}function pln(n){var t;n.g&&(xxn((t=n.c.Rf()?n.f:n.a).a,n.o,!0),xxn(t.a,n.o,!1),hon(n.o,(HXn(),ept),(QEn(),UCt)))}function vln(n){var t;if(!n.a)throw Hp(new Fy("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,xQ(n,t),NQ(n,t)}function mln(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,$X(n.a,n.c,null),t)}function yln(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=BB(e.Pb(),213)).f&&n.b[t.c]<-1e-10)return t;return null}function kln(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new UV(t.d,0,t.a,t.b);default:return null}}function jln(n){switch(n.g){case 2:return FPt;case 1:return _Pt;case 4:return KPt;case 3:return HPt;default:return BPt}}function Eln(n){switch(n.g){case 1:return CIt;case 2:return sIt;case 3:return oIt;case 4:return SIt;default:return PIt}}function Tln(n){switch(n.g){case 1:return SIt;case 2:return CIt;case 3:return sIt;case 4:return oIt;default:return PIt}}function Mln(n){switch(n.g){case 1:return oIt;case 2:return SIt;case 3:return CIt;case 4:return sIt;default:return PIt}}function Sln(n){switch(n){case 0:return new mm;case 1:return new pm;case 2:return new vm;default:throw Hp(new wv)}}function Pln(n,t){return n<t?-1:n>t?1:n==t?0==n?Pln(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function Cln(n,t){OTn(t,"Sort end labels",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new we),new de),new ge),HSn(t)}function Iln(n,t,e){var i,r;return n.ej()?(r=n.fj(),i=YIn(n,t,e),n.$i(n.Zi(7,iln(e),i,t,r)),i):YIn(n,t,e)}function Oln(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.cd(),N6(n,i=((e=t.Sh())&DWn)%n.d.length,A$n(n,i,e,r)))}function Aln(n,t){var e;e=0!=(n.Bb&k6n),t?n.Bb|=k6n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,10,e,t))}function $ln(n,t){var e;e=0!=(n.Bb&_Qn),t?n.Bb|=_Qn:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,12,e,t))}function Lln(n,t){var e;e=0!=(n.Bb&T9n),t?n.Bb|=T9n:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,15,e,t))}function Nln(n,t){var e;e=0!=(n.Bb&M9n),t?n.Bb|=M9n:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,11,e,t))}function xln(n,t){var e;return 0!=(e=Pln(n.b.c,t.b.c))||0!=(e=Pln(n.a.a,t.a.a))?e:Pln(n.a.b,t.a.b)}function Dln(n,t){var e;if(null==(e=RX(n.k,t)))throw Hp(new ek("Port did not exist in input."));return Kcn(t,e),null}function Rln(n){var t,e;for(e=G$n(Utn(n)).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return y4((UM(),RAt),t);return null}function Kln(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=0,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&++c;return c}function _ln(n,t,e){var i,r;return i=BB(t.We(n.a),35),r=BB(e.We(n.a),35),null!=i&&null!=r?Ncn(i,r):null!=i?-1:null!=r?1:0}function Fln(n,t,e){var i;if(n.c)lMn(n.c,t,e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Fln(BB(n0(i),157),t,e)}function Bln(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),y7(n.b.b,e.b),uY(BB(e.a,189),BB(e.b,81))}function Hln(n){var t,e;for(e=xX(new Ck,91),t=!0;n.Ob();)t||(e.a+=FWn),t=!1,uO(e,n.Pb());return(e.a+="]",e).a}function qln(n,t){var e;e=0!=(n.Bb&hVn),t?n.Bb|=hVn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,16,e,t))}function Gln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function zln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function Uln(n,t){var e;e=0!=(n.Bb&BQn),t?n.Bb|=BQn:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,20,e,t))}function Xln(n){var t;return t=x8(ONt,WVn,25,2,15,1),n-=BQn,t[0]=(n>>10)+HQn&QVn,t[1]=56320+(1023&n)&QVn,Bdn(t,0,t.length)}function Wln(n){var t;return(t=BB(mMn(n,(HXn(),Udt)),103))==(Ffn(),BPt)?Gy(MD(mMn(n,Edt)))>=1?FPt:KPt:t}function Vln(n){switch(BB(mMn(n,(HXn(),Zdt)),218).g){case 1:return new ic;case 3:return new oc;default:return new ec}}function Qln(n){if(n.c)Qln(n.c);else if(n.d)throw Hp(new Fy("Stream already terminated, can't be modified or used"))}function Yln(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (identifier: ",cO(t,n.k),t.a+=")",t.a)}function Jln(n,t,e){var i;return tE(),jen(i=new ro,t),Een(i,e),n&&f9((!n.a&&(n.a=new $L(xOt,n,5)),n.a),i),i}function Zln(n,t,e,i){var r,c;return kW(i),kW(e),null==(c=null==(r=n.xc(t))?e:ZT(BB(r,15),BB(e,14)))?n.Bc(t):n.zc(t,c),c}function nbn(n){var t,e,i,r;return orn(e=new YK(t=BB(Vj((r=(i=n.gm).f)==Unt?i:r),9),BB(SR(t,t.length),9),0),n),e}function tbn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),10),oun(e,BB(xq(t,i.p),14)))return i;return null}function ebn(n,t,e){try{_on(n,t,e)}catch(i){throw cL(i=lun(i),597)?Hp(new g5(i)):Hp(i)}return t}function ibn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n-t)&&e<OQn?e:uan(hun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function rbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n+t)&&e<OQn?e:uan(sun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function cbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n*t)&&e<OQn?e:uan(fqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function abn(n,t){var e;return n.i||eIn(n),(e=BB(oV(n.g,t),46))?new s1(n.j,BB(e.a,19).a,BB(e.b,19).a):(SQ(),SQ(),set)}function ubn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,oY(n.b)):++n.d,i}function obn(n,t,i){n.n=kq(LNt,[sVn,FQn],[364,25],14,[i,CJ(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function sbn(){var n,t,i;yTn(),i=Let+++Date.now(),n=CJ(e.Math.floor(i*uYn))&sYn,t=CJ(i-n*oYn),this.a=1502^n,this.b=t^aYn}function hbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).b);return yX(t),new OO(t)}function fbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).e);return yX(t),new OO(t)}function lbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).g);return yX(t),new OO(t)}function bbn(n){var t,e;for(e=t$n(Utn(dZ(n))).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return k4((XM(),UAt),t);return null}function wbn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw Hp(new Hy("at index "+t));return new Jy(n)}function dbn(n,t){var e;if(cL(e=NNn(n.Tg(),t),99))return BB(e,18);throw Hp(new _y(r6n+t+"' is not a valid reference"))}function gbn(n){var t;return(t=bSn(n))>34028234663852886e22?RQn:t<-34028234663852886e22?KQn:t}function pbn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function vbn(n){var t,e,i;for(t=new hR(n.Hd().gc()),i=0,e=L9(n.Hd().Kc());e.Ob();)jZ(t,e.Pb(),iln(i++));return NSn(t.a)}function mbn(n,t){var e,i,r;for(r=new xp,i=t.vc().Kc();i.Ob();)VW(r,(e=BB(i.Pb(),42)).cd(),lan(n,BB(e.dd(),15)));return r}function ybn(n,t){0==n.n.c.length&&WB(n.n,new RJ(n.s,n.t,n.i)),WB(n.b,t),smn(BB(xq(n.n,n.n.c.length-1),211),t),BFn(n,t)}function kbn(n){return n.c==n.b.b&&n.i==n.g.b||(n.a.c=x8(Ant,HWn,1,0,5,1),gun(n.a,n.b),gun(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function jbn(n,t){var e,i;for(i=0,e=BB(t.Kb(n),20).Kc();e.Ob();)qy(TD(mMn(BB(e.Pb(),17),(hWn(),Clt))))||++i;return i}function Ebn(n,t){var i,r;r=Gy(MD(edn(f2(t),(HXn(),ypt)))),Fkn(t,i=e.Math.max(0,r/2-.5),1),WB(n,new lP(t,i))}function Tbn(){Tbn=O,qlt=new BP(QZn,0),_lt=new BP("FIRST",1),Flt=new BP(C1n,2),Blt=new BP("LAST",3),Hlt=new BP(I1n,4)}function Mbn(){Mbn=O,ZPt=new FC(hJn,0),YPt=new FC("POLYLINE",1),QPt=new FC("ORTHOGONAL",2),JPt=new FC("SPLINES",3)}function Sbn(){Sbn=O,Zjt=new kC("ASPECT_RATIO_DRIVEN",0),nEt=new kC("MAX_SCALE_DRIVEN",1),Jjt=new kC("AREA_DRIVEN",2)}function Pbn(){Pbn=O,HEt=new EC("P1_STRUCTURE",0),qEt=new EC("P2_PROCESSING_ORDER",1),GEt=new EC("P3_EXECUTION",2)}function Cbn(){Cbn=O,ejt=new gC("OVERLAP_REMOVAL",0),njt=new gC("COMPACTION",1),tjt=new gC("GRAPH_SIZE_CALCULATION",2)}function Ibn(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t))}function Obn(n,t){var e,i;for(e=spn(n,0);e.b!=e.d.c;){if((i=zy(MD(b3(e))))==t)return;if(i>t){U0(e);break}}nX(e,t)}function Abn(n,t){var e,i,r,c,a;if(e=t.f,Jgn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Jgn(n.c.e,i,t)}function $bn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.ue(n[c-1],n[c])>0;--c)a=n[c],$X(n,c,n[c-1]),$X(n,c-1,a)}function Lbn(n,t,e,i){if(t<0)TLn(n,e,i);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Tj(n,n.yh(),t,i)}}function Nbn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw Hp(new _y("Node "+t+" not part of edge "+n))}function xbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Dbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Rbn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return _fn(n,t,e,i)}function Kbn(n){return n.k==(uSn(),Cut)&&o5(new Rq(null,new zU(new oz(ZL(lbn(n).a.Kc(),new h)))),new qr)}function _bn(n){return null==n.e?n:(!n.c&&(n.c=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Fbn(n,t){return n.h==CQn&&0==n.m&&0==n.l?(t&&(ltt=M$(0,0,0)),WO((X7(),dtt))):(t&&(ltt=M$(n.l,n.m,n.h)),M$(0,0,0))}function Bbn(n){return Array.isArray(n)&&n.im===I?nE(tsn(n))+"@"+(nsn(n)>>>0).toString(16):n.toString()}function Hbn(n){var t;this.a=new YK(t=BB(n.e&&n.e(),9),BB(SR(t,t.length),9),0),this.b=x8(Ant,HWn,1,this.a.a.length,5,1)}function qbn(n){var t,e,i;for(this.a=new fA,i=new Wb(n);i.a<i.c.c.length;)e=BB(n0(i),14),brn(t=new hG,e),TU(this.a,t)}function Gbn(n){var t,e;for(qD(),t=n.o.b,e=BB(BB(h6(n.r,(kUn(),SIt)),21),84).Kc();e.Ob();)BB(e.Pb(),111).e.b+=t}function zbn(n){var t;if(n.b){if(zbn(n.b),n.b.d!=n.c)throw Hp(new vv)}else n.d.dc()&&(t=BB(n.f.c.xc(n.e),14))&&(n.d=t)}function Ubn(n){var t;return null==n||(t=n.length)>0&&(b1(t-1,n.length),58==n.charCodeAt(t-1))&&!Xbn(n,LAt,NAt)}function Xbn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(ton((b1(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function Wbn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(tSn(t,(e=BB(i.Pb(),266)).d)||ICn(t,e.d))return!0;return!1}function Vbn(n,t){var e,i,r;for(r=(i=HRn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function Qbn(n,t){var e,i,r,c;for(dD(),r=t,z9(i=H9(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=gkn(n,i[e],e))&&Iln(n,e,c)}function Ybn(n,t){var e,i,r,c,a,u;for(i=0,e=0,a=0,u=(c=t).length;a<u;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Jbn(n){var t,e,i;for((i=new Sk).a+="[",t=0,e=n.gc();t<e;)cO(i,kN(n.ki(t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a}function Zbn(n){var t,e,i;return i=ATn(n),!WE(n.c)&&(rtn(i,"knownLayouters",e=new Cl),t=new rp(e),e5(n.c,t)),i}function nwn(n,t){var e,i;for(kW(t),e=!1,i=new Wb(n);i.a<i.c.c.length;)ywn(t,n0(i),!1)&&(AU(i),e=!0);return e}function twn(n){var t,e;for(e=Gy(MD(n.a.We((sWn(),OPt)))),t=new Wb(n.a.xf());t.a<t.c.c.length;)VUn(n,BB(n0(t),680),e)}function ewn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),WB(n.b.b,BB(e.b,81)),g2(BB(e.a,189),BB(e.b,81))}function iwn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)kG(r,0,new HX(n.a));PZ(t,BB(xq(r,r.c.length-e),29)),n.b[t.p]=e}function rwn(n,t,e){var i;!(i=e)&&(i=LH(new Xm,0)),OTn(i,qZn,2),mvn(n.b,t,mcn(i,1)),Kqn(n,t,mcn(i,1)),qUn(t,mcn(i,1)),HSn(i)}function cwn(n,t,e,i,r){BZ(),UNn(aM(cM(rM(uM(new Hv,0),r.d.e-n),t),r.d)),UNn(aM(cM(rM(uM(new Hv,0),e-r.a.e),r.a),i))}function awn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&Yq(this.c,this.b,this.a)}function uwn(n){Rwn(),this.c=u6(Pun(Gk(rMt,1),HWn,831,0,[Wpt])),this.b=new xp,this.a=n,VW(this.b,Vpt,1),Otn(Qpt,new Pg(this))}function own(n,t){var e;return n.d?hU(n.b,t)?BB(RX(n.b,t),51):(e=t.Kf(),VW(n.b,t,e),e):t.Kf()}function swn(n,t){var e;return GI(n)===GI(t)||!!cL(t,91)&&(e=BB(t,91),n.e==e.e&&n.d==e.d&&E4(n,e.a))}function hwn(n){switch(kUn(),n.g){case 4:return sIt;case 1:return oIt;case 3:return SIt;case 2:return CIt;default:return PIt}}function fwn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return Ean(n,t)}function lwn(n){switch(n.g){case 0:return new Ga;case 1:return new za;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function bwn(n){switch(n.g){case 0:return new qa;case 1:return new Ua;default:throw Hp(new _y(M1n+(null!=n.f?n.f:""+n.g)))}}function wwn(n){switch(n.g){case 0:return new Vm;case 1:return new ym;default:throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}}function dwn(n){switch(n.g){case 1:return new Ra;case 2:return new gD;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function gwn(n){var t,e;if(n.b)return n.b;for(e=Qet?null:n.d;e;){if(t=Qet?null:e.b)return t;e=Qet?null:e.d}return lM(),Het}function pwn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&Ccn(n)==n.d-1&&(--e,e|=0),t-=ZIn(e))}function vwn(n){var t,e,i;return n<tet.length?tet[n]:(t=31&n,(i=x8(ANt,hQn,25,1+(e=n>>5),15,1))[e]=1<<t,new lU(1,e+1,i))}function mwn(n){var t,e,i;return(e=n.zg())?cL(t=n.Ug(),160)&&null!=(i=mwn(BB(t,160)))?i+"."+e:e:null}function ywn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),GI(t)===GI(i)||null!=t&&Nfn(t,i))return e&&r.Qb(),!0;return!1}function kwn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.Hi(t,n.oi(t,i)),++t;return!0}function jwn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ewn(n){return Shn(),hN(),!!(Dbn(BB(n.a,81).j,BB(n.b,103))||0!=BB(n.a,81).d.e&&Dbn(BB(n.a,81).j,BB(n.b,103)))}function Twn(n){x9(),BB(n.We((sWn(),qSt)),174).Hc((n_n(),VIt))&&(BB(n.We(fPt),174).Fc((lIn(),cIt)),BB(n.We(qSt),174).Mc(VIt))}function Mwn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(BB(n.g[e],366).Di(t))return!1;return f9(n,t)}return!1}function Swn(n){var t,e,i;for(t=new Cl,i=new qb(n.b.Kc());i.b.Ob();)e=VSn(BB(i.b.Pb(),686)),WU(t,t.a.length,e);return t.a}function Pwn(n){var t;return!n.c&&(n.c=new Nn),m$(n.d,new Dn),YKn(n),t=lDn(n),JT(new Rq(null,new w1(n.d,16)),new Iw(n)),t}function Cwn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (instanceClassName: ",cO(t,n.D),t.a+=")",t.a)}function Iwn(n,t){var e,i;t&&(e=Ren(t,"x"),Ten(new Zg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new np(n).a,(kW(i),i)))}function Own(n,t){var e,i;t&&(e=Ren(t,"x"),Ien(new Vg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Yg(n).a,(kW(i),i)))}function Awn(n,t){var e,i,r;if(null==n.i&&qFn(n),e=n.i,-1!=(i=t.aj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function $wn(n){var t,e,i,r;for(e=BB(n.g,674),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(vFn(n,t,e[r])){Lyn(n,i);break}}function Lwn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[UVn]))}function Nwn(n){var t;switch(WX(),(t=n.Pc()).length){case 0:return Fnt;case 1:return new Pq(yX(t[0]));default:return new SY(wbn(t))}}function xwn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),Nut));case 2:return KB(n.j,(gcn(),Dut));default:return SQ(),SQ(),set}}function Dwn(n,t){switch(t){case 3:return void Men(n,0);case 4:return void Sen(n,0);case 5:return void Pen(n,0);case 6:return void Cen(n,0)}ofn(n,t)}function Rwn(){Rwn=O,AM(),HXn(),Vpt=Opt,Qpt=u6(Pun(Gk(lMt,1),k3n,146,0,[mpt,ypt,jpt,Ept,Spt,Ppt,Cpt,Ipt,$pt,Npt,kpt,Tpt,Apt]))}function Kwn(n){var t,e;t=n.d==($Pn(),Jst),e=$En(n),hon(n.a,(HXn(),kdt),t&&!e||!t&&e?(wvn(),$Mt):(wvn(),AMt))}function _wn(n,t){var e;return(e=BB(P4(n,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Qc(lH(e.gc()))}function Fwn(){Fwn=O,eOt=new YC("SIMPLE",0),ZIt=new YC("GROUP_DEC",1),tOt=new YC("GROUP_MIXED",2),nOt=new YC("GROUP_INC",3)}function Bwn(){Bwn=O,z$t=new $o,K$t=new Lo,_$t=new No,F$t=new xo,B$t=new Do,H$t=new Ro,q$t=new Ko,G$t=new _o,U$t=new Fo}function Hwn(n,t,e){qtn(),sm.call(this),this.a=kq(Xit,[sVn,rJn],[595,212],0,[nrt,Zit],2),this.c=new bA,this.g=n,this.f=t,this.d=e}function qwn(n,t){this.n=kq(LNt,[sVn,FQn],[364,25],14,[t,CJ(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function Gwn(n,t){OTn(t,"End label post-processing",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new ae),new ue),new oe),HSn(t)}function zwn(n,t,e){var i;return i=Gy(n.p[t.i.p])+Gy(n.d[t.i.p])+t.n.b+t.a.b,Gy(n.p[e.i.p])+Gy(n.d[e.i.p])+e.n.b+e.a.b-i}function Uwn(n,t,e){var i,r;for(i=e0(e,UQn),r=0;0!=Vhn(i,0)&&r<t;r++)i=rbn(i,e0(n[r],UQn)),n[r]=dG(i),i=kz(i,32);return dG(i)}function Xwn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))<64&&(r=i0(r,yz(1,t)));return r}function Wwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Vwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Qwn(n,t){return n.i>0&&(t.length<n.i&&(t=Den(tsn(t).c,n.i)),aHn(n.g,0,t,0,n.i)),t.length>n.i&&$X(t,n.i,null),t}function Ywn(n,t,e){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),Ifn(n,i,t),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):Ifn(n,n.i,t),e}function Jwn(n,t,e){var i,r;return i=new N7(n.e,4,10,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Zwn(n,t,e){var i,r;return i=new N7(n.e,3,10,null,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function ndn(n){var t;return qD(),t=new wA(BB(n.e.We((sWn(),BSt)),8)),n.B.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function tdn(n){return bvn(),(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197)}function edn(n,t){var e,i;return i=null,Lx(n,(HXn(),Mpt))&&(e=BB(mMn(n,Mpt),94)).Xe(t)&&(i=e.We(t)),null==i&&(i=mMn(vW(n),t)),i}function idn(n,t){var e,i,r;return!!cL(t,42)&&(i=(e=BB(t,42)).cd(),wW(r=lfn(n.Rc(),i),e.dd())&&(null!=r||n.Rc()._b(i)))}function rdn(n,t){var e;return n.f>0&&(n.qj(),-1!=A$n(n,((e=null==t?0:nsn(t))&DWn)%n.d.length,e,t))}function cdn(n,t){var e,i;return n.f>0&&(n.qj(),e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?e.dd():null}function adn(n,t){var e,i,r,c;for(c=axn(n.e.Tg(),t),e=BB(n.g,119),r=0;r<n.i;++r)if(i=e[r],c.rl(i.ak()))return!1;return!0}function udn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!BB(n.b,49).Zg())return!0;return n.b=null,!1}return!0}function odn(n,t){n.mj();try{n.d.Vc(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function sdn(n,t){var e,i;return s$(),i=null,t==(e=fR((fk(),fk(),rtt)))&&(i=BB(SJ(itt,n),615)),i||(i=new zX(n),t==e&&mZ(itt,n,i)),i}function hdn(n,t){var i,r;n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function fdn(n,t){var e;n.c=t,n.a=pwn(t),n.a<54&&(n.f=(e=t.d>1?i0(yz(t.a[1],32),e0(t.a[0],UQn)):e0(t.a[0],UQn),j2(cbn(t.e,e))))}function ldn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n%t)&&e<OQn?e:uan((Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!0),ltt))}function bdn(n,t){var e;Dzn(t),(e=BB(mMn(n,(HXn(),Jdt)),276))&&hon(n,Jdt,Ayn(e)),nx(n.c),nx(n.f),V6(n.d),V6(BB(mMn(n,Agt),207))}function wdn(n){this.e=x8(ANt,hQn,25,n.length,15,1),this.c=x8($Nt,ZYn,25,n.length,16,1),this.b=x8($Nt,ZYn,25,n.length,16,1),this.f=0}function ddn(n){var t,e;for(n.j=x8(xNt,qQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.j[t.p]=t.o.b/n.i}function gdn(n){var t;0!=n.c&&(1==(t=BB(xq(n.a,n.b),287)).b?(++n.b,n.b<n.a.c.length&&Tb(BB(xq(n.a,n.b),287))):--t.b,--n.c)}function pdn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(lbn(t).a.Kc(),new h))),17).d.i).k==(uSn(),Put)&&WB(n.e,t)}while(t.k==(uSn(),Put))}function vdn(){vdn=O,LIt=new WA(15),$It=new XA((sWn(),XSt),LIt),xIt=new XA(LPt,15),NIt=new XA(vPt,iln(0)),AIt=new XA(cSt,dZn)}function mdn(){mdn=O,KIt=new VC("PORTS",0),_It=new VC("PORT_LABELS",1),RIt=new VC("NODE_LABELS",2),DIt=new VC("MINIMUM_SIZE",3)}function ydn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)Yxn(n,(b1(e,t.length),t.charCodeAt(e)),(b1(e+1,t.length),t.charCodeAt(e+1)))}function kdn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),i.s+c,i.t+a);n.e=t,n.f=e}function jdn(n,t){var e,i,r;for(r=t.b.b,n.a=new YT,n.b=x8(ANt,hQn,25,r,15,1),e=0,i=spn(t.b,0);i.b!=i.d.c;)BB(b3(i),86).g=e++}function Edn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),xTn(i=x8(ANt,hQn,25,r,15,1),n.a,e,t),X0(c=new lU(n.e,r,i)),c}function Tdn(n,t,e){var i,r;i=BB(SJ(iNt,t),117),r=BB(SJ(rNt,t),117),e?(mZ(iNt,n,i),mZ(rNt,n,r)):(mZ(rNt,n,i),mZ(iNt,n,r))}function Mdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Sdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function Pdn(n,t,e,i){var r,c,a;return r=!1,LGn(n.f,e,i)&&(xgn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function Cdn(n,t,e,i,r){var c,a,u;for(a=r;t.b!=t.c;)c=BB(dU(t),10),u=BB(abn(c,i).Xb(0),11),n.d[u.p]=a++,e.c[e.c.length]=u;return a}function Idn(n,t,i){var r,c,a,u,o;return u=n.k,o=t.k,c=MD(edn(n,r=i[u.g][o.g])),a=MD(edn(t,r)),e.Math.max((kW(c),c),(kW(a),a))}function Odn(n,t,e){var i,r,c,a;for(i=e/n.c.length,r=0,a=new Wb(n);a.a<a.c.c.length;)ghn(c=BB(n0(a),200),c.f+i*r),ajn(c,t,i),++r}function Adn(n,t,e){var i,r,c;for(r=BB(RX(n.b,e),177),i=0,c=new Wb(t.j);c.a<c.c.c.length;)r[BB(n0(c),113).d.p]&&++i;return i}function $dn(n){var t,e;return null!=(t=BB(yan(n.a,4),126))?(aHn(t,0,e=x8(dAt,i9n,415,t.length,0,1),0,t.length),e):wAt}function Ldn(){var n;return 0!=ctt&&(n=l5())-att>2e3&&(att=n,utt=e.setTimeout(QE,10)),0==ctt++&&(Onn((sk(),ttt)),!0)}function Ndn(n,t){var e;for(e=new oz(ZL(lbn(n).a.Kc(),new h));dAn(e);)if(BB(U5(e),17).d.i.c==t)return!1;return!0}function xdn(n,t){var e;if(cL(t,245)){e=BB(t,245);try{return 0==n.vd(e)}catch(i){if(!cL(i=lun(i),205))throw Hp(i)}}return!1}function Ddn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function Rdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))>0}function Kdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<0}function _dn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<=0}function Fdn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function Bdn(n,t,i){var r,c,a,u;for(_8(t,a=t+i,n.length),u="",c=t;c<a;)r=e.Math.min(c+1e4,a),u+=WW(n.slice(c,r)),c=r;return u}function Hdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function qdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function Gdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function zdn(n,t){var e,i,r;if(n.c)Sen(n.c,t);else for(e=t-iG(n),r=new Wb(n.d);r.a<r.c.c.length;)zdn(i=BB(n0(r),157),iG(i)+e)}function Udn(n,t){var e,i,r;if(n.c)Men(n.c,t);else for(e=t-eG(n),r=new Wb(n.a);r.a<r.c.c.length;)Udn(i=BB(n0(r),157),eG(i)+e)}function Xdn(n,t){var e,i,r;for(i=new J6(t.gc()),e=t.Kc();e.Ob();)(r=t_n(n,BB(e.Pb(),56)))&&(i.c[i.c.length]=r);return i}function Wdn(n,t){var e,i;return n.qj(),(e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?(hin(n,e),e.dd()):null}function Vdn(n){var t,e;for(e=uPn(n),t=null;2==n.c;)QXn(n),t||(wWn(),wWn(),tqn(t=new r$(2),e),e=t),e.$l(uPn(n));return e}function Qdn(n){if(!(q6n in n.a))throw Hp(new ek("Every element must have an id."));return kIn(zJ(n,q6n))}function Ydn(n){var t,e,i;if(!(i=n.Zg()))for(t=0,e=n.eh();e;e=e.eh()){if(++t>GQn)return e.fh();if((i=e.Zg())||e==n)break}return i}function Jdn(n){return hZ(),cL(n,156)?BB(RX(hAt,yet),288).vg(n):hU(hAt,tsn(n))?BB(RX(hAt,tsn(n)),288).vg(n):null}function Zdn(n){if(mgn(a5n,n))return hN(),vtt;if(mgn(u5n,n))return hN(),ptt;throw Hp(new _y("Expecting true or false"))}function ngn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw Hp(new _y("Input edge is not connected to the input port."))}function tgn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Msn(n.a,t.a,n.d)}function egn(n){return n>=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function ign(n,t){var e;return GI(t)===GI(n)||!!cL(t,21)&&(e=BB(t,21)).gc()==n.gc()&&n.Ic(e)}function rgn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,Ex(e<(n.c-n.b&i)),e>=r?(ahn(n,t),-1):(uhn(n,t),1)}function cgn(n,t){var e,i;for(b1(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(b1(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function agn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function ugn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Zun(),ftt)[typeof e];return r?r(e):khn(typeof e)}function ogn(n,t){if(n.a<0)throw Hp(new Fy("Did not call before(...) or after(...) before calling add(...)."));return WN(n,n.a,t),n}function sgn(n,t,e,i){var r;0!=t.c.length&&(r=MLn(e,i),JT(ytn(new Rq(null,new w1(uIn(t),1)),new ja),new XV(n,e,r,i)))}function hgn(n,t,e){var i;0!=(n.Db&t)?null==e?WOn(n,t):-1==(i=Rmn(n,t))?n.Eb=e:$X(een(n.Eb),i,e):null!=e&&mxn(n,t,e)}function fgn(n){var t;return 0==(32&n.Db)&&0!=(t=bX(BB(yan(n,16),26)||n.zh())-bX(n.zh()))&&hgn(n,32,x8(Ant,HWn,1,t,5,1)),n}function lgn(n){var t;return n.b||Xj(n,!(t=nK(n.e,n.a))||!mK(u5n,cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"qualified"))),n.c}function bgn(n,t,e){var i,r;return((r=(i=BB(Wtn(H7(n.a),t),87)).c||(gWn(),l$t)).kh()?tfn(n.b,BB(r,49)):r)==e?lFn(i):cen(i,e),r}function wgn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function dgn(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65).c.b,K8(i,t,n)}function ggn(n){var t,e;for(t=new Wb(n.g);t.a<t.c.c.length;)BB(n0(t),562);zzn(e=new yxn(n.g,Gy(n.a),n.c)),n.g=e.b,n.d=e.a}function pgn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function vgn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:nsn(n)-nsn(t)}function mgn(n,t){return kW(n),null!=t&&(!!mK(n,t)||n.length==t.length&&mK(n.toLowerCase(),t.toLowerCase()))}function ygn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)cL(e=t.il(i),99)&&0!=(BB(e,18).Bb&h6n)&&null!=(c=t.jl(i))&&t_n(n,BB(c,56))}function kgn(n,t,e){var i,r,c;for(c=new Wb(e.a);c.a<c.c.c.length;)r=BB(n0(c),221),i=new C$(BB(RX(n.a,r.b),65)),WB(t.a,i),kgn(n,i,r)}function jgn(n){var t,e;return Vhn(n,-129)>0&&Vhn(n,128)<0?(t=dG(n)+128,!(e=(Eq(),$tt)[t])&&(e=$tt[t]=new Db(n)),e):new Db(n)}function Egn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Tgn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Mgn(n,t){var e,i;for(qZ(),i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)if((e=BB(U5(i),17)).d.i==t||e.c.i==t)return e;return null}function Sgn(n,t,e){this.c=n,this.f=new Np,this.e=new Gj,this.j=new Sq,this.n=new Sq,this.b=t,this.g=new UV(t.c,t.d,t.b,t.a),this.a=e}function Pgn(n){var t,e,i,r;for(this.a=new fA,this.d=new Rv,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),g2(this,t)}function Cgn(n){ODn(),0==n.length?(this.e=0,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0])):(this.e=1,this.d=n.length,this.a=n,X0(this))}function Ign(n,t,e){sm.call(this),this.a=x8(Xit,rJn,212,(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,0,1),this.b=n,this.d=t,this.c=e}function Ogn(n){this.d=new Np,this.e=new v4,this.c=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=n}function Agn(n){var t,e,i,r;for(hon(r=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),e=0,i=(t=Z0(n.e)).length;e<i;++e)MZ(t[e],r)}function $gn(n){var t,e,i,r;for(hon(t=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),i=0,r=(e=Z0(n.g)).length;i<r;++i)SZ(e[i],t)}function Lgn(n){var t,e;return!!Lx(n.d.i,(HXn(),Wgt))&&(t=BB(mMn(n.c.i,Wgt),19),e=BB(mMn(n.d.i,Wgt),19),E$(t.a,e.a)>0)}function Ngn(n){var t;GI(ZAn(n,(sWn(),ESt)))===GI((ufn(),vCt))&&(JJ(n)?(t=BB(ZAn(JJ(n),ESt),334),Ypn(n,ESt,t)):Ypn(n,ESt,mCt))}function xgn(n,t,e){var i,r;fMn(n.e,t,e,(kUn(),CIt)),fMn(n.i,t,e,oIt),n.a&&(r=BB(mMn(t,(hWn(),dlt)),11),i=BB(mMn(e,dlt),11),k0(n.g,r,i))}function Dgn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new DY(n,t),e&&(n.a[i][c]=new Bd(t),(r=BB(mMn(t,(hWn(),rlt)),10))&&JIn(n.d,r,t))}function Rgn(n,t){var e,i,r;if(WB(Sct,n),t.Fc(n),e=BB(RX(Mct,n),21))for(r=e.Kc();r.Ob();)i=BB(r.Pb(),33),-1!=E7(Sct,i,0)||Rgn(i,t)}function Kgn(n,t,e){var i;(Wet?(gwn(n),1):Vet||Jet?(lM(),1):Yet&&(lM(),0))&&((i=new i_(t)).b=e,aSn(n,i))}function _gn(n,t){var e;e=!n.A.Hc((mdn(),_It))||n.q==(QEn(),XCt),n.u.Hc((lIn(),eIt))?e?NUn(n,t):aUn(n,t):n.u.Hc(rIt)&&(e?Azn(n,t):JUn(n,t))}function Fgn(n,t){var e,i;++n.j,null!=t&&oOn(t,e=cL(i=n.a.Cb,97)?BB(i,97).Jg():null)?hgn(n.a,4,e):hgn(n.a,4,BB(t,126))}function Bgn(n,t,i){return new UV(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function Hgn(n,t){var e,i;return 0!=(e=E$(n.a.c.p,t.a.c.p))?e:0!=(i=E$(n.a.d.i.p,t.a.d.i.p))?i:E$(t.a.d.p,n.a.d.p)}function qgn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:Pln(i,r))}function Ggn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Wb(kbn(t));i.a<i.c.c.length;)Ggn(n,Nbn(BB(n0(i),213),t),e)}function zgn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new xC(0,i);case 2:case 4:return new xC(i,0);default:return null}}function Ugn(n,t,e){var i;i=BB(sJ(t.f),209);try{i.Ze(n,e),SW(t.f,i)}catch(r){throw cL(r=lun(r),102),Hp(r)}}function Xgn(n,t,e){var i,r,c,a;return i=null,(c=pGn(cin(),t))&&(r=null,null!=(a=Zqn(c,e))&&(r=n.Ye(c,a)),i=r),i}function Wgn(n,t,e,i){var r;return r=new N7(n.e,1,13,t.c||(gWn(),l$t),e.c||(gWn(),l$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Vgn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!ton((b1(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Qgn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.c[e]);return t.length>i&&$X(t,i,null),t}function Ygn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.a[e]);return t.length>i&&$X(t,i,null),t}function Jgn(n,t,e){var i,r,c;return(r=BB(RX(n.e,t),387))?(c=pR(r,e),uL(n,r),c):(i=new nH(n,t,e),VW(n.e,t,i),kJ(i),null)}function Zgn(n){var t;if(null==n)return null;if(null==(t=L$n(FBn(n,!0))))throw Hp(new ik("Invalid hexBinary value: '"+n+"'"));return t}function npn(n){return ODn(),Vhn(n,0)<0?0!=Vhn(n,-1)?new vEn(-1,j7(n)):Ytt:Vhn(n,10)<=0?Ztt[dG(n)]:new vEn(1,n)}function tpn(){return dWn(),Pun(Gk(Krt,1),$Vn,159,0,[Prt,Srt,Crt,vrt,prt,mrt,jrt,krt,yrt,Mrt,Trt,Ert,drt,wrt,grt,lrt,frt,brt,srt,ort,hrt,Irt])}function epn(n){var t;this.d=new Np,this.j=new Gj,this.g=new Gj,t=n.g.b,this.f=BB(mMn(vW(t),(HXn(),Udt)),103),this.e=Gy(MD(gpn(t,Spt)))}function ipn(n){this.b=new Np,this.e=new Np,this.d=n,this.a=!jE(AV(new Rq(null,new zU(new m6(n.b))),new aw(new Gr))).sd((dM(),tit))}function rpn(){rpn=O,hMt=new AC("PARENTS",0),sMt=new AC("NODES",1),uMt=new AC("EDGES",2),fMt=new AC("PORTS",3),oMt=new AC("LABELS",4)}function cpn(){cpn=O,BCt=new zC("DISTRIBUTED",0),qCt=new zC("JUSTIFIED",1),_Ct=new zC("BEGIN",2),FCt=new zC(eJn,3),HCt=new zC("END",4)}function apn(n){switch(n.yi(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function upn(n){switch(n.g){case 1:return Ffn(),HPt;case 4:return Ffn(),_Pt;case 2:return Ffn(),FPt;case 3:return Ffn(),KPt}return Ffn(),BPt}function opn(n,t,e){var i;switch((i=e.q.getFullYear()-sQn+sQn)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Enn(n,i%100,2);break;default:Enn(n,i,t)}}function spn(n,t){var e,i;if(LZ(t,n.b),t>=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e<t;++e)i=i.a;return new ZK(n,t,i)}function hpn(){hpn=O,dit=new FS("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),wit=new FS("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function fpn(n){var t,e,i;for(m$(e=uCn(n),But),(i=n.d).c=x8(Ant,HWn,1,0,5,1),t=new Wb(e);t.a<t.c.c.length;)gun(i,BB(n0(t),456).b)}function lpn(n){var t,e;for(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)BB(t.nj(),42).dd();return A8(e)}function bpn(n){var t;LK(BB(mMn(n,(HXn(),ept)),98))&&(fOn((l1(0,(t=n.b).c.length),BB(t.c[0],29))),fOn(BB(xq(t,t.c.length-1),29)))}function wpn(n,t){var i,r,c,a;for(i=0,c=new Wb(t.a);c.a<c.c.c.length;)a=(r=BB(n0(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function dpn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=i0(r,yz(1,t-64)));return r}function gpn(n,t){var e,i;return i=null,Lx(n,(sWn(),CPt))&&(e=BB(mMn(n,CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&vW(n)&&(i=mMn(vW(n),t)),i}function ppn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(uSn(),Cut)&&i!=Tut&&dAn(e=new oz(ZL(lbn(r).a.Kc(),new h)))&&VW(n.k,t,BB(U5(e),17))}function vpn(n,t){var e,i,r;return i=itn(n.Tg(),t),(e=t-n.Ah())<0?(r=n.Yg(i))>=0?n.lh(r):qIn(n,i):e<0?qIn(n,i):BB(i,66).Nj().Sj(n,n.yh(),e)}function mpn(n){var t;if(cL(n.a,4)){if(null==(t=Jdn(n.a)))throw Hp(new Fy(o5n+n.b+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return t}return n.a}function ypn(n){var t;if(null==n)return null;if(null==(t=UUn(FBn(n,!0))))throw Hp(new ik("Invalid base64Binary value: '"+n+"'"));return t}function kpn(n){var t;try{return t=n.i.Xb(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function jpn(n){var t;try{return t=n.c.ki(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function Epn(){Epn=O,sWn(),Ect=TPt,pct=ySt,lct=cSt,vct=XSt,_kn(),kct=Mit,yct=Eit,jct=Pit,mct=jit,Gsn(),wct=oct,bct=uct,dct=hct,gct=fct}function Tpn(n){switch(jM(),this.c=new Np,this.d=n,n.g){case 0:case 2:this.a=QW(hut),this.b=RQn;break;case 3:case 1:this.a=hut,this.b=KQn}}function Mpn(n,t,e){var i;if(n.c)Pen(n.c,n.c.i+t),Cen(n.c,n.c.j+e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Mpn(BB(n0(i),157),t,e)}function Spn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!mK(n.j[e],t.j[e]))return!1;return!0}function Ppn(n,t,e){var i;t.a.length>0&&(WB(n.b,new VB(t.a,e)),0<(i=t.a.length)?t.a=t.a.substr(0,0):0>i&&(t.a+=rL(x8(ONt,WVn,25,-i,15,1))))}function Cpn(n,t){var e,i,r;for(e=n.o,r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.a=dyn(i,e.a),i.e.b=e.b*Gy(MD(i.b.We(Lrt)))}function Ipn(n,t){var e,i,r,c;return r=n.k,e=Gy(MD(mMn(n,(hWn(),Tlt)))),c=t.k,i=Gy(MD(mMn(t,Tlt))),c!=(uSn(),Mut)?-1:r!=Mut?1:e==i?0:e<i?-1:1}function Opn(n,t){var e,i;return e=BB(BB(RX(n.g,t.a),46).a,65),i=BB(BB(RX(n.g,t.b),46).a,65),W8(t.a,t.b)-W8(t.a,_$(e.b))-W8(t.b,_$(i.b))}function Apn(n,t){var e;return e=BB(mMn(n,(HXn(),vgt)),74),tL(t,vut)?e?yQ(e):(e=new km,hon(n,vgt,e)):e&&hon(n,vgt,null),e}function $pn(n){var t;return(t=new Ck).a+="n",n.k!=(uSn(),Cut)&&oO(oO((t.a+="(",t),dx(n.k).toLowerCase()),")"),oO((t.a+="_",t),gyn(n)),t.a}function Lpn(n,t){OTn(t,"Self-Loop post-processing",1),JT(AV(AV(wnn(new Rq(null,new w1(n.b,16)),new xi),new Di),new Ri),new Ki),HSn(t)}function Npn(n,t,e,i){var r;return e>=0?n.hh(t,e,i):(n.eh()&&(i=(r=n.Vg())>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i)),n.Sg(t,e,i))}function xpn(n,t){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),void sqn(n.e);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),void sqn(n.d)}Dwn(n,t)}function Dpn(n,t){var e;e=n.Zc(t);try{return e.Pb()}catch(i){throw cL(i=lun(i),109)?Hp(new Ay("Can't get element "+t)):Hp(i)}}function Rpn(n,t){this.e=n,t<XQn?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0|t])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[t%XQn|0,t/XQn|0]))}function Kpn(n,t){var e,i,r,c;for(SQ(),e=n,c=t,cL(n,21)&&!cL(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function _pn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=Lyn(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):Lyn(n,i)),e}function Fpn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=wq(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):wq(n,i)),e}function Bpn(n,t){var e;switch(e=BB(oV(n.b,t),124).n,t.g){case 1:n.t>=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function Hpn(){Hpn=O,Brt=new _S(mJn,0),Frt=new _S(yJn,1),Hrt=new _S(kJn,2),qrt=new _S(jJn,3),Brt.a=!1,Frt.a=!0,Hrt.a=!1,qrt.a=!0}function qpn(){qpn=O,Zrt=new KS(mJn,0),Jrt=new KS(yJn,1),nct=new KS(kJn,2),tct=new KS(jJn,3),Zrt.a=!1,Jrt.a=!0,nct.a=!1,tct.a=!0}function Gpn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i).k==(uSn(),Put)&&n.b.Fc(t)}while(t.k==(uSn(),Put));n.b=ean(n.b)}function zpn(n){var t,e,i;for(i=n.c.a,n.p=(yX(i),new t_(i)),e=new Wb(i);e.a<e.c.c.length;)(t=BB(n0(e),10)).p=hCn(t).a;SQ(),m$(n.p,new Oc)}function Upn(n){var t,e,i;if(e=0,0==(i=wDn(n)).c.length)return 1;for(t=new Wb(i);t.a<t.c.c.length;)e+=Upn(BB(n0(t),33));return e}function Xpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.b+e.b.rf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Wpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.d+e.b.rf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Vpn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Qpn(n,t){return XI(n)?!!OWn[t]:n.hm?!!n.hm[t]:UI(n)?!!IWn[t]:!!zI(n)&&!!CWn[t]}function Ypn(n,t,e){return null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e)),n}function Jpn(n,t,e,i){var r;(r=Xfn(t.Xe((sWn(),DSt))?BB(t.We(DSt),21):n.j))!=(dWn(),Irt)&&(e&&!agn(r)||USn(N$n(n,r,i),t))}function Zpn(n,t,e,i){var r,c,a;return c=itn(n.Tg(),t),(r=t-n.Ah())<0?(a=n.Yg(c))>=0?n._g(a,e,!0):cOn(n,c,e):BB(c,66).Nj().Pj(n,n.yh(),r,e,i)}function nvn(n,t,e,i){var r,c;e.mh(t)&&(ZM(),hnn(t)?ygn(n,BB(e.ah(t),153)):(r=(c=t)?BB(i,49).xh(c):null)&&_p(e.ah(t),r))}function tvn(n){switch(n.g){case 1:return Dan(),Rrt;case 3:return Dan(),Nrt;case 2:return Dan(),Drt;case 4:return Dan(),xrt;default:return null}}function evn(n){switch(typeof n){case NWn:return vvn(n);case LWn:return CJ(n);case $Wn:return hN(),n?1231:1237;default:return null==n?0:PN(n)}}function ivn(n,t,e){if(n.e)switch(n.b){case 1:BQ(n.c,t,e);break;case 0:HQ(n.c,t,e)}else t4(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function rvn(n){var t,e;if(null==n)return null;for(e=x8(Out,sVn,193,n.length,0,2),t=0;t<e.length;t++)e[t]=BB(G9(n[t],n[t].length),193);return e}function cvn(n){var t;if(Ksn(n))return mz(n),n.Lk()&&(t=FIn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw Hp(new yv)}function avn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function uvn(n,t){var e,i;if((i=Wyn(n,t))>=0)return i;if(n.Fk())for(e=0;e<n.i;++e)if(GI(n.Gk(BB(n.g[e],56)))===GI(t))return e;return-1}function ovn(n,t,e){var i,r;if(t>=(r=n.gc()))throw Hp(new tK(t,r));if(n.hi()&&(i=n.Xc(e))>=0&&i!=t)throw Hp(new _y(a8n));return n.mi(t,e)}function svn(n,t){if(this.a=BB(yX(n),245),this.b=BB(yX(t),245),n.vd(t)>0||n==(ey(),Knt)||t==(ty(),_nt))throw Hp(new _y("Invalid range: "+B3(n,t)))}function hvn(n){var t,e;for(this.b=new Np,this.c=n,this.a=!1,e=new Wb(n.a);e.a<e.c.c.length;)t=BB(n0(e),10),this.a=this.a|t.k==(uSn(),Cut)}function fvn(n,t){var e,i,r;for(e=AN(new qv,n),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),121),UNn(aM(cM(uM(rM(new Hv,0),0),e),i));return e}function lvn(n,t,e){var i,r,c;for(r=new oz(ZL((t?fbn(n):lbn(n)).a.Kc(),new h));dAn(r);)i=BB(U5(r),17),(c=t?i.c.i:i.d.i).k==(uSn(),Sut)&&PZ(c,e)}function bvn(){bvn=O,lvt=new _P(QZn,0),bvt=new _P("PORT_POSITION",1),fvt=new _P("NODE_SIZE_WHERE_SPACE_PERMITS",2),hvt=new _P("NODE_SIZE",3)}function wvn(){wvn=O,CMt=new DC("AUTOMATIC",0),AMt=new DC(cJn,1),$Mt=new DC(aJn,2),LMt=new DC("TOP",3),IMt=new DC(oJn,4),OMt=new DC(eJn,5)}function dvn(n,t,e,i){var r,c;for($On(),r=0,c=0;c<e;c++)r=rbn(cbn(e0(t[c],UQn),e0(i,UQn)),e0(dG(r),UQn)),n[c]=dG(r),r=jz(r,32);return dG(r)}function gvn(n,t,i){var r,c;for(c=0,r=0;r<Zit;r++)c=e.Math.max(c,vhn(n.a[t.g][r],i));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function pvn(n,t){var e,i;if(Tx(t>0),(t&-t)==t)return CJ(t*H$n(n,31)*4.656612873077393e-10);do{i=(e=H$n(n,31))%t}while(e-i+(t-1)<0);return CJ(i)}function vvn(n){var t,e,i;return r_(),null!=(i=rit[e=":"+n])?CJ((kW(i),i)):(t=null==(i=iit[e])?JNn(n):CJ((kW(i),i)),IQ(),rit[e]=t,t)}function mvn(n,t,e){OTn(e,"Compound graph preprocessor",1),n.a=new pJ,Nzn(n,t,null),GHn(n,t),tNn(n),hon(t,(hWn(),Hft),n.a),n.a=null,$U(n.b),HSn(e)}function yvn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function kvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Pst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function jvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Cst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function Evn(n){switch(n.g){case 0:return null;case 1:return new Arn;case 2:return new Jm;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Tvn(n,t,e){var i,r;for(mun(n,t-n.s,e-n.t),r=new Wb(n.n);r.a<r.c.c.length;)rb(i=BB(n0(r),211),i.e+t-n.s),cb(i,i.f+e-n.t);n.s=t,n.t=e}function Mvn(n){var t,e,i,r;for(e=0,i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),121).d=e++;return r=null,(t=wSn(n)).c.length>1&&(r=fvn(n,t)),r}function Svn(n){var t;return n.f&&n.f.kh()&&(t=BB(n.f,49),n.f=BB(tfn(n,t),82),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.f))),n.f}function Pvn(n){var t;return n.i&&n.i.kh()&&(t=BB(n.i,49),n.i=BB(tfn(n,t),82),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,7,t,n.i))),n.i}function Cvn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=BB(tfn(n,t),18),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,21,t,n.b))),n.b}function Ivn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Sh(),fNn(n,n.f+1),r=(i&DWn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.uj()),e.Fc(t),++n.f)}function Ovn(n,t,e){var i;return!t.Kj()&&(-2!=t.Zj()?null==(i=t.zj())?null==e:Nfn(i,e):t.Hj()==n.e.Tg()&&null==e)}function Avn(){var n;lin(16,IVn),n=Jin(16),this.b=x8(Gnt,CVn,317,n,0,1),this.c=x8(Gnt,CVn,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function $vn(n){LR.call(this),this.k=(uSn(),Cut),this.j=(lin(6,AVn),new J6(6)),this.b=(lin(2,AVn),new J6(2)),this.d=new fm,this.f=new wm,this.a=n}function Lvn(n){var t,e;n.c.length<=1||(dPn(n,BB((t=EDn(n,(kUn(),SIt))).a,19).a,BB(t.b,19).a),dPn(n,BB((e=EDn(n,CIt)).a,19).a,BB(e.b,19).a))}function Nvn(){Nvn=O,yvt=new FP("SIMPLE",0),pvt=new FP(B1n,1),vvt=new FP("LINEAR_SEGMENTS",2),gvt=new FP("BRANDES_KOEPF",3),mvt=new FP(j3n,4)}function xvn(n,t,e){LK(BB(mMn(t,(HXn(),ept)),98))||(W7(n,t,DSn(t,e)),W7(n,t,DSn(t,(kUn(),SIt))),W7(n,t,DSn(t,sIt)),SQ(),m$(t.j,new _d(n)))}function Dvn(n,t,e,i){var r;for(r=BB(h6(i?n.a:n.b,t),21).Kc();r.Ob();)if(_Dn(n,e,BB(r.Pb(),33)))return!0;return!1}function Rvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function Kvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function _vn(n){var t,e;for(t=0,e=new Wb(n.c.a);e.a<e.c.c.length;)t+=F3(new oz(ZL(lbn(BB(n0(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function Fvn(n){var t,e;for(n.c||zqn(n),e=new km,n0(t=new Wb(n.a));t.a<t.c.c.length;)DH(e,BB(n0(t),407).a);return Px(0!=e.b),Atn(e,e.c.b),e}function Bvn(){Bvn=O,bRn(),qTt=RTt,BTt=new WA(8),new XA((sWn(),XSt),BTt),new XA(LPt,8),HTt=xTt,_Tt=MTt,FTt=STt,KTt=new XA(lSt,(hN(),!1))}function Hvn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e;case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d}return Rbn(n,t,e,i)}function qvn(n){var t;return n.a&&n.a.kh()&&(t=BB(n.a,49),n.a=BB(tfn(n,t),138),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,5,t,n.a))),n.a}function Gvn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function zvn(n,t){if(null==n)throw Hp(new Hy("null key in entry: null="+t));if(null==t)throw Hp(new Hy("null value in entry: "+n+"=null"))}function Uvn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(GI(e)===GI(i)||null!=e&&Nfn(e,i)))return!1}return!t.Ob()}function Xvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[vhn(n.a[0],t),vhn(n.a[1],t),vhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Wvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[mhn(n.a[0],t),mhn(n.a[1],t),mhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Vvn(){Vvn=O,yht=new SP("GREEDY",0),mht=new SP(H1n,1),jht=new SP(B1n,2),Eht=new SP("MODEL_ORDER",3),kht=new SP("GREEDY_MODEL_ORDER",4)}function Qvn(n,t){var e,i,r;for(n.b[t.g]=1,i=spn(t.d,0);i.b!=i.d.c;)r=(e=BB(b3(i),188)).c,1==n.b[r.g]?DH(n.a,e):2==n.b[r.g]?n.b[r.g]=1:Qvn(n,r)}function Yvn(n,t){var e,i,r;for(r=new J6(t.gc()),i=t.Kc();i.Ob();)(e=BB(i.Pb(),286)).c==e.f?hPn(n,e,e.c):rPn(n,e)||(r.c[r.c.length]=e);return r}function Jvn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Wb(n.n);c.a<c.c.c.length;)w$n(BB(n0(c),211),a,i,r),++r}function Zvn(n){var t,e;for(my(n.b.a),n.a=x8(bit,HWn,57,n.c.c.a.b.c.length,0,1),t=0,e=new Wb(n.c.c.a.b);e.a<e.c.c.length;)BB(n0(e),57).f=t++}function nmn(n){var t,e;for(my(n.b.a),n.a=x8(Qat,HWn,81,n.c.a.a.b.c.length,0,1),t=0,e=new Wb(n.c.a.a.b);e.a<e.c.c.length;)BB(n0(e),81).i=t++}function tmn(n,t,e){OTn(e,"Shrinking tree compaction",1),qy(TD(mMn(t,(Xcn(),Qrt))))?(irn(n,t.f),unn(t.f,t.c)):unn(t.f,t.c),HSn(e)}function emn(n){var t;if(t=bhn(n),!dAn(n))throw Hp(new Ay("position (0) must be less than the number of elements that remained ("+t+")"));return U5(n)}function imn(n,t,e){try{return vmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function rmn(n,t,e){try{return mmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function cmn(n,t,e){try{return ymn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function amn(n){switch(n.g){case 1:return kUn(),CIt;case 4:return kUn(),sIt;case 3:return kUn(),oIt;case 2:return kUn(),SIt;default:return kUn(),PIt}}function umn(n,t,e){t.k==(uSn(),Cut)&&e.k==Put&&(n.d=Efn(t,(kUn(),SIt)),n.b=Efn(t,sIt)),e.k==Cut&&t.k==Put&&(n.d=Efn(e,(kUn(),sIt)),n.b=Efn(e,SIt))}function omn(n,t){var e,i;for(i=abn(n,t).Kc();i.Ob();)if(null!=mMn(e=BB(i.Pb(),11),(hWn(),Elt))||zN(new m6(e.b)))return!0;return!1}function smn(n,t){return Pen(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Cen(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),WB(n.c,t),!0}function hmn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Wb(n.a);c.a<c.c.c.length;)Tvn(r=BB(n0(c),187),r.s,r.t+a*i),Jvn(r,n.d-r.r+t,i),++a}function fmn(n){var t,e,i;for(e=new Wb(n.b);e.a<e.c.c.length;)for(t=0,i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)BB(n0(i),10).p=t++}function lmn(n,t){var e,i,r,c,a,u;for(r=t.length-1,a=0,u=0,i=0;i<=r;i++)c=t[i],e=pSn(r,i)*efn(1-n,r-i)*efn(n,i),a+=c.a*e,u+=c.b*e;return new xC(a,u)}function bmn(n,t){var e,i,r,c,a;for(e=t.gc(),n.qi(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),jL(n,i,n.oi(i,r)),n.bi(i,r),n.ci();return 0!=e}function wmn(n,t,e){var i,r,c;return n.ej()?(i=n.Vi(),c=n.fj(),++n.j,n.Hi(i,n.oi(i,t)),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):ZD(n,n.Vi(),t),e}function dmn(n,t,e){var i,r,c;return(0!=(64&(c=cL(r=(i=BB(Wtn(a4(n.a),t),87)).c,88)?BB(r,26):(gWn(),d$t)).Db)?tfn(n.b,c):c)==e?lFn(i):cen(i,e),c}function gmn(n,t,e,i,r,c,a,u){var o,s;i&&((o=i.a[0])&&gmn(n,t,e,o,r,c,a,u),Iyn(n,e,i.d,r,c,a,u)&&t.Fc(i),(s=i.a[1])&&gmn(n,t,e,s,r,c,a,u))}function pmn(n,t){var e;return n.a||(e=x8(xNt,qQn,25,0,15,1),gE(n.b.a,new bw(e)),e.sort(ien(T.prototype.te,T,[])),n.a=new _K(e,n.d)),K6(n.a,t)}function vmn(n,t,e){try{return QI(trn(n,t,e),1)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function mmn(n,t,e){try{return QI(trn(n,t,e),0)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function ymn(n,t,e){try{return QI(trn(n,t,e),2)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function kmn(n,t){if(-1==n.g)throw Hp(new dv);n.mj();try{n.d._c(n.g,t),n.f=n.d.j}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function jmn(n,t,e){OTn(e,"Linear segments node placement",1),n.b=BB(mMn(t,(hWn(),Alt)),304),VXn(n,t),vHn(n,t),QHn(n,t),hXn(n),n.a=null,n.b=null,HSn(e)}function Emn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=qk(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)$X(r,e,i.Pb());return t.length>c&&$X(t,c,null),t}function Tmn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(Nfn(t,n.Xb(e)))return e;return-1}function Mmn(n,t){var e,i,r;return e=t.cd(),r=t.dd(),i=n.xc(e),!(!(GI(r)===GI(i)||null!=r&&Nfn(r,i))||null==i&&!n._b(e))}function Smn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),M$(e,i,r)}function Pmn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function Cmn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function Imn(n,t,e,i){var r,c;this.a=t,this.c=i,$l(this,new xC(-(r=n.a).c,-r.d)),UR(this.b,e),c=i/2,t.a?Bx(this.b,0,c):Bx(this.b,c,0),WB(n.c,this)}function Omn(){Omn=O,qjt=new mC(QZn,0),Bjt=new mC(q1n,1),Hjt=new mC("EDGE_LENGTH_BY_POSITION",2),Fjt=new mC("CROSSING_MINIMIZATION_BY_POSITION",3)}function Amn(n,t){var e,i;if(e=BB(sen(n.g,t),33))return e;if(i=BB(sen(n.j,t),118))return i;throw Hp(new ek("Referenced shape does not exist: "+t))}function $mn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw Hp(new _y("Node 'one' must be either source or target of edge 'edge'."))}function Lmn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw Hp(new _y("Node "+t+" is neither source nor target of edge "+n))}function Nmn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),bU(n,t,(Oun(),kst),e);break;case 1:case 3:bU(n,t,(Oun(),vst),null)}}function xmn(n,t,e,i,r,c){var a,u,o,s,h;for(a=ijn(t,e,c),u=e==(kUn(),sIt)||e==CIt?-1:1,s=n[e.g],h=0;h<s.length;h++)(o=s[h])>0&&(o+=r),s[h]=a,a+=u*(o+i)}function Dmn(n){var t,e,i;for(i=n.f,n.n=x8(xNt,qQn,25,i,15,1),n.d=x8(xNt,qQn,25,i,15,1),t=0;t<i;t++)e=BB(xq(n.c.b,t),29),n.n[t]=wpn(n,e),n.d[t]=VLn(n,e)}function Rmn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function Kmn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=null,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&(!c&&(c=new go),f9(c,i));c&&aXn(n,c)}function _mn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new Sk,t=n.Kc();t.Ob();)cO(e,SD(t.Pb())),e.a+=" ";return KO(e,e.a.length-1)}function Fmn(n,t,e){var i,r,c,a;for(con(n),null==n.k&&(n.k=x8(Jnt,sVn,78,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)Fmn(i[r],t,"\t"+e);(a=n.f)&&Fmn(a,t,e)}function Bmn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function Hmn(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();Otn(dA(n.d)?n.a.c:n.a.d,new Mw(n)),n.c.Me(n),_xn(n)}function qmn(n){var t,e,i;for(e=new Wb(n.e.c);e.a<e.c.c.length;){for(i=new Wb((t=BB(n0(e),282)).b);i.a<i.c.c.length;)_Bn(BB(n0(i),447));BCn(t)}}function Gmn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function zmn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t);u.a<u.c.c.length;)a=BB(n0(u),200),r=e.Math.max(r,a.e),c+=a.b+(i>0?n.g:0),++i;n.c=c,n.d=r}function Umn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[gvn(n,(Dtn(),Git),t),gvn(n,zit,t),gvn(n,Uit,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Xmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Wmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Vmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),ICt))?(t.Mc(ICt),t.Fc(ACt)):t.Hc(ACt)&&(t.Mc(ACt),t.Fc(ICt)))}function Qmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),DCt))?(t.Mc(DCt),t.Fc(NCt)):t.Hc(NCt)&&(t.Mc(NCt),t.Fc(DCt)))}function Ymn(n,t,e){OTn(e,"Self-Loop ordering",1),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new Ii),new Oi),new Ai),new $i),new bd(n)),HSn(e)}function Jmn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(l1(r,n.c.length),c=BB(n.c[r],11),!e.Mb(c))return r;i.c[i.c.length]=c}return n.c.length}function Zmn(n,t,e,i){var r,c,a;return null==n.a&&dSn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function nyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,33).Ag().i),e=new AL(BB(n.f,33).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function tyn(n){var t,e;if(!n.e)for(n.e=C2(yV(BB(n.f,33)).i),e=new AL(yV(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),118),WB(n.e,new op(t));return n.e}function eyn(n){var t,e;if(!n.a)for(n.a=C2(YQ(BB(n.f,33)).i),e=new AL(YQ(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),33),WB(n.a,new JN(n,t));return n.a}function iyn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=bzn(n))n.yk(t);else try{n.yk(null)}catch(e){if(!cL(e=lun(e),60))throw Hp(e)}return n.C}function ryn(n){switch(n.q.g){case 5:kjn(n,(kUn(),sIt)),kjn(n,SIt);break;case 4:cGn(n,(kUn(),sIt)),cGn(n,SIt);break;default:FPn(n,(kUn(),sIt)),FPn(n,SIt)}}function cyn(n){switch(n.q.g){case 5:jjn(n,(kUn(),oIt)),jjn(n,CIt);break;case 4:aGn(n,(kUn(),oIt)),aGn(n,CIt);break;default:BPn(n,(kUn(),oIt)),BPn(n,CIt)}}function ayn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function uyn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function oyn(n){var t,i,r;for(r=DWn,i=new Wb(n.a);i.a<i.c.c.length;)Lx(t=BB(n0(i),10),(hWn(),wlt))&&(r=e.Math.min(r,BB(mMn(t,wlt),19).a));return r}function syn(n,t){var e,i;if(0==t.length)return 0;for(e=ZX(n.a,t[0],(kUn(),CIt)),e+=ZX(n.a,t[t.length-1],oIt),i=0;i<t.length;i++)e+=qMn(n,i,t);return e}function hyn(){gxn(),this.c=new Np,this.i=new Np,this.e=new fA,this.f=new fA,this.g=new fA,this.j=new Np,this.a=new Np,this.b=new xp,this.k=new xp}function fyn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,5,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lyn(n){PY();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function byn(n){var t;return Min(),(t=Ott)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function wyn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=kon(e.Math.max(8,r))<<1,0!=n.b?(urn(n,t=SR(n.a,i),r),n.a=t,n.b=0):Pv(n.a,i),n.c=r)}function dyn(n,t){var e;return(e=n.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),CIt)?-e.rf().a-Gy(MD(e.We(aPt))):t+Gy(MD(e.We(aPt))):e.Hf()==(kUn(),CIt)?-e.rf().a:t}function gyn(n){var t;return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:null!=(t=eQ(n))?t:""+(n.c?E7(n.c.a,n,0):-1)}function pyn(n){var t;return 0!=n.f.c.length&&BB(xq(n.f,0),70).a?BB(xq(n.f,0),70).a:null!=(t=eQ(n))?t:""+(n.i?E7(n.i.j,n,0):-1)}function vyn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=BB(n.Xb(e),128),e==n.gc()-1||!i.o)return new rI(iln(e),i);return null}function myn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=BB(xq(c.a,r),10)).k!=(uSn(),Tut)&&!Lkn(a))return!1;return!0}function yyn(n){var t,i,r,c,a;for(a=0,c=KQn,r=0,i=new Wb(n.a);i.a<i.c.c.length;)a+=(t=BB(n0(i),187)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function kyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,118).Ag().i),e=new AL(BB(n.f,118).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function jyn(n,t){var e,i,r;if(t.dc())return dD(),dD(),pAt;for(e=new aR(n,t.gc()),r=new AL(n);r.e!=r.i.gc();)i=kpn(r),t.Hc(i)&&f9(e,i);return e}function Eyn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),n.o):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),A8(n.o)):Zpn(n,t,e,i)}function Tyn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)vx(Wtn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)vx(Wtn(n.vb,t));az((IPn(),Z$t),n),n.Bb|=1}function Myn(n,t,e,i,r,c,a,u,o,s,h,f,l,b){return bCn(n,t,i,null,r,c,a,u,o,s,l,!0,b),zln(n,h),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2),e&&rrn(n,e),Uln(n,f),n}function Syn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Pyn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Cyn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&SQn,n.m=i&SQn,n.h=r&PQn,0)))}function Iyn(n,t,e,i,r,c,a){var u,o;return!(t.Ae()&&(o=n.a.ue(e,i),o<0||!r&&0==o)||t.Be()&&(u=n.a.ue(e,c),u>0||!a&&0==u))}function Oyn(n,t){if(zsn(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return jbn(t,bst)-jbn(n,bst);case 4:return jbn(n,lst)-jbn(t,lst)}return 0}function Ayn(n){switch(n.g){case 0:return xht;case 1:return Dht;case 2:return Rht;case 3:return Kht;case 4:return _ht;case 5:return Fht;default:return null}}function $yn(n,t,e){var i,r;return Ihn(r=new Lm,t),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(i=r,0),Nen(i,1),nln(i,!0),Yfn(i,!0),i}function Lyn(n,t){var e,i;if(t>=n.i)throw Hp(new LO(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&aHn(n.g,t+1,n.g,t,i),$X(n.g,--n.i,null),n.fi(t,e),n.ci(),e}function Nyn(n,t){var e;return n.Db>>16==17?n.Cb.ih(n,21,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function xyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),679).Ke(e)}function Dyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),369).Ke(e)}function Ryn(n){var t,e,i,r,c;for(r=DWn,c=null,i=new Wb(n.d);i.a<i.c.c.length;)(e=BB(n0(i),213)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function Kyn(){Kyn=O,dat=new $O(NZn,(hN(),!1)),fat=new $O(xZn,100),q7(),lat=new $O(DZn,bat=Oat),wat=new $O(RZn,lZn),gat=new $O(KZn,iln(DWn))}function _yn(n,t,e){var i,r,c,a,u,o;for(o=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(u=Lfn(i[r],e).Kc();u.Ob();)a=BB(u.Pb(),11),VW(n.f,a,iln(o++))}function Fyn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Byn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Hyn(n){var t;return _Mn(),z9(t=BB(Emn(gz(n.k),x8(FIt,YZn,61,2,0,1)),122),0,t.length,null),t[0]==(kUn(),sIt)&&t[1]==CIt&&($X(t,0,CIt),$X(t,1,sIt)),t}function qyn(n,t,e){var i,r,c;return c=sDn(n,r=XNn(n,t,e)),K9(n.b),k0(n,t,e),SQ(),m$(r,new Vd(n)),i=sDn(n,r),K9(n.b),k0(n,e,t),new rI(iln(c),iln(i))}function Gyn(){Gyn=O,Umt=dq(new B2,(yMn(),Bat),(lWn(),dot)),Xmt=new iR("linearSegments.inputPrio",iln(0)),Wmt=new iR("linearSegments.outputPrio",iln(0))}function zyn(){zyn=O,Ryt=new fC("P1_TREEIFICATION",0),Kyt=new fC("P2_NODE_ORDERING",1),_yt=new fC("P3_NODE_PLACEMENT",2),Fyt=new fC("P4_EDGE_ROUTING",3)}function Uyn(){Uyn=O,sWn(),xjt=gPt,Kjt=LPt,Cjt=KSt,Ijt=BSt,Ojt=qSt,Pjt=DSt,Ajt=USt,Njt=fPt,KAn(),Mjt=wjt,Sjt=djt,$jt=pjt,Ljt=mjt,Djt=yjt,Rjt=kjt,_jt=Ejt}function Xyn(){Xyn=O,MCt=new qC("UNKNOWN",0),jCt=new qC("ABOVE",1),ECt=new qC("BELOW",2),TCt=new qC("INLINE",3),new iR("org.eclipse.elk.labelSide",MCt)}function Wyn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return e;return-1}function Vyn(n,t,e){var i,r;return t.c==(ain(),qvt)&&e.c==Hvt?-1:t.c==Hvt&&e.c==qvt?1:(i=dhn(t.a,n.a),r=dhn(e.a,n.a),t.c==qvt?r-i:i-r)}function Qyn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw Hp(new _y("index must be >= 0 and <= layer node count"));n.c&&y7(n.c.a,n),n.c=e,e&&kG(e.a,t,n)}function Yyn(n,t){var e,i,r;for(i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)return e=BB(U5(i),17),new qf(yX((r=BB(t.Kb(e),10)).n.b+r.o.b/2));return iy(),iy(),Ont}function Jyn(n,t){this.c=new xp,this.a=n,this.b=t,this.d=BB(mMn(n,(hWn(),Alt)),304),GI(mMn(n,(HXn(),Lgt)))===GI((g7(),qht))?this.e=new gm:this.e=new dm}function Zyn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),33),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function nkn(n,t){var e,i;return i=null,n.Xe((sWn(),CPt))&&(e=BB(n.We(CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&n.yf()&&(i=n.yf().We(t)),null==i&&(i=mpn(t)),i}function tkn(n,t){var e,i;e=n.Zc(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't remove element "+t)):Hp(r)}}function ekn(n,t){var e,i,r;if(0==(e=DBn(n,t,r=new von((i=new AT).q.getFullYear()-sQn,i.q.getMonth(),i.q.getDate())))||e<t.length)throw Hp(new _y(t));return r}function ikn(n,t){var e,i,r;for(kW(t),Tx(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),WB(n.b,kW(e));return r!=n.b.c.length&&(Esn(n,0),!0)}function rkn(){rkn=O,sWn(),kat=CSt,new XA(dSt,(hN(),!0)),Tat=KSt,Mat=BSt,Sat=qSt,Eat=DSt,Pat=USt,Cat=fPt,Kyn(),yat=dat,vat=lat,mat=wat,jat=gat,pat=fat}function ckn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw Hp(new _y("'port' must be either the source port or target port of the edge."))}function akn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function ukn(n,t,e,i){var r,c,a;for(PZ(t,BB(i.Xb(0),29)),a=i.bd(1,i.gc()),c=BB(e.Kb(t),20).Kc();c.Ob();)ukn(n,(r=BB(c.Pb(),17)).c.i==t?r.d.i:r.c.i,e,a)}function okn(n){var t;return t=new xp,Lx(n,(hWn(),Dlt))?BB(mMn(n,Dlt),83):(JT(AV(new Rq(null,new w1(n.j,16)),new tr),new gd(t)),hon(n,Dlt,t),t)}function skn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,6,_Ot,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),yOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function hkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,1,DOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),jOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function fkn(n,t){var e;return n.Db>>16==9?n.Cb.ih(n,9,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),TOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lkn(n,t){var e;return n.Db>>16==5?n.Cb.ih(n,9,XAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),s$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function bkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,0,BOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),e$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function wkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,6,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),v$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function dkn(){this.a=new lo,this.g=new Avn,this.j=new Avn,this.b=new xp,this.d=new Avn,this.i=new Avn,this.k=new xp,this.c=new xp,this.e=new xp,this.f=new xp}function gkn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=Wtn(n,r),null==t){if(null==i)return r}else if(GI(t)===GI(i)||Nfn(t,i))return r;return-1}function pkn(n,t){var e,i;return(e=t.Hh(n.a))?(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),j7n)),mK(E7n,i)?az(n,Utn(t.Hj())):i):null}function vkn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=BB(t,49).eh();i&&i!=t;i=i.eh()){if(++e>GQn)return vkn(n,i);if(i==n)return!0}}return!1}function mkn(n){switch(DN(),n.q.g){case 5:vIn(n,(kUn(),sIt)),vIn(n,SIt);break;case 4:z$n(n,(kUn(),sIt)),z$n(n,SIt);break;default:vUn(n,(kUn(),sIt)),vUn(n,SIt)}}function ykn(n){switch(DN(),n.q.g){case 5:SOn(n,(kUn(),oIt)),SOn(n,CIt);break;case 4:Cpn(n,(kUn(),oIt)),Cpn(n,CIt);break;default:mUn(n,(kUn(),oIt)),mUn(n,CIt)}}function kkn(n){var t,e;(t=BB(mMn(n,(fRn(),nat)),19))?(e=t.a,hon(n,(Mrn(),hat),0==e?new sbn:new C4(e))):hon(n,(Mrn(),hat),new C4(1))}function jkn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function Ekn(n,t){switch(n.g){case 0:return t==(Tbn(),Flt)?rst:cst;case 1:return t==(Tbn(),Flt)?rst:ist;case 2:return t==(Tbn(),Flt)?ist:cst;default:return ist}}function Tkn(n,t){var i,r,c;for(y7(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=n4n,r=new Wb(n.a);r.a<r.c.c.length;)i=BB(n0(r),187),c=e.Math.max(c,i.d);n.b=c}function Mkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,12,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),mOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Skn(n,t){var e;return n.Db>>16==11?n.Cb.ih(n,10,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),EOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Pkn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,11,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),g$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ckn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,12,QAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),m$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ikn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.kh()&&(t=BB(n.r,49),n.r=BB(tfn(n,t),138),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.r))),n.r}function Okn(n,t,i){var r;return r=Pun(Gk(xNt,1),qQn,25,15,[iMn(n,(Dtn(),Git),t,i),iMn(n,zit,t,i),iMn(n,Uit,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function Akn(n,t){var e,i,r;if(0!=(r=Yvn(n,t)).c.length)for(m$(r,new ti),e=r.c.length,i=0;i<e;i++)hPn(n,(l1(i,r.c.length),BB(r.c[i],286)),TDn(n,r,i))}function $kn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Tst)),15).Kc();i.Ob();)for(t=gz((e=BB(i.Pb(),101)).k).Kc();t.Ob();)iX(n,e,BB(t.Pb(),61),(Crn(),Dst),1)}function Lkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&n.c==Ajn(t,n).c)return!0;return!1}function Nkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&t.c.i.c==t.d.i.c)return!0;return!1}function xkn(n,t){var e,i;for(OTn(t,"Dull edge routing",1),i=spn(n.b,0);i.b!=i.d.c;)for(e=spn(BB(b3(i),86).d,0);e.b!=e.d.c;)yQ(BB(b3(e),188).a)}function Dkn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)(i=x2(t,BB(r.Pb(),19).a))&&O$n(n,i)}function Rkn(){var n;for(tS(),nWn((QX(),t$t)),_Xn(t$t),Tyn(t$t),gWn(),L$t=l$t,n=new Wb(V$t);n.a<n.c.c.length;)azn(BB(n0(n),241),l$t,null);return!0}function Kkn(n,t){var e,i,r,c,a,u;return(a=n.h>>19)!=(u=t.h>>19)?u-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function _kn(){_kn=O,tRn(),Pit=new $O(UYn,Cit=xit),Rnn(),Mit=new $O(XYn,Sit=mit),hpn(),Eit=new $O(WYn,Tit=dit),jit=new $O(VYn,(hN(),!0))}function Fkn(n,t,e){var i,r;i=t*e,cL(n.g,145)?(r=f3(n)).f.d?r.f.a||(n.d.a+=i+fJn):(n.d.d-=i+fJn,n.d.a+=i+fJn):cL(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function Bkn(n,t,i){var r,c,a,u,o;for(c=n[i.g],o=new Wb(t.d);o.a<o.c.c.length;)(a=(u=BB(n0(o),101)).i)&&a.i==i&&(c[r=u.d[i.g]]=e.Math.max(c[r],a.j.b))}function Hkn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t.d);u.a<u.c.c.length;)Gmn(a=BB(n0(u),443)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.g:0),++i;t.b=r,t.e=c}function qkn(n){var t,e,i;if(i=n.b,qT(n.i,i.length)){for(e=2*i.length,n.b=x8(Gnt,CVn,317,e,0,1),n.c=x8(Gnt,CVn,317,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)YCn(n,t,t);++n.g}}function Gkn(n,t,e,i){var r,c,a,u;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)u=a-t.k+i,vmn(t,r,a)?cmn(n,c,u)||Xmn(n,c,u):ymn(t,r,a)&&(imn(n,c,u)||Wmn(n,c,u))}function zkn(n,t,e){var i;(i=t.c.i).k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function Ukn(n,t,i){var r,c,a,u,o,s;return jDn(),u=t/2,a=i/2,o=1,s=1,(r=e.Math.abs(n.a))>u&&(o=u/r),(c=e.Math.abs(n.b))>a&&(s=a/c),kL(n,e.Math.min(o,s)),n}function Xkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),y6n),2014))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new ao}function Wkn(){var n,t;d7();try{if(t=BB(Xjn((WM(),zAt),S7n),2024))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new Ds}function Vkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),V9n),1941))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new qo}function Qkn(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),r!=t&&(e=azn(n,t?kLn(n,t):n.a,e)),e}function Ykn(){AT.call(this),this.e=-1,this.a=!1,this.p=_Vn,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_Vn}function Jkn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function Zkn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function njn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function tjn(){tjn=O,Nat=WG(dq(dq(dq(new B2,(yMn(),Fat),(lWn(),yot)),Fat,Tot),Bat,Aot),Bat,oot),Dat=dq(dq(new B2,Fat,Jut),Fat,sot),xat=WG(new B2,Bat,fot)}function ejn(n){var t,e,i,r,c;for(t=BB(mMn(n,(hWn(),zft)),83),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=BB(i.Pb(),306)).i).c+=c.a,r.d+=c.b,e.c?NDn(e):xDn(e);hon(n,zft,null)}function ijn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function rjn(n){var t,e,i,r,c;if(i=0,r=ZJn,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,UKn(n,n.d,0,0,Z3n,e),(c=n.b.ig(n.d))<r&&(i=e,r=c);UKn(n,n.d,0,0,Z3n,i)}function cjn(n,t){var e,i,r,c;for(c=new xp,t.e=null,t.f=null,i=new Wb(t.i);i.a<i.c.c.length;)e=BB(n0(i),65),r=BB(RX(n.g,e.a),46),e.a=qz(e.b),VW(c,e.a,r);n.g=c}function ajn(n,t,e){var i,r,c,a,u;for(r=(t-n.e)/n.d.c.length,c=0,u=new Wb(n.d);u.a<u.c.c.length;)a=BB(n0(u),443),i=n.b-a.b+e,kdn(a,a.e+c*r,a.f),hmn(a,r,i),++c}function ujn(n){var t;if(n.f.qj(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function ojn(n,t){var e,i,r;for(e=$Cn(n,0==(r=t.c.length)?"":(l1(0,t.c.length),SD(t.c[0]))),i=1;i<r&&e;++i)e=BB(e,49).oh((l1(i,t.c.length),SD(t.c[i])));return e}function sjn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),10),n.c[e.c.p][e.p].a=OG(n.i),n.c[e.c.p][e.p].d=Gy(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function hjn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),157),c+=e.Math.pow(iG(i)*eG(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function fjn(n,t,e,i){var r,c,a;return a=NRn(n,c=qRn(n,t,e,i)),fMn(n,t,e,i),K9(n.b),SQ(),m$(c,new Qd(n)),r=NRn(n,c),fMn(n,e,t,i),K9(n.b),new rI(iln(a),iln(r))}function ljn(n,t,e){var i;for(OTn(e,"Interactive node placement",1),n.a=BB(mMn(t,(hWn(),Alt)),304),i=new Wb(t.b);i.a<i.c.c.length;)nDn(n,BB(n0(i),29));HSn(e)}function bjn(n,t){OTn(t,"General Compactor",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),dwn(BB(ZAn(n,(Uyn(),Sjt)),380)).hg(n),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function wjn(n,t,e){var i,r;for(CA(n,n.j+t,n.k+e),r=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));r.e!=r.i.gc();)TA(i=BB(kpn(r),469),i.a+t,i.b+e);PA(n,n.b+t,n.c+e)}function djn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),Ywn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),Ywn(n.d,t,i)}return FTn(n,t,e,i)}function gjn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),_pn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),_pn(n.d,t,i)}return run(n,t,e,i)}function pjn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&bIn(n,r,t)}function vjn(n,t,e){var i,r,c;return n.qj(),c=null==t?0:nsn(t),n.f>0&&(r=aOn(n,(c&DWn)%n.d.length,c,t))?r.ed(e):(i=n.tj(c,t,e),n.c.Fc(i),null)}function mjn(n,t){var e,i,r,c;switch(Cfn(n,t)._k()){case 3:case 2:for(r=0,c=(e=YBn(t)).i;r<c;++r)if(5==DW(B7(n,i=BB(Wtn(e,r),34))))return i}return null}function yjn(n){var t,e,i,r,c;if(qT(n.f,n.b.length))for(i=x8(Qnt,CVn,330,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e.Rd())t=(c=BB(e,330)).d&r,c.a=i[t],i[t]=c}function kjn(n,t){var i,r,c,a;for(a=0,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)r=BB(c.Pb(),111),a=e.Math.max(a,r.e.a+r.b.rf().a);(i=BB(oV(n.b,t),124)).n.b=0,i.a.a=a}function jjn(n,t){var i,r,c,a;for(i=0,a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)c=BB(a.Pb(),111),i=e.Math.max(i,c.e.b+c.b.rf().b);(r=BB(oV(n.b,t),124)).n.d=0,r.a.b=i}function Ejn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=kA(vyt),e.Hc((bDn(),gft))&&Jcn(t,kyt),e.Hc(vft)&&Jcn(t,Eyt),e.Hc(sft)&&Jcn(t,myt),e.Hc(fft)&&Jcn(t,yyt),t}function Tjn(n,t){var e;OTn(t,"Delaunay triangulation",1),e=new Np,Otn(n.i,new yg(e)),qy(TD(mMn(n,(Xcn(),Qrt)))),n.e?Frn(n.e,$Xn(e)):n.e=$Xn(e),HSn(t)}function Mjn(n){if(n<0)throw Hp(new _y("The input must be positive"));return n<MMt.length?j2(MMt[n]):e.Math.sqrt(Z3n*n)*(ifn(n,n)/efn(2.718281828459045,n))}function Sjn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return!0;return!1}function Pjn(n,t){if(null==t){for(;n.a.Ob();)if(null==BB(n.a.Pb(),42).dd())return!0}else for(;n.a.Ob();)if(Nfn(t,BB(n.a.Pb(),42).dd()))return!0;return!1}function Cjn(n,t){var e;return t===n||!!cL(t,664)&&(e=BB(t,1947),ign(n.g||(n.g=new Zf(n)),e.g||(e.g=new Zf(e))))}function Ijn(n){var t,i,r;for(t="Sz",i="ez",r=e.Math.min(n.length,5)-1;r>=0;r--)if(mK(n[r].d,t)||mK(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function Ojn(n,t){var i;return JO(n)&&JO(t)&&$Qn<(i=n/t)&&i<OQn?i<0?e.Math.ceil(i):e.Math.floor(i):uan(Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!1))}function Ajn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw Hp(new _y("'node' must either be the source node or target node of the edge."))}function $jn(n){var t,e,i,r;if(r=BB(mMn(n,(hWn(),Fft)),37)){for(i=new Gj,t=vW(n.c.i);t!=r;)t=vW(e=t.e),_x(UR(UR(i,e.n),t.c),t.d.b,t.d.d);return i}return Fut}function Ljn(n){var t;JT(wnn(new Rq(null,new w1((t=BB(mMn(n,(hWn(),Olt)),403)).d,16)),new _i),new wd(n)),JT(AV(new Rq(null,new w1(t.d,16)),new Fi),new dd(n))}function Njn(n,t){var e,i;for(e=new oz(ZL((t?lbn(n):fbn(n)).a.Kc(),new h));dAn(e);)if((i=Ajn(BB(U5(e),17),n)).k==(uSn(),Put)&&i.c!=n.c)return i;return null}function xjn(n){var t,i,r;for(i=new Wb(n.p);i.a<i.c.c.length;)(t=BB(n0(i),10)).k==(uSn(),Cut)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function Djn(n,t,e){var i,r,c;for(c=new Wb(t);c.a<c.c.c.length;)i=BB(n0(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Wb(t);r.a<r.c.c.length;)xzn(n,i=BB(n0(r),10),e)}function Rjn(n,t,i){var r,c;(r=Tfn(t.j,i.s,i.c)+Tfn(i.e,t.s,t.c))==(c=Tfn(i.j,t.s,t.c)+Tfn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function Kjn(n,t){var e;if(e=!1,XI(t)&&(e=!0,nW(n,new GX(SD(t)))),e||cL(t,236)&&(e=!0,nW(n,new Sl(XK(BB(t,236))))),!e)throw Hp(new Ly(H6n))}function _jn(n,t,e,i){var r,c,a;return r=new N7(n.e,1,10,cL(a=t.c,88)?BB(a,26):(gWn(),d$t),cL(c=e.c,88)?BB(c,26):(gWn(),d$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Fjn(n){var t,e;switch(BB(mMn(vW(n),(HXn(),pgt)),420).g){case 0:return t=n.n,e=n.o,new xC(t.a+e.a/2,t.b+e.b/2);case 1:return new wA(n.n);default:return null}}function Bjn(){Bjn=O,Qht=new AP(QZn,0),Vht=new AP("LEFTUP",1),Jht=new AP("RIGHTUP",2),Wht=new AP("LEFTDOWN",3),Yht=new AP("RIGHTDOWN",4),Xht=new AP("BALANCED",5)}function Hjn(n,t,e){var i,r,c;if(0==(i=Pln(n.a[t.p],n.a[e.p]))){if(r=BB(mMn(t,(hWn(),clt)),15),c=BB(mMn(e,clt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function qjn(n){switch(n.g){case 1:return new _a;case 2:return new Fa;case 3:return new Ka;case 0:return null;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Gjn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),sqn(n.n),!n.n&&(n.n=new eU(zOt,n,1,7)),void pX(n.n,BB(e,14));case 2:return void $in(n,SD(e))}rsn(n,t,e)}function zjn(n,t,e){switch(t){case 3:return void Men(n,Gy(MD(e)));case 4:return void Sen(n,Gy(MD(e)));case 5:return void Pen(n,Gy(MD(e)));case 6:return void Cen(n,Gy(MD(e)))}Gjn(n,t,e)}function Ujn(n,t,e){var i,r;(i=HTn(r=new Lm,t,null))&&i.Fi(),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(r,0),Nen(r,1),nln(r,!0),Yfn(r,!0)}function Xjn(n,t){var e,i;return cL(e=hS(n.g,t),235)?((i=BB(e,235)).Qh(),i.Nh()):cL(e,498)?i=BB(e,1938).b:null}function Wjn(n,t,e,i){var r,c;return yX(t),yX(e),R7(!!(c=BB(UK(n.d,t),19)),"Row %s not in %s",t,n.e),R7(!!(r=BB(UK(n.b,e),19)),"Column %s not in %s",e,n.c),Sun(n,c.a,r.a,i)}function Vjn(n,t,e,i,r,c,a){var u,o,s,h,f;if(f=Bmn(u=(s=c==a-1)?i:0,h=r[c]),10!=i&&Pun(Gk(n,a-c),t[c],e[c],u,f),!s)for(++c,o=0;o<h;++o)f[o]=Vjn(n,t,e,i,r,c,a);return f}function Qjn(n){if(-1==n.g)throw Hp(new dv);n.mj();try{n.i.$c(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}}function Yjn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),n.c[n.c.length]=t,!0}function Jjn(n){var t,e,i;for(i=-1,e=0,t=new Wb(n);t.a<t.c.c.length;){if(BB(n0(t),243).c==(ain(),Hvt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function Zjn(n){var t,i,r,c;for(c=0,t=0,r=new Wb(n.c);r.a<r.c.c.length;)Pen(i=BB(n0(r),33),n.e+c),Cen(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function nEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),57)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;yNn(n)}function tEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),81)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;kNn(n)}function eEn(n){var t,e,i,r,c;for(c=gz(n.k),kUn(),i=0,r=(e=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;i<r;++i)if((t=e[i])!=PIt&&!c.Hc(t))return t;return null}function iEn(n,t){var e,i;return(i=BB(EN(Qon(AV(new Rq(null,new w1(t.j,16)),new bc))),11))&&(e=BB(xq(i.e,0),17))?BB(mMn(e,(hWn(),wlt)),19).a:gnn(n.b)}function rEn(n,t){var e,i,r;for(r=new Wb(t.a);r.a<r.c.c.length;)for(i=BB(n0(r),10),nk(n.d),e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)XOn(n,i,BB(U5(e),17).d.i)}function cEn(n,t){var e,i;for(y7(n.b,t),i=new Wb(n.n);i.a<i.c.c.length;)if(-1!=E7((e=BB(n0(i),211)).c,t,0)){y7(e.c,t),Zjn(e),0==e.c.c.length&&y7(n.n,e);break}fHn(n)}function aEn(n,t){var i,r,c,a,u;for(u=n.f,c=0,a=0,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),n.e,u),p9(i,t),a=e.Math.max(a,i.r),c=u+=i.d+n.c;n.d=a,n.b=c}function uEn(n){var t,e;return h3(e=wLn(n))?null:(yX(e),t=BB(emn(new oz(ZL(e.a.Kc(),new h))),79),PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)))}function oEn(n){return n.o||(n.Lj()?n.o=new aW(n,n,null):n.rk()?n.o=new rR(n,null):1==DW(B7((IPn(),Z$t),n))?n.o=new g4(n):n.o=new cR(n,null)),n.o}function sEn(n,t,e,i){var r,c,a,u,o;e.mh(t)&&(r=(a=t)?BB(i,49).xh(a):null)&&(o=e.ah(t),(u=t.t)>1||-1==u?(c=BB(o,15),r.Wb(Xdn(n,c))):r.Wb(t_n(n,BB(o,56))))}function hEn(n,t,e,i){YE();var r=PWn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{HNt(c)()}catch(a){n(t,a)}else HNt(c)()}function fEn(n){var t,e,i,r,c;for(i=new usn(new Pb(n.b).a);i.b;)t=BB((e=ten(i)).cd(),10),c=BB(BB(e.dd(),46).a,10),r=BB(BB(e.dd(),46).b,8),UR(kO(t.n),UR(B$(c.n),r))}function lEn(n){switch(BB(mMn(n.b,(HXn(),egt)),375).g){case 1:JT($V(wnn(new Rq(null,new w1(n.d,16)),new _r),new Fr),new Br);break;case 2:vRn(n);break;case 0:CCn(n)}}function bEn(n,t,e){OTn(e,"Straight Line Edge Routing",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),mHn(n,BB(ZAn(t,(wD(),Vkt)),33)),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function wEn(){wEn=O,ZMt=new RC("V_TOP",0),JMt=new RC("V_CENTER",1),YMt=new RC("V_BOTTOM",2),VMt=new RC("H_LEFT",3),WMt=new RC("H_CENTER",4),QMt=new RC("H_RIGHT",5)}function dEn(n){var t;return 0!=(64&n.Db)?Cwn(n):((t=new fN(Cwn(n))).a+=" (abstract: ",yE(t,0!=(256&n.Bb)),t.a+=", interface: ",yE(t,0!=(512&n.Bb)),t.a+=")",t.a)}function gEn(n,t,e,i){var r,c,a;return mA(n.e)&&(a=LY(n,1,r=t.ak(),t.dd(),c=e.dd(),r.$j()?pBn(n,r,c,cL(r,99)&&0!=(BB(r,18).Bb&BQn)):-1,!0),i?i.Ei(a):i=a),i}function pEn(n){var t;null==n.c&&(t=GI(n.b)===GI(Ynt)?null:n.b,n.d=null==t?zWn:ez(t)?jN(EQ(t)):XI(t)?qVn:nE(tsn(t)),n.a=n.a+": "+(ez(t)?CR(EQ(t)):t+""),n.c="("+n.d+") "+n.a)}function vEn(n,t){this.e=n,QI(e0(t,-4294967296),0)?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t)])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t),dG(kz(t,32))]))}function mEn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===xWn&&Map.prototype.entries&&n()?Map:bUn()}function yEn(n,t){var e,i,r;for(r=new M2(n.e,0),e=0;r.b<r.d.gc();){if((i=Gy((Px(r.b<r.d.gc()),MD(r.d.Xb(r.c=r.b++))))-t)>D3n)return e;i>-1e-6&&++e}return e}function kEn(n,t){var e;t!=n.b?(e=null,n.b&&(e=oJ(n.b,n,-4,e)),t&&(e=Npn(t,n,-4,e)),(e=Zhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function jEn(n,t){var e;t!=n.f?(e=null,n.f&&(e=oJ(n.f,n,-1,e)),t&&(e=Npn(t,n,-1,e)),(e=nfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,t,t))}function EEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function TEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function MEn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Tz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function SEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),OV(new Bg(n).a,i)}function PEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),IV(new $g(n).a,i)}function CEn(n){if(null!=n&&n.length>0&&33==fV(n,n.length-1))try{return null==YPn(fx(n,0,n.length-1)).e}catch(t){if(!cL(t=lun(t),32))throw Hp(t)}return!1}function IEn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,3,i,null,c,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,1,i,i.zj(),c,-1,!0),e?e.Ei(r):e=r,e}function OEn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=QOn((b1(n,1),"X".charCodeAt(n)))))throw Hp(new ak("Unknown Option: "+"X".substr(n)));t|=e}return t}function AEn(n,t,e){var i,r;switch(i=Wln(vW(t)),CZ(r=new CSn,t),e.g){case 1:qCn(r,Tln(hwn(i)));break;case 2:qCn(r,hwn(i))}return hon(r,(HXn(),tpt),MD(mMn(n,tpt))),r}function $En(n){var t,e;return t=BB(U5(new oz(ZL(fbn(n.a).a.Kc(),new h))),17),e=BB(U5(new oz(ZL(lbn(n.a).a.Kc(),new h))),17),qy(TD(mMn(t,(hWn(),Clt))))||qy(TD(mMn(e,Clt)))}function LEn(){LEn=O,Mst=new yP("ONE_SIDE",0),Pst=new yP("TWO_SIDES_CORNER",1),Cst=new yP("TWO_SIDES_OPPOSING",2),Sst=new yP("THREE_SIDES",3),Tst=new yP("FOUR_SIDES",4)}function NEn(n,t,e,i,r){var c,a;c=BB(P4(AV(t.Oc(),new Zr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),a=BB(gan(n.b,e,i),15),0==r?a.Wc(0,c):a.Gc(c)}function xEn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(i),10)).a.Kc(),new h));dAn(e);)r=BB(U5(e),17).c.i.p,n.n[r]=n.n[r]-1}function DEn(n,t){var e,i,r,c;for(r=new Wb(t.d);r.a<r.c.c.length;)for(i=BB(n0(r),101),c=BB(RX(n.c,i),112).o,e=new QT(i.b);e.a<e.c.a.length;)g9(i,BB(u4(e),61),c)}function REn(n){var t;for(t=new Wb(n.e.b);t.a<t.c.c.length;)hzn(n,BB(n0(t),29));JT(AV(wnn(wnn(new Rq(null,new w1(n.e.b,16)),new Xc),new Zc),new na),new hg(n))}function KEn(n,t){return!!t&&!n.Di(t)&&(n.i?n.i.Ei(t):cL(t,143)?(n.i=BB(t,143),!0):(n.i=new po,n.i.Ei(t)))}function _En(n){if(n=FBn(n,!0),mK(a5n,n)||mK("1",n))return hN(),vtt;if(mK(u5n,n)||mK("0",n))return hN(),ptt;throw Hp(new ik("Invalid boolean value: '"+n+"'"))}function FEn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=BB(r.Pb(),42)).cd(),GI(t)===GI(c)||null!=t&&Nfn(t,c))return e&&(i=new PS(i.cd(),i.dd()),r.Qb()),i;return null}function BEn(n){var t,e,i;qD(),n.B.Hc((n_n(),qIt))&&(i=n.f.i,t=new gY(n.a.c),(e=new bm).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.Ff(e))}function HEn(n,t,i,r){var c,a,u;for(u=e.Math.min(i,WFn(BB(n.b,65),t,i,r)),a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),221))!=t&&(u=e.Math.min(u,HEn(c,t,u,r)));return u}function qEn(n){var t,e,i;for(i=x8(Out,sVn,193,n.b.c.length,0,2),e=new M2(n.b,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),29),i[e.b-1]=n2(t.a);return i}function GEn(n,t,e,i,r){var c,a,u,o;for(a=nj(Zk(H_(tvn(e)),i),akn(n,e,r)),o=DSn(n,e).Kc();o.Ob();)t[(u=BB(o.Pb(),11)).p]&&(c=t[u.p].i,WB(a.d,new xG(c,kln(a,c))));Pwn(a)}function zEn(n,t){this.f=new xp,this.b=new xp,this.j=new xp,this.a=n,this.c=t,this.c>0&&_yn(this,this.c-1,(kUn(),oIt)),this.c<this.a.length-1&&_yn(this,this.c+1,(kUn(),CIt))}function UEn(n){n.length>0&&n[0].length>0&&(this.c=qy(TD(mMn(vW(n[0][0]),(hWn(),alt))))),this.a=x8(Pmt,sVn,2018,n.length,0,2),this.b=x8(Lmt,sVn,2019,n.length,0,2),this.d=new Thn}function XEn(n){return 0!=n.c.length&&((l1(0,n.c.length),BB(n.c[0],17)).c.i.k==(uSn(),Put)||o5($V(new Rq(null,new w1(n,16)),new Kc),new _c))}function WEn(n,t,e){return OTn(e,"Tree layout",1),h2(n.b),CU(n.b,(zyn(),Ryt),Ryt),CU(n.b,Kyt,Kyt),CU(n.b,_yt,_yt),CU(n.b,Fyt,Fyt),n.a=$qn(n.b,t),lxn(n,t,mcn(e,1)),HSn(e),t}function VEn(n,t){var i,r,c,a,u,o;for(u=wDn(t),c=t.f,o=t.g,a=e.Math.sqrt(c*c+o*o),r=0,i=new Wb(u);i.a<i.c.c.length;)r+=VEn(n,BB(n0(i),33));return e.Math.max(r,a)}function QEn(){QEn=O,YCt=new UC(hJn,0),QCt=new UC("FREE",1),VCt=new UC("FIXED_SIDE",2),UCt=new UC("FIXED_ORDER",3),WCt=new UC("FIXED_RATIO",4),XCt=new UC("FIXED_POS",5)}function YEn(n,t){var e,i,r;if(e=t.Hh(n.a))for(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),T7n)),i=1;i<(IPn(),nLt).length;++i)if(mK(nLt[i],r))return i;return 0}function JEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function ZEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function nTn(n){var t,e,i;for(i=new $an(FWn,"{","}"),e=n.vc().Kc();e.Ob();)b6(i,W3(n,(t=BB(e.Pb(),42)).cd())+"="+W3(n,t.dd()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function tTn(n){for(var t,e,i,r;!Wy(n.o);)e=BB(dU(n.o),46),i=BB(e.a,121),r=Nbn(t=BB(e.b,213),i),t.e==i?(RN(r.g,t),i.e=r.e+t.a):(RN(r.b,t),i.e=r.e-t.a),WB(n.e.a,i)}function eTn(n,t){var e,i,r;for(e=null,r=BB(t.Kb(n),20).Kc();r.Ob();)if(i=BB(r.Pb(),17),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function iTn(n,t){var e,i,r;for(i=new Wb(QLn(n,!1,t));i.a<i.c.c.length;)0==(e=BB(n0(i),129)).d?(WZ(e,null),VZ(e,null)):(r=e.a,WZ(e,e.b),VZ(e,r))}function rTn(n){var t,e;return Jcn(t=new B2,Cyt),(e=BB(mMn(n,(hWn(),Zft)),21)).Hc((bDn(),vft))&&Jcn(t,$yt),e.Hc(sft)&&Jcn(t,Iyt),e.Hc(gft)&&Jcn(t,Ayt),e.Hc(fft)&&Jcn(t,Oyt),t}function cTn(n){var t,e,i,r;for(Sqn(n),e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)r=(i=(t=BB(U5(e),17)).c.i==n)?t.d:t.c,i?MZ(t,null):SZ(t,null),hon(t,(hWn(),mlt),r),uAn(n,r.i)}function aTn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function uTn(n){var t,e;for(e=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));e.e!=e.i.gc();)if(!dAn(new oz(ZL(wLn(t=BB(kpn(e),33)).a.Kc(),new h))))return t;return null}function oTn(){var n;return WOt?BB($$n((WM(),zAt),y6n),2016):(n=BB(cL(SJ((WM(),zAt),y6n),555)?SJ(zAt,y6n):new sAn,555),WOt=!0,_Gn(n),jWn(n),Tyn(n),mZ(zAt,y6n,n),n)}function sTn(n,t,e){var i,r;if(0==n.j)return e;if(r=BB(_en(n,t,e),72),!(i=e.ak()).Ij()||!n.a.rl(i))throw Hp(new dy("Invalid entry feature '"+i.Hj().zb+"."+i.ne()+"'"));return r}function hTn(n,t){var e,i,r,c,a,u,o;for(u=0,o=(a=n.a).length;u<o;++u)for(r=0,c=(i=a[u]).length;r<c;++r)if(e=i[r],GI(t)===GI(e)||null!=t&&Nfn(t,e))return!0;return!1}function fTn(n){var t,e,i;return Vhn(n,0)>=0?(e=Ojn(n,AQn),i=ldn(n,AQn)):(e=Ojn(t=jz(n,1),5e8),i=rbn(yz(i=ldn(t,5e8),1),e0(n,1))),i0(yz(i,32),e0(e,UQn))}function lTn(n,t,e){var i;switch(Px(0!=t.b),i=BB(Atn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return nX(spn(t,0),i),t}function bTn(n,t,e,i){var r,c,a,u,o;switch(o=n.b,u=zgn(a=(c=t.d).j,o.d[a.g],e),r=UR(B$(c.n),c.a),c.j.g){case 1:case 3:u.a+=r.a;break;case 2:case 4:u.b+=r.b}r5(i,u,i.c.b,i.c)}function wTn(n,t,e){var i,r,c,a;for(a=E7(n.e,t,0),(c=new rm).b=e,i=new M2(n.e,a);i.b<i.d.gc();)Px(i.b<i.d.gc()),(r=BB(i.d.Xb(i.c=i.b++),10)).p=e,WB(c.e,r),fW(i);return c}function dTn(n,t,e,i){var r,c,a,u,o;for(r=null,c=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).i+a.g,n<a.j+a.f+i&&(r?e.i-o<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function gTn(n,t,e,i){var r,c,a,u,o;for(c=null,r=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).j+a.f,n<a.i+a.g+i&&(c?e.j-o<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function pTn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Yon(BB(xq(n.b,e),434))?!t&&e+1<i&&Yon(BB(xq(n.b,e+1),434))&&(t=!0,BB(xq(n.b,e),434).a=!0):t=!1}function vTn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=rbn(c,ibn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}function mTn(n,t){var e,i;for($On(),ODn(),i=Jtt,e=n;t>1;t>>=1)0!=(1&t)&&(i=Nnn(i,e)),e=1==e.d?Nnn(e,e):new Cgn(I_n(e.a,e.d,x8(ANt,hQn,25,e.d<<1,15,1)));return i=Nnn(i,e)}function yTn(){var n,t,e,i;for(yTn=O,Oet=x8(xNt,qQn,25,25,15,1),Aet=x8(xNt,qQn,25,33,15,1),i=152587890625e-16,t=32;t>=0;t--)Aet[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)Oet[n]=e,e*=.5}function kTn(n){var t,e;if(qy(TD(ZAn(n,(HXn(),wgt)))))for(e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)if(QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,dgt))))return!0;return!1}function jTn(n,t){var e,i,r;TU(n.f,t)&&(t.b=n,i=t.c,-1!=E7(n.j,i,0)||WB(n.j,i),r=t.d,-1!=E7(n.j,r,0)||WB(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new epn(n)),van(n.i,e)))}function ETn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:Mln(e)==r?0:Eln(e)==r?1:SN(n.b.b,Mln(e))?0:1}function TTn(){TTn=O,tvt=new RP(j3n,0),Zpt=new RP("LONGEST_PATH",1),Ypt=new RP("COFFMAN_GRAHAM",2),Jpt=new RP(B1n,3),evt=new RP("STRETCH_WIDTH",4),nvt=new RP("MIN_WIDTH",5)}function MTn(n){var t;this.d=new xp,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new sG(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new YK(t=BB(Vj(aAt),9),BB(SR(t,t.length),9),0)}function STn(n,t){var e,i,r,c;!(r=D2(i=n,"layoutOptions"))&&(r=D2(i,M6n)),r&&(e=null,(c=r)&&(e=new TT(c,jrn(c,x8(Qtt,sVn,2,0,6,1)))),e&&e5(e,new wI(c,t)))}function PTn(n){if(cL(n,239))return BB(n,33);if(cL(n,186))return WJ(BB(n,118));throw Hp(n?new tk("Only support nodes and ports."):new Hy(e8n))}function CTn(n,t,e,i){return t>=0&&mK(n.substr(t,3),"GMT")||t>=0&&mK(n.substr(t,3),"UTC")?(e[0]=t+3,y_n(n,e,i)):y_n(n,e,i)}function ITn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)(r=(e=BB(n0(i),70)).n).a=c,n.i==(kUn(),sIt)?r.b=a+n.j.b-e.o.b:r.b=a,UR(r,t),c+=e.o.a+n.e}function OTn(n,t,e){if(n.b)throw Hp(new Fy("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=($T(),cbn(fan(Date.now()),VVn))),!0)}function ATn(n){var t;return t=new py,null!=n.tg()&&AH(t,q6n,n.tg()),null!=n.ne()&&AH(t,t8n,n.ne()),null!=n.sg()&&AH(t,"description",n.sg()),t}function $Tn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new nU(n,1,9,c,t),e?e.Ei(r):e=r),t?(i=t.c)!=n.r&&(e=n.nk(i,e)):n.r&&(e=n.nk(null,e)),e}function LTn(n,t,e){var i,r;for(e=Npn(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function NTn(n,t,e){var i,r;for(e=oJ(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function xTn(n,t,e,i){var r,c,a;if(0==i)aHn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function DTn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.b=t,r.d.c=i}function RTn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.d=i,r.d.a=t}function KTn(n,t){var e,i,r,c;for(c=new Np,r=0,i=t.Kc();i.Ob();){for(e=iln(BB(i.Pb(),19).a+r);e.a<n.f&&!tG(n,e.a);)e=iln(e.a+1),++r;if(e.a>=n.f)break;c.c[c.c.length]=e}return c}function _Tn(n){var t,e,i,r;for(t=null,r=new Wb(n.wf());r.a<r.c.c.length;)e=new UV((i=BB(n0(r),181)).qf().a,i.qf().b,i.rf().a,i.rf().b),t?CPn(t,e):t=e;return!t&&(t=new bA),t}function FTn(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),Ywn(n.n,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Qj(n,fgn(n),e-bX(n.zh()),t,i)}function BTn(n,t,e){var i,r,c,a,u;for(i=e.gc(),n.qi(n.i+i),(u=n.i-t)>0&&aHn(n.g,t,n.g,t+i,u),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),jL(n,t,n.oi(t,c)),n.bi(t,c),n.ci(),++t;return 0!=i}function HTn(n,t,e){var i;return t!=n.q?(n.q&&(e=oJ(n.q,n,-10,e)),t&&(e=Npn(t,n,-10,e)),e=$Tn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,9,t,t),e?e.Ei(i):e=i),e}function qTn(n,t,e,i){return C_(0==(e&hVn),"flatMap does not support SUBSIZED characteristic"),C_(0==(4&e),"flatMap does not support SORTED characteristic"),yX(n),yX(t),new q2(n,e,i,t)}function GTn(n,t){SU(t,"Cannot suppress a null exception."),vH(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Pun(Gk(Jnt,1),sVn,78,0,[t]):n.k[n.k.length]=t)}function zTn(n,t,e,i){var r,c,a,u,o,s;for(a=e.length,c=0,r=-1,s=atn(n.substr(t),(c_(),Tet)),u=0;u<a;++u)(o=e[u].length)>c&&sU(s,atn(e[u],Tet))&&(r=u,c=o);return r>=0&&(i[0]=t+c),r}function UTn(n,t){var e;if(0!=(e=YO(n.b.Hf(),t.b.Hf())))return e;switch(n.b.Hf().g){case 1:case 2:return E$(n.b.sf(),t.b.sf());case 3:case 4:return E$(t.b.sf(),n.b.sf())}return 0}function XTn(n){var t,e,i;for(i=n.e.c.length,n.a=kq(ANt,[sVn,hQn],[48,25],15,[i,i],2),e=new Wb(n.c);e.a<e.c.c.length;)t=BB(n0(e),282),n.a[t.c.b][t.d.b]+=BB(mMn(t,(fRn(),Zct)),19).a}function WTn(n,t,e){OTn(e,"Grow Tree",1),n.b=t.f,qy(TD(mMn(t,(Xcn(),Qrt))))?(n.c=new it,QZ(n,null)):n.c=new it,n.a=!1,FNn(n,t.f),hon(t,Yrt,(hN(),!!n.a)),HSn(e)}function VTn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=x8(ONt,WVn,25,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=OOt[e],a[r++]=OOt[c];return Bdn(a,0,a.length)}function QTn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,4,i,c,null,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,i.Kj()?2:1,i,c,i.zj(),-1,!0),e?e.Ei(r):e=r,e}function YTn(n){var t,e;return n>=BQn?(t=HQn+(n-BQn>>10&1023)&QVn,e=56320+(n-BQn&1023)&QVn,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&QVn)}function JTn(n,t){var e,i,r,c;return qD(),(r=BB(BB(h6(n.r,t),21),84)).gc()>=2&&(i=BB(r.Kc().Pb(),111),e=n.u.Hc((lIn(),tIt)),c=n.u.Hc(cIt),!i.a&&!e&&(2==r.gc()||c))}function ZTn(n,t,e,i,r){var c,a,u;for(c=eDn(n,t,e,i,r),u=!1;!c;)E$n(n,r,!0),u=!0,c=eDn(n,t,e,i,r);u&&E$n(n,r,!1),0!=(a=Dun(r)).c.length&&(n.d&&n.d.lg(a),ZTn(n,r,e,i,a))}function nMn(){nMn=O,aCt=new BC(QZn,0),rCt=new BC("DIRECTED",1),uCt=new BC("UNDIRECTED",2),eCt=new BC("ASSOCIATION",3),cCt=new BC("GENERALIZATION",4),iCt=new BC("DEPENDENCY",5)}function tMn(n,t){var e;if(!WJ(n))throw Hp(new Fy(F5n));switch(e=WJ(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function eMn(n,t){var e,i;for(kW(t),i=n.b.c.length,WB(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.ue(xq(n.b,i),t)<=0)return c5(n.b,e,t),!0;c5(n.b,e,xq(n.b,i))}return c5(n.b,i,t),!0}function iMn(n,t,i,r){var c,a;if(c=0,i)c=mhn(n.a[i.g][t.g],r);else for(a=0;a<nrt;a++)c=e.Math.max(c,mhn(n.a[a][t.g],r));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function rMn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(kUn(),oIt)&&i.i!=(kUn(),CIt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function cMn(n,t,e,i){var r;if(r=!1,XI(i)&&(r=!0,AH(t,e,SD(i))),r||zI(i)&&(r=!0,cMn(n,t,e,i)),r||cL(i,236)&&(r=!0,qQ(t,e,BB(i,236))),!r)throw Hp(new Ly(H6n))}function aMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),Y$t).length;++i)if(mK(Y$t[i],r))return i;return 0}function uMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),J$t).length;++i)if(mK(J$t[i],r))return i;return 0}function oMn(n,t){var e,i,r,c;if(kW(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function sMn(n){var t,e;switch(e=B$(Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function hMn(n){var t;for(Irn(),t=BB(U5(new oz(ZL(fbn(n).a.Kc(),new h))),17).c.i;t.k==(uSn(),Put);)hon(t,(hWn(),olt),(hN(),!0)),t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i}function fMn(n,t,e,i){var r,c,a;for(a=Lfn(t,i).Kc();a.Ob();)r=BB(a.Pb(),11),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Lfn(e,i).Kc();c.Ob();)r=BB(c.Pb(),11),n.d[r.p]=n.d[r.p]-n.c[t.p]}function lMn(n,t,e){var i,r;for(r=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));r.e!=r.i.gc();)SA(i=BB(kpn(r),33),i.i+t,i.j+e);e5((!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b),new tI(t,e))}function bMn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.ue(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.ue(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function wMn(n){return lIn(),!(Can(OJ(EG(eIt,Pun(Gk(IIt,1),$Vn,273,0,[rIt])),n))>1||Can(OJ(EG(tIt,Pun(Gk(IIt,1),$Vn,273,0,[nIt,cIt])),n))>1)}function dMn(n,t){cL(SJ((WM(),zAt),n),498)?mZ(zAt,n,new OI(this,t)):mZ(zAt,n,this),iSn(this,t),t==(iE(),n$t)?(this.wb=BB(this,1939),BB(t,1941)):this.wb=(QX(),t$t)}function gMn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<IOt.length;++e)try{return BM(IOt[e],n)}catch(i){if(!cL(i=lun(i),32))throw Hp(i);t=i}throw Hp(new L7(t))}function pMn(){pMn=O,pet=Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),vet=Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function vMn(n){var t,e,i;(t=mK(typeof t,gYn)?null:new ln)&&(lM(),tW(e=(i=900)>=VVn?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&xNn(t,e,n.b,"Exception: ",!0))}function mMn(n,t){var e,i;return!n.q&&(n.q=new xp),null!=(i=RX(n.q,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e))),e)}function yMn(){yMn=O,Rat=new VS("P1_CYCLE_BREAKING",0),Kat=new VS("P2_LAYERING",1),_at=new VS("P3_NODE_ORDERING",2),Fat=new VS("P4_NODE_PLACEMENT",3),Bat=new VS("P5_EDGE_ROUTING",4)}function kMn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),y7(n.b.b,r.b),y7(n.b.a,BB(r.b,81).d)}function jMn(n,t){var e;if(Dnn(),n.c==t.c){if(n.b==t.b||hcn(n.b,t.b)){if(e=ZO(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return E$(n.b.g,t.b.g)}return Pln(n.c,t.c)}function EMn(n,t){var e;OTn(t,"Hierarchical port position processing",1),(e=n.b).c.length>0&&i_n((l1(0,e.c.length),BB(e.c[0],29)),n),e.c.length>1&&i_n(BB(xq(e,e.c.length-1),29),n),HSn(t)}function TMn(n,t){var e,i;if(NMn(n,t))return!0;for(i=new Wb(t);i.a<i.c.c.length;){if(_Dn(n,e=BB(n0(i),33),uEn(e)))return!0;if($hn(n,e)-n.g<=n.a)return!0}return!1}function MMn(){MMn=O,bRn(),kTt=RTt,vTt=LTt,pTt=ATt,dTt=PTt,gTt=ITt,wTt=new WA(8),bTt=new XA((sWn(),XSt),wTt),mTt=new XA(LPt,8),yTt=xTt,hTt=jTt,fTt=TTt,lTt=new XA(lSt,(hN(),!1))}function SMn(){SMn=O,zMt=new WA(15),GMt=new XA((sWn(),XSt),zMt),XMt=new XA(LPt,15),UMt=new XA(pPt,iln(0)),_Mt=jSt,BMt=KSt,qMt=qSt,DMt=new XA(cSt,f5n),FMt=CSt,HMt=BSt,RMt=uSt,KMt=hSt}function PMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function CMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function IMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function OMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function AMn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Vi())||t<0)throw Hp(new Ay(u8n+t+o8n+r));if(e>=r||e<0)throw Hp(new Ay(s8n+e+o8n+r));return t!=e?(c=n.Ti(e),n.Hi(t,c),i=c):i=n.Oi(e),i}function $Mn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Ug();e;e=e.Ug()){if(++t>GQn)return $Mn(e);if(i=e,e==n)throw Hp(new Fy("There is a cycle in the containment hierarchy of "+n))}return i}function LMn(n){var t,e,i;for(i=new $an(FWn,"[","]"),e=n.Kc();e.Ob();)b6(i,GI(t=e.Pb())===GI(n)?"(this Collection)":null==t?zWn:Bbn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function NMn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(e+1),33)):i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(0),33));return i}function xMn(n,t){var e;t!=n.a?(e=null,n.a&&(e=BB(n.a,49).ih(n,4,GOt,e)),t&&(e=BB(t,49).gh(n,4,GOt,e)),(e=Jhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,t,t))}function DMn(n,t){var e;t!=n.e?(n.e&&_6(xW(n.e),n),t&&(!t.b&&(t.b=new Tp(new xm)),YR(t.b,n)),(e=Qkn(n,t,null))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function RMn(n){var t,e,i;for(e=n.length,i=0;i<e&&(b1(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(b1(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?n.substr(i,t-i):n}function KMn(n,t){var i;i=t.o,dA(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function _Mn(){_Mn=O,$st=Pun(Gk(FIt,1),YZn,61,0,[(kUn(),sIt),oIt,SIt]),Ast=Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt]),Lst=Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt,sIt]),Nst=Pun(Gk(FIt,1),YZn,61,0,[CIt,sIt,oIt])}function FMn(n,t,e,i){var r,c,a,u,o;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(o=n.b,r=c.j,u=null;r!=a.j;)u=0==t?Mln(r):Eln(r),DH(i,UR(zgn(r,o.d[r.g],e),zgn(u,o.d[u.g],e))),r=u}function BMn(n,t,e,i){var r,c,a,u,o;return u=BB((a=qyn(n.a,t,e)).a,19).a,c=BB(a.b,19).a,i&&(o=BB(mMn(t,(hWn(),Elt)),10),r=BB(mMn(e,Elt),10),o&&r&&(t4(n.b,o,r),u+=n.b.i,c+=n.b.e)),u>c}function HMn(n){var t,e,i,r,c,a,u,o;for(this.a=rvn(n),this.b=new Np,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Np,WB(this.b,c),u=0,o=(a=t).length;u<o;++u)WB(c,new t_(a[u].j))}function qMn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=bWn(n.d,i,r),c+=ZX(n.a,i,(kUn(),oIt)),c+=ZX(n.a,r,CIt)):c=I9(n.a,i,r)),n.c[t]&&(c+=L6(n.a,i)),c}function GMn(n,t,e,i,r){var c,a,u,o;for(o=null,u=new Wb(i);u.a<u.c.c.length;)if((a=BB(n0(u),441))!=e&&-1!=E7(a.e,r,0)){o=a;break}SZ(c=W5(r),e.b),MZ(c,o.b),JIn(n.a,r,new L_(c,t,e.f))}function zMn(n){for(;0!=n.g.c&&0!=n.d.c;)FD(n.g).c>FD(n.d).c?(n.i+=n.g.c,gdn(n.d)):FD(n.d).c>FD(n.g).c?(n.e+=n.d.c,gdn(n.g)):(n.i+=qq(n.g),n.e+=qq(n.d),gdn(n.g),gdn(n.d))}function UMn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new zZ((O6(),Tyt),t,c,1),new zZ(Tyt,c,a,1),r=new Wb(e);r.a<r.c.c.length;)(i=BB(n0(r),112))!=c&&i!=t&&i!=a&&(gHn(n.a,i,t),gHn(n.a,i,a))}function XMn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=K3n*n.b+.9*t,n.f=K3n*n.b+.9*i):(n.b=.5*(t+r),n.g=K3n*n.b+.9*r,n.f=K3n*n.b+.9*t)}function WMn(){function n(){return(new Date).getTime()}SWn={},!Array.isArray&&(Array.isArray=function(n){return"[object Array]"===Object.prototype.toString.call(n)}),!Date.now&&(Date.now=n)}function VMn(n,t){var e,i;i=BB(mMn(t,(HXn(),ept)),98),hon(t,(hWn(),ylt),i),(e=t.e)&&(JT(new Rq(null,new w1(e.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(e.b,16)),new mt),new Kw(n)))}function QMn(n){var t,i,r,c;if(gA(BB(mMn(n.b,(HXn(),Udt)),103)))return 0;for(t=0,r=new Wb(n.a);r.a<r.c.c.length;)(i=BB(n0(r),10)).k==(uSn(),Cut)&&(c=i.o.a,t=e.Math.max(t,c));return t}function YMn(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 1:hon(n,kgt,(Tbn(),Blt));break;case 2:hon(n,kgt,(Tbn(),Hlt));break;case 3:hon(n,kgt,(Tbn(),_lt));break;case 4:hon(n,kgt,(Tbn(),Flt))}}function JMn(){JMn=O,cft=new $P(QZn,0),eft=new $P(cJn,1),aft=new $P(aJn,2),rft=new $P("LEFT_RIGHT_CONSTRAINT_LOCKING",3),ift=new $P("LEFT_RIGHT_CONNECTION_LOCKING",4),tft=new $P(q1n,5)}function ZMn(n,t,i){var r,c,a,u,o,s,h;o=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>o&&(s=o/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),u=e.Math.min(s,h),n.a+=u*(t.a-n.a),n.b+=u*(t.b-n.b)}function nSn(n,t,e,i,r){var c,a;for(a=!1,c=BB(xq(e.b,0),33);hBn(n,t,c,i,r)&&(a=!0,cEn(e,c),0!=e.b.c.length);)c=BB(xq(e.b,0),33);return 0==e.b.c.length&&Tkn(e.j,e),a&&Gmn(t.q),a}function tSn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(cNn(n,i,r=BB(b3(c),8)))return!0;i=r}return!!cNn(n,i,e)}function eSn(n,t,e,i){return 0==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),BK(n.o,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Rj(n,fgn(n),e-bX(n.zh()),t,i)}function iSn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=BB(n.sb,49).ih(n,1,HOt,e)),t&&(e=BB(t,49).gh(n,1,HOt,e)),(e=jfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function rSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need an end point."));e=Ren(t,"x"),Ten(new Kg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new _g(n).a,(kW(i),i))}function cSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need a start point."));e=Ren(t,"x"),Ien(new xg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Dg(n).a,(kW(i),i))}function aSn(n,t){var e,i,r,c,a;for(i=0,c=psn(n).length;i<c;++i)vMn(t);for(a=!Qet&&n.e?Qet?null:n.d:null;a;){for(e=0,r=psn(a).length;e<r;++e)vMn(t);a=!Qet&&a.e?Qet?null:a.d:null}}function uSn(){uSn=O,Cut=new JS("NORMAL",0),Put=new JS("LONG_EDGE",1),Mut=new JS("EXTERNAL_PORT",2),Iut=new JS("NORTH_SOUTH_PORT",3),Sut=new JS("LABEL",4),Tut=new JS("BREAKING_POINT",5)}function oSn(n){var t,e,i,r;if(t=!1,Lx(n,(hWn(),zft)))for(e=BB(mMn(n,zft),83),r=new Wb(n.j);r.a<r.c.c.length;)J$n(i=BB(n0(r),11))&&(t||(iIn(vW(n)),t=!0),fpn(BB(e.xc(i),306)))}function sSn(n,t,e){var i;OTn(e,"Self-Loop routing",1),i=Vln(t),iO(mMn(t,(C6(),TMt))),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new zi),new Ui),new Xi),new Wi),new eP(n,i)),HSn(e)}function hSn(n){var t,e,i;return i=ATn(n),null!=n.e&&AH(i,n8n,n.e),!!n.k&&AH(i,"type",dx(n.k)),!WE(n.j)&&(e=new Cl,rtn(i,N6n,e),t=new cp(e),e5(n.j,t)),i}function fSn(n){var t,e,i,r;for(r=xX((lin(n.gc(),"size"),new Ik),123),i=!0,e=lz(n).Kc();e.Ob();)t=BB(e.Pb(),42),i||(r.a+=FWn),i=!1,uO(xX(uO(r,t.cd()),61),t.dd());return(r.a+="}",r).a}function lSn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),M$(e&SQn,i&SQn,r&PQn)}function bSn(n){if(null==ytt&&(ytt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!ytt.test(n))throw Hp(new Mk(DQn+n+'"'));return parseFloat(n)}function wSn(n){var t,e,i,r;for(t=new Np,vU(e=x8($Nt,ZYn,25,n.a.c.length,16,1),e.length),r=new Wb(n.a);r.a<r.c.c.length;)e[(i=BB(n0(r),121)).d]||(t.c[t.c.length]=i,Ggn(n,i,e));return t}function dSn(n,t){var e,i,r,c;for(c=t.b.j,n.a=x8(ANt,hQn,25,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)l1(i,c.c.length),0==(e=BB(c.c[i],11)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function gSn(){gSn=O,Dht=new IP("ALWAYS_UP",0),xht=new IP("ALWAYS_DOWN",1),Kht=new IP("DIRECTION_UP",2),Rht=new IP("DIRECTION_DOWN",3),Fht=new IP("SMART_UP",4),_ht=new IP("SMART_DOWN",5)}function pSn(n,t){if(n<0||t<0)throw Hp(new _y("k and n must be positive"));if(t>n)throw Hp(new _y("k must be smaller than n"));return 0==t||t==n?1:0==n?0:Mjn(n)/(Mjn(t)*Mjn(n-t))}function vSn(n,t){var e,i,r,c;for(e=new OA(n);null!=e.g||e.c?null==e.g||0!=e.i&&BB(e.g[e.i-1],47).Ob():tZ(e);)if(cL(c=BB(aLn(e),56),160))for(i=BB(c,160),r=0;r<t.length;r++)t[r].og(i)}function mSn(n){var t;return 0!=(64&n.Db)?Yln(n):((t=new fN(Yln(n))).a+=" (height: ",vE(t,n.f),t.a+=", width: ",vE(t,n.g),t.a+=", x: ",vE(t,n.i),t.a+=", y: ",vE(t,n.j),t.a+=")",t.a)}function ySn(n){var t,e,i,r,c,a;for(t=new v4,r=0,c=(i=n).length;r<c;++r)if(null!=Jgn(t,a=yX((e=i[r]).cd()),yX(e.dd())))throw Hp(new _y("duplicate key: "+a));this.b=(SQ(),new Xb(t))}function kSn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],b6(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function jSn(){jSn=O,Knn(),Ict=new $O(oZn,Oct=Rct),iln(1),Cct=new $O(sZn,iln(300)),iln(0),Lct=new $O(hZn,iln(0)),new $p,Nct=new $O(fZn,lZn),new $p,Act=new $O(bZn,5),xct=Rct,$ct=Dct}function ESn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),WB(n.b.b,BB(r.b,81)),WB(n.b.a,BB(r.b,81).d)}function TSn(n,t){var e;if(null!=t&&!n.c.Yj().wj(t))throw e=cL(t,56)?BB(t,56).Tg().zb:nE(tsn(t)),Hp(new Ky(r6n+n.c.ne()+"'s type '"+n.c.Yj().ne()+"' does not permit a value of type '"+e+"'"))}function MSn(n,t,e){var i,r;for(r=new M2(n.b,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),GI(mMn(i=BB(r.d.Xb(r.c=r.b++),70),(hWn(),vlt)))===GI(t)&&(OPn(i.n,vW(n.c.i),e),fW(r),WB(t.b,i))}function SSn(n,t){if(t.a)switch(BB(mMn(t.b,(hWn(),ylt)),98).g){case 0:case 1:lEn(t);case 2:JT(new Rq(null,new w1(t.d,16)),new Li),oAn(n.a,t)}else JT(new Rq(null,new w1(t.d,16)),new Li)}function PSn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=Wrn(n,new Ec)),Gy(n.k)/(n.b*(null==n.g&&(n.g=Xrn(n,new jc)),Gy(n.g))))),t=dG(fan(e.Math.round(i))),t=e.Math.min(t,n.f)}function CSn(){gcn(),LR.call(this),this.j=(kUn(),PIt),this.a=new Gj,new fm,this.f=(lin(2,AVn),new J6(2)),this.e=(lin(4,AVn),new J6(4)),this.g=(lin(4,AVn),new J6(4)),this.b=new hP(this.e,this.g)}function ISn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.c.i,(n!=(Tbn(),_lt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Flt)}function OSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.d.i,(n!=(Tbn(),Blt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Hlt)}function ASn(n,t){var e,i,r,c,a,u,o;for(a=n.d,o=n.o,u=new UV(-a.b,-a.d,a.b+o.a+a.c,a.d+o.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&CPn(u,e.i);a.b=-u.c,a.d=-u.d,a.c=u.b-a.b-o.a,a.a=u.a-a.d-o.b}function $Sn(){$Sn=O,iTt=new MC("CENTER_DISTANCE",0),rTt=new MC("CIRCLE_UNDERLAP",1),uTt=new MC("RECTANGLE_UNDERLAP",2),cTt=new MC("INVERTED_OVERLAP",3),aTt=new MC("MINIMUM_ROOT_DISTANCE",4)}function LSn(n){var t,e,i,r;if(KDn(),null==n)return null;for(i=n.length,t=x8(ONt,WVn,25,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=YLt[r>>4],t[2*e+1]=YLt[15&r];return Bdn(t,0,t.length)}function NSn(n){var t;switch(nV(),n.c.length){case 0:return Bnt;case 1:return IH((t=BB(JCn(new Wb(n)),42)).cd(),t.dd());default:return new hy(BB(Qgn(n,x8(Hnt,kVn,42,n.c.length,0,1)),165))}}function xSn(n){var t,e,i,r,c;for(t=new Lp,e=new Lp,d3(t,n),d3(e,n);e.b!=e.c;)for(c=new Wb(BB(dU(e),37).a);c.a<c.c.c.length;)(r=BB(n0(c),10)).e&&(d3(t,i=r.e),d3(e,i));return t}function DSn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),xut));case 2:return KB(n.j,(gcn(),Lut));case 3:return KB(n.j,(gcn(),Rut));case 4:return KB(n.j,(gcn(),Kut));default:return SQ(),SQ(),set}}function RSn(n,t){var e,i,r;e=sH(t,n.e),i=BB(RX(n.g.f,e),19).a,r=n.a.c.length-1,0!=n.a.c.length&&BB(xq(n.a,r),287).c==i?(++BB(xq(n.a,r),287).a,++BB(xq(n.a,r),287).b):WB(n.a,new Gx(i))}function KSn(n,t,e){var i,r;return 0!=(i=SRn(n,t,e))?i:Lx(t,(hWn(),wlt))&&Lx(e,wlt)?((r=E$(BB(mMn(t,wlt),19).a,BB(mMn(e,wlt),19).a))<0?uKn(n,t,e):r>0&&uKn(n,e,t),r):IOn(n,t,e)}function _Sn(n,t,e){var i,r,c,a;if(0!=t.b){for(i=new YT,a=spn(t,0);a.b!=a.d.c;)Frn(i,xun(c=BB(b3(a),86))),(r=c.e).a=BB(mMn(c,(qqn(),gkt)),19).a,r.b=BB(mMn(c,pkt),19).a;_Sn(n,i,mcn(e,i.b/n.a|0))}}function FSn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(z1(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=cHn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function BSn(n,t,e){OTn(e,"Recursive Graph Layout",hDn(n,t,!0)),vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new $f])),P8(t,(sWn(),mPt))||vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new gu])),lXn(n,t,null,e),HSn(e)}function HSn(n){var t;if(null==n.p)throw Hp(new Fy("The task has not begun yet."));n.b||(n.k&&($T(),t=cbn(fan(Date.now()),VVn),n.q=1e-9*j2(ibn(t,n.o))),n.c<n.r&&qin(n,n.r-n.c),n.b=!0)}function qSn(n){var t,e,i;for(DH(i=new km,new xC(n.j,n.k)),e=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));e.e!=e.i.gc();)DH(i,new xC((t=BB(kpn(e),469)).a,t.b));return DH(i,new xC(n.b,n.c)),i}function GSn(n,t,e,i,r){var c,a,u,o;if(r)for(o=((c=new hz(r.a.length)).b-c.a)*c.c<0?(eS(),MNt):new XL(c);o.Ob();)u=x2(r,BB(o.Pb(),19).a),D_n((a=new hQ(n,t,e,i)).a,a.b,a.c,a.d,u)}function zSn(n,t){var e;if(GI(n)===GI(t))return!0;if(cL(t,21)){e=BB(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(cL(i=lun(i),173)||cL(i,205))return!1;throw Hp(i)}}return!1}function USn(n,t){var i;WB(n.d,t),i=t.rf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function XSn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function WSn(n,t,e,i,r){if(i<t||r<e)throw Hp(new _y("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function VSn(n){if(cL(n,149))return MNn(BB(n,149));if(cL(n,229))return Zbn(BB(n,229));if(cL(n,23))return hSn(BB(n,23));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[n])))))}function QSn(n,t,e,i,r){var c,a,u;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)aHn(e,i,n,0,t),a=t;else{for(u=32-r,c&=e[a]<<u==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<u;n[a]=e[a+i]>>>r,++a}return c}function YSn(n,t,e,i){var r,c;if(t.k==(uSn(),Put))for(c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if((r=BB(U5(c),17)).c.i.k==Put&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function JSn(n,t){var e,i,r,c;return t&=63,e=n.h&PQn,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),M$(i&SQn,r&SQn,c&PQn)}function ZSn(n,t,e,i){var r;this.b=i,this.e=n==(oin(),Amt),r=t[e],this.d=kq($Nt,[sVn,ZYn],[177,25],16,[r.length,r.length],2),this.a=kq(ANt,[sVn,hQn],[48,25],15,[r.length,r.length],2),this.c=new zEn(t,e)}function nPn(n){var t,e,i;for(n.k=new o1((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,n.j.c.length),i=new Wb(n.j);i.a<i.c.c.length;)t=(e=BB(n0(i),113)).d.j,JIn(n.k,t,e);n.e=iNn(gz(n.k))}function tPn(n,t){var e,i,r;TU(n.d,t),e=new ka,VW(n.c,t,e),e.f=Phn(t.c),e.a=Phn(t.d),e.d=(gxn(),(r=t.c.i.k)==(uSn(),Cut)||r==Tut),e.e=(i=t.d.i.k)==Cut||i==Tut,e.b=t.c.j==(kUn(),CIt),e.c=t.d.j==oIt}function ePn(n){var t,e,i,r,c;for(c=DWn,r=DWn,i=new Wb(kbn(n));i.a<i.c.c.length;)t=(e=BB(n0(i),213)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==DWn&&(r=-1),c==DWn&&(c=-1),new rI(iln(r),iln(c))}function iPn(n,t){var i,r,c;return c=ZJn,qpn(),r=Zrt,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=nct),(i=e.Math.abs(n.a))<c&&(c=i,r=tct),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Jrt),r}function rPn(n,t){var e,i,r;for(e=t.a.o.a,r=new Sb(new s1(vW(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(Px(r.b<r.d.gc()),(i=BB(r.d.Xb(r.c=r.b++),29)).c.a>=e)return hPn(n,t,i.p),!0;return!1}function cPn(n){var t;return 0!=(64&n.Db)?mSn(n):(t=new lN(Z5n),!n.a||oO(oO((t.a+=' "',t),n.a),'"'),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function aPn(n,t,e){var i,r,c,a,u;for(u=axn(n.e.Tg(),t),r=BB(n.g,119),i=0,a=0;a<n.i;++a)if(c=r[a],u.rl(c.ak())){if(i==e)return fDn(n,a),ZM(),BB(t,66).Oj()?c:c.dd();++i}throw Hp(new Ay(e9n+e+o8n+i))}function uPn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return wWn(),wWn(),sNt;for(i=OXn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(wWn(),wWn(),tqn(e=new r$(1),i),i=e),tqn(e,OXn(n));return i}function oPn(n,t,e){return n<0||n>e?dCn(n,e,"start index"):t<0||t>e?dCn(t,e,"end index"):$Rn("end index (%s) must not be less than start index (%s)",Pun(Gk(Ant,1),HWn,1,5,[iln(t),iln(n)]))}function sPn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].jm()&&(t=TG(t,c)):c[0].jm()}catch(a){if(!cL(a=lun(a),78))throw Hp(a);e=a,Dk(),yY(cL(e,477)?BB(e,477).ae():e)}}return t}function hPn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&wHn(t.a,ian(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=BB(mMn(t.a,(hWn(),Plt)),15).Kc();r.Ob();)hon(BB(r.Pb(),70),tst,(hN(),!0))}function fPn(n,t){var i,r,c;c=qNn(t),hon(t,(hWn(),llt),c),c&&(r=DWn,AY(n.f,c)&&(r=BB(qI(AY(n.f,c)),19).a),qy(TD(mMn(i=BB(xq(t.g,0),17),Clt)))||VW(n,c,iln(e.Math.min(BB(mMn(i,wlt),19).a,r))))}function lPn(n,t,e){var i,r,c,a;for(t.p=-1,a=xwn(t,(ain(),qvt)).Kc();a.Ob();)for(r=new Wb(BB(a.Pb(),11).g);r.a<r.c.c.length;)t!=(c=(i=BB(n0(r),17)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&lPn(n,c,e));t.p=0}function bPn(n){var t;this.c=new YT,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new YK(t=BB(Vj(jMt),9),BB(SR(t,t.length),9),0),this.g=n.f}function wPn(n){var t,e,i,r;for(t=xX(oO(new lN("Predicates."),"and"),40),e=!0,r=new Sb(n);r.b<r.d.gc();)Px(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function dPn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)l1(t+i,n.c.length),c=BB(n.c[t+i],11),c5(n,t+i,(l1(e-i-1,n.c.length),BB(n.c[e-i-1],11))),l1(e-i-1,n.c.length),n.c[e-i-1]=c}function gPn(n,t,e){var i,r,c,a,u,o,s;u=(c=n.d.p).e,o=c.r,n.g=new QK(o),i=(a=n.d.o.c.p)>0?u[a-1]:x8(Out,a1n,10,0,0,1),r=u[a],s=a<u.length-1?u[a+1]:x8(Out,a1n,10,0,0,1),t==e-1?uZ(n.g,r,s):uZ(n.g,i,r)}function pPn(n){var t;this.j=new Np,this.f=new Rv,this.b=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),this.d=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.g=n}function vPn(n,t){var e,i,r;if(0!=t.c.length){for(e=TMn(n,t),r=!1;!e;)E$n(n,t,!0),r=!0,e=TMn(n,t);r&&E$n(n,t,!1),i=Dun(t),n.b&&n.b.lg(i),n.a=$hn(n,(l1(0,t.c.length),BB(t.c[0],33))),vPn(n,i)}}function mPn(n,t){var e,i,r;if(i=itn(n.Tg(),t),(e=t-n.Ah())<0){if(!i)throw Hp(new _y(o6n+t+s6n));if(!i.Ij())throw Hp(new _y(r6n+i.ne()+c6n));(r=n.Yg(i))>=0?n.Bh(r):cIn(n,i)}else qfn(n,e,i)}function yPn(n){var t,e;if(e=null,t=!1,cL(n,204)&&(t=!0,e=BB(n,204).a),t||cL(n,258)&&(t=!0,e=""+BB(n,258).a),t||cL(n,483)&&(t=!0,e=""+BB(n,483).a),!t)throw Hp(new Ly(H6n));return e}function kPn(n,t){var e,i;if(n.f){for(;t.Ob();)if(cL(i=(e=BB(t.Pb(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Ub(),!0;return!1}return t.Ob()}function jPn(n,t){var e,i;if(n.f){for(;t.Sb();)if(cL(i=(e=BB(t.Ub(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Pb(),!0;return!1}return t.Sb()}function EPn(n,t,e){var i,r,c,a,u,o;for(o=axn(n.e.Tg(),t),i=0,u=n.i,r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())){if(e==i)return a;++i,u=a+1}if(e==i)return u;throw Hp(new Ay(e9n+e+o8n+i))}function TPn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new bA,i=new Wb(n.f);i.a<i.c.c.length;)r=BB(n0(i),70).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function MPn(n,t,e){var i,r,c;for(r=new oz(ZL(hbn(e).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||!b5(i)&&i.c.i.c==i.d.i.c||(c=zLn(n,i,e,new um)).c.length>1&&(t.c[t.c.length]=c)}function SPn(n){var t,e,i;for(Frn(e=new YT,n.o),i=new om;0!=e.b;)WUn(n,t=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),508),!0)&&WB(i.a,t);for(;0!=i.a.c.length;)WUn(n,t=BB(thn(i),508),!1)}function PPn(){PPn=O,kMt=new $C(hJn,0),wMt=new $C("BOOLEAN",1),vMt=new $C("INT",2),yMt=new $C("STRING",3),dMt=new $C("DOUBLE",4),gMt=new $C("ENUM",5),pMt=new $C("ENUMSET",6),mMt=new $C("OBJECT",7)}function CPn(n,t){var i,r,c,a,u;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(u=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=u,u=i),xH(n,r,a,c-r,u-a)}function IPn(){IPn=O,J$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,d7n,g7n,p7n,v7n,m7n,n8n]),Y$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"empty",d7n,K9n,"elementOnly"]),nLt=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"preserve","replace",y7n]),Z$t=new SH}function OPn(n,t,e){var i,r,c;if(t!=e){i=t;do{UR(n,i.c),(r=i.e)&&(_x(n,(c=i.d).b,c.d),UR(n,r.n),i=vW(r))}while(r);i=e;do{XR(n,i.c),(r=i.e)&&(Bx(n,(c=i.d).b,c.d),XR(n,r.n),i=vW(r))}while(r)}}function APn(n,t,e,i){var r,c,a,u,o;if(i.f.c+i.g.c==0)for(u=0,o=(a=n.a[n.c]).length;u<o;++u)VW(i,c=a[u],new kcn(n,c,e));return(r=BB(qI(AY(i.f,t)),663)).b=0,r.c=r.f,0==r.c||Tb(BB(xq(r.a,r.b),287)),r}function $Pn(){$Pn=O,Zst=new jP("MEDIAN_LAYER",0),tht=new jP("TAIL_LAYER",1),Jst=new jP("HEAD_LAYER",2),nht=new jP("SPACE_EFFICIENT_LAYER",3),eht=new jP("WIDEST_LAYER",4),Yst=new jP("CENTER_LAYER",5)}function LPn(n){switch(n.g){case 0:case 1:case 2:return kUn(),sIt;case 3:case 4:case 5:return kUn(),SIt;case 6:case 7:case 8:return kUn(),CIt;case 9:case 10:case 11:return kUn(),oIt;default:return kUn(),PIt}}function NPn(n,t){var e;return 0!=n.c.length&&(e=tdn((l1(0,n.c.length),BB(n.c[0],17)).c.i),BZ(),e==(bvn(),fvt)||e==hvt||o5($V(new Rq(null,new w1(n,16)),new Fc),new ig(t)))}function xPn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new P6),DH(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=BB(c.Pb(),188)).b!=t&&xPn(n,r.b,i),r.c!=t&&xPn(n,r.c,i),DH(i.a,r);return i}return null}function DPn(){DPn=O,Qyt=new lC("ROOT_PROC",0),Uyt=new lC("FAN_PROC",1),Wyt=new lC("NEIGHBORS_PROC",2),Xyt=new lC("LEVEL_HEIGHT",3),Vyt=new lC("NODE_POSITION_PROC",4),zyt=new lC("DETREEIFYING_PROC",5)}function RPn(n,t){if(cL(t,239))return zA(n,BB(t,33));if(cL(t,186))return UA(n,BB(t,118));if(cL(t,439))return GA(n,BB(t,202));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function KPn(n,t,e){var i,r;if(this.f=n,w6(e,r=(i=BB(RX(n.b,t),283))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)TZ(this);else for(this.c=i?i.b:null;e-- >0;)EZ(this);this.b=t,this.a=null}function _Pn(n,t){var e,i;t.a?zNn(n,t):(!!(e=BB(kK(n.b,t.b),57))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=BB(yK(n.b,t.b),57))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),MN(n.b,t.b))}function FPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((mdn(),_It))&&yRn(n,t),i=Xpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.a=i}function BPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((mdn(),_It))&&kRn(n,t),i=Wpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.b=i}function HPn(n,t){var e,i,r,c;for(c=new Np,i=new Wb(t);i.a<i.c.c.length;)WB(c,new RS(e=BB(n0(i),65),!0)),WB(c,new RS(e,!1));my((r=new hY(n)).a.a),e2(c,n.b,new Jy(Pun(Gk(oit,1),HWn,679,0,[r])))}function qPn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;return u=n.a,f=n.b,o=t.a,l=t.b,s=e.a,b=e.b,new xC(((c=u*l-f*o)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(u-o))/(r=(u-o)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function GPn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new oz(ZL(lbn(t).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||(r=e.d.i,n.a[r.p]?WB(n.b,e):GPn(n,r));n.a[t.p]=!1}}function zPn(n,t,e){var i;switch(i=0,BB(mMn(t,(HXn(),kgt)),163).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return Lx(t,(hWn(),wlt))&&(i+=BB(mMn(t,wlt),19).a),i}function UPn(n,t,e){var i,r,c;for(e.zc(t,n),WB(n.n,t),c=n.p.eg(t),t.j==n.p.fg()?Obn(n.e,c):Obn(n.j,c),rX(n),r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(r);)i=BB(U5(r),11),e._b(i)||UPn(n,i,e)}function XPn(n){var t,e;return BB(ZAn(n,(sWn(),KSt)),21).Hc((mdn(),DIt))?(e=BB(ZAn(n,qSt),21),t=new wA(BB(ZAn(n,BSt),8)),e.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new Gj}function WPn(n){var t,e,i;if(!n.b){for(i=new Co,e=new ax(RBn(n));e.e!=e.i.gc();)0!=((t=BB(jpn(e),18)).Bb&h6n)&&f9(i,t);chn(i),n.b=new NO((BB(Wtn(QQ((QX(),t$t).o),8),18),i.i),i.g),P5(n).b&=-9}return n.b}function VPn(n,t){var e,i,r,c,a,u;a=BB(Emn(gz(t.k),x8(FIt,YZn,61,2,0,1)),122),Zmn(n,u=t.g,e=o3(t,a[0]),i=u3(t,a[1]))<=Zmn(n,u,r=o3(t,a[1]),c=u3(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function QPn(n,t,e){var i,r,c;for(OTn(e,"Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&LDn(n,new bg(r),e),HSn(e)}function YPn(n){var t,e,i,r;return RHn(),t=-1==(i=GO(n,YTn(35)))?n:n.substr(0,i),e=-1==i?null:n.substr(i+1),(r=V3(EAt,t))?null!=e&&(r=Csn(r,(kW(e),e))):(r=WXn(t),a5(EAt,t,r),null!=e&&(r=Csn(r,e))),r}function JPn(n){var t,e,i,r,c,a,u;if(SQ(),cL(n,54))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n._c(c,n.Xb(r)),n._c(r,t);else for(e=n.Yc(),a=n.Zc(n.gc());e.Tb()<a.Vb();)i=e.Pb(),u=a.Ub(),e.Wb(u),a.Wb(i)}function ZPn(n,t){var e,i,r;OTn(t,"End label pre-processing",1),e=Gy(MD(mMn(n,(HXn(),jpt)))),i=Gy(MD(mMn(n,Spt))),r=gA(BB(mMn(n,Udt),103)),JT(wnn(new Rq(null,new w1(n.b,16)),new he),new D_(e,i,r)),HSn(t)}function nCn(n,t){var e,i,r,c,a,u;for(u=0,d3(c=new Lp,t);c.b!=c.c;)for(u+=syn((a=BB(dU(c),214)).d,a.e),r=new Wb(a.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(u+=nCn(n,e));return u}function tCn(n,t,i){var r,c;_an(this),t==(dJ(),Lyt)?TU(this.r,n.c):TU(this.w,n.c),TU(i==Lyt?this.r:this.w,n.d),tPn(this,n),XMn(this,r=Phn(n.c),c=Phn(n.d),c),this.o=(gxn(),e.Math.abs(r-c)<.2)}function eCn(n,t,e){var i,r,c,a,u;if(null!=(a=BB(yan(n.a,8),1936)))for(r=0,c=a.length;r<c;++r)null.jm();i=e,0==(1&n.a.Db)&&(u=new uW(n,e,t),i.ui(u)),cL(i,672)?BB(i,672).wi(n.a):i.ti()==n.a&&i.vi(null)}function iCn(){var n;return ZLt?BB($$n((WM(),zAt),S7n),1945):(sUn(),n=BB(cL(SJ((WM(),zAt),S7n),586)?SJ(zAt,S7n):new zW,586),ZLt=!0,gXn(n),pWn(n),VW((VM(),ZAt),n,new Ks),Tyn(n),mZ(zAt,S7n,n),n)}function rCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function cCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function aCn(n){var t,e,i;for(_$n(n),i=new Np,e=new Wb(n.a.a.b);e.a<e.c.c.length;)WB(i,new fP(t=BB(n0(e),81),!0)),WB(i,new fP(t,!1));nmn(n.c),i2(i,n.b,new Jy(Pun(Gk(Jat,1),HWn,369,0,[n.c]))),vAn(n)}function uCn(n){var t,e,i,r;for(e=new xp,r=new Wb(n.d);r.a<r.c.c.length;)i=BB(n0(r),181),t=BB(i.We((hWn(),Uft)),17),AY(e.f,t)||VW(e,t,new TQ(t)),WB(BB(qI(AY(e.f,t)),456).b,i);return new t_(new Ob(e))}function oCn(n,t){var e,i,r,c,a;for(i=new d1(n.j.c.length),e=null,c=new Wb(n.j);c.a<c.c.c.length;)(r=BB(n0(c),11)).j!=e&&(i.b==i.c||F$n(i,e,t),o4(i),e=r.j),(a=mAn(r))&&w3(i,a);i.b==i.c||F$n(i,e,t)}function sCn(n,t){var e,i;for(i=new M2(n.b,0);i.b<i.d.gc();)Px(i.b<i.d.gc()),e=BB(i.d.Xb(i.c=i.b++),70),BB(mMn(e,(HXn(),Ydt)),272)==(Rtn(),UPt)&&(fW(i),WB(t.b,e),Lx(e,(hWn(),Uft))||hon(e,Uft,n))}function hCn(n){var t,i,r;for(t=F3(new oz(ZL(lbn(n).a.Kc(),new h))),i=new oz(ZL(fbn(n).a.Kc(),new h));dAn(i);)r=F3(new oz(ZL(lbn(BB(U5(i),17).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return iln(t)}function fCn(n,t,e){var i,r,c,a;for(OTn(e,"Processor arrange node",1),r=null,c=new YT,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(r=a);r5(c,r,c.c.b,c.c),Yzn(n,c,mcn(e,1)),HSn(e)}function lCn(n,t,e){var i,r,c;i=BB(ZAn(n,(sWn(),hSt)),21),r=0,c=0,t.a>e.a&&(i.Hc((wEn(),WMt))?r=(t.a-e.a)/2:i.Hc(QMt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((wEn(),JMt))?c=(t.b-e.b)/2:i.Hc(YMt)&&(c=t.b-e.b)),lMn(n,r,c)}function bCn(n,t,e,i,r,c,a,u,o,s,h,f,l){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=a,$ln(n,u),Nln(n,o),Aln(n,s),Lln(n,h),nln(n,f),qln(n,l),Yfn(n,!0),Len(n,r),n.ok(c),Ihn(n,t),null!=i&&(n.i=null,arn(n,i))}function wCn(n){var t,e;if(n.f){for(;n.n>0;){if(cL(e=(t=BB(n.k.Xb(n.n-1),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;--n.n}return!1}return n.n>0}function dCn(n,t,e){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,[e,iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must not be greater than size (%s)",Pun(Gk(Ant,1),HWn,1,5,[e,iln(n),iln(t)]))}function gCn(n,t,e,i,r,c){var a,u,o;if(i-e<7)$bn(t,e,i,c);else if(gCn(t,n,u=e+r,o=u+((a=i+r)-u>>1),-r,c),gCn(t,n,o,a,-r,c),c.ue(n[o-1],n[o])<=0)for(;e<i;)$X(t,e++,n[u++]);else Gfn(n,u,o,a,t,e,i,c)}function pCn(n,t){var e,i,r;for(r=new Np,i=new Wb(n.c.a.b);i.a<i.c.c.length;)e=BB(n0(i),57),t.Lb(e)&&(WB(r,new OS(e,!0)),WB(r,new OS(e,!1)));Zvn(n.e),e2(r,n.d,new Jy(Pun(Gk(oit,1),HWn,679,0,[n.e])))}function vCn(n,t){var e,i,r,c,a,u,o;for(o=t.d,r=t.b.j,u=new Wb(o);u.a<u.c.c.length;)for(a=BB(n0(u),101),c=x8($Nt,ZYn,25,r.c.length,16,1),VW(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function mCn(n,t){for(n.r=new Fan(n.p),Jl(n.r,n),Frn(n.r.j,n.j),yQ(n.j),DH(n.j,t),DH(n.r.e,t),rX(n),rX(n.r);0!=n.f.c.length;)G$(BB(xq(n.f,0),129));for(;0!=n.k.c.length;)G$(BB(xq(n.k,0),129));return n.r}function yCn(n,t,e){var i,r,c;if(r=itn(n.Tg(),t),(i=t-n.Ah())<0){if(!r)throw Hp(new _y(o6n+t+s6n));if(!r.Ij())throw Hp(new _y(r6n+r.ne()+c6n));(c=n.Yg(r))>=0?n.sh(c,e):TLn(n,r,e)}else Lbn(n,i,r,e)}function kCn(n){var t,e,i,r;if(e=BB(n,49).qh())try{if(i=null,(t=$$n((WM(),zAt),M_n(_bn(e))))&&(r=t.rh())&&(i=r.Wk(Xy(e.e))),i&&i!=n)return kCn(i)}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}return n}function jCn(n,t,e){var i,r,c,a;if(a=null==t?0:n.b.se(t),0==(r=null==(i=n.a.get(a))?new Array:i).length)n.a.set(a,r);else if(c=hhn(n,t,r))return c.ed(e);return $X(r,r.length,new PS(t,e)),++n.c,oY(n.b),null}function ECn(n,t){var e;return h2(n.a),CU(n.a,(Prn(),Qkt),Qkt),CU(n.a,Ykt,Ykt),dq(e=new B2,Ykt,(Cbn(),ejt)),GI(ZAn(t,(Uyn(),Sjt)))!==GI((Hsn(),sjt))&&dq(e,Ykt,njt),dq(e,Ykt,tjt),aA(n.a,e),$qn(n.a,t)}function TCn(n){if(!n)return lk(),htt;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=ftt[typeof t];return i?i(t):khn(typeof t)}return n instanceof Array||n instanceof e.Array?new Tl(n):new Pl(n)}function MCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}_Fn(r),GFn(r)}function SCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}_Fn(r),GFn(r)}function PCn(n,t){var e,i,r,c,a;if(!t.dc())if(r=BB(t.Xb(0),128),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=vyn(t,e))&&(i=BB(c.a,19).a,kxn(n,r,a=BB(c.b,128),e,i,t),e=i+1,r=a);else kxn(n,r,r,1,0,t)}function CCn(n){var t,e,i,r;for(m$(r=new t_(n.d),new zr),kDn(),t=Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst]),e=0,i=new Wb(r);i.a<i.c.c.length;)COn(BB(n0(i),101),t[e%t.length]),++e}function ICn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(r=BB(b3(c),8),!Dcn(n,i)||!Dcn(n,r))return!1;i=r}return!(!Dcn(n,i)||!Dcn(n,e))}function OCn(n,t){var e,i,r,c,a;return e=Ren(a=n,"x"),nnn(new qg(t).a,e),i=Ren(a,"y"),tnn(new Gg(t).a,i),r=Ren(a,C6n),enn(new zg(t).a,r),c=Ren(a,P6n),inn(new Ug(t).a,c),c}function ACn(n,t){dRn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function $Cn(n,t){var e,i;if(i=0,t.length>0)try{i=l_n(t,_Vn,DWn)}catch(r){throw cL(r=lun(r),127)?Hp(new L7(r)):Hp(r)}return!n.a&&(n.a=new Sp(n)),i<(e=n.a).i&&i>=0?BB(Wtn(e,i),56):null}function LCn(n,t){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,["index",iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must be less than size (%s)",Pun(Gk(Ant,1),HWn,1,5,["index",iln(n),iln(t)]))}function NCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function xCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function DCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function RCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function KCn(n,t){var e,i,r,c,a,u;for(e=n.b.c.length,r=xq(n.b,t);2*t+1<e&&(u=c=2*t+1,(a=c+1)<e&&n.a.ue(xq(n.b,a),xq(n.b,c))<0&&(u=a),i=u,!(n.a.ue(r,xq(n.b,i))<0));)c5(n.b,t,xq(n.b,i)),t=i;c5(n.b,t,r)}function _Cn(n,t,i,r,c,a){var u,o,s,h,f;for(GI(n)===GI(i)&&(n=n.slice(t,t+c),t=0),s=i,o=t,h=t+c;o<h;)c=(u=e.Math.min(o+1e4,h))-o,(f=n.slice(o,u)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),o=u,r+=c}function FCn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function BCn(n){var t,e,i,r,c,a,u;if((i=n.a.c.length)>0)for(a=n.c.d,r=kL(XR(new xC((u=n.d.d).a,u.b),a),1/(i+1)),c=new xC(a.a,a.b),e=new Wb(n.a);e.a<e.c.c.length;)(t=BB(n0(e),559)).d.a=c.a,t.d.b=c.b,UR(c,r)}function HCn(n,t,i){var r,c,a,u,o,s;for(s=RQn,a=new Wb(GLn(n.b));a.a<a.c.c.length;)for(c=BB(n0(a),168),o=new Wb(GLn(t.b));o.a<o.c.c.length;)u=BB(n0(o),168),r=Cun(c.a,c.b,u.a,u.b,i),s=e.Math.min(s,r);return s}function qCn(n,t){if(!t)throw Hp(new gv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function GCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function zCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function UCn(n){var t,e,i,r;for(r=Lfn(n.d,n.e).Kc();r.Ob();)for(i=BB(r.Pb(),11),e=new Wb(n.e==(kUn(),CIt)?i.e:i.g);e.a<e.c.c.length;)b5(t=BB(n0(e),17))||t.c.i.c==t.d.i.c||(RSn(n,t),++n.f,++n.c)}function XCn(n,t){var e,i;if(t.dc())return SQ(),SQ(),set;for(WB(i=new Np,iln(_Vn)),e=1;e<n.f;++e)null==n.a&&wRn(n),n.a[e]&&WB(i,iln(e));return 1==i.c.length?(SQ(),SQ(),set):(WB(i,iln(DWn)),dBn(t,i))}function WCn(n,t){var e,i,r,c,a,u;e=ckn(t,u=t.c.i.k!=(uSn(),Cut)?t.d:t.c).i,r=BB(RX(n.k,u),121),i=n.i[e.p].a,AK(u.i)<(e.c?E7(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),UNn(aM(cM(uM(rM(new Hv,0),4),c),a))}function VCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.b&&(t.b=new hK(KOt,t,4,7)),f9(t.b,c))}function QCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.c&&(t.c=new hK(KOt,t,5,8)),f9(t.c,c))}function YCn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function JCn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=uO(oO(new Ck,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)uO((i.a+=FWn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",Hp(new _y(i.a))}function ZCn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=BB(RX(n.b,t.a),283)).a,t.e?t.e.c=t.c:e.b=t.c,t.c?t.c.e=t.e:e.c=t.e):((e=BB(v6(n.b,t.a),283)).a=0,++n.c),--n.d}function nIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[3]=t[3]+(e%60/10|0)&QVn,t[4]=t[4]+e%10&QVn,Bdn(t,0,t.length)}function tIn(n,t,e){var i,r;for(i=t.d,r=e.d;i.a-r.a==0&&i.b-r.b==0;)i.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,i.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5}function eIn(n){var t,e,i,r;for(n.g=new Hbn(BB(yX(FIt),290)),i=0,kUn(),e=sIt,t=0;t<n.j.c.length;t++)(r=BB(xq(n.j,t),11)).j!=e&&(i!=t&&mG(n.g,e,new rI(iln(i),iln(t))),e=r.j,i=t);mG(n.g,e,new rI(iln(i),iln(t)))}function iIn(n){var t,e,i,r,c;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)for(r=new Wb(BB(n0(t),29).a);r.a<r.c.c.length;)for((i=BB(n0(r),10)).p=e++,c=new Wb(i.j);c.a<c.c.c.length;)BB(n0(c),11).p=e++}function rIn(n,t,e,i,r){var c,a,u,o;if(t)for(a=t.Kc();a.Ob();)for(o=cRn(BB(a.Pb(),10),(ain(),qvt),e).Kc();o.Ob();)u=BB(o.Pb(),11),(c=BB(qI(AY(r.f,u)),112))||(c=new Fan(n.d),i.c[i.c.length]=c,UPn(c,u,r))}function cIn(n,t){var e,i,r;if(!(r=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ol(t)}function aIn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=CJ(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):Van(fan(n))}function uIn(n){var t,e,i,r,c,a,u;for(c=new fA,e=new Wb(n);e.a<e.c.c.length;)a=(t=BB(n0(e),129)).a,u=t.b,c.a._b(a)||c.a._b(u)||(r=a,i=u,a.e.b+a.j.b>2&&u.e.b+u.j.b<=2&&(r=u,i=a),c.a.zc(r,c),r.q=i);return c}function oIn(n,t){var e,i,r;return qan(i=new $vn(n),t),hon(i,(hWn(),Vft),t),hon(i,(HXn(),ept),(QEn(),XCt)),hon(i,kdt,(wvn(),OMt)),Bl(i,(uSn(),Mut)),CZ(e=new CSn,i),qCn(e,(kUn(),CIt)),CZ(r=new CSn,i),qCn(r,oIt),i}function sIn(n){switch(n.g){case 0:return new Ny((oin(),Omt));case 1:return new df;case 2:return new jf;default:throw Hp(new _y("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function hIn(n,t){var e,i,r,c;for(n.c[t.p]=!0,WB(n.a,t),c=new Wb(t.j);c.a<c.c.c.length;)for(e=new m6((r=BB(n0(c),11)).b);y$(e.a)||y$(e.b);)i=ngn(r,BB(y$(e.a)?n0(e.a):n0(e.b),17)).i,n.c[i.p]||hIn(n,i)}function fIn(n){var t,i,r,c,a,u,o;for(u=0,i=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));i.e!=i.i.gc();)o=(t=BB(kpn(i),33)).g,c=t.f,r=e.Math.sqrt(o*o+c*c),u=e.Math.max(r,u),a=fIn(t),u=e.Math.max(a,u);return u}function lIn(){lIn=O,rIt=new XC("OUTSIDE",0),eIt=new XC("INSIDE",1),iIt=new XC("NEXT_TO_PORT_IF_POSSIBLE",2),tIt=new XC("ALWAYS_SAME_SIDE",3),nIt=new XC("ALWAYS_OTHER_SAME_SIDE",4),cIt=new XC("SPACE_EFFICIENT",5)}function bIn(n,t,e){var i,r,c,a;return $in(i=K2(n,(tE(),r=new jm,!!e&&nNn(r,e),r),t),R2(t,q6n)),STn(t,i),o$n(t,i),OCn(t,i),c=N2(t,"ports"),PLn((a=new pI(n,i)).a,a.b,c),xon(n,t,i),aun(n,t,i),i}function wIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[4]=t[4]+(e%60/10|0)&QVn,t[5]=t[5]+e%10&QVn,Bdn(t,0,t.length)}function dIn(n){var t;return t=Pun(Gk(ONt,1),WVn,25,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&QVn,t[5]=t[5]+(n/60|0)%10&QVn,t[7]=t[7]+(n%60/10|0)&QVn,t[8]=t[8]+n%10&QVn,Bdn(t,0,t.length)}function gIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+vz(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function pIn(n,t){var i,r,c;for(c=DWn,r=new Wb(kbn(t));r.a<r.c.c.length;)(i=BB(n0(r),213)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,pIn(n,Nbn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function vIn(n,t){var e,i,r;for(r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.b=(e=i.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),sIt)?-e.rf().b-Gy(MD(e.We(aPt))):Gy(MD(e.We(aPt))):e.Hf()==(kUn(),sIt)?-e.rf().b:0}function mIn(n){var t,e,i,r,c,a,u;for(e=QA(n.e),c=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,u=0;u<n.c;u++){for(i=t,a=0;a<n.d;a++)Wbn(n.e,new UV(i,r,n.a,n.b))&&FRn(n,a,u,!1,!0),i+=n.a;r+=n.b}}function yIn(n){var t,e,i;if(qy(TD(ZAn(n,(sWn(),SSt))))){for(i=new Np,e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,PSt)))&&(i.c[i.c.length]=t);return i}return SQ(),SQ(),set}function kIn(n){var t;if(t=!1,cL(n,204))return t=!0,BB(n,204).a;if(!t&&cL(n,258)&&BB(n,258).a%1==0)return t=!0,iln(QO(BB(n,258).a));throw Hp(new ek("Id must be a string or an integer: '"+n+"'."))}function jIn(n,t){var e,i,r,c,a,u;for(c=null,r=new rU((!n.a&&(n.a=new Sp(n)),n.a));bOn(r);)if(YBn(a=(e=BB(aLn(r),56)).Tg()),null!=(i=(u=a.o)&&e.mh(u)?pK(uun(u),e.ah(u)):null)&&mK(i,t)){c=e;break}return c}function EIn(n,t,e){var i,r,c,a,u;if(lin(e,"occurrences"),0==e)return(u=BB(lfn(OQ(n.a),t),14))?u.gc():0;if(!(a=BB(lfn(OQ(n.a),t),14)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function TIn(n,t,e){var i,r,c;return lin(e,"oldCount"),lin(0,"newCount"),((i=BB(lfn(OQ(n.a),t),14))?i.gc():0)==e&&(lin(0,"count"),(c=-((r=BB(lfn(OQ(n.a),t),14))?r.gc():0))>0?wk():c<0&&EIn(n,t,-c),!0)}function MIn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=Xvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=Kk(ecn(LV(AV(LU(n.a),new Mn),new Sn)));return a>0?a+n.n.d+n.n.a:0}function SIn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=Kk(ecn(LV(AV(LU(n.a),new En),new Tn)));else{for(t=0,r=0,c=(i=Wvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function PIn(n,t){var i,r,c,a;for(i=(a=BB(oV(n.b,t),124)).a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).c&&(i.a=e.Math.max(i.a,VH(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function CIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(fRn(),Zct)),19).a-BB(mMn(n,Zct),19).a)?(i=XR(B$(BB(mMn(n,(Mrn(),uat)),8)),BB(mMn(n,oat),8)),r=XR(B$(BB(mMn(t,uat),8)),BB(mMn(t,oat),8)),Pln(i.a*i.b,r.a*r.b)):e}function IIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(CAn(),$kt)),19).a-BB(mMn(n,$kt),19).a)?(i=XR(B$(BB(mMn(n,(qqn(),Zyt)),8)),BB(mMn(n,nkt),8)),r=XR(B$(BB(mMn(t,Zyt),8)),BB(mMn(t,nkt),8)),Pln(i.a*i.b,r.a*r.b)):e}function OIn(n){var t,e;return(e=new Ck).a+="e_",null!=(t=Xan(n))&&(e.a+=""+t),n.c&&n.d&&(oO((e.a+=" ",e),pyn(n.c)),oO(uO((e.a+="[",e),n.c.i),"]"),oO((e.a+=e1n,e),pyn(n.d)),oO(uO((e.a+="[",e),n.d.i),"]")),e.a}function AIn(n){switch(n.g){case 0:return new pf;case 1:return new vf;case 2:return new gf;case 3:return new mf;default:throw Hp(new _y("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function $In(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function LIn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)r=x2(e,BB(c.Pb(),19).a),L6n in r.a||N6n in r.a?sKn(n,r,t):EXn(n,r,t),PL(BB(RX(n.b,Qdn(r)),79))}function NIn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=Ikn(n))&&(ZM(),t.Cj()==E9n)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function xIn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 2:case 3:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function DIn(n,t){var e,i,r,c;if(QXn(n),0!=n.c||123!=n.a)throw Hp(new ak(kWn((u$(),P8n))));if(c=112==t,i=n.d,(e=lx(n.i,125,i))<0)throw Hp(new ak(kWn((u$(),C8n))));return r=fx(n.i,i,e),n.d=e+1,b9(r,c,512==(512&n.e))}function RIn(n){var t;if((t=BB(mMn(n,(HXn(),qdt)),314))==(Oin(),hht))throw Hp(new ck("The hierarchy aware processor "+t+" in child node "+n+" is only allowed if the root node specifies the same hierarchical processor."))}function KIn(n,t){var e,i,r,c;for(G_(),e=null,r=t.Kc();r.Ob();)(i=BB(r.Pb(),128)).o||(WB((c=new PBn(F$(i.a),bH(i.a),null,BB(i.d.a.ec().Kc().Pb(),17))).c,i.a),n.c[n.c.length]=c,e&&WB(e.d,c),e=c)}function _In(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){Hin(n,r=Uy((ED(e),e.o+i))),xen(n,r);break}i+="[]"}else Hin(n,r=Uy((ED(t),t.o))),xen(n,r);else Hin(n,null),xen(n,null);n.yk(t)}function FIn(n,t,e,i,r){var c,a,u,o;return GI(o=hD(n,BB(r,56)))!==GI(r)?(u=BB(n.g[e],72),jL(n,e,sTn(n,e,c=Z3(t,o))),mA(n.e)&&(KEn(a=LY(n,9,c.ak(),r,o,i,!1),new N7(n.e,9,n.c,u,c,i,!1)),$7(a)),o):r}function BIn(n,t,e){var i,r,c,a,u,o;for(i=BB(h6(n.c,t),15),r=BB(h6(n.c,e),15),c=i.Zc(i.gc()),a=r.Zc(r.gc());c.Sb()&&a.Sb();)if((u=BB(c.Ub(),19))!=(o=BB(a.Ub(),19)))return E$(u.a,o.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function HIn(n,t){var e,i;try{return X1(n.a,t)}catch(r){if(cL(r=lun(r),32)){try{if(i=l_n(t,_Vn,DWn),e=Vj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!cL(c=lun(c),127))throw Hp(c)}return null}throw Hp(r)}}function qIn(n,t){var e,i,r;if(r=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ll(t);throw Hp(new _y(r6n+t.ne()+u6n))}function GIn(){var n;return tS(),Q$t?BB($$n((WM(),zAt),V9n),1939):(RO(Hnt,new Cs),nzn(),n=BB(cL(SJ((WM(),zAt),V9n),547)?SJ(zAt,V9n):new UW,547),Q$t=!0,oWn(n),TWn(n),VW((VM(),ZAt),n,new Go),mZ(zAt,V9n,n),n)}function zIn(n,t){var e,i,r,c;n.j=-1,mA(n.e)?(e=n.i,c=0!=n.i,c6(n,t),i=new N7(n.e,3,n.c,null,t,e,c),r=t.Qk(n.e,n.c,null),(r=IEn(n,t,r))?(r.Ei(i),r.Fi()):ban(n.e,i)):(c6(n,t),(r=t.Qk(n.e,n.c,null))&&r.Fi())}function UIn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(b1(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)b1(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function XIn(n){var t,i,r,c,a;return i=c=BB(n.a,19).a,r=a=BB(n.b,19).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new rI(iln(i),iln(r))}function WIn(n,t,e,i){var r,c,a,u,o,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(o=c,s=u=a-t.k+i,o+=n.j,s+=n.k,o>=0&&s>=0&&o<n.o&&s<n.p&&(!mmn(t,r,a)&&imn(n,c,u)||vmn(t,r,a)&&!rmn(n,c,u)))return!0;return!1}function VIn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Aon(Pun(Gk(PMt,1),sVn,8,0,[c.i.n,c.n,c.a])).b+Aon(Pun(Gk(PMt,1),sVn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(kUn(),oIt)?new xC(t+c.i.c.c.a+e,r):new xC(t-e,r),Kx(n.a,0,i)}function QIn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=i)return!1}else t=i;return!0}function YIn(n,t,e){var i;if(++n.j,t>=n.i)throw Hp(new Ay(u8n+t+o8n+n.i));if(e>=n.i)throw Hp(new Ay(s8n+e+o8n+n.i));return i=n.g[e],t!=e&&(t<e?aHn(n.g,t,n.g,t+1,e-t):aHn(n.g,e+1,n.g,e,t-e),$X(n.g,t,i),n.ei(t,i,e),n.ci()),i}function JIn(n,t,e){var i;if(i=BB(n.c.xc(t),14))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw Hp(new g5("New Collection violated the Collection spec"))}function ZIn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-_Qn)>>16&4,(e+=t=(i=(n<<=t)-hVn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function nOn(n){var t,e,i,r;for(MQ(),Sct=new Np,Mct=new xp,Tct=new Np,!n.a&&(n.a=new eU(UOt,n,10,11)),xUn(t=n.a),r=new AL(t);r.e!=r.i.gc();)i=BB(kpn(r),33),-1==E7(Sct,i,0)&&(e=new Np,WB(Tct,e),Rgn(i,e));return Tct}function tOn(n,t,e){var i,r,c,a;n.a=e.b.d,cL(t,352)?(e5(c=qSn(r=cDn(BB(t,79),!1,!1)),i=new Nw(n)),VFn(c,r),null!=t.We((sWn(),OSt))&&e5(BB(t.We(OSt),74),i)):((a=BB(t,470)).Hg(a.Dg()+n.a.a),a.Ig(a.Eg()+n.a.b))}function eOn(n,t){var i,r,c,a,u,o,s,h;for(h=Gy(MD(mMn(t,(HXn(),Npt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,o=1;o<n.length;o++)r=n[o].n,c=n[o].o,i=n[o].d,(a=r.a-i.b-s)<0&&(r.a-=a),(u=t.f).a=e.Math.max(u.a,r.a+c.a),s=r.a+c.a+i.c+h}function iOn(n,t){var e,i,r,c,a,u;return i=BB(BB(RX(n.g,t.a),46).a,65),r=BB(BB(RX(n.g,t.b),46).a,65),(e=nqn(c=i.b,a=r.b))>=0?e:(u=lW(XR(new xC(a.c+a.b/2,a.d+a.a/2),new xC(c.c+c.b/2,c.d+c.a/2))),-(Y_n(c,a)-1)*u)}function rOn(n,t,e){var i;JT(new Rq(null,(!e.a&&(e.a=new eU(FOt,e,6,6)),new w1(e.a,16))),new eI(n,t)),JT(new Rq(null,(!e.n&&(e.n=new eU(zOt,e,1,7)),new w1(e.n,16))),new iI(n,t)),(i=BB(ZAn(e,(sWn(),OSt)),74))&&Yrn(i,n,t)}function cOn(n,t,e){var i,r,c;if(c=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(c,66).Oj()||(c=Z1(B7(Z$t,c))),r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).hl(t,e);throw Hp(new _y(r6n+t.ne()+u6n))}function aOn(n,t,e,i){var r,c,a,u,o;if(r=n.d[t])if(c=r.g,o=r.i,null!=i){for(u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return a}else for(u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return a;return null}function uOn(n,t){var e;if(t<0)throw Hp(new Oy("Negative exponent"));if(0==t)return Jtt;if(1==t||swn(n,Jtt)||swn(n,eet))return n;if(!fAn(n,0)){for(e=1;!fAn(n,e);)++e;return Nnn(vwn(e*t),uOn(z5(n,e),t))}return mTn(n,t)}function oOn(n,t){var e,i,r;if(GI(n)===GI(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(GI(i)===GI(r)||null!=i&&Nfn(i,r)))return!1;return!0}function sOn(n){var t,e,i;for(kM(),this.b=Vat,this.c=(Ffn(),BPt),this.f=(yM(),zat),this.a=n,tj(this,new Ct),kNn(this),i=new Wb(n.b);i.a<i.c.c.length;)(e=BB(n0(i),81)).d||(t=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[e])),WB(n.a,t))}function hOn(n,t,e){var i,r,c,a,u,o;if(!n||0==n.c.length)return null;for(c=new KY(t,!e),r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),70),USn(c,(gM(),new Bw(i)));return(a=c.i).a=(o=c.n,c.e.b+o.d+o.a),a.b=(u=c.n,c.e.a+u.b+u.c),c}function fOn(n){var t,e,i,r,c,a,u;for(hA(u=n2(n.a),new Pe),e=null,c=0,a=(r=u).length;c<a&&(i=r[c]).k==(uSn(),Mut);++c)(t=BB(mMn(i,(hWn(),Qft)),61))!=(kUn(),CIt)&&t!=oIt||(e&&BB(mMn(e,clt),15).Fc(i),e=i)}function lOn(n,t,e){var i,r,c,a,u,o;l1(t,n.c.length),u=BB(n.c[t],329),s6(n,t),u.b/2>=e&&(i=t,c=(o=(u.c+u.a)/2)-e,u.c<=o-e&&kG(n,i++,new kB(u.c,c)),(a=o+e)<=u.a&&(r=new kB(a,u.a),LZ(i,n.c.length),MS(n.c,i,r)))}function bOn(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=BB(n.g[n.i-1],47)}else n.d=n.si(n.f),f9(n,n.d),t=n.d;return t==n.b&&null.km>=null.jm()?(aLn(n),bOn(n)):t.Ob()}function wOn(n,t,e){var i,r,c,a;if(!(a=e)&&(a=LH(new Xm,0)),OTn(a,qZn,1),$Gn(n.c,t),1==(c=RGn(n.a,t)).gc())VHn(BB(c.Xb(0),37),a);else for(r=1/c.gc(),i=c.Kc();i.Ob();)VHn(BB(i.Pb(),37),mcn(a,r));Ek(n.a,c,t),FDn(t),HSn(a)}function dOn(n){if(this.a=n,n.c.i.k==(uSn(),Mut))this.c=n.c,this.d=BB(mMn(n.c.i,(hWn(),Qft)),61);else{if(n.d.i.k!=Mut)throw Hp(new _y("Edge "+n+" is not an external edge."));this.c=n.d,this.d=BB(mMn(n.d.i,(hWn(),Qft)),61)}}function gOn(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,r,n.b)),t?t!=n&&(Nrn(n,t.zb),$en(n,t.d),Fin(n,null==(e=null==(i=t.c)?t.zb:i)||mK(e,t.zb)?null:e)):(Nrn(n,null),$en(n,0),Fin(n,null))}function pOn(n){var t,e;if(n.f){for(;n.n<n.o;){if(cL(e=(t=BB(n.j?n.j.pi(n.n):n.k.Xb(n.n),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;++n.n}return!1}return n.n<n.o}function vOn(n,t){var e;this.e=(WX(),yX(n),WX(),Nwn(n)),this.c=(yX(t),Nwn(t)),aN(this.e.Hd().dc()==this.c.Hd().dc()),this.d=vbn(this.e),this.b=vbn(this.c),e=kq(Ant,[sVn,HWn],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=e,din(this)}function mOn(n){var t=(!Znt&&(Znt=QUn()),Znt);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return IJ(n,t)}))+'"'}function yOn(n){var t,e;for(CQ(),this.b=hit,this.c=lit,this.g=(pM(),sit),this.d=(Ffn(),BPt),this.a=n,yNn(this),e=new Wb(n.b);e.a<e.c.c.length;)!(t=BB(n0(e),57)).a&&IN(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),n),t.e=new gY(t.d)}function kOn(n){var t,e,i,r,c;for(r=n.e.c.length,i=x8(Rnt,nZn,15,r,0,1),c=new Wb(n.e);c.a<c.c.c.length;)i[BB(n0(c),144).b]=new YT;for(e=new Wb(n.c);e.a<e.c.c.length;)i[(t=BB(n0(e),282)).c.b].Fc(t),i[t.d.b].Fc(t);return i}function jOn(n){var t,e,i,r,c,a;for(a=sx(n.c.length),r=new Wb(n);r.a<r.c.c.length;){for(i=BB(n0(r),10),c=new Rv,e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||TU(c,t.d.i);a.c[a.c.length]=c}return a}function EOn(n,t){var e,i,r,c,a;if(t>=(a=null==(e=BB(yan(n.a,4),126))?0:e.length))throw Hp(new tK(t,a));return r=e[t],1==a?i=null:(aHn(e,0,i=x8(dAt,i9n,415,a-1,0,1),0,t),(c=a-t-1)>0&&aHn(e,t+1,i,t,c)),Fgn(n,i),eCn(n,t,r),r}function TOn(){TOn=O,lLt=BB(Wtn(QQ((cE(),gLt).qb),6),34),sLt=BB(Wtn(QQ(gLt.qb),3),34),hLt=BB(Wtn(QQ(gLt.qb),4),34),fLt=BB(Wtn(QQ(gLt.qb),5),18),oEn(lLt),oEn(sLt),oEn(hLt),oEn(fLt),bLt=new Jy(Pun(Gk(FAt,1),N9n,170,0,[lLt,sLt]))}function MOn(n,t){var e;this.d=new lm,this.b=t,this.e=new wA(t.qf()),e=n.u.Hc((lIn(),iIt)),n.u.Hc(eIt)?n.D?this.a=e&&!t.If():this.a=!0:n.u.Hc(rIt)?this.a=!!e&&!(t.zf().Kc().Ob()||t.Bf().Kc().Ob()):this.a=!1}function SOn(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),CIt)?-i.rf().a-Gy(MD(i.We(aPt))):e+Gy(MD(i.We(aPt))):i.Hf()==(kUn(),CIt)?-i.rf().a:e}function POn(n,t){var e,i,r;e=BB(mMn(n,(HXn(),Udt)),103),r=BB(ZAn(t,upt),61),(i=BB(mMn(n,ept),98))!=(QEn(),QCt)&&i!=YCt?r==(kUn(),PIt)&&(r=OFn(t,e))==PIt&&(r=hwn(e)):r=XHn(t)>0?hwn(e):Tln(hwn(e)),Ypn(t,upt,r)}function COn(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&m$(a,new Ur),r=a.c.length/2|0,i=0;i<r;i++)l1(i,a.c.length),(c=BB(a.c[i],113)).c&&qCn(c.d,t.a);for(e=r;e<a.c.length;e++)l1(e,a.c.length),(c=BB(a.c[e],113)).c&&qCn(c.d,t.b)}function IOn(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Tz(i.a,r.a))<0?uKn(n,t,e):c>0&&uKn(n,e,t),c):null!=i.a?(uKn(n,t,e),-1):null!=r.a?(uKn(n,e,t),1):0}function OOn(n,t){var e,i,r,c;n.ej()?(e=n.Vi(),c=n.fj(),++n.j,n.Hi(e,n.oi(e,t)),i=n.Zi(3,null,t,e,c),n.bj()&&(r=n.cj(t,null))?(r.Ei(i),r.Fi()):n.$i(i)):(eW(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function AOn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),r=new go,e=BB(n.g,119),c=n.i;--c>=0;)i=e[c],a.rl(i.ak())&&f9(r,i);!aXn(n,r)&&mA(n.e)&&Lv(n,t.$j()?LY(n,6,t,(SQ(),set),null,-1,!1):LY(n,t.Kj()?2:1,t,null,null,-1,!1))}function $On(){var n,t;for($On=O,aet=x8(oet,sVn,91,32,0,1),uet=x8(oet,sVn,91,32,0,1),n=1,t=0;t<=18;t++)aet[t]=npn(n),uet[t]=npn(yz(n,t)),n=cbn(n,5);for(;t<uet.length;t++)aet[t]=Nnn(aet[t-1],aet[1]),uet[t]=Nnn(uet[t-1],(ODn(),net))}function LOn(n,t){var e,i,r,c;return n.a==(JMn(),cft)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function NOn(n,t){OTn(t,"Partition preprocessing",1),JT(BB(P4(AV(wnn(AV(new Rq(null,new w1(n.a,16)),new vi),new mi),new yi),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15).Oc(),new ki),HSn(t)}function xOn(n){var t,e,i,r,c,a;for(qZ(),e=new v4,i=new Wb(n.e.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)r=BB(n0(c),10),(t=BB(lnn(e,a=n.g[r.p]),15))||Jgn(e,a,t=new Np),t.Fc(r);return e}function DOn(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=x8(Rnt,nZn,15,r,0,1),n.b=x8($Nt,ZYn,25,r,16,1),a=spn(t.b,0);a.b!=a.d.c;)c=BB(b3(a),86),n.a[c.g]=new YT;for(i=spn(t.a,0);i.b!=i.d.c;)e=BB(b3(i),188),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function ROn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (startX: ",vE(t,n.j),t.a+=", startY: ",vE(t,n.k),t.a+=", endX: ",vE(t,n.b),t.a+=", endY: ",vE(t,n.c),t.a+=", identifier: ",cO(t,n.d),t.a+=")",t.a)}function KOn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (ordered: ",yE(t,0!=(256&n.Bb)),t.a+=", unique: ",yE(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",mE(t,n.s),t.a+=", upperBound: ",mE(t,n.t),t.a+=")",t.a)}function _On(n,t,e,i,r,c,a,u){var o;return cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=i,$ln(n,r),Nln(n,c),Aln(n,a),Lln(n,!1),nln(n,!0),qln(n,u),Yfn(n,!0),Len(n,0),n.b=0,Nen(n,1),(o=HTn(n,t,null))&&o.Fi(),Gln(n,!1),n}function FOn(n,t){var i,r;return BB(SJ(n.a,t),512)||(i=new y5(t),k5(),xK(i,FOn(n,fx(r=Qet?null:i.c,0,e.Math.max(0,mN(r,YTn(46)))))),0==(Qet?null:i.c).length&&zD(i,new X),mZ(n.a,Qet?null:i.c,i),i)}function BOn(n,t){var e;n.b=t,n.g=new Np,e=JOn(n.b),n.e=e,n.f=e,n.c=qy(TD(mMn(n.b,(_kn(),jit)))),n.a=MD(mMn(n.b,(sWn(),cSt))),null==n.a&&(n.a=1),Gy(n.a)>1?n.e*=Gy(n.a):n.f/=Gy(n.a),Chn(n),ggn(n),TRn(n),hon(n.b,(Epn(),gct),n.g)}function HOn(n,t,e){var i,r,c,a,u;for(i=0,u=e,t||(i=e*(n.c.length-1),u*=-1),c=new Wb(n);c.a<c.c.c.length;){for(hon(r=BB(n0(c),10),(HXn(),kdt),(wvn(),OMt)),r.o.a=i,a=DSn(r,(kUn(),oIt)).Kc();a.Ob();)BB(a.Pb(),11).n.a=i;i+=u}}function qOn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),Ifn(n,t,e),i=n.Zi(3,null,e,t,c),n.bj()?(r=n.cj(e,null),n.ij()&&(r=n.jj(e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(Ifn(n,t,e),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function GOn(n,t,e){var i,r,c,a,u,o;return(u=n.Gk(e))!=e?(a=n.g[t],o=u,jL(n,t,n.oi(t,o)),c=a,n.gi(t,o,c),n.rk()&&(i=e,r=n.dj(i,null),!BB(u,49).eh()&&(r=n.cj(o,r)),r&&r.Fi()),mA(n.e)&&Lv(n,n.Zi(9,e,u,t,!1)),u):e}function zOn(n,t){var e,i,r;for(e=new Wb(n.a.a);e.a<e.c.c.length;)BB(n0(e),189).g=!0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)(i=BB(n0(r),81)).k=qy(TD(n.e.Kb(new rI(i,t)))),i.d.g=i.d.g&qy(TD(n.e.Kb(new rI(i,t))));return n}function UOn(n){var t,e,i,r,c;if(e=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),c=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(c.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&zN(new m6(i.b))&&orn(e,i.j);return e}function XOn(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new oz(ZL(lbn(e).a.Kc(),new h));dAn(i);){for(c=new oz(ZL(fbn(a=BB(U5(i),17).d.i).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).c.i==t&&(n.a[r.p]=!0);XOn(n,t,a)}n.d[e.p]=!0}}function WOn(n,t){var e,i,r,c,a,u,o;if(1==(i=pbn(254&n.Db)))n.Eb=null;else if(c=een(n.Eb),2==i)r=Rmn(n,t),n.Eb=c[0==r?1:0];else{for(a=x8(Ant,HWn,1,i-1,5,1),e=2,u=0,o=0;e<=128;e<<=1)e==t?++u:0!=(n.Db&e)&&(a[o++]=c[u++]);n.Eb=a}n.Db&=~t}function VOn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 4:case 5:case 6:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function QOn(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=k6n}return t}function YOn(n,t,e,i,r){var c,a,u,o;if(GI(n)!==GI(t)||i!=r)for(u=0;u<i;u++){for(a=0,c=n[u],o=0;o<r;o++)a=rbn(rbn(cbn(e0(c,UQn),e0(t[o],UQn)),e0(e[u+o],UQn)),e0(dG(a),UQn)),e[u+o]=dG(a),a=jz(a,32);e[u+r]=dG(a)}else I_n(n,i,e)}function JOn(n){var t,i,r,c,a,u,o,s,h,f,l;for(f=0,h=0,o=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),561)).b&&VBn(i),f+=(l=(t=i.a).a)+(u=t.b),h+=l*u;return s=e.Math.sqrt(400*o*h-4*h+f*f)+f,0==(a=2*(100*o-1))?s:s/a}function ZOn(n,t){0!=t.b&&(isNaN(n.s)?n.s=Gy((Px(0!=t.b),MD(t.a.a.c))):n.s=e.Math.min(n.s,Gy((Px(0!=t.b),MD(t.a.a.c)))),isNaN(n.c)?n.c=Gy((Px(0!=t.b),MD(t.c.b.c))):n.c=e.Math.max(n.c,Gy((Px(0!=t.b),MD(t.c.b.c)))))}function nAn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=JJ(i))return!0}else t=JJ(i);return!1}function tAn(n,t){var e,i,r,c;n.ej()?(e=n.i,c=n.fj(),c6(n,t),i=n.Zi(3,null,t,e,c),n.bj()?(r=n.cj(t,null),n.ij()&&(r=n.jj(t,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(c6(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function eAn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),++n.j,n.Hi(t,n.oi(t,e)),i=n.Zi(3,null,e,t,c),n.bj()&&(r=n.cj(e,null))?(r.Ei(i),r.Fi()):n.$i(i)):(++n.j,n.Hi(t,n.oi(t,e)),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function iAn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)b1(i,n.length),GO(".*+?{[()|\\^$",YTn(e=n.charCodeAt(i)))>=0?(t||(t=new Pk,i>0&&cO(t,n.substr(0,i))),t.a+="\\",NX(t,e&QVn)):t&&NX(t,e&QVn);return t?t.a:n}function rAn(n){var t;if(!n.a)throw Hp(new Fy("IDataType class expected for layout option "+n.f));if(null==(t=I3(n.a)))throw Hp(new Fy("Couldn't create new instance of property '"+n.f+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return BB(t,414)}function cAn(n){var t,e,i,r,c;return(c=n.eh())&&c.kh()&&(r=tfn(n,c))!=c?(e=n.Vg(),i=(t=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-t,null,null),n.Rg(BB(r,49),e),i&&i.Fi(),n.Lg()&&n.Mg()&&e>-1&&ban(n,new nU(n,9,e,c,r)),r):c}function aAn(n){var t,e,i,r,c,a,u;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(l1(e,r.c.length),a=BB(r.c[e],144),i=e+1;i<r.c.length;++i)l1(i,r.c.length),u=BB(r.c[i],144),t=W8(a.d,u.d)-n.a[a.b][u.b],c+=n.i[a.b][u.b]*t*t;return c}function uAn(n,t){var e;if(!Lx(t,(HXn(),kgt))&&(e=Ekn(BB(mMn(t,est),360),BB(mMn(n,kgt),163)),hon(t,est,e),!dAn(new oz(ZL(hbn(t).a.Kc(),new h)))))switch(e.g){case 1:hon(t,kgt,(Tbn(),_lt));break;case 2:hon(t,kgt,(Tbn(),Blt))}}function oAn(n,t){var e;mRn(n),n.a=(e=new ok,JT(new Rq(null,new w1(t.d,16)),new Od(e)),e),Mxn(n,BB(mMn(t.b,(HXn(),igt)),376)),kvn(n),OAn(n),$kn(n),jvn(n),jqn(n,t),JT(wnn(new Rq(null,Y0(SX(n.b).a)),new Wr),new Vr),t.a=!1,n.a=null}function sAn(){dMn.call(this,y6n,(tE(),dOt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function hAn(){hAn=O,iAt=new MI(G1n,0),nAt=new MI("INSIDE_SELF_LOOPS",1),tAt=new MI("MULTI_EDGES",2),ZOt=new MI("EDGE_LABELS",3),eAt=new MI("PORTS",4),YOt=new MI("COMPOUND",5),QOt=new MI("CLUSTERS",6),JOt=new MI("DISCONNECTED",7)}function fAn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw Hp(new Oy("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=Ccn(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function lAn(n,t,e,i){var r;BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),NH(r=XR(B$(BB(e.b,65).c),BB(i.b,65).c),HCn(BB(e.b,65),BB(i.b,65),r)),BB(i.b,65),BB(i.b,65),BB(i.b,65).c.a,r.a,BB(i.b,65).c.b,r.b,BB(i.b,65),Otn(i.a,new TB(n,t,i))}function bAn(n,t){var e,i,r,c,a,u,o;if(c=t.e)for(e=cAn(c),i=BB(n.g,674),a=0;a<n.i;++a)if(qvn(o=i[a])==e&&(!o.d&&(o.d=new $L(VAt,o,1)),r=o.d,(u=BB(e.ah(gKn(c,c.Cb,c.Db>>16)),15).Xc(c))<r.i))return bAn(n,BB(Wtn(r,u),87));return t}function wAn(n,t,e){var i,r=SWn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?MWn=c:(!(i=t&&t.prototype)&&(i=SWn[t]),(MWn=qJ(i)).hm=e,!t&&(MWn.im=I),r[n]=MWn);for(var u=3;u<arguments.length;++u)arguments[u].prototype=MWn;a&&(MWn.gm=a)}function dAn(n){for(var t;!BB(yX(n.a),47).Ob();){if(n.d=osn(n),!n.d)return!1;if(n.a=BB(n.d.Pb(),47),cL(n.a,39)){if(t=BB(n.a,39),n.a=t.a,!n.b&&(n.b=new Lp),d3(n.b,n.d),t.b)for(;!Wy(t.b);)d3(n.b,BB(gU(t.b),47));n.d=t.d}}return!0}function gAn(n,t){var e,i,r,c,a;for(c=null==t?0:n.b.se(t),i=null==(e=n.a.get(c))?new Array:e,a=0;a<i.length;a++)if(r=i[a],n.b.re(t,r.cd()))return 1==i.length?(i.length=0,vR(n.a,c)):i.splice(a,1),--n.c,oY(n.b),r.dd();return null}function pAn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Wb(kbn(t));i.a<i.c.c.length;)e=BB(n0(i),213),n.c[e.c]||(n.c[e.c]=!0,c=Nbn(e,t),e.f?r+=pAn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,TU(n.p,e),r+=pAn(n,c)));return r}function vAn(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function mAn(n){var t,i,r,c,a;if(a=K_n(n,c=new Np),t=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(t.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&(a=e.Math.max(a,K_n(i,c)));return 0==c.c.length||hon(n,blt,a),-1!=a?c:null}function yAn(n,t,e){var i,r,c,a,u,o;r=(i=(c=BB(xq(t.e,0),17).c).i).k,u=(a=(o=BB(xq(e.g,0),17).d).i).k,r==(uSn(),Put)?hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)):hon(n,(hWn(),hlt),c),hon(n,(hWn(),flt),u==Put?BB(mMn(a,flt),11):o)}function kAn(n,t){var e,i,r,c;for(e=(c=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&wW(i.i,t))return r?r.a=i.a:n.b[e]=i.a,kk(i.c,i.f),iv(i.b,i.e),--n.f,++n.e,!0;return!1}function jAn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&CQn))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?PQn:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?PQn:0,c=i?SQn:0,r=e>>t-44),M$(r&SQn,c&SQn,a&PQn)}function EAn(n){var t,i,r,c,a,u;for(this.c=new Np,this.d=n,r=RQn,c=RQn,t=KQn,i=KQn,u=spn(n,0);u.b!=u.d.c;)a=BB(b3(u),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new UV(r,c,t-r,i-c)}function TAn(n,t){var e,i,r,c;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)for((r=BB(n0(c),10)).k==(uSn(),Sut)&&hFn(r,t),e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)vun(BB(U5(e),17),t)}function MAn(n){var t,e,i;this.c=n,i=BB(mMn(n,(HXn(),Udt)),103),t=Gy(MD(mMn(n,Edt))),e=Gy(MD(mMn(n,Kpt))),i==(Ffn(),_Pt)||i==FPt||i==BPt?this.b=t*e:this.b=1/(t*e),this.j=Gy(MD(mMn(n,Apt))),this.e=Gy(MD(mMn(n,Opt))),this.f=n.b.c.length}function SAn(n){var t,e;for(n.e=x8(ANt,hQn,25,n.p.c.length,15,1),n.k=x8(ANt,hQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.e[t.p]=F3(new oz(ZL(fbn(t).a.Kc(),new h))),n.k[t.p]=F3(new oz(ZL(lbn(t).a.Kc(),new h)))}function PAn(n){var t,e,i,r,c;for(i=0,n.q=new Np,t=new Rv,c=new Wb(n.p);c.a<c.c.c.length;){for((r=BB(n0(c),10)).p=i,e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)TU(t,BB(U5(e),17).d.i);t.a.Bc(r),WB(n.q,new $q(t)),t.a.$b(),++i}}function CAn(){CAn=O,Okt=new WA(20),Ikt=new XA((sWn(),XSt),Okt),xkt=new XA(LPt,20),jkt=new XA(cSt,dZn),$kt=new XA(pPt,iln(1)),Nkt=new XA(kPt,(hN(),!0)),Ekt=lSt,Mkt=KSt,Skt=BSt,Pkt=qSt,Tkt=DSt,Ckt=USt,Akt=fPt,Ran(),Dkt=ykt,Lkt=vkt}function IAn(n,t){var e,i,r,c,a,u,o,s,h;if(n.a.f>0&&cL(t,42)&&(n.a.qj(),c=null==(o=(s=BB(t,42)).cd())?0:nsn(o),a=eR(n.a,c),e=n.a.d[a]))for(i=BB(e.g,367),h=e.i,u=0;u<h;++u)if((r=i[u]).Sh()==c&&r.Fb(s))return IAn(n,s),!0;return!1}function OAn(n){var t,e,i,r;for(r=BB(h6(n.a,(LEn(),Sst)),15).Kc();r.Ob();)iX(n,i=BB(r.Pb(),101),(e=(t=gz(i.k)).Hc((kUn(),sIt))?t.Hc(oIt)?t.Hc(SIt)?t.Hc(CIt)?null:$st:Nst:Lst:Ast)[0],(Crn(),xst),0),iX(n,i,e[1],Dst,1),iX(n,i,e[2],Rst,1)}function AAn(n,t){var e,i;Jxn(n,t,e=mKn(t)),iTn(n.a,BB(mMn(vW(t.b),(hWn(),Slt)),230)),b_n(n),DEn(n,t),i=x8(ANt,hQn,25,t.b.j.c.length,15,1),szn(n,t,(kUn(),sIt),i,e),szn(n,t,oIt,i,e),szn(n,t,SIt,i,e),szn(n,t,CIt,i,e),n.a=null,n.c=null,n.b=null}function $An(){$An=O,Sbn(),oEt=new $O(E4n,sEt=nEt),aEt=new $O(T4n,(hN(),!0)),iln(-1),iEt=new $O(M4n,iln(-1)),iln(-1),rEt=new $O(S4n,iln(-1)),uEt=new $O(P4n,!1),hEt=new $O(C4n,!0),cEt=new $O(I4n,!1),fEt=new $O(O4n,-1)}function LAn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),sqn(n.e),!n.e&&(n.e=new hK(_Ot,n,7,4)),void pX(n.e,BB(e,14));case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),sqn(n.d),!n.d&&(n.d=new hK(_Ot,n,8,5)),void pX(n.d,BB(e,14))}zjn(n,t,e)}function NAn(n,t){var e,i,r,c,a;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(a=BB(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(GI(e)===GI(r)||null!=e&&Nfn(e,r)))return!1;return!0}function xAn(n,t){var e,i,r,c;for((c=BB(P4(wnn(wnn(new Rq(null,new w1(t.b,16)),new Re),new Ke),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Jc(new _e),e=0,r=c.Kc();r.Ob();)-1==(i=BB(r.Pb(),11)).p&&FAn(n,i,e++)}function DAn(n){switch(n.g){case 0:return new Cf;case 1:return new lf;case 2:return new ff;case 3:return new jI;case 4:return new _G;default:throw Hp(new _y("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function RAn(n){switch(n.g){case 0:return new KG;case 1:return new wf;case 2:return new rf;case 3:return new cf;case 4:return new TI;default:throw Hp(new _y("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function KAn(){KAn=O,mjt=new $O(u4n,iln(0)),yjt=new $O(o4n,0),Hsn(),djt=new $O(s4n,gjt=sjt),iln(0),wjt=new $O(h4n,iln(1)),Bcn(),kjt=new $O(f4n,jjt=Xjt),D9(),Ejt=new $O(l4n,Tjt=ajt),Omn(),pjt=new $O(b4n,vjt=qjt)}function _An(n,t,e){var i;i=null,t&&(i=t.d),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function FAn(n,t,e){var i,r,c;for(t.p=e,c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(c);)-1==(i=BB(U5(c),11)).p&&FAn(n,i,e);if(t.i.k==(uSn(),Put))for(r=new Wb(t.i.j);r.a<r.c.c.length;)(i=BB(n0(r),11))!=t&&-1==i.p&&FAn(n,i,e)}function BAn(n){var t,i,r,c,a;if(c=BB(P4($Z(a1(n)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),r=ZJn,c.gc()>=2)for(t=MD((i=c.Kc()).Pb());i.Ob();)a=t,t=MD(i.Pb()),r=e.Math.min(r,(kW(t),t-(kW(a),a)));return r}function HAn(n,t){var e,i,r,c,a;r5(i=new YT,t,i.c.b,i.c);do{for(Px(0!=i.b),e=BB(Atn(i,i.a.a),86),n.b[e.g]=1,c=spn(e.d,0);c.b!=c.d.c;)a=(r=BB(b3(c),188)).c,1==n.b[a.g]?DH(n.a,r):2==n.b[a.g]?n.b[a.g]=1:r5(i,a,i.c.b,i.c)}while(0!=i.b)}function qAn(n,t){var e,i,r;if(GI(t)===GI(yX(n)))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),(r=n.gc())!=i.gc())return!1;if(cL(i,54)){for(e=0;e<r;e++)if(!wW(n.Xb(e),i.Xb(e)))return!1;return!0}return Uvn(n.Kc(),i.Kc())}function GAn(n,t){var e;if(0!=n.c.length){if(2==n.c.length)hFn((l1(0,n.c.length),BB(n.c[0],10)),(Xyn(),jCt)),hFn((l1(1,n.c.length),BB(n.c[1],10)),ECt);else for(e=new Wb(n);e.a<e.c.c.length;)hFn(BB(n0(e),10),t);n.c=x8(Ant,HWn,1,0,5,1)}}function zAn(n){var t,e;if(2!=n.c.length)throw Hp(new Fy("Order only allowed for two paths."));l1(0,n.c.length),t=BB(n.c[0],17),l1(1,n.c.length),e=BB(n.c[1],17),t.d.i!=e.c.i&&(n.c=x8(Ant,HWn,1,0,5,1),n.c[n.c.length]=e,n.c[n.c.length]=t)}function UAn(n,t){var e,i,r,c,a;for(i=new v4,c=S4(new Jy(n.g)).a.ec().Kc();c.Ob();){if(!(r=BB(c.Pb(),10))){OH(t,"There are no classes in a balanced layout.");break}(e=BB(lnn(i,a=n.j[r.p]),15))||Jgn(i,a,e=new Np),e.Fc(r)}return i}function XAn(n,t,e){var i,r,c,a;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=x2(e,BB(r.Pb(),19).a))&&(a=Ken(R2(c,O6n),t),VW(n.f,a,c),q6n in c.a&&$in(a,R2(c,q6n)),STn(c,a),OCn(c,a))}function WAn(n,t){var e,i,r;for(OTn(t,"Port side processing",1),r=new Wb(n.a);r.a<r.c.c.length;)cBn(BB(n0(r),10));for(e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)cBn(BB(n0(i),10));HSn(t)}function VAn(n,t,e){var i,r,c,a,u;if(!(r=n.f)&&(r=BB(n.a.a.ec().Kc().Pb(),57)),Fkn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=BB(a.Pb(),57))!=r&&((u=f3(c)).f.d?(c.d.d+=i+fJn,c.d.a-=i+fJn):u.f.a&&(c.d.a-=i+fJn))}function QAn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w;return u=i-n,o=r-t,s=(a=e.Math.atan2(u,o))+JJn,h=a-JJn,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,u6(Pun(Gk(PMt,1),sVn,8,0,[new xC(f,b),new xC(l,w)]))}function YAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=Gy(n.p[l.p])+Gy(n.d[a.p])-a.d.d,(s=Ain(a,r))&&(h=n.g[s.p],u=Gy(n.p[h.p])+Gy(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function JAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=Gy(n.p[l.p])+Gy(n.d[a.p])+a.o.b+a.d.a,(s=_un(a,r))&&(h=n.g[s.p],o=Gy(n.p[h.p])+Gy(n.d[s.p])-s.d.d,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function ZAn(n,t){var e,i;return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),null!=(i=cdn(n.o,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e))),e)}function n$n(){n$n=O,ICt=new GC("H_LEFT",0),CCt=new GC("H_CENTER",1),ACt=new GC("H_RIGHT",2),DCt=new GC("V_TOP",3),xCt=new GC("V_CENTER",4),NCt=new GC("V_BOTTOM",5),$Ct=new GC("INSIDE",6),LCt=new GC("OUTSIDE",7),OCt=new GC("H_PRIORITY",8)}function t$n(n){var t,e,i,r,c,a,u;if((t=n.Hh(V9n))&&null!=(u=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"settingDelegates")))){for(e=new Np,c=0,a=(r=kKn(u,"\\w+")).length;c<a;++c)i=r[c],e.c[e.c.length]=i;return e}return SQ(),SQ(),set}function e$n(n,t){var e,i,r,c,a,u,o;if(!t.f)throw Hp(new _y("The input edge is not a tree edge."));for(c=null,r=DWn,i=new Wb(n.d);i.a<i.c.c.length;)u=(e=BB(n0(i),213)).d,o=e.e,FCn(n,u,t)&&!FCn(n,o,t)&&(a=o.e-u.e-e.a)<r&&(r=a,c=e);return c}function i$n(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=aAn(n),e=RQn;do{for(t>0&&(r=e),a=new Wb(n.f.e);a.a<a.c.c.length;)qy(TD(mMn(c=BB(n0(a),144),(rkn(),yat))))||(i=Z_n(n,c),UR(kO(c.d),i));e=aAn(n)}while(!JX(n,t++,r,e))}}function r$n(n,t){var e,i,r;for(OTn(t,"Layer constraint preprocessing",1),e=new Np,r=new M2(n.a,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),Wun(i=BB(r.d.Xb(r.c=r.b++),10))&&(cTn(i),e.c[e.c.length]=i,fW(r));0==e.c.length||hon(n,(hWn(),nlt),e),HSn(t)}function c$n(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)r=(e=BB(n0(i),70)).n,n.a==(Oun(),mst)||n.i==(kUn(),oIt)?r.a=c:n.a==yst||n.i==(kUn(),CIt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,UR(r,t),a+=e.o.b+n.e}function a$n(n,t,e){var i,r,c,a;for(OTn(e,"Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,c=null,i=spn(t.b,0);!c&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(c=a,(r=a.e).a=BB(mMn(a,gkt),19).a,r.b=0);_Sn(n,xun(c),mcn(e,1)),HSn(e)}function u$n(n,t,e){var i,r,c;for(OTn(e,"Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&Zxn(n,u6(Pun(Gk(Yyt,1),tZn,86,0,[r])),e),HSn(e)}function o$n(n,t){var e,i,r,c,a;(c=D2(n,"individualSpacings"))&&(!P8(t,(sWn(),CPt))&&(e=new Yu,Ypn(t,CPt,e)),r=BB(ZAn(t,CPt),373),i=null,(a=c)&&(i=new TT(a,jrn(a,x8(Qtt,sVn,2,0,6,1)))),i&&e5(i,new dI(a,r)))}function s$n(n,t){var e,i,r,c,a,u;return c=null,(J6n in(a=n).a||Z6n in a.a||D6n in a.a)&&(u=qun(t),i=D2(a,J6n),Own(new Hg(u).a,i),r=D2(a,Z6n),Iwn(new Jg(u).a,r),e=N2(a,D6n),PEn(new tp(u).a,e),c=e),c}function h$n(n,t){var e,i,r;if(t===n)return!0;if(cL(t,543)){if(r=BB(t,835),n.a.d!=r.a.d||EV(n).gc()!=EV(r).gc())return!1;for(i=EV(r).Kc();i.Ob();)if(c1(n,(e=BB(i.Pb(),416)).a.cd())!=BB(e.a.dd(),14).gc())return!1;return!0}return!1}function f$n(n){var t,e,i,r;return t=i=BB(n.a,19).a,e=r=BB(n.b,19).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new rI(iln(t),iln(e))}function l$n(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?nsn(n.a)-nsn(t.a):n.d==(Q4(),Hmt)&&t.d==Bmt?-1:n.d==Bmt&&t.d==Hmt?1:0}function b$n(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=zwn(n.a,a,i))>0&&r<ZJn?(e=YAn(n.a,i.i,r,n.c),ren(n.a,i.i,-e),e>0):r<0&&-r<ZJn&&(e=JAn(n.a,i.i,-r,n.c),ren(n.a,i.i,e),e>0)}function w$n(n,t,e,i){var r,c,a,u,o,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Wb(n.c);s.a<s.c.c.length;)u=(o=BB(n0(s),33)).g,a=o.f,Pen(o,o.i+c*r),Cen(o,o.j+i*e),Sen(o,o.g+r),Men(o,n.a),++c,lCn(o,new xC(o.g,o.f),new xC(u,a))}function d$n(n){var t,e,i,r,c,a,u;if(null==n)return null;for(u=n.length,a=x8(NNt,v6n,25,r=(u+1)/2|0,15,1),u%2!=0&&(a[--r]=ZDn((b1(u-1,n.length),n.charCodeAt(u-1)))),e=0,i=0;e<r;++e)t=ZDn(fV(n,i++)),c=ZDn(fV(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function g$n(n){if(n.pe()){var t=n.c;return t.qe()?n.o="["+t.n:t.pe()?n.o="["+t.ne():n.o="[L"+t.ne()+";",n.b=t.me()+"[]",void(n.k=t.oe()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=Fdn(".",[e,Fdn("$",i)]),n.b=Fdn(".",[e,Fdn(".",i)]),n.k=i[i.length-1]}function p$n(n,t){var e,i,r,c,a;for(a=null,c=new Wb(n.e.a);c.a<c.c.c.length;)if((r=BB(n0(c),121)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=ePn(r),e=r.e-BB(a.a,19).a+1;e<r.e+BB(a.b,19).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function v$n(n){var t,i,r,c,a,u,o;for(r=RQn,i=KQn,t=new Wb(n.e.b);t.a<t.c.c.length;)for(a=new Wb(BB(n0(t),29).a);a.a<a.c.c.length;)c=BB(n0(a),10),u=(o=Gy(n.p[c.p]))+Gy(n.b[n.g[c.p].p]),r=e.Math.min(r,o),i=e.Math.max(i,u);return i-r}function m$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=jKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function y$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=EKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function k$n(n,t,e){var i,r,c,a,u,o;if(a=new go,u=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj())for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&f9(a,r);else for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&(o=r.dd(),f9(a,e?FIn(n,t,c,a.i,o):o));return N3(a)}function j$n(n,t){var e,i,r,c;for(e=new Hbn(uht),$Pn(),r=0,c=(i=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;r<c;++r)wR(e,i[r],new Np);return JT($V(AV(wnn(new Rq(null,new w1(n.b,16)),new Ze),new ni),new hd(t)),new fd(e)),e}function E$n(n,t,i){var r,c,a,u,o,s,h,f;for(a=t.Kc();a.Ob();)s=(c=BB(a.Pb(),33)).i+c.g/2,f=c.j+c.f/2,o=s-((u=n.f).i+u.g/2),h=f-(u.j+u.f/2),r=e.Math.sqrt(o*o+h*h),o*=n.e/r,h*=n.e/r,i?(s-=o,f-=h):(s+=o,f+=h),Pen(c,s-c.g/2),Cen(c,f-c.f/2)}function T$n(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function M$n(n,t){var e,i,r,c,a,u;for(c=(1==t?Wat:Xat).a.ec().Kc();c.Ob();)for(r=BB(c.Pb(),103),u=BB(h6(n.f.c,r),21).Kc();u.Ob();)switch(a=BB(u.Pb(),46),i=BB(a.b,81),e=BB(a.a,189).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function S$n(n,t){var e,i,r,c,a,u,o,s,h;for(s=-1,h=0,u=0,o=(a=n).length;u<o;++u){for(c=a[u],e=new kH(-1==s?n[0]:n[s],t,(Mhn(),uvt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)Lx(c[i],(hWn(),wlt))&&Lx(c[r],wlt)&&fXn(e,c[i],c[r])>0&&++h;++s}return h}function P$n(n){var t;return(t=new lN(nE(n.gm))).a+="@",oO(t,(nsn(n)>>>0).toString(16)),n.kh()?(t.a+=" (eProxyURI: ",uO(t,n.qh()),n.$g()&&(t.a+=" eClass: ",uO(t,n.$g())),t.a+=")"):n.$g()&&(t.a+=" (eClass: ",uO(t,n.$g()),t.a+=")"),t.a}function C$n(n){var t,e,i;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));for(n.d==(Ffn(),BPt)&&Tzn(n,_Pt),e=new Wb(n.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).g=t.i;for(i=new Wb(n.a.b);i.a<i.c.c.length;)BB(n0(i),57).i=KQn;return n.b.Le(n),n}function I$n(n,t){var e,i,r,c,a;if(t<2*n.b)throw Hp(new _y("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)WB(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)WB(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)WB(n.e,1)}function O$n(n,t){var e,i,r,c,a;if(c=t,!(a=BB(Uin(PX(n.i),c),33)))throw Hp(new ek("Unable to find elk node for json object '"+R2(c,q6n)+"' Panic!"));i=N2(c,"edges"),LIn((e=new uI(n,a)).a,e.b,i),r=N2(c,A6n),Dkn(new Ng(n).a,r)}function A$n(n,t,e,i){var r,c,a,u,o;if(null!=i){if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return u}else if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return u;return-1}function $$n(n,t){var e,i;return cL(e=null==t?qI(AY(n.f,null)):hS(n.g,t),235)?((i=BB(e,235)).Qh(),i):cL(e,498)?((i=BB(e,1938).a)&&(null==i.yb||(null==t?jCn(n.f,null,i):ubn(n.g,t,i))),i):null}function L$n(n){var t,e,i,r,c,a,u;if(KDn(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=V7(n),e=x8(NNt,v6n,25,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=QLt[t[2*i]]))return null;if(-1==(u=QLt[t[2*i+1]]))return null;e[i]=(a<<4|u)<<24>>24}return e}function N$n(n,t,e){var i,r,c;if(!(r=BB(oV(n.i,t),306)))if(r=new wtn(n.d,t,e),mG(n.i,t,r),agn(t))EL(n.a,t.c,t.b,r);else switch(c=LPn(t),i=BB(oV(n.p,c),244),c.g){case 1:case 3:r.j=!0,jy(i,t.b,r);break;case 4:case 2:r.k=!0,jy(i,t.c,r)}return r}function x$n(n,t,e,i){var r,c,a,u,o,s;if(u=new go,o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj())for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&f9(u,c);else for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&(s=c.dd(),f9(u,i?FIn(n,t,a,u.i,s):s));return Qwn(u,e)}function D$n(n,t){var i,r,c,a,u,o;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Wb(t.j);a.a<a.c.c.length;)for(i=new Wb(BB(n0(a),11).g);i.a<i.c.c.length;)t!=(o=BB(n0(i),17).d.i)&&(u=D$n(n,o),c=e.Math.max(c,u+1));return iwn(n,t,c),c}function R$n(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(l1(i,n.c.length),c=BB(n.c[i],10),r=i;r>0&&t.ue((l1(r-1,n.c.length),BB(n.c[r-1],10)),c)>0;)c5(n,r,(l1(r-1,n.c.length),BB(n.c[r-1],10))),--r;l1(r,n.c.length),n.c[r]=c}e.a=new xp,e.b=new xp}function K$n(n,t,e){var i,r,c,a,u,o,s;for(s=new YK(i=BB(t.e&&t.e(),9),BB(SR(i,i.length),9),0),a=0,u=(c=kKn(e,"[\\[\\]\\s,]+")).length;a<u;++a)if(0!=RMn(r=c[a]).length){if(null==(o=HIn(n,r)))return null;orn(s,BB(o,22))}return s}function _$n(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function F$n(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(kUn(),sIt)||t==oIt?(jtn(BB(Eon(n),15),(Xyn(),jCt)),jtn(BB(Eon(n),15),ECt)):(jtn(BB(Eon(n),15),(Xyn(),ECt)),jtn(BB(Eon(n),15),jCt));else for(i=new bV(n);i.a!=i.b;)jtn(BB(_hn(i),15),e)}function B$n(n,t){var e,i,r,c,a,u;for(a=new M2(i=HB(new sp(n)),i.c.length),u=new M2(r=HB(new sp(t)),r.c.length),c=null;a.b>0&&u.b>0&&(Px(a.b>0),e=BB(a.a.Xb(a.c=--a.b),33),Px(u.b>0),e==BB(u.a.Xb(u.c=--u.b),33));)c=e;return c}function H$n(n,t){var i,r,c,a;return c=n.a*aYn+1502*n.b,a=n.b*aYn+11,c+=i=e.Math.floor(a*uYn),a-=i*oYn,c%=oYn,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*Oet[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*Aet[t]))>=2147483648&&(r-=XQn),r)}function q$n(n,t,e){var i,r,c,a;w0(n,t)>w0(n,e)?(i=abn(e,(kUn(),oIt)),n.d=i.dc()?0:uq(BB(i.Xb(0),11)),a=abn(t,CIt),n.b=a.dc()?0:uq(BB(a.Xb(0),11))):(r=abn(e,(kUn(),CIt)),n.d=r.dc()?0:uq(BB(r.Xb(0),11)),c=abn(t,oIt),n.b=c.dc()?0:uq(BB(c.Xb(0),11)))}function G$n(n){var t,e,i,r,c,a,u;if(n&&(t=n.Hh(V9n))&&null!=(a=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"conversionDelegates")))){for(u=new Np,r=0,c=(i=kKn(a,"\\w+")).length;r<c;++r)e=i[r],u.c[u.c.length]=e;return u}return SQ(),SQ(),set}function z$n(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=e*Gy(MD(r.b.We(Lrt))),r.e.b=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),sIt)?-i.rf().b-Gy(MD(i.We(aPt))):Gy(MD(i.We(aPt))):i.Hf()==(kUn(),sIt)?-i.rf().b:0}function U$n(n){var t,e,i,r,c,a,u,o;t=!0,r=null,c=null;n:for(o=new Wb(n.a);o.a<o.c.c.length;)for(i=new oz(ZL(fbn(u=BB(n0(o),10)).a.Kc(),new h));dAn(i);){if(e=BB(U5(i),17),r&&r!=u){t=!1;break n}if(r=u,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function X$n(n,t,e){var i,r,c,a,u,o;for(c=-1,u=-1,a=0;a<t.c.length&&(l1(a,t.c.length),!((r=BB(t.c[a],329)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),u=a);return o=(n.s+n.c)/2,c>=0&&(o=qM((l1(i=YRn(n,t,c,u),t.c.length),BB(t.c[i],329))),lOn(t,i,e)),o}function W$n(){W$n=O,lEt=new XA((sWn(),cSt),1.3),gEt=jSt,IEt=new WA(15),CEt=new XA(XSt,IEt),$Et=new XA(LPt,15),bEt=hSt,jEt=KSt,EEt=BSt,TEt=qSt,kEt=DSt,MEt=USt,OEt=fPt,$An(),PEt=oEt,yEt=aEt,SEt=uEt,AEt=hEt,pEt=cEt,vEt=CSt,mEt=ISt,dEt=rEt,wEt=iEt,LEt=fEt}function V$n(n,t,e){var i,r,c,a,u;for(Bin(r=new jo,(kW(t),t)),!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),u=r.b,a=1;a<e.length;a+=2)vjn(u,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new eU(KAt,n,0,3)),i=n.Ab,c=0;c<0;++c)i=mW(BB(Wtn(i,i.i-1),590));f9(i,r)}function Q$n(n,t,e){var i,r,c;for(LD.call(this,new Np),this.a=t,this.b=e,this.e=n,n.b&&VBn(n),i=n.a,this.d=JV(i.a,this.a),this.c=JV(i.b,this.b),obn(this,this.d,this.c),mIn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=BB(c.Pb(),266)).c.c.length>0&&xqn(this,r)}function Y$n(n,t,e,i,r,c){var a,u,o;if(!r[t.b]){for(r[t.b]=!0,!(a=i)&&(a=new y6),WB(a.e,t),o=c[t.b].Kc();o.Ob();)(u=BB(o.Pb(),282)).d!=e&&u.c!=e&&(u.c!=t&&Y$n(n,u.c,t,a,r,c),u.d!=t&&Y$n(n,u.d,t,a,r,c),WB(a.c,u),gun(a.d,u.b));return a}return null}function J$n(n){var t,e,i;for(t=0,e=new Wb(n.e);e.a<e.c.c.length;)o5(new Rq(null,new w1(BB(n0(e),17).b,16)),new pe)&&++t;for(i=new Wb(n.g);i.a<i.c.c.length;)o5(new Rq(null,new w1(BB(n0(i),17).b,16)),new ve)&&++t;return t>=2}function Z$n(n,t){var e,i,r,c;for(OTn(t,"Self-Loop pre-processing",1),i=new Wb(n.a);i.a<i.c.c.length;)Kbn(e=BB(n0(i),10))&&(c=new Ogn(e),hon(e,(hWn(),Olt),c),k_n(c),JT($V(wnn(new Rq(null,new w1((r=c).d,16)),new Hi),new qi),new Gi),ixn(r));HSn(t)}function nLn(n,t,e,i,r){var c,a,u,o,s;for(c=n.c.d.j,a=BB(Dpn(e,0),8),s=1;s<e.b;s++)o=BB(Dpn(e,s),8),r5(i,a,i.c.b,i.c),u=kL(UR(new wA(a),o),.5),UR(u,kL(new XZ(hsn(c)),r)),r5(i,u,i.c.b,i.c),a=o,c=0==t?Mln(c):Eln(c);DH(i,(Px(0!=e.b),BB(e.c.b.c,8)))}function tLn(n){return n$n(),!(Can(OJ(EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[LCt])),n))>1||Can(OJ(EG(ICt,Pun(Gk(GCt,1),$Vn,93,0,[CCt,ACt])),n))>1||Can(OJ(EG(DCt,Pun(Gk(GCt,1),$Vn,93,0,[xCt,NCt])),n))>1)}function eLn(n,t){var e,i,r;return(e=t.Hh(n.a))&&null!=(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"affiliation")))?-1==(i=mN(r,YTn(35)))?uln(n,az(n,Utn(t.Hj())),r):0==i?uln(n,null,r.substr(1)):uln(n,r.substr(0,i),r.substr(i+1)):null}function iLn(n){var t,e;try{return null==n?zWn:Bbn(n)}catch(i){if(cL(i=lun(i),102))return t=i,e=nE(tsn(n))+"@"+($T(),(evn(n)>>>0).toString(16)),Kgn(jun(),(lM(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+nE(t.gm)+">";throw Hp(i)}}function rLn(n){switch(n.g){case 0:return new of;case 1:return new ef;case 2:return new $M;case 3:return new Ic;case 4:return new RR;case 5:return new sf;default:throw Hp(new _y("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function cLn(n,t,e){var i,r,c;for(c=new Wb(n.t);c.a<c.c.c.length;)(i=BB(n0(c),268)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&DH(t,i.b));for(r=new Wb(n.i);r.a<r.c.c.length;)(i=BB(n0(r),268)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&DH(e,i.a))}function aLn(n){var t,e,i;if(null==n.g&&(n.d=n.si(n.f),f9(n,n.d),n.c))return n.f;if(i=(t=BB(n.g[n.i-1],47)).Pb(),n.e=t,(e=n.si(i)).Ob())n.d=e,f9(n,e);else for(n.d=null;!t.Ob()&&($X(n.g,--n.i,null),0!=n.i);)t=BB(n.g[n.i-1],47);return i}function uLn(n,t){var e,i,r,c,a,u;if(r=(i=t).ak(),$xn(n.e,r)){if(r.hi()&&G3(n,r,i.dd()))return!1}else for(u=axn(n.e.Tg(),r),e=BB(n.g,119),c=0;c<n.i;++c)if(a=e[c],u.rl(a.ak()))return!Nfn(a,i)&&(BB(ovn(n,c,t),72),!0);return f9(n,t)}function oLn(n,t,i,r){var c,a,u;for(Bl(c=new $vn(n),(uSn(),Sut)),hon(c,(hWn(),dlt),t),hon(c,Plt,r),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,hlt,t.c),hon(c,flt,t.d),zxn(t,c),u=e.Math.floor(i/2),a=new Wb(c.j);a.a<a.c.c.length;)BB(n0(a),11).n.b=u;return c}function sLn(n,t){var e,i,r,c,a,u,o,s,h;for(o=sx(n.c-n.b&n.a.length-1),s=null,h=null,c=new bV(n);c.a!=c.b;)r=BB(_hn(c),10),e=(u=BB(mMn(r,(hWn(),hlt)),11))?u.i:null,i=(a=BB(mMn(r,flt),11))?a.i:null,s==e&&h==i||(GAn(o,t),s=e,h=i),o.c[o.c.length]=r;GAn(o,t)}function hLn(n){var t,i,r,c,a,u;for(t=0,i=new Wb(n.a);i.a<i.c.c.length;)for(c=new oz(ZL(lbn(BB(n0(i),10)).a.Kc(),new h));dAn(c);)n==(r=BB(U5(c),17)).d.i.c&&r.c.j==(kUn(),CIt)&&(a=g1(r.c).b,u=g1(r.d).b,t=e.Math.max(t,e.Math.abs(u-a)));return t}function fLn(n,t,e){var i,r;OTn(e,"Remove overlaps",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),i=BB(ZAn(t,(wD(),Vkt)),33),n.f=i,n.a=Evn(BB(ZAn(t,(Uyn(),Rjt)),293)),ib(n,(kW(r=MD(ZAn(t,(sWn(),LPt)))),r)),Xzn(n,t,wDn(i),e),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function lLn(n,t,i){switch(i.g){case 1:return new xC(t.a,e.Math.min(n.d.b,t.b));case 2:return new xC(e.Math.max(n.c.a,t.a),t.b);case 3:return new xC(t.a,e.Math.max(n.c.b,t.b));case 4:return new xC(e.Math.min(t.a,n.d.a),t.b)}return new xC(t.a,t.b)}function bLn(n,t,e,i){var r,c,a,u,o,s,h,f,l;for(f=i?(kUn(),CIt):(kUn(),oIt),r=!1,s=0,h=(o=t[e]).length;s<h;++s)LK(BB(mMn(u=o[s],(HXn(),ept)),98))||(a=u.e,(l=!abn(u,f).dc()&&!!a)&&(c=qEn(a),n.b=new zEn(c,i?0:c.length-1)),r|=c_n(n,u,f,l));return r}function wLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).d&&(e.d=new hK(_Ot,e,8,5)),e.d));return yX(t),new OO(t)}function dLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).e&&(e.e=new hK(_Ot,e,7,4)),e.e));return yX(t),new OO(t)}function gLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return HLt;if(45==t)return BLt}else if(3==e)return HLt;return bSn(i)}function pLn(n){var t,e,i,r;for(t=0,e=0,r=new Wb(n.j);r.a<r.c.c.length;)if(t=dG(rbn(t,q6(AV(new Rq(null,new w1((i=BB(n0(r),11)).e,16)),new Yc)))),e=dG(rbn(e,q6(AV(new Rq(null,new w1(i.g,16)),new Jc)))),t>1||e>1)return 2;return t+e==1?2:0}function vLn(n,t,e){var i,r,c,a;for(OTn(e,"ELK Force",1),qy(TD(ZAn(t,(fRn(),Wct))))||jJ(new Tw((GM(),new Dy(t)))),kkn(a=fon(t)),zon(n,BB(mMn(a,Gct),424)),r=(c=HFn(n.a,a)).Kc();r.Ob();)i=BB(r.Pb(),231),PKn(n.b,i,mcn(e,1/c.gc()));SUn(a=GUn(c)),HSn(e)}function mLn(n,t){var e,i,r;if(OTn(t,"Breaking Point Processor",1),Ozn(n),qy(TD(mMn(n,(HXn(),Gpt))))){for(i=new Wb(n.b);i.a<i.c.c.length;)for(e=0,r=new Wb(BB(n0(i),29).a);r.a<r.c.c.length;)BB(n0(r),10).p=e++;oHn(n),Hxn(n,!0),Hxn(n,!1)}HSn(t)}function yLn(n,t,e){var i,r,c,a,u;for(a=n.c,c=(e.q?e.q:(SQ(),SQ(),het)).vc().Kc();c.Ob();)r=BB(c.Pb(),42),!jE(AV(new Rq(null,new w1(a,16)),new aw(new LC(t,r)))).sd((dM(),tit))&&(cL(u=r.dd(),4)&&null!=(i=Jdn(u))&&(u=i),t.Ye(BB(r.cd(),146),u))}function kLn(n,t){var e,i,r,c;if(t){for(c=!(r=cL(n.Cb,88)||cL(n.Cb,99))&&cL(n.Cb,322),e=new AL((!t.a&&(t.a=new aG(t,VAt,t)),t.a));e.e!=e.i.gc();)if(i=lFn(BB(kpn(e),87)),r?cL(i,88):c?cL(i,148):i)return i;return r?(gWn(),d$t):(gWn(),l$t)}return null}function jLn(n,t){var e,i,r,c,a;for(OTn(t,"Constraints Postprocessor",1),c=0,r=new Wb(n.b);r.a<r.c.c.length;){for(a=0,i=new Wb(BB(n0(r),29).a);i.a<i.c.c.length;)(e=BB(n0(i),10)).k==(uSn(),Cut)&&(hon(e,(HXn(),jgt),iln(c)),hon(e,Bdt,iln(a)),++a);++c}HSn(t)}function ELn(n,t,e,i){var r,c,a,u,o,s;for(XR(u=new xC(e,i),BB(mMn(t,(qqn(),nkt)),8)),s=spn(t.b,0);s.b!=s.d.c;)UR((o=BB(b3(s),86)).e,u),DH(n.b,o);for(a=spn(t.a,0);a.b!=a.d.c;){for(r=spn((c=BB(b3(a),188)).a,0);r.b!=r.d.c;)UR(BB(b3(r),8),u);DH(n.a,c)}}function TLn(n,t,e){var i,r,c;if(!(c=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));if(ZM(),!BB(c,66).Oj()&&!(c=Z1(B7(Z$t,c))))throw Hp(new _y(r6n+t.ne()+c6n));r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).ml(t,e)}function MLn(n,t){var e,i,r,c,a;for(e=new Np,r=wnn(new Rq(null,new w1(n,16)),new Ea),c=wnn(new Rq(null,new w1(n,16)),new Ta),a=M7(H6(LV(SNn(Pun(Gk(eit,1),HWn,833,0,[r,c])),new Ma))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&WB(e,new kB(a[i-1]+t,a[i]-t));return e}function SLn(n,t,e){OTn(e,"Eades radial",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),n.d=BB(ZAn(t,(wD(),Vkt)),33),n.c=Gy(MD(ZAn(t,(Uyn(),Djt)))),n.e=Evn(BB(ZAn(t,Rjt),293)),n.a=lwn(BB(ZAn(t,_jt),426)),n.b=qjn(BB(ZAn(t,$jt),340)),rjn(n),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function PLn(n,t,e){var i,r,c,a,u;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&($in(a=$3(n,(tE(),u=new Em,!!t&&BLn(u,t),u),r),R2(r,q6n)),STn(r,a),OCn(r,a),xon(n,r,a))}function CLn(n){var t,e,i,r;if(!n.j){if(r=new Io,null==(t=P$t).a.zc(n,t)){for(i=new AL(kY(n));i.e!=i.i.gc();)pX(r,CLn(e=BB(kpn(i),26))),f9(r,e);t.a.Bc(n)}chn(r),n.j=new NO((BB(Wtn(QQ((QX(),t$t).o),11),18),r.i),r.g),P5(n).b&=-33}return n.j}function ILn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return GLt;if(45==t)return qLt}else if(3==e)return GLt;return new Dv(i)}function OLn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?gin(e):0==t&&0!=i&&0==e?gin(i)+22:0!=t&&0==i&&0==e?gin(t)+44:-1}function ALn(n,t){var e,i,r,c;for(OTn(t,"Edge joining",1),e=qy(TD(mMn(n,(HXn(),Dpt)))),i=new Wb(n.b);i.a<i.c.c.length;)for(c=new M2(BB(n0(i),29).a,0);c.b<c.d.gc();)Px(c.b<c.d.gc()),(r=BB(c.d.Xb(c.c=c.b++),10)).k==(uSn(),Put)&&(rGn(r,e),fW(c));HSn(t)}function $Ln(n,t,e){var i;if(h2(n.b),CU(n.b,(Pbn(),HEt),(OM(),GTt)),CU(n.b,qEt,t.g),CU(n.b,GEt,t.a),n.a=$qn(n.b,t),OTn(e,"Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),51).pf(t,mcn(e,1));HSn(e)}function LLn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function NLn(n){var t,i,r,c,a,u,o,s,h,f;for(i=n.o,t=n.p,u=DWn,c=_Vn,o=DWn,a=_Vn,h=0;h<i;++h)for(f=0;f<t;++f)vmn(n,h,f)&&(u=e.Math.min(u,h),c=e.Math.max(c,h),o=e.Math.min(o,f),a=e.Math.max(a,f));return s=c-u+1,r=a-o+1,new VV(iln(u),iln(o),iln(s),iln(r))}function xLn(n,t){var e,i,r,c;for(Px((c=new M2(n,0)).b<c.d.gc()),e=BB(c.d.Xb(c.c=c.b++),140);c.b<c.d.gc();)Px(c.b<c.d.gc()),r=new mH((i=BB(c.d.Xb(c.c=c.b++),140)).c,e.d,t),Px(c.b>0),c.a.Xb(c.c=--c.b),yR(c,r),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function DLn(n){var t,e,i,r,c;for(i=BB(mMn(n,(hWn(),Kft)),11),c=new Wb(n.j);c.a<c.c.c.length;){for(e=new Wb((r=BB(n0(c),11)).g);e.a<e.c.c.length;)return MZ(BB(n0(e),17),i),r;for(t=new Wb(r.e);t.a<t.c.c.length;)return SZ(BB(n0(t),17),i),r}return null}function RLn(n,t,i){var r,c;Vhn(r=fan(i.q.getTime()),0)<0?(c=VVn-dG(ldn(j7(r),VVn)))==VVn&&(c=0):c=dG(ldn(r,VVn)),1==t?xX(n,48+(c=e.Math.min((c+50)/100|0,9))&QVn):2==t?Enn(n,c=e.Math.min((c+5)/10|0,99),2):(Enn(n,c,3),t>3&&Enn(n,0,t-3))}function KLn(n){var t,e,i,r;return GI(mMn(n,(HXn(),sgt)))===GI((ufn(),pCt))?!n.e&&GI(mMn(n,Rdt))!==GI((Kan(),kft)):(i=BB(mMn(n,Kdt),292),r=qy(TD(mMn(n,Hdt)))||GI(mMn(n,qdt))===GI((Oin(),sht)),t=BB(mMn(n,Ddt),19).a,e=n.a.c.length,!r&&i!=(Kan(),kft)&&(0==t||t>e))}function _Ln(n){var t,e;for(e=0;e<n.c.length&&!(sq((l1(e,n.c.length),BB(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(sq((l1(t,n.c.length),BB(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function FLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(vkn(n,t))throw Hp(new _y(w6n+ROn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,6,i)),(i=QD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,6,t,t))}function BLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(vkn(n,t))throw Hp(new _y(w6n+URn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?fkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,9,i)),(i=YD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,9,t,t))}function HLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+lHn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Mkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,12,i)),(i=VD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function qLn(n){var t,e,i,r,c;if(i=Ikn(n),null==(c=n.j)&&i)return n.$j()?null:i.zj();if(cL(i,148)){if((e=i.Aj())&&(r=e.Nh())!=n.i){if((t=BB(i,148)).Ej())try{n.g=r.Kh(t,c)}catch(a){if(!cL(a=lun(a),78))throw Hp(a);n.g=null}n.i=r}return n.g}return null}function GLn(n){var t;return WB(t=new Np,new xS(new xC(n.c,n.d),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c,n.d),new xC(n.c,n.d+n.a))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a))),t}function zLn(n,t,e,i){var r,c,a;if(a=Ajn(t,e),i.c[i.c.length]=t,-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new oz(ZL(hbn(a).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&(b5(r)||r.c.i.c!=r.d.i.c)&&r!=t)return zLn(n,r,a,i);return i}function ULn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=BB(r.Pb(),79),!BB(RX(n.b,i),266)&&(JJ(PMn(i))==JJ(OMn(i))?tDn(n,i,e):PMn(i)==JJ(OMn(i))?null==RX(n.c,i)&&null!=RX(n.b,OMn(i))&&rzn(n,i,e,!1):null==RX(n.d,i)&&null!=RX(n.b,PMn(i))&&rzn(n,i,e,!0))}function XLn(n,t){var e,i,r,c,a,u,o;for(r=n.Kc();r.Ob();)for(i=BB(r.Pb(),10),CZ(u=new CSn,i),qCn(u,(kUn(),oIt)),hon(u,(hWn(),jlt),(hN(),!0)),a=t.Kc();a.Ob();)c=BB(a.Pb(),10),CZ(o=new CSn,c),qCn(o,CIt),hon(o,jlt,!0),hon(e=new wY,jlt,!0),SZ(e,u),MZ(e,o)}function WLn(n,t,e,i){var r,c,a,u;r=Adn(n,t,e),c=Adn(n,e,t),a=BB(RX(n.c,t),112),u=BB(RX(n.c,e),112),r<c?new zZ((O6(),Myt),a,u,c-r):c<r?new zZ((O6(),Myt),u,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new zZ((O6(),Myt),a,u,0),new zZ(Myt,u,a,0))}function VLn(n,t){var e,i,r,c,a,u;for(r=0,a=new Wb(t.a);a.a<a.c.c.length;)for(r+=(c=BB(n0(a),10)).o.b+c.d.a+c.d.d+n.e,i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)(e=BB(U5(i),17)).c.i.k==(uSn(),Iut)&&(r+=(u=BB(mMn(e.c.i,(hWn(),dlt)),10)).o.b+u.d.a+u.d.d);return r}function QLn(n,t,e){var i,r,c,a,u,o,s;for(c=new Np,OBn(n,s=new YT,a=new YT,t),Ezn(n,s,a,t,e),o=new Wb(n);o.a<o.c.c.length;)for(r=new Wb((u=BB(n0(o),112)).k);r.a<r.c.c.length;)i=BB(n0(r),129),(!t||i.c==(O6(),Tyt))&&u.g>i.b.g&&(c.c[c.c.length]=i);return c}function YLn(){YLn=O,DEt=new jC("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),xEt=new jC("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KEt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),REt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),_Et=new jC("WHOLE_DRAWING",4)}function JLn(n,t){if(cL(t,239))return hln(n,BB(t,33));if(cL(t,186))return Dln(n,BB(t,118));if(cL(t,354))return tQ(n,BB(t,137));if(cL(t,352))return JFn(n,BB(t,79));if(t)return null;throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function ZLn(n){var t,e,i,r,c,a,u;for(c=new YT,r=new Wb(n.d.a);r.a<r.c.c.length;)0==(i=BB(n0(r),121)).b.a.c.length&&r5(c,i,c.c.b,c.c);if(c.b>1)for(t=AN((e=new qv,++n.b,e),n.d),u=spn(c,0);u.b!=u.d.c;)a=BB(b3(u),121),UNn(aM(cM(uM(rM(new Hv,1),0),t),a))}function nNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(vkn(n,t))throw Hp(new _y(w6n+zRn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,10,i)),(i=zR(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,t,t))}function tNn(n){var t,e,i,r;for(i=new usn(new Pb(n.b).a);i.b;)r=BB((e=ten(i)).cd(),11),hon(t=BB(e.dd(),10),(hWn(),dlt),r),hon(r,Elt,t),hon(r,elt,(hN(),!0)),qCn(r,BB(mMn(t,Qft),61)),mMn(t,Qft),hon(r.i,(HXn(),ept),(QEn(),VCt)),BB(mMn(vW(r.i),Zft),21).Fc((bDn(),dft))}function eNn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Wb(n.d.i.j);c.a<c.c.c.length;)i+=BB(n0(c),11).e.c.length;else i=1;if(n.d)for(c=new Wb(n.c.i.j);c.a<c.c.c.length;)r+=BB(n0(c),11).g.c.length;else r=1;return(e+t)/2+.4*CJ(HH(r-i))*(e-t)}function iNn(n){var t,e;if(LEn(),n.Hc((kUn(),PIt)))throw Hp(new _y("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return Mst;case 2:return t=n.Hc(oIt)&&n.Hc(CIt),e=n.Hc(sIt)&&n.Hc(SIt),t||e?Cst:Pst;case 3:return Sst;case 4:return Tst;default:return null}}function rNn(n,t,e){var i,r,c,a;for(OTn(e,"Breaking Point Removing",1),n.a=BB(mMn(t,(HXn(),Zdt)),218),r=new Wb(t.b);r.a<r.c.c.length;)for(a=new Wb(a0(BB(n0(r),29).a));a.a<a.c.c.length;)Jnn(c=BB(n0(a),10))&&!(i=BB(mMn(c,(hWn(),Rft)),305)).d&&zUn(n,i);HSn(e)}function cNn(n,t,e){return jDn(),(!Dcn(n,t)||!Dcn(n,e))&&(mzn(new xC(n.c,n.d),new xC(n.c+n.b,n.d),t,e)||mzn(new xC(n.c+n.b,n.d),new xC(n.c+n.b,n.d+n.a),t,e)||mzn(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a),t,e)||mzn(new xC(n.c,n.d+n.a),new xC(n.c,n.d),t,e))}function aNn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=SD(n.Xb(e)))?null==t:mK(c.substr(0,3),"!##")?null!=t&&(r=t.length,!mK(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!mK(S7n,t):mK(c,P7n)&&!mK(S7n,t)||mK(c,t))return!0;return!1}function uNn(n,t,e,i){var r,c,a,u,o,s;for(a=n.j.c.length,o=x8(art,rJn,306,a,0,1),u=0;u<a;u++)(c=BB(xq(n.j,u),11)).p=u,o[u]=hOn(mAn(c),e,i);for(VNn(n,o,e,t,i),s=new xp,r=0;r<o.length;r++)o[r]&&VW(s,BB(xq(n.j,r),11),o[r]);s.f.c+s.g.c!=0&&(hon(n,(hWn(),zft),s),ASn(n,o))}function oNn(n,t,e){var i,r;for(i=new Wb(n.a.b);i.a<i.c.c.length;)if((r=f2(BB(n0(i),57)))&&r.k==(uSn(),Mut))switch(BB(mMn(r,(hWn(),Qft)),61).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function sNn(){sNn=O,Ivt=new HP(QZn,0),Tvt=new HP("NIKOLOV",1),Pvt=new HP("NIKOLOV_PIXEL",2),Mvt=new HP("NIKOLOV_IMPROVED",3),Svt=new HP("NIKOLOV_IMPROVED_PIXEL",4),Evt=new HP("DUMMYNODE_PERCENTAGE",5),Cvt=new HP("NODECOUNT_PERCENTAGE",6),Ovt=new HP("NO_BOUNDARY",7)}function hNn(n,t,e){var i,r,c;if(!(r=BB(ZAn(t,(SMn(),UMt)),19))&&(r=iln(0)),!(c=BB(ZAn(e,UMt),19))&&(c=iln(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=Pln(t.j,e.j)))return i;if(0!=(i=Pln(t.i,e.i)))return i}return Pln(t.g*t.f,e.g*e.f)}function fNn(n,t){var e,i,r,c,a,u,o,s,h,f;if(++n.e,t>(o=null==n.d?0:n.d.length)){for(h=n.d,n.d=x8(oAt,c9n,63,2*o+4,0,1),c=0;c<o;++c)if(s=h[c])for(i=s.g,f=s.i,u=0;u<f;++u)a=eR(n,(r=BB(i[u],133)).Sh()),!(e=n.d[a])&&(e=n.d[a]=n.uj()),e.Fc(r);return!0}return!1}function lNn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak()))throw Hp(new _y(I7n));sln(n,t,e)}function bNn(n,t){var e,i,r,c,a,u;for(e=BB(mMn(t,(hWn(),Xft)),21),a=BB(h6((RXn(),fut),e),21),u=BB(h6(put,e),21),c=a.Kc();c.Ob();)if(i=BB(c.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;for(r=u.Kc();r.Ob();)if(i=BB(r.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;return!0}function wNn(n,t){var e,i,r;for(OTn(t,"Partition postprocessing",1),e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)for(r=new Wb(BB(n0(i),10).j);r.a<r.c.c.length;)qy(TD(mMn(BB(n0(r),11),(hWn(),jlt))))&&AU(r);HSn(t)}function dNn(n,t){var e,i,r,c,a,u,o;if(1==n.a.c.length)return FSn(BB(xq(n.a,0),187),t);for(r=cfn(n),a=0,u=n.d,i=r,o=n.d,c=(u-i)/2+i;i+1<u;){for(a=0,e=new Wb(n.a);e.a<e.c.c.length;)a+=cHn(BB(n0(e),187),c,!1).a;a<t?(o=c,u=c):i=c,c=(u-i)/2+i}return o}function gNn(n){var t,e,i,r;return isNaN(n)?(X7(),gtt):n<-0x8000000000000000?(X7(),wtt):n>=0x8000000000000000?(X7(),btt):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=OQn&&(n-=(e=CJ(n/OQn))*OQn),t=0,n>=IQn&&(n-=(t=CJ(n/IQn))*IQn),r=M$(CJ(n),t,e),i&&Oon(r),r)}function pNn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((lIn(),eIt)),c=0,r=new Wb(n.e.Cf());r.a<r.c.c.length;){if((i=BB(n0(r),838)).Hf()==(kUn(),PIt))throw Hp(new _y("Label and node size calculator can only be used with ports that have port sides assigned."));i.vf(c++),Whn(n,i,e)}}function vNn(n,t){var e,i,r,c;return(i=t.Hh(n.a))&&(!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),null!=(e=SD(cdn(i.b,J9n)))&&cL(c=-1==(r=e.lastIndexOf("#"))?uD(n,t.Aj(),e):0==r?M9(n,null,e.substr(1)):M9(n,e.substr(0,r),e.substr(r+1)),148))?BB(c,148):null}function mNn(n,t){var e,i,r,c;return(e=t.Hh(n.a))&&(!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),null!=(r=SD(cdn(e.b,k7n)))&&cL(c=-1==(i=r.lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148))?BB(c,148):null}function yNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),307)).j=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),57)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),57)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function kNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),189)).f=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),81)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),81)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function jNn(n){var t,i,r;return i=BB(n.a,19).a,r=BB(n.b,19).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new rI(iln(i+1),iln(r)):i==t&&r<t?new rI(iln(i),iln(r+1)):i>=-t&&r==t?new rI(iln(i-1),iln(r)):new rI(iln(i),iln(r-1))}function ENn(){return lWn(),Pun(Gk(ust,1),$Vn,77,0,[rot,tot,cot,kot,Fot,Mot,Uot,Oot,Kot,got,Not,Iot,_ot,lot,Wot,Vut,Lot,Hot,jot,Bot,Qot,Dot,Qut,Rot,Yot,Got,Vot,Eot,sot,Tot,yot,Xot,Zut,uot,Pot,Jut,Cot,vot,bot,Aot,dot,eot,not,mot,wot,$ot,zot,Yut,xot,pot,Sot,hot,oot,qot,aot,fot,iot])}function TNn(n,t,e){n.d=0,n.b=0,t.k==(uSn(),Iut)&&e.k==Iut&&BB(mMn(t,(hWn(),dlt)),10)==BB(mMn(e,dlt),10)&&(S7(t).j==(kUn(),sIt)?q$n(n,t,e):q$n(n,e,t)),t.k==Iut&&e.k==Put?S7(t).j==(kUn(),sIt)?n.d=1:n.b=1:e.k==Iut&&t.k==Put&&(S7(e).j==(kUn(),sIt)?n.b=1:n.d=1),umn(n,t,e)}function MNn(n){var t,e,i,r,c;return c=ATn(n),null!=n.a&&AH(c,"category",n.a),!WE(new Cb(n.d))&&(rtn(c,"knownOptions",i=new Cl),t=new ep(i),e5(new Cb(n.d),t)),!WE(n.g)&&(rtn(c,"supportedFeatures",r=new Cl),e=new ip(r),e5(n.g,e)),c}function SNn(n){var t,e,i,r,c,a,u,o;for(t=336,e=0,r=new sR(n.length),u=0,o=(a=n).length;u<o;++u)Qln(c=a[u]),EW(c),i=c.a,WB(r.a,yX(i)),t&=i.qd(),e=Ysn(e,i.rd());return BB(BB(XU(new Rq(null,qTn(new w1((WX(),Nwn(r.a)),16),new k,t,e)),new El(n)),670),833)}function PNn(n,t){var e;n.d&&(t.c!=n.e.c||fcn(n.e.b,t.b))&&(WB(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),nA(t.b)?n.c=t:n.b=t,(t.b==(Aun(),Zat)&&!t.a||t.b==nut&&t.a||t.b==tut&&t.a||t.b==eut&&!t.a)&&n.c&&n.b&&(e=new UV(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function CNn(n){var t;if(Ym.call(this),this.i=new lu,this.g=n,this.f=BB(n.e&&n.e(),9).length,0==this.f)throw Hp(new _y("There must be at least one phase in the phase enumeration."));this.c=new YK(t=BB(Vj(this.g),9),BB(SR(t,t.length),9),0),this.a=new B2,this.b=new xp}function INn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(vkn(n,t))throw Hp(new _y(w6n+cPn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,1,DOt,i)),(i=VG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,t,t))}function ONn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+Vfn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?bkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,0,BOt,i)),(i=QG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function ANn(n,t){var e,i,r,c,a,u,o,s,h;return $On(),t.d>n.d&&(u=n,n=t,t=u),t.d<63?Xxn(n,t):(s=z5(n,a=(-2&n.d)<<4),h=z5(t,a),i=uBn(n,G5(s,a)),r=uBn(t,G5(h,a)),o=ANn(s,h),e=ANn(i,r),c=G5(c=$Hn($Hn(c=ANn(uBn(s,i),uBn(r,h)),o),e),a),$Hn($Hn(o=G5(o,a<<1),c),e))}function $Nn(n,t,e){var i,r,c,a,u;for(a=Lfn(n,e),u=x8(Out,a1n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)qy(TD(mMn(r=BB(c.Pb(),11),(hWn(),elt))))&&(u[i++]=BB(mMn(r,Elt),10));if(i<t.length)throw Hp(new Fy("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return u}function LNn(n,t){var e,i,r,c,a,u;if(!n.tb){for(!n.rb&&(n.rb=new Jz(n,HAt,n)),u=new XT((c=n.rb).i),r=new AL(c);r.e!=r.i.gc();)i=BB(kpn(r),138),(e=BB(null==(a=i.ne())?jCn(u.f,null,i):ubn(u.g,a,i),138))&&(null==a?jCn(u.f,null,e):ubn(u.g,a,e));n.tb=u}return BB(SJ(n.tb,t),138)}function NNn(n,t){var e,i,r,c,a;if((null==n.i&&qFn(n),n.i).length,!n.p){for(a=new XT(1+(3*n.g.i/2|0)),r=new ax(n.g);r.e!=r.i.gc();)i=BB(jpn(r),170),(e=BB(null==(c=i.ne())?jCn(a.f,null,i):ubn(a.g,c,i),170))&&(null==c?jCn(a.f,null,e):ubn(a.g,c,e));n.p=a}return BB(SJ(n.p,t),170)}function xNn(n,t,e,i,r){var c,a,u,o;for(wgn(i+CY(e,e.$d()),r),tW(t,Lwn(e)),(c=e.f)&&xNn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=x8(Jnt,sVn,78,0,0,1)),u=0,o=(a=e.k).length;u<o;++u)xNn(n,t,a[u],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function DNn(n,t,e,i){var r,c,a,u;for(a=(u=t.e).length,c=t.q._f(u,e?0:a-1,e),c|=gRn(n,u[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.Sf(u,r,e,i&&!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,(hWn(),Ilt))))),c|=t.q._f(u,r,e),c|=gRn(n,u[r],e,i);return TU(n.c,t),c}function RNn(n,t,e){var i,r,c,a,u,o,s,h;for(s=0,h=(o=I2(n.j)).length;s<h;++s){if(u=o[s],e==(ain(),Hvt)||e==Gvt)for(c=0,a=(r=Z0(u.g)).length;c<a;++c)OSn(t,i=r[c])&&tBn(i,!0);if(e==qvt||e==Gvt)for(c=0,a=(r=Z0(u.e)).length;c<a;++c)ISn(t,i=r[c])&&tBn(i,!0)}}function KNn(n){var t,e;switch(t=null,e=null,eEn(n).g){case 1:kUn(),t=oIt,e=CIt;break;case 2:kUn(),t=SIt,e=sIt;break;case 3:kUn(),t=CIt,e=oIt;break;case 4:kUn(),t=sIt,e=SIt}Gl(n,BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)),ql(n,BB($N(Iz(BB(h6(n.k,e),15).Oc(),Qst)),113))}function _Nn(n){var t,e,i,r,c,a;if((r=BB(xq(n.j,0),11)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(r),new Gw(r)])));dAn(i);)a+=(e=BB(U5(i),11)).i.n.a+e.n.a+e.a.a;c=(t=BB(mMn(n,(HXn(),npt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function FNn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)e=BB(n0(i),221),LG(BB(e.b,65),XR(B$(BB(t.b,65).c),BB(t.b,65).a)),(r=Y_n(BB(t.b,65).b,BB(e.b,65).b))>1&&(n.a=!0),NG(BB(e.b,65),UR(B$(BB(t.b,65).c),kL(XR(B$(BB(e.b,65).a),BB(t.b,65).a),r))),QZ(n,t),FNn(n,e)}function BNn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),189)).e=0,e.d.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),189)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),81).f.Kc();a.Ob();)(c=BB(a.Pb(),81)).d!=e&&(TU(e.d,c),++c.d.e)}function HNn(n){var t,e,i,r,c,a,u,o;for(e=0,t=o=n.j.c.length,r=2*o,u=new Wb(n.j);u.a<u.c.c.length;)switch((a=BB(n0(u),11)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}SQ(),m$(n.j,new bi)}function qNn(n){var t,e;e=null,t=BB(xq(n.g,0),17);do{if(Lx(e=t.d.i,(hWn(),flt)))return BB(mMn(e,flt),11).i;if(e.k!=(uSn(),Cut)&&dAn(new oz(ZL(lbn(e).a.Kc(),new h))))t=BB(U5(new oz(ZL(lbn(e).a.Kc(),new h))),17);else if(e.k!=Cut)return null}while(e&&e.k!=(uSn(),Cut));return e}function GNn(n,t){var e,i,r,c,a,u,o,s,h;for(u=t.j,a=t.g,o=BB(xq(u,u.c.length-1),113),l1(0,u.c.length),s=Zmn(n,a,o,h=BB(u.c[0],113)),c=1;c<u.c.length;c++)l1(c-1,u.c.length),e=BB(u.c[c-1],113),l1(c,u.c.length),(i=Zmn(n,a,e,r=BB(u.c[c],113)))>s&&(o=e,h=r,s=i);t.a=h,t.c=o}function zNn(n,t){var e;if(!ZU(n.b,t.b))throw Hp(new Fy("Invalid hitboxes for scanline constraint calculation."));(kun(t.b,BB(MR(n.b,t.b),57))||kun(t.b,BB(TR(n.b,t.b),57)))&&($T(),t.b),n.a[t.b.f]=BB(kK(n.b,t.b),57),(e=BB(yK(n.b,t.b),57))&&(n.a[e.f]=t.b)}function UNn(n){if(!n.a.d||!n.a.e)throw Hp(new Fy((ED(Hit),Hit.k+" must have a source and target "+(ED(qit),qit.k+" specified."))));if(n.a.d==n.a.e)throw Hp(new Fy("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return RN(n.a.d.g,n.a),RN(n.a.e.b,n.a),n.a}function XNn(n,t,e){var i,r,c,a,u,o,s;for(s=new dE(new Jd(n)),u=0,o=(a=Pun(Gk(Gut,1),u1n,11,0,[t,e])).length;u<o;++u)for(c=a[u],Mon(s.a,c,(hN(),ptt)),r=new m6(c.b);y$(r.a)||y$(r.b);)(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==i.d||ZU(s,c==i.c?i.d:i.c);return yX(s),new t_(s)}function WNn(n,t,e){var i,r,c,a,u,o;if(i=0,0!=t.b&&0!=e.b){c=spn(t,0),a=spn(e,0),u=Gy(MD(b3(c))),o=Gy(MD(b3(a))),r=!0;do{if(u>o-n.b&&u<o+n.b)return-1;u>o-n.a&&u<o+n.a&&++i,u<=o&&c.b!=c.d.c?u=Gy(MD(b3(c))):o<=u&&a.b!=a.d.c?o=Gy(MD(b3(a))):r=!1}while(r)}return i}function VNn(n,t,e,i,r){var c,a,u,o;for(o=new YK(c=BB(Vj(FIt),9),BB(SR(c,c.length),9),0),u=new Wb(n.j);u.a<u.c.c.length;)t[(a=BB(n0(u),11)).p]&&(BUn(a,t[a.p],i),orn(o,a.j));r?(GEn(n,t,(kUn(),oIt),2*e,i),GEn(n,t,CIt,2*e,i)):(GEn(n,t,(kUn(),sIt),2*e,i),GEn(n,t,SIt,2*e,i))}function QNn(n){var t,e,i,r,c;if(c=new Np,Otn(n.b,new kw(c)),n.b.c=x8(Ant,HWn,1,0,5,1),0!=c.c.length){for(l1(0,c.c.length),t=BB(c.c[0],78),e=1,i=c.c.length;e<i;++e)l1(e,c.c.length),(r=BB(c.c[e],78))!=t&>n(t,r);if(cL(t,60))throw Hp(BB(t,60));if(cL(t,289))throw Hp(BB(t,289))}}function YNn(n,t){var e,i,r,c;for(n=null==n?zWn:(kW(n),n),e=new Ik,c=0,i=0;i<t.length&&-1!=(r=n.indexOf("%s",c));)oO(e,n.substr(c,r-c)),uO(e,t[i++]),c=r+2;if(oO(e,n.substr(c)),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function JNn(n){var t,e,i,r;for(t=0,r=(i=n.length)-4,e=0;e<r;)b1(e+3,n.length),t=n.charCodeAt(e+3)+(b1(e+2,n.length),31*(n.charCodeAt(e+2)+(b1(e+1,n.length),31*(n.charCodeAt(e+1)+(b1(e,n.length),31*(n.charCodeAt(e)+31*t)))))),t|=0,e+=4;for(;e<i;)t=31*t+fV(n,e++);return t|=0}function ZNn(n){var t;for(t=new oz(ZL(lbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).d.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function nxn(n,t,i,r){var c,a,u,o,s,f,l;for(o=0,s=new Wb(n.a);s.a<s.c.c.length;){for(u=0,a=new oz(ZL(fbn(BB(n0(s),10)).a.Kc(),new h));dAn(a);)f=g1((c=BB(U5(a),17)).c).b,l=g1(c.d).b,u=e.Math.max(u,e.Math.abs(l-f));o=e.Math.max(o,u)}return r*e.Math.min(1,t/i)*o}function txn(n){var t;return t=new Pk,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&k6n)&&(t.a+=","),Uy(t.a)}function exn(n,t){var e,i,r;for(OTn(t,"Resize child graph to fit parent.",1),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),29),gun(n.a,e.a),e.a.c=x8(Ant,HWn,1,0,5,1);for(r=new Wb(n.a);r.a<r.c.c.length;)PZ(BB(n0(r),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),Bxn(n),n.e&&S_n(n.e,n),HSn(t)}function ixn(n){var t,e,i,r,c,a,u;if(r=(i=n.b).e,c=LK(BB(mMn(i,(HXn(),ept)),98)),e=!!r&&BB(mMn(r,(hWn(),Zft)),21).Hc((bDn(),lft)),!c&&!e)for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(a=BB(t.dd(),113)).a&&(CZ(a.d,null),a.c=!0,n.a=!0)}function rxn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(f=-1,l=0,s=0,h=(o=n).length;s<h;++s){for(a=0,u=(c=o[s]).length;a<u;++a)for(r=c[a],t=new pP(-1==f?n[0]:n[f],okn(r)),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Nz(t,BB(xq(r.j,e),11),BB(xq(r.j,i),11))>0&&++l;++f}return l}function cxn(n,t){var e,i,r,c,a;for(a=BB(mMn(t,(CAn(),Lkt)),425),c=spn(t.b,0);c.b!=c.d.c;)if(r=BB(b3(c),86),0==n.b[r.g]){switch(a.g){case 0:Qvn(n,r);break;case 1:HAn(n,r)}n.b[r.g]=2}for(i=spn(n.a,0);i.b!=i.d.c;)ywn((e=BB(b3(i),188)).b.d,e,!0),ywn(e.c.b,e,!0);hon(t,(qqn(),lkt),n.a)}function axn(n,t){var e,i,r,c;return ZM(),t?t==(Uqn(),KLt)||(t==yLt||t==vLt||t==mLt)&&n!=pLt?new cUn(n,t):((e=(i=BB(t,677)).pk())||(kV(B7((IPn(),Z$t),t)),e=i.pk()),!e.i&&(e.i=new xp),!(r=BB(qI(AY((c=e.i).f,n)),1942))&&VW(c,n,r=new cUn(n,t)),r):aLt}function uxn(n,t){var e,i,r,c,a,u,o,s;for(u=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).a,s=n.i.n.b,r=0,c=(i=Z0(n.e)).length;r<c;++r)MZ(e=i[r],u),fO(e.a,new xC(o,s)),t&&((a=BB(mMn(e,(HXn(),vgt)),74))||(a=new km,hon(e,vgt,a)),DH(a,new xC(o,s)))}function oxn(n,t){var e,i,r,c,a,u,o,s;for(i=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,u=(c=Z0(n.g)).length;a<u;++a)SZ(r=c[a],i),hO(r.a,new xC(o,s)),t&&((e=BB(mMn(r,(HXn(),vgt)),74))||(e=new km,hon(r,vgt,e)),DH(e,new xC(o,s)))}function sxn(n,t){var e,i,r,c,a;for(n.b=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230),n.e=c0(n.d),c=new YT,r=u6(Pun(Gk(jut,1),JZn,37,0,[t])),a=0;a<r.c.length;)l1(a,r.c.length),(i=BB(r.c[a],37)).p=a++,gun(r,(e=new CGn(i,n.a,n.b)).b),WB(n.b,e),e.s&&nX(spn(c,0),e);return n.c=new Rv,c}function hxn(n,t){var e,i,r,c,a,u;for(a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)(e=(c=BB(a.Pb(),111)).c?VH(c.c):0)>0?c.a?e>(u=c.b.rf().a)&&(r=(e-u)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:Hz(n.u)&&((i=_Tn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.rf().a&&(c.d.c=i.c+i.b-c.b.rf().a))}function fxn(n,t){var e,i;for(OTn(t,"Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Wb(n.b);i.a<i.c.c.length;)e|=null!=$fn(ytn(AV(AV(new Rq(null,new w1(BB(n0(i),29).a,16)),new Qi),new Yi),new Ji),new Zi).a;e&&hon(n,(hWn(),alt),(hN(),!0)),HSn(t)}function lxn(n,t,e){var i,r,c;if(!(r=e)&&(r=new Xm),OTn(r,"Layout",n.a.c.length),qy(TD(mMn(t,(CAn(),Ekt)))))for($T(),i=0;i<n.a.c.length;i++)i++,nE(tsn(BB(xq(n.a,i),51)));for(c=new Wb(n.a);c.a<c.c.c.length;)BB(n0(c),51).pf(t,mcn(r,1));HSn(r)}function bxn(n){var t,i;if(t=BB(n.a,19).a,i=BB(n.b,19).a,t>=0){if(t==i)return new rI(iln(-t-1),iln(-t-1));if(t==-i)return new rI(iln(-t),iln(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new rI(iln(-t),iln(t<0?i:i+1)):new rI(iln(t+1),iln(i))}function wxn(n){var t,e;e=BB(mMn(n,(HXn(),kgt)),163),t=BB(mMn(n,(hWn(),ilt)),303),e==(Tbn(),Flt)?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Cft))):e==Hlt?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Sft))):t==(z7(),Cft)?(hon(n,kgt,Flt),hon(n,ilt,Pft)):t==Sft&&(hon(n,kgt,Hlt),hon(n,ilt,Pft))}function dxn(){dxn=O,jyt=new oa,vyt=dq(new B2,(yMn(),_at),(lWn(),jot)),kyt=WG(dq(new B2,_at,Dot),Bat,xot),Eyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),myt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),yyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function gxn(){gxn=O,Cyt=dq(WG(new B2,(yMn(),Bat),(lWn(),hot)),_at,jot),$yt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),Iyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),Ayt=dq(dq(new B2,_at,Dot),Bat,xot),Oyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function pxn(n,t,e,i,r){var c,a;(b5(t)||t.c.i.c!=t.d.i.c)&&nrn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])),e)||b5(t)||(t.c==r?Kx(t.a,0,new wA(e)):DH(t.a,new wA(e)),i&&!FT(n.a,e)&&((a=BB(mMn(t,(HXn(),vgt)),74))||(a=new km,hon(t,vgt,a)),r5(a,c=new wA(e),a.c.b,a.c),TU(n.a,c)))}function vxn(n){var t;for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).c.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function mxn(n,t,e){var i,r,c,a,u,o;if(0==(r=pbn(254&n.Db)))n.Eb=e;else{if(1==r)a=x8(Ant,HWn,1,2,5,1),0==Rmn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=x8(Ant,HWn,1,r+1,5,1),c=een(n.Eb),i=2,u=0,o=0;i<=128;i<<=1)i==t?a[o++]=e:0!=(n.Db&i)&&(a[o++]=c[u++]);n.Eb=a}n.Db|=t}function yxn(n,t,i){var r,c,a,u;for(this.b=new Np,c=0,r=0,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),167),i&&KBn(a),WB(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=BB(xq(this.b,0),167)).o,r+=a.p),c*=2,r*=2,t>1?c=CJ(e.Math.ceil(c*t)):r=CJ(e.Math.ceil(r/t)),this.a=new qwn(c,r)}function kxn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=BB(RX(n.f,t.A),57)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=BB(RX(n.f,i.C),57)).d.c,++f):s=i.a.c,w=d+(o=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(u=BB(a.Xb(l),128)).a.b,u.a.c=w-g/2,w+=o}function jxn(n,t,e,i,r,c){var a,u,o,s,h,f;for(s=e.c.length,c&&(n.c=x8(ANt,hQn,25,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(u=t[a],o=i==(kUn(),oIt)?r?abn(u,i):ean(abn(u,i)):r?ean(abn(u,i)):abn(u,i),c&&(n.c[u.p]=o.gc()),f=o.Kc();f.Ob();)h=BB(f.Pb(),11),n.d[h.p]=s++;gun(e,o)}}function Exn(n,t,e){var i,r,c,a,u,o,s,h;for(c=Gy(MD(n.b.Kc().Pb())),s=Gy(MD(Wan(t.b))),i=kL(B$(n.a),s-e),r=kL(B$(t.a),e-c),kL(h=UR(i,r),1/(s-c)),this.a=h,this.b=new Np,u=!0,(a=n.b.Kc()).Pb();a.Ob();)o=Gy(MD(a.Pb())),u&&o-e>D3n&&(this.b.Fc(e),u=!1),this.b.Fc(o);u&&this.b.Fc(e)}function Txn(n){var t,e,i,r;if(hKn(n,n.n),n.d.c.length>0){for(nk(n.c);pAn(n,BB(n0(new Wb(n.e.a)),121))<n.e.a.c.length;){for(r=(t=Ryn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Wb(n.e.a);i.a<i.c.c.length;)(e=BB(n0(i),121)).j&&(e.e+=r);nk(n.c)}nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}}function Mxn(n,t){var e,i,r,c,a;for(r=BB(h6(n.a,(LEn(),Mst)),15).Kc();r.Ob();)switch(i=BB(r.Pb(),101),e=BB(xq(i.j,0),113).d.j,m$(c=new t_(i.j),new Jr),t.g){case 1:NEn(n,c,e,(Crn(),Dst),1);break;case 0:NEn(n,new s1(c,0,a=_Ln(c)),e,(Crn(),Dst),0),NEn(n,new s1(c,a,c.c.length),e,Dst,1)}}function Sxn(n,t){var e,i;if(Nun(),e=T5(cin(),t.tg())){if(i=e.j,cL(n,239))return rZ(BB(n,33))?SN(i,(rpn(),sMt))||SN(i,hMt):SN(i,(rpn(),sMt));if(cL(n,352))return SN(i,(rpn(),uMt));if(cL(n,186))return SN(i,(rpn(),fMt));if(cL(n,354))return SN(i,(rpn(),oMt))}return!0}function Pxn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak())&&a!=t)throw Hp(new _y(I7n));return BB(ovn(n,t,e),72)}function Cxn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.Zd();return n&&n.Xd()}},suppressed:{get:function(){return e.Yd()}}})}catch(i){}}function Ixn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(ODn(),Ytt):(ODn(),eet);if(c=n.d-i,QSn(r=x8(ANt,hQn,25,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return X0(a=new lU(n.e,c,r)),a}function Oxn(n){var t,e,i,r;return e=new $w(r=WJ(n)),i=new Lw(r),gun(t=new Np,(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),gun(t,(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),BB(P4($V(AV(new Rq(null,new w1(t,16)),e),i),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)}function Axn(n,t,e,i){var r,c,a,u,o;if(ZM(),u=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),t),r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak()))throw Hp(new _y(I7n));sln(n,EPn(n,t,e),u?BB(i,72):Z3(t,i))}function $xn(n,t){var e,i,r;return ZM(),!!t.$j()||-2==t.Zj()&&(t==(TOn(),lLt)||t==sLt||t==hLt||t==fLt||!(Awn(r=n.Tg(),t)>=0)&&(!(e=Fqn((IPn(),Z$t),r,t))||((i=e.Zj())>1||-1==i)&&3!=DW(B7(Z$t,e))))}function Lxn(n,t,e,i){var r,c,a,u,o;return u=PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82)),JJ(u)==JJ(o)||Ctn(o,u)?null:(a=XJ(t))==e?i:(c=BB(RX(n.a,a),10))&&(r=c.e)?r:null}function Nxn(n,t){var e;switch(OTn(t,"Label side selection ("+(e=BB(mMn(n,(HXn(),Jdt)),276))+")",1),e.g){case 0:TAn(n,(Xyn(),jCt));break;case 1:TAn(n,(Xyn(),ECt));break;case 2:sBn(n,(Xyn(),jCt));break;case 3:sBn(n,(Xyn(),ECt));break;case 4:uDn(n,(Xyn(),jCt));break;case 5:uDn(n,(Xyn(),ECt))}HSn(t)}function xxn(n,t,e){var i,r,c,a,u;if((c=n[lj(e,n.length)])[0].k==(uSn(),Mut))for(r=fj(e,c.length),u=t.j,i=0;i<u.c.length;i++)l1(i,u.c.length),a=BB(u.c[i],11),(e?a.j==(kUn(),oIt):a.j==(kUn(),CIt))&&qy(TD(mMn(a,(hWn(),elt))))&&(c5(u,i,BB(mMn(c[r],(hWn(),dlt)),11)),r+=e?1:-1)}function Dxn(n,t){var e,i,r,c,a;a=new Np,e=t;do{(c=BB(RX(n.b,e),128)).B=e.c,c.D=e.d,a.c[a.c.length]=c,e=BB(RX(n.k,e),17)}while(e);return l1(0,a.c.length),(i=BB(a.c[0],128)).j=!0,i.A=BB(i.d.a.ec().Kc().Pb(),17).c.i,(r=BB(xq(a,a.c.length-1),128)).q=!0,r.C=BB(r.d.a.ec().Kc().Pb(),17).d.i,a}function Rxn(n){if(null==n.g)switch(n.p){case 0:n.g=fZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.g=Pnn(D3(n));break;case 2:n.g=fun(Q1(n));break;case 3:n.g=OW(n);break;case 4:n.g=new Nb(IW(n));break;case 6:n.g=jgn(AW(n));break;case 5:n.g=iln(hJ(n));break;case 7:n.g=rln(_3(n))}return n.g}function Kxn(n){if(null==n.n)switch(n.p){case 0:n.n=lZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.n=Pnn(R3(n));break;case 2:n.n=fun(Y1(n));break;case 3:n.n=LW(n);break;case 4:n.n=new Nb(NW(n));break;case 6:n.n=jgn($W(n));break;case 5:n.n=iln(fJ(n));break;case 7:n.n=rln(K3(n))}return n.n}function _xn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),307)).g=0,e.i=0,e.e.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),307)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),57).c.Kc();a.Ob();)(c=BB(a.Pb(),57)).a!=e&&(TU(e.e,c),++c.a.g,++c.a.i)}function Fxn(n,t){var e,i,r;if(!ZU(n.a,t.b))throw Hp(new Fy("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=new Fb(new BR(new xN(new _b(n.a.a).a).b));aS(i.a.a);)if(e=BB(mx(i.a).cd(),65),eon(t.b,e))xj(n.b.a,t.b,e),r=!0;else if(r)break}function Bxn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),XBn(n,i,t)}function Hxn(n,t){var e,i,r,c,a,u,o,s;r=t?new pc:new vc,c=!1;do{for(c=!1,a=(t?ean(n.b):n.b).Kc();a.Ob();)for(s=a0(BB(a.Pb(),29).a),t||new fy(s),o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),r.Mb(u)&&(i=u,e=BB(mMn(u,(hWn(),Rft)),305),c=eRn(i,t?e.b:e.k,t,!1))}while(c)}function qxn(n,t,e){var i,r,c,a;for(OTn(e,"Longest path layering",1),n.a=t,a=n.a.a,n.b=x8(ANt,hQn,25,a.c.length,15,1),i=0,c=new Wb(a);c.a<c.c.c.length;)BB(n0(c),10).p=i,n.b[i]=-1,++i;for(r=new Wb(a);r.a<r.c.c.length;)D$n(n,BB(n0(r),10));a.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,HSn(e)}function Gxn(n,t){var e,i,r;t.a?(ZU(n.b,t.b),n.a[t.b.i]=BB(kK(n.b,t.b),81),(e=BB(yK(n.b,t.b),81))&&(n.a[e.i]=t.b)):(!!(i=BB(kK(n.b,t.b),81))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=BB(yK(n.b,t.b),81))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),MN(n.b,t.b))}function zxn(n,t){var i,r,c,a,u,o;return a=n.d,(o=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,o=0),t.o.b=o,u=e.Math.floor(o/2),qCn(r=new CSn,(kUn(),CIt)),CZ(r,t),r.n.b=u,qCn(c=new CSn,oIt),CZ(c,t),c.n.b=u,MZ(n,r),qan(i=new wY,n),hon(i,vgt,null),SZ(i,c),MZ(i,a),jFn(t,n,i),sCn(n,i),i}function Uxn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=new B2,e.Hc((bDn(),bft))&&(Jcn(t,byt),Jcn(t,dyt)),(e.Hc(dft)||qy(TD(mMn(n,(HXn(),ugt)))))&&(Jcn(t,dyt),e.Hc(gft)&&Jcn(t,gyt)),e.Hc(lft)&&Jcn(t,lyt),e.Hc(vft)&&Jcn(t,pyt),e.Hc(wft)&&Jcn(t,wyt),e.Hc(sft)&&Jcn(t,hyt),e.Hc(fft)&&Jcn(t,fyt),t}function Xxn(n,t){var e,i,r,c,a,u,o,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=dG(o=cbn(e0(n.a[0],UQn),e0(t.a[0],UQn))),0==(s=dG(jz(o,32)))?new X6(a,h):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[h,s]))):(Dfn(n.a,e,t.a,i,r=x8(ANt,hQn,25,c,15,1)),X0(u=new lU(a,c,r)),u)}function Wxn(n,t,e,i){var r,c;return t?0==(r=n.a.ue(e.d,t.d))?(i.d=pR(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=Wxn(n,t.a[c],e,i),Vy(t.a[c])&&(Vy(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):Vy(t.a[c].a[c])?t=wrn(t,1-c):Vy(t.a[c].a[1-c])&&(t=r2(t,1-c))),t):e}function Vxn(n,t,i){var r,c,a,u;c=n.i,r=n.n,Y5(n,(Dtn(),Git),c.c+r.b,i),Y5(n,Uit,c.c+c.b-r.c-i[2],i),u=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,u-=i[0]),i[2]>0&&(i[2]+=n.d,u-=i[2]),a=e.Math.max(0,u),i[1]=e.Math.max(i[1],u),Y5(n,zit,c.c+r.b+i[0]-(i[1]-u)/2,i),t==zit&&(n.c.b=a,n.c.c=c.c+r.b+(a-u)/2)}function Qxn(){this.c=x8(xNt,qQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),this.a=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),mS(this.c,RQn),mS(this.b,KQn),mS(this.a,KQn)}function Yxn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=x8(ANt,hQn,25,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=x8(ANt,hQn,25,i+2,15,1),aHn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||T$n(n)}}function Jxn(n,t,e){var i,r,c,a,u,o,s;for(s=t.d,n.a=new J6(s.c.length),n.c=new xp,u=new Wb(s);u.a<u.c.c.length;)a=BB(n0(u),101),c=new Fan(null),WB(n.a,c),VW(n.c,a,c);for(n.b=new xp,vCn(n,t),i=0;i<s.c.length-1;i++)for(o=BB(xq(t.d,i),101),r=i+1;r<s.c.length;r++)WLn(n,o,BB(xq(t.d,r),101),e)}function Zxn(n,t,e){var i,r,c,a,u,o;if(!h3(t)){for(OTn(o=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),u=new Ia,a=0,c=t.Kc();c.Ob();)i=BB(c.Pb(),86),u=Wen(Pun(Gk(xnt,1),HWn,20,0,[u,new bg(i)])),a<i.f.b&&(a=i.f.b);for(r=t.Kc();r.Ob();)hon(i=BB(r.Pb(),86),(qqn(),ukt),a);HSn(o),Zxn(n,u,e)}}function nDn(n,t){var i,r,c,a,u,o,s;for(i=KQn,uSn(),o=Cut,c=new Wb(t.a);c.a<c.c.c.length;)(a=(r=BB(n0(c),10)).k)!=Cut&&(null==(u=MD(mMn(r,(hWn(),plt))))?(i=e.Math.max(i,0),r.n.b=i+XN(n.a,a,o)):r.n.b=(kW(u),u)),s=XN(n.a,a,o),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,o=a}function tDn(n,t,e){var i,r,c;for(qan(c=new EAn(XXn(qSn(cDn(t,!1,!1)),Gy(MD(ZAn(t,(Epn(),pct))))+n.a)),t),VW(n.b,t,c),e.c[e.c.length]=c,!t.n&&(t.n=new eU(zOt,t,1,7)),r=new AL(t.n);r.e!=r.i.gc();)i=JRn(n,BB(kpn(r),137),!0,0,0),e.c[e.c.length]=i;return c}function eDn(n,t,e,i,r){var c,a,u;if(n.d&&n.d.lg(r),Dvn(n,e,BB(r.Xb(0),33),!1))return!0;if(Dvn(n,i,BB(r.Xb(r.gc()-1),33),!0))return!0;if(NMn(n,r))return!0;for(u=r.Kc();u.Ob();)for(a=BB(u.Pb(),33),c=t.Kc();c.Ob();)if(_Dn(n,a,BB(c.Pb(),33)))return!0;return!1}function iDn(n,t,e){var i,r,c,a,u,o,s,h,f;f=t.c.length;n:for(c=BB((s=n.Yg(e))>=0?n._g(s,!1,!0):cOn(n,e,!1),58).Kc();c.Ob();){for(r=BB(c.Pb(),56),h=0;h<f;++h)if(l1(h,t.c.length),o=(a=BB(t.c[h],72)).dd(),u=a.ak(),i=r.bh(u,!1),null==o?null!=i:!Nfn(o,i))continue n;return r}return null}function rDn(n,t,e,i){var r,c,a,u;for(r=BB(DSn(t,(kUn(),CIt)).Kc().Pb(),11),c=BB(DSn(t,oIt).Kc().Pb(),11),u=new Wb(n.j);u.a<u.c.c.length;){for(a=BB(n0(u),11);0!=a.e.c.length;)MZ(BB(xq(a.e,0),17),r);for(;0!=a.g.c.length;)SZ(BB(xq(a.g,0),17),c)}e||hon(t,(hWn(),hlt),null),i||hon(t,(hWn(),flt),null)}function cDn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)return qun(n);if(i=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),t&&(sqn((!i.a&&(i.a=new $L(xOt,i,5)),i.a)),Ien(i,0),Aen(i,0),Ten(i,0),Oen(i,0)),e)for(!n.a&&(n.a=new eU(FOt,n,6,6)),r=n.a;r.i>1;)fDn(r,r.i-1);return i}function aDn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Comment post-processing",1),c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),i=new Np,u=new Wb(r.a);u.a<u.c.c.length;)a=BB(n0(u),10),o=BB(mMn(a,(hWn(),Klt)),15),e=BB(mMn(a,Dft),15),(o||e)&&(Wzn(a,o,e),o&&gun(i,o),e&&gun(i,e));gun(r.a,i)}HSn(t)}function uDn(n,t){var e,i,r,c,a,u;for(e=new Lp,r=new Wb(n.b);r.a<r.c.c.length;){for(u=!0,i=0,a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)switch((c=BB(n0(a),10)).k.g){case 4:++i;case 1:w3(e,c);break;case 0:oCn(c,t);default:e.b==e.c||p_n(e,i,u,!1,t),u=!1,i=0}e.b==e.c||p_n(e,i,u,!0,t)}}function oDn(n,t){var e,i,r,c,a,u;for(r=new Np,e=0;e<=n.i;e++)(i=new HX(t)).p=n.i-e,r.c[r.c.length]=i;for(u=new Wb(n.o);u.a<u.c.c.length;)PZ(a=BB(n0(u),10),BB(xq(r,n.i-n.f[a.p]),29));for(c=new Wb(r);c.a<c.c.c.length;)0==BB(n0(c),29).a.c.length&&AU(c);t.b.c=x8(Ant,HWn,1,0,5,1),gun(t.b,r)}function sDn(n,t){var e,i,r,c,a,u;for(e=0,u=new Wb(t);u.a<u.c.c.length;){for(a=BB(n0(u),11),nhn(n.b,n.d[a.p]),r=new m6(a.b);y$(r.a)||y$(r.b);)(c=ME(n,a==(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c?i.d:i.c))>n.d[a.p]&&(e+=n5(n.b,c),d3(n.a,iln(c)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function hDn(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=BB(kpn(r),33)).a&&(i.a=new eU(UOt,i,10,11)),i.a).i||(c+=hDn(n,i,!1));if(e)for(a=JJ(t);a;)c+=(!a.a&&(a.a=new eU(UOt,a,10,11)),a.a).i,a=JJ(a);return c}function fDn(n,t){var e,i,r,c;return n.ej()?(i=null,r=n.fj(),n.ij()&&(i=n.kj(n.pi(t),null)),e=n.Zi(4,c=Lyn(n,t),null,t,r),n.bj()&&null!=c?(i=n.dj(c,i))?(i.Ei(e),i.Fi()):n.$i(e):i?(i.Ei(e),i.Fi()):n.$i(e),c):(c=Lyn(n,t),n.bj()&&null!=c&&(i=n.dj(c,null))&&i.Fi(),c)}function lDn(n){var t,i,r,c,a,u,o,s,h,f;for(h=n.a,t=new Rv,s=0,r=new Wb(n.d);r.a<r.c.c.length;){for(f=0,_rn((i=BB(n0(r),222)).b,new $n),u=spn(i.b,0);u.b!=u.d.c;)a=BB(b3(u),222),t.a._b(a)&&(c=i.c,f<(o=a.c).d+o.a+h&&f+c.a+h>o.d&&(f=o.d+o.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function bDn(){bDn=O,hft=new LP("COMMENTS",0),lft=new LP("EXTERNAL_PORTS",1),bft=new LP("HYPEREDGES",2),wft=new LP("HYPERNODES",3),dft=new LP("NON_FREE_PORTS",4),gft=new LP("NORTH_SOUTH_PORTS",5),vft=new LP(G1n,6),sft=new LP("CENTER_LABELS",7),fft=new LP("END_LABELS",8),pft=new LP("PARTITIONS",9)}function wDn(n){var t,e,i,r,c;for(r=new Np,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||(r.c[r.c.length]=c));return r}function dDn(n){var t,e,i,r,c;for(r=new Rv,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||r.a.zc(c,r));return r}function gDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function pDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function vDn(n,t,e,i,r,c){var a,u,o;if(u=32,i<0){if(t[0]>=n.length)return!1;if(43!=(u=fV(n,t[0]))&&45!=u)return!1;if(++t[0],(i=UIn(n,t))<0)return!1;45==u&&(i=-i)}return 32==u&&t[0]-e==2&&2==r.b&&(a=(o=(new AT).q.getFullYear()-sQn+sQn-80)%100,c.a=i==a,i+=100*(o/100|0)+(i<a?100:0)),c.p=i,!0}function mDn(n,t){var i,r,c;JJ(n)&&(c=BB(mMn(t,(HXn(),Fgt)),174),GI(ZAn(n,ept))===GI((QEn(),YCt))&&Ypn(n,ept,QCt),GM(),r=qzn(new Dy(JJ(n)),new JN(JJ(n)?new Dy(JJ(n)):null,n),!1,!0),orn(c,(mdn(),DIt)),(i=BB(mMn(t,Hgt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function yDn(n,t,e){var i,r,c,a,u,o;for(a=BB(mMn(n,(hWn(),nlt)),15).Kc();a.Ob();){switch(c=BB(a.Pb(),10),BB(mMn(c,(HXn(),kgt)),163).g){case 2:PZ(c,t);break;case 4:PZ(c,e)}for(r=new oz(ZL(hbn(c).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c&&i.d||(u=!i.d,o=BB(mMn(i,mlt),11),u?MZ(i,o):SZ(i,o))}}function kDn(){kDn=O,Bst=new WV(mJn,0,(kUn(),sIt),sIt),Gst=new WV(kJn,1,SIt,SIt),Fst=new WV(yJn,2,oIt,oIt),Xst=new WV(jJn,3,CIt,CIt),qst=new WV("NORTH_WEST_CORNER",4,CIt,sIt),Hst=new WV("NORTH_EAST_CORNER",5,sIt,oIt),Ust=new WV("SOUTH_WEST_CORNER",6,SIt,CIt),zst=new WV("SOUTH_EAST_CORNER",7,oIt,SIt)}function jDn(){jDn=O,MMt=Pun(Gk(LNt,1),FQn,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function EDn(n,t){var e,i,r,c,a;if(0==n.c.length)return new rI(iln(0),iln(0));for(e=(l1(0,n.c.length),BB(n.c[0],11)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(l1(++a,n.c.length),BB(n.c[a],11)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(l1(a,n.c.length),BB(n.c[a],11)).j;return new rI(iln(a),iln(r))}function TDn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=t.c.length,l1(i,t.c.length),o=(u=BB(t.c[i],286)).a.o.a,l=u.c,b=0,h=u.c;h<=u.f;h++){if(o<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)l1(c,t.c.length),(r=BB(t.c[c],286)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function MDn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=pKn(n.i)),n.j=n.i.length,QXn(n),c=Vdn(n),n.d!=n.j)throw Hp(new ak(kWn((u$(),w8n))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=BB(bW(n.g,i),584),n.f<=r.a)throw Hp(new ak(kWn((u$(),d8n))));n.g.a.c=x8(Ant,HWn,1,0,5,1)}return c}function SDn(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(mK(t,null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e;return null}function PDn(n,t){var e;switch(e=null,t.g){case 1:n.e.Xe((sWn(),ePt))&&(e=BB(n.e.We(ePt),249));break;case 3:n.e.Xe((sWn(),iPt))&&(e=BB(n.e.We(iPt),249));break;case 2:n.e.Xe((sWn(),tPt))&&(e=BB(n.e.We(tPt),249));break;case 4:n.e.Xe((sWn(),rPt))&&(e=BB(n.e.We(rPt),249))}return!e&&(e=BB(n.e.We((sWn(),ZSt)),249)),e}function CDn(n,t,e){var i,r,c,a,u,o;for(t.p=1,r=t.c,o=xwn(t,(ain(),qvt)).Kc();o.Ob();)for(i=new Wb(BB(o.Pb(),11).g);i.a<i.c.c.length;)t!=(u=BB(n0(i),17).d.i)&&u.c.p<=r.p&&((c=r.p+1)==e.b.c.length?((a=new HX(e)).p=c,WB(e.b,a),PZ(u,a)):PZ(u,a=BB(xq(e.b,c),29)),CDn(n,u,e))}function IDn(n,t,i){var r,c,a,u,o,s;for(c=i,a=0,o=new Wb(t);o.a<o.c.c.length;)Ypn(u=BB(n0(o),33),(Uyn(),Ljt),iln(c++)),s=wDn(u),r=e.Math.atan2(u.j+u.f/2,u.i+u.g/2),(r+=r<0?Z3n:0)<.7853981633974483||r>p4n?m$(s,n.b):r<=p4n&&r>v4n?m$(s,n.d):r<=v4n&&r>m4n?m$(s,n.c):r<=m4n&&m$(s,n.a),a=IDn(n,s,a);return c}function ODn(){var n;for(ODn=O,Jtt=new X6(1,1),net=new X6(1,10),eet=new X6(0,0),Ytt=new X6(-1,1),Ztt=Pun(Gk(oet,1),sVn,91,0,[eet,Jtt,new X6(1,2),new X6(1,3),new X6(1,4),new X6(1,5),new X6(1,6),new X6(1,7),new X6(1,8),new X6(1,9),net]),tet=x8(oet,sVn,91,32,0,1),n=0;n<tet.length;n++)tet[n]=npn(yz(1,n))}function ADn(n,t,e,i,r,c){var a,u,o,s;for(u=!jE(AV(n.Oc(),new aw(new Je))).sd((dM(),tit)),a=n,c==(Ffn(),HPt)&&(a=cL(a,152)?o6(BB(a,152)):cL(a,131)?BB(a,131).a:cL(a,54)?new fy(a):new CT(a)),s=a.Kc();s.Ob();)(o=BB(s.Pb(),70)).n.a=t.a,o.n.b=u?t.b+(i.b-o.o.b)/2:r?t.b:t.b+i.b-o.o.b,t.a+=o.o.a+e}function $Dn(n,t,e,i){var r,c,a,u,o;for(r=(i.c+i.a)/2,yQ(t.j),DH(t.j,r),yQ(e.e),DH(e.e,r),o=new zj,a=new Wb(n.f);a.a<a.c.c.length;)Rjn(o,t,u=BB(n0(a),129).a),Rjn(o,e,u);for(c=new Wb(n.k);c.a<c.c.c.length;)Rjn(o,t,u=BB(n0(c),129).b),Rjn(o,e,u);return o.b+=2,o.a+=LQ(t,n.q),o.a+=LQ(n.q,e),o}function LDn(n,t,e){var i,r,c,a,u;if(!h3(t)){for(OTn(u=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),a=new Aa,c=null,r=t.Kc();r.Ob();)i=BB(r.Pb(),86),a=Wen(Pun(Gk(xnt,1),HWn,20,0,[a,new bg(i)])),c&&(hon(c,(qqn(),bkt),i),hon(i,ckt,c),G8(i)==G8(c)&&(hon(c,wkt,i),hon(i,akt,c))),c=i;HSn(u),LDn(n,a,e)}}function NDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.d,n.f==(G7(),rrt)?u+=(e.a-n.e.b)/2:n.f==irt&&(u+=e.a-n.e.b),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).b=u,u+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.tf(c)}}function xDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.c,n.b==(J9(),Qit)?u+=(e.b-n.e.a)/2:n.b==Jit&&(u+=e.b-n.e.a),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).a=u,u+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.tf(c)}}function DDn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=new xC(s,l),h=new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function RDn(n){NM(n,new MTn(vj(wj(pj(gj(new du,_5n),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Qu))),u2(n,_5n,QJn,LIt),u2(n,_5n,vZn,15),u2(n,_5n,yZn,iln(0)),u2(n,_5n,VJn,dZn)}function KDn(){var n,t,e,i,r,c;for(KDn=O,QLt=x8(NNt,v6n,25,255,15,1),YLt=x8(ONt,WVn,25,16,15,1),t=0;t<255;t++)QLt[t]=-1;for(e=57;e>=48;e--)QLt[e]=e-48<<24>>24;for(i=70;i>=65;i--)QLt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)QLt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)YLt[c]=48+c&QVn;for(n=10;n<=15;n++)YLt[n]=65+n-10&QVn}function _Dn(n,t,e){var i,r,c,a,u,o,s,h;return u=t.i-n.g/2,o=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g/2,a=e.g+n.g/2,i=t.f+n.g/2,r=e.f+n.g/2,u<o+a&&o<u&&s<h+r&&h<s||o<u+c&&u<o&&h<s+i&&s<h||u<o+a&&o<u&&s<h&&h<s+i||o<u+c&&u<o&&s<h+r&&h<s}function FDn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),qy(TD(mMn(n,Bgt)))||UBn(n,i,t)}function BDn(n,t){var e,i,r,c;for(c=abn(t,(kUn(),SIt)).Kc();c.Ob();)i=BB(c.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=abn(t,sIt).Kc();r.Ob();)i=BB(r.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[e.p].d),n.i[t.p].a))}function HDn(n){var t,e,i,r,c;if(!n.c){if(c=new Eo,null==(t=P$t).a.zc(n,t)){for(i=new AL(a4(n));i.e!=i.i.gc();)cL(r=lFn(e=BB(kpn(i),87)),88)&&pX(c,HDn(BB(r,26))),f9(c,e);t.a.Bc(n),t.a.gc()}$wn(c),chn(c),n.c=new NO((BB(Wtn(QQ((QX(),t$t).o),15),18),c.i),c.g),P5(n).b&=-33}return n.c}function qDn(n){var t;if(10!=n.c)throw Hp(new ak(kWn((u$(),g8n))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Hp(new ak(kWn((u$(),U8n))))}return t}function GDn(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==CQn&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+GDn(aon(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Aqn(e,F5(AQn),!0),t=""+TE(ltt),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function zDn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function UDn(n){var t,e,i,r,c,a,u;for(t=!1,e=0,r=new Wb(n.d.b);r.a<r.c.c.length;)for((i=BB(n0(r),29)).p=e++,a=new Wb(i.a);a.a<a.c.c.length;)c=BB(n0(a),10),!t&&!h3(hbn(c))&&(t=!0);u=EG((Ffn(),BPt),Pun(Gk(WPt,1),$Vn,103,0,[_Pt,FPt])),t||(orn(u,HPt),orn(u,KPt)),n.a=new ltn(u),$U(n.f),$U(n.b),$U(n.e),$U(n.g)}function XDn(n,t,e){var i,r,c,a,u,o,s,h,f;for(i=e.c,r=e.d,u=g1(t.c),o=g1(t.d),i==t.c?(u=lLn(n,u,r),o=sMn(t.d)):(u=sMn(t.c),o=lLn(n,o,r)),r5(s=new Kj(t.a),u,s.a,s.a.a),r5(s,o,s.c.b,s.c),a=t.c==i,f=new Jv,c=0;c<s.b-1;++c)h=new rI(BB(Dpn(s,c),8),BB(Dpn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:WB(f.a,h);return f}function WDn(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=BB(mMn(n,(HXn(),ipt)),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function VDn(n,t,i,r){var c,a,u,o;if(F3((q_(),new oz(ZL(hbn(t).a.Kc(),new h))))>=n.a)return-1;if(!eTn(t,i))return-1;if(h3(BB(r.Kb(t),20)))return 1;for(c=0,u=BB(r.Kb(t),20).Kc();u.Ob();){if(-1==(o=VDn(n,(a=BB(u.Pb(),17)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,o))>n.c-1)return-1}return c+1}function QDn(n,t){var e,i,r,c,a,u;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),u=n.gc(),i.gc()!=u)return!1;if(a=i.Kc(),n.ni()){for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),null==r?null!=c:!Nfn(r,c))return!1}else for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),GI(r)!==GI(c))return!1;return!0}function YDn(n,t){var e,i,r,c,a,u;if(n.f>0)if(n.qj(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(Nfn(t,(r=i[a]).dd()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(r=i[a],GI(t)===GI(r.dd()))return!0;return!1}function JDn(n,t,e){var i,r,c,a;OTn(e,"Orthogonally routing hierarchical port edges",1),n.a=0,NGn(t,i=UHn(t)),Qqn(n,t,i),fUn(t),r=BB(mMn(t,(HXn(),ept)),98),Czn((l1(0,(c=t.b).c.length),BB(c.c[0],29)),r,t),Czn(BB(xq(c,c.c.length-1),29),r,t),TBn((l1(0,(a=t.b).c.length),BB(a.c[0],29))),TBn(BB(xq(a,a.c.length-1),29)),HSn(e)}function ZDn(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw Hp(new Mk("Invalid hexadecimal"))}}function nRn(n,t,e){var i,r,c,a;for(OTn(e,"Processor order nodes",2),n.a=Gy(MD(mMn(t,(CAn(),xkt)))),r=new YT,a=spn(t.b,0);a.b!=a.d.c;)qy(TD(mMn(c=BB(b3(a),86),(qqn(),dkt))))&&r5(r,c,r.c.b,r.c);Px(0!=r.b),KHn(n,i=BB(r.a.a.c,86)),!e.b&&qin(e,1),BRn(n,i,0-Gy(MD(mMn(i,(qqn(),ukt))))/2,0),!e.b&&qin(e,1),HSn(e)}function tRn(){tRn=O,Rit=new HS("SPIRAL",0),$it=new HS("LINE_BY_LINE",1),Lit=new HS("MANHATTAN",2),Ait=new HS("JITTER",3),xit=new HS("QUADRANTS_LINE_BY_LINE",4),Dit=new HS("QUADRANTS_MANHATTAN",5),Nit=new HS("QUADRANTS_JITTER",6),Oit=new HS("COMBINE_LINE_BY_LINE_MANHATTAN",7),Iit=new HS("COMBINE_JITTER_MANHATTAN",8)}function eRn(n,t,e,i){var r,c,a,u,o,s;for(o=Njn(n,e),s=Njn(t,e),r=!1;o&&s&&(i||myn(o,s,e));)a=Njn(o,e),u=Njn(s,e),A7(t),A7(n),c=o.c,rGn(o,!1),rGn(s,!1),e?(Qyn(t,s.p,c),t.p=s.p,Qyn(n,o.p+1,c),n.p=o.p):(Qyn(n,o.p,c),n.p=o.p,Qyn(t,s.p+1,c),t.p=s.p),PZ(o,null),PZ(s,null),o=a,s=u,r=!0;return r}function iRn(n,t,e,i){var r,c,a,u,o;for(r=!1,c=!1,u=new Wb(i.j);u.a<u.c.c.length;)GI(mMn(a=BB(n0(u),11),(hWn(),dlt)))===GI(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return o=0,r&&r^c?o=e.j==(kUn(),sIt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?o=n.e[i.c.p][i.p]+1:r&&c&&(o=e.j==(kUn(),sIt)?0:t/2),o}function rRn(n,t,e,i,r,c,a,u){var o,s,h;for(o=0,null!=t&&(o^=vvn(t.toLowerCase())),null!=e&&(o^=vvn(e)),null!=i&&(o^=vvn(i)),null!=a&&(o^=vvn(a)),null!=u&&(o^=vvn(u)),s=0,h=c.length;s<h;s++)o^=vvn(c[s]);n?o|=256:o&=-257,r?o|=16:o&=-17,this.f=o,this.i=null==t?null:(kW(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=u}function cRn(n,t,e){var i,r;switch(r=null,t.g){case 1:gcn(),r=Nut;break;case 2:gcn(),r=Dut}switch(i=null,e.g){case 1:gcn(),i=xut;break;case 2:gcn(),i=Lut;break;case 3:gcn(),i=Rut;break;case 4:gcn(),i=Kut}return r&&i?KB(n.j,new Hf(new Jy(Pun(Gk(Lnt,1),HWn,169,0,[BB(yX(r),169),BB(yX(i),169)])))):(SQ(),SQ(),set)}function aRn(n){var t,e,i;switch(t=BB(mMn(n,(HXn(),Hgt)),8),hon(n,Hgt,new xC(t.b,t.a)),BB(mMn(n,kdt),248).g){case 1:hon(n,kdt,(wvn(),LMt));break;case 2:hon(n,kdt,(wvn(),IMt));break;case 3:hon(n,kdt,(wvn(),AMt));break;case 4:hon(n,kdt,(wvn(),$Mt))}(n.q?n.q:(SQ(),SQ(),het))._b(spt)&&(i=(e=BB(mMn(n,spt),8)).a,e.a=e.b,e.b=i)}function uRn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw Hp(new Ay("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new QK(i),yrn(this.e,this.c,(kUn(),CIt)),this.i=new QK(i),yrn(this.i,this.c,oIt),this.f=new lG(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(uSn(),Mut),this.a&&gPn(this,n,t.length)}function oRn(n,t){var e,i,r,c,a,u;c=!n.B.Hc((n_n(),HIt)),a=n.B.Hc(zIt),n.a=new Hwn(a,c,n.c),n.n&&kQ(n.a.n,n.n),jy(n.g,(Dtn(),zit),n.a),t||((i=new Ign(1,c,n.c)).n.a=n.k,mG(n.p,(kUn(),sIt),i),(r=new Ign(1,c,n.c)).n.d=n.k,mG(n.p,SIt,r),(u=new Ign(0,c,n.c)).n.c=n.k,mG(n.p,CIt,u),(e=new Ign(0,c,n.c)).n.b=n.k,mG(n.p,oIt,e))}function sRn(n){var t,e,i;switch((t=BB(mMn(n.d,(HXn(),Zdt)),218)).g){case 2:e=MXn(n);break;case 3:i=new Np,JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Or),new Ar),new $r),new pr),new Cd(i)),e=i;break;default:throw Hp(new Fy("Compaction not supported for "+t+" edges."))}gqn(n,e),e5(new Cb(n.g),new Sd(n))}function hRn(n,t){var e;return e=new Zn,t&&qan(e,BB(RX(n.a,DOt),94)),cL(t,470)&&qan(e,BB(RX(n.a,ROt),94)),cL(t,354)?(qan(e,BB(RX(n.a,zOt),94)),e):(cL(t,82)&&qan(e,BB(RX(n.a,KOt),94)),cL(t,239)?(qan(e,BB(RX(n.a,UOt),94)),e):cL(t,186)?(qan(e,BB(RX(n.a,XOt),94)),e):(cL(t,352)&&qan(e,BB(RX(n.a,_Ot),94)),e))}function fRn(){fRn=O,Zct=new XA((sWn(),pPt),iln(1)),cat=new XA(LPt,80),rat=new XA(SPt,5),Fct=new XA(cSt,dZn),nat=new XA(vPt,iln(1)),iat=new XA(kPt,(hN(),!0)),Qct=new WA(50),Vct=new XA(XSt,Qct),Hct=CSt,Yct=uPt,Bct=new XA(dSt,!1),Wct=USt,Xct=qSt,Uct=KSt,zct=DSt,Jct=fPt,jSn(),Gct=Ict,aat=Nct,qct=Cct,tat=Act,eat=Lct}function lRn(n){var t,e,i,r,c,a,u;for(u=new v5,a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k!=(uSn(),Mut))for(_An(u,c,new Gj),r=new oz(ZL(lbn(c).a.Kc(),new h));dAn(r);)if((i=BB(U5(r),17)).c.i.k!=Mut&&i.d.i.k!=Mut)for(e=spn(i.a,0);e.b!=e.d.c;)Yjn(u,new dP((t=BB(b3(e),8)).a,t.b));return u}function bRn(){bRn=O,RTt=new up(K4n),OM(),xTt=new $O(q4n,DTt=GTt),Lun(),LTt=new $O(_4n,NTt=WTt),$Sn(),ATt=new $O(F4n,$Tt=rTt),PTt=new $O(B4n,null),$6(),ITt=new $O(H4n,OTt=ZEt),CM(),jTt=new $O(G4n,ETt=XEt),TTt=new $O(z4n,(hN(),!1)),MTt=new $O(U4n,iln(64)),STt=new $O(X4n,!0),CTt=nTt}function wRn(n){var t,e,i,r,c;if(null==n.a)if(n.a=x8($Nt,ZYn,25,n.c.b.c.length,16,1),n.a[0]=!1,Lx(n.c,(HXn(),Upt)))for(e=BB(mMn(n.c,Upt),15).Kc();e.Ob();)(t=BB(e.Pb(),19).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Wb(n.c.b)).a<c.c.c.length&&n0(c),i=1;c.a<c.c.c.length;)r=BB(n0(c),29),n.a[i++]=U$n(r)}function dRn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new AL(n.c);e.e!=e.i.gc();)ACn(P5(BB(kpn(e),473)),t)}function gRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(r=!1,u=0,o=(a=t).length;u<o;++u)c=a[u],qy((hN(),!!c.e))&&!BB(xq(n.b,c.e.p),214).s&&(r|=(s=c.e,(f=(h=BB(xq(n.b,s.p),214)).e)[l=fj(e,f.length)][0].k==(uSn(),Mut)?f[l]=$Nn(c,f[l],e?(kUn(),CIt):(kUn(),oIt)):h.c.Tf(f,e),b=DNn(n,h,e,i),xxn(h.e,h.o,e),b));return r}function pRn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)GI(ZAn(i=BB(kpn(r),33),(sWn(),ESt)))!==GI((ufn(),mCt))&&((a=BB(ZAn(t,mPt),149))==(e=BB(ZAn(i,mPt),149))||a&&j5(a,e))&&0!=(!i.a&&(i.a=new eU(UOt,i,10,11)),i.a).i&&(c+=pRn(n,i));return c}function vRn(n){var t,e,i,r,c,a,u;for(i=0,u=0,a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),101),r=BB(P4(AV(new Rq(null,new w1(c.j,16)),new Xr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=null,i<=u?(kUn(),e=sIt,i+=r.gc()):u<i&&(kUn(),e=SIt,u+=r.gc()),t=e,JT($V(r.Oc(),new Hr),new Ad(t))}function mRn(n){var t,e,i,r,c,a,u,o;for(n.b=new vOn(new Jy((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]))),new Jy((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))),u=0,o=(a=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;u<o;++u)for(c=a[u],i=0,r=(e=Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])).length;i<r;++i)t=e[i],Wjn(n.b,c,t,new Np)}function yRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),s=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),h=!e&&!i&&(s||2==a.gc()),hxn(n,t),r=null,o=null,u){for(o=r=BB((c=a.Kc()).Pb(),111);c.Ob();)o=BB(c.Pb(),111);r.d.b=0,o.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(DTn(a),u&&(r.d.b=0,o.d.c=0))}function kRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),o=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),s=!e&&!i&&(o||2==a.gc()),V_n(n,t),h=null,r=null,u){for(r=h=BB((c=a.Kc()).Pb(),111);c.Ob();)r=BB(c.Pb(),111);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(RTn(a),u&&(h.d.d=0,r.d.a=0))}function jRn(n,t,e){var i,r,c,a,u;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,WB(e.e,t),i==(uSn(),Put)||i==Iut)for(r=new Wb(t.j);r.a<r.c.c.length;)for(u=new zw(new Wb(new Gw(BB(n0(r),11)).a.g));y$(u.a);)if(a=(c=BB(n0(u.a),17).d.i).k,t.c!=c.c&&(a==Put||a==Iut)&&jRn(n,c,e))return!0;return!0}function ERn(n){var t;return 0!=(64&n.Db)?KOn(n):((t=new fN(KOn(n))).a+=" (changeable: ",yE(t,0!=(n.Bb&k6n)),t.a+=", volatile: ",yE(t,0!=(n.Bb&M9n)),t.a+=", transient: ",yE(t,0!=(n.Bb&_Qn)),t.a+=", defaultValueLiteral: ",cO(t,n.j),t.a+=", unsettable: ",yE(t,0!=(n.Bb&T9n)),t.a+=", derived: ",yE(t,0!=(n.Bb&hVn)),t.a+=")",t.a)}function TRn(n){var t,e,i,r,c,a,u,o,s,h;for(e=NLn(n.d),c=(r=BB(mMn(n.b,(Epn(),vct)),116)).b+r.c,a=r.d+r.a,o=e.d.a*n.e+c,u=e.b.a*n.f+a,Ll(n.b,new xC(o,u)),h=new Wb(n.g);h.a<h.c.c.length;)t=UR(Fx(new xC((s=BB(n0(h),562)).g-e.a.a,s.i-e.c.a),s.a,s.b),kL(Bx(B$(VA(s.e)),s.d*s.a,s.c*s.b),-.5)),i=QA(s.e),ij(s.e,XR(t,i))}function MRn(n,t,e,i){var r,c,a,u,o;for(o=x8(xNt,sVn,104,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,0,2),a=0,u=(c=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;a<u;++a)o[(r=c[a]).g]=x8(xNt,qQn,25,n.c[r.g],15,1);return Bkn(o,n,sIt),Bkn(o,n,SIt),xmn(o,n,sIt,t,e,i),xmn(o,n,oIt,t,e,i),xmn(o,n,SIt,t,e,i),xmn(o,n,CIt,t,e,i),o}function SRn(n,t,e){if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.b,t)){if(FT(BB(RX(n.b,t),53),e))return-1}else VW(n.b,t,new Rv);if(hU(n.b,e)){if(FT(BB(RX(n.b,e),53),t))return 1}else VW(n.b,e,new Rv);return 0}function PRn(n,t,e,i){var r,c,a,u,o,s;if(null==e)for(r=BB(n.g,119),u=0;u<n.i;++u)if((a=r[u]).ak()==t)return _pn(n,a,i);return ZM(),c=BB(t,66).Oj()?BB(e,72):Z3(t,e),mA(n.e)?(s=!adn(n,t),i=Ywn(n,c,i),o=t.$j()?LY(n,3,t,null,e,pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)),s):LY(n,1,t,t.zj(),e,-1,s),i?i.Ei(o):i=o):i=Ywn(n,c,i),i}function CRn(n){var t,i,r,c,a,u;n.q!=(QEn(),WCt)&&n.q!=XCt&&(c=n.f.n.d+XH(BB(oV(n.b,(kUn(),sIt)),124))+n.c,t=n.f.n.a+XH(BB(oV(n.b,SIt),124))+n.c,r=BB(oV(n.b,oIt),124),u=BB(oV(n.b,CIt),124),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,u.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,u.n.a-t),r.n.d=a,u.n.d=a,r.n.a=i,u.n.a=i)}function IRn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Restoring reversed edges",1),a=new Wb(n.b);a.a<a.c.c.length;)for(u=new Wb(BB(n0(a),29).a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(r=0,c=(i=Z0(BB(n0(o),11).g)).length;r<c;++r)qy(TD(mMn(e=i[r],(hWn(),Clt))))&&tBn(e,!1);HSn(t)}function ORn(){this.b=new v4,this.d=new v4,this.e=new v4,this.c=new v4,this.a=new xp,this.f=new xp,xJ(PMt,new mu,new yu),xJ(NMt,new Au,new $u),xJ(Eut,new Lu,new Nu),xJ(_ut,new Du,new Ru),xJ(hOt,new Ku,new _u),xJ(met,new ku,new ju),xJ(Iet,new Eu,new Tu),xJ(jet,new Mu,new Su),xJ(Eet,new Pu,new Cu),xJ(Bet,new Iu,new Ou)}function ARn(n){var t,e,i,r,c,a;return c=0,(t=Ikn(n)).Bj()&&(c|=4),0!=(n.Bb&T9n)&&(c|=2),cL(n,99)?(r=Cvn(e=BB(n,18)),0!=(e.Bb&h6n)&&(c|=32),r&&(bX(dZ(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&h6n)&&(c|=64)),0!=(e.Bb&BQn)&&(c|=M9n),c|=k6n):cL(t,457)?c|=512:(i=t.Bj())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function $Rn(n,t){var e,i,r,c,a;for(n=null==n?zWn:(kW(n),n),r=0;r<t.length;r++)t[r]=iLn(t[r]);for(e=new Ik,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+fx(null==n?zWn:(kW(n),n),a,c),uO(e,t[i++]),a=c+2;if(G0(e,n,a,n.length),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function LRn(n){var t,e,i,r,c;for(c=new J6(n.a.c.length),r=new Wb(n.a);r.a<r.c.c.length;){switch(i=BB(n0(r),10),t=null,(e=BB(mMn(i,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),t=$ht;break;case 3:case 4:Jun(),t=Oht}t?(hon(i,(hWn(),Gft),(Jun(),$ht)),t==Oht?RNn(i,e,(ain(),Hvt)):t==$ht&&RNn(i,e,(ain(),qvt))):c.c[c.c.length]=i}return c}function NRn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Wb(t);o.a<o.c.c.length;){for(u=BB(n0(o),11),nhn(n.b,n.d[u.p]),a=0,r=new m6(u.b);y$(r.a)||y$(r.b);)CW(i=BB(y$(r.a)?n0(r.a):n0(r.b),17))?(c=ME(n,u==i.c?i.d:i.c))>n.d[u.p]&&(e+=n5(n.b,c),d3(n.a,iln(c))):++a;for(e+=n.b.d*a;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function xRn(n,t){var e;return n.f==uLt?(e=DW(B7((IPn(),Z$t),t)),n.e?4==e&&t!=(TOn(),lLt)&&t!=(TOn(),sLt)&&t!=(TOn(),hLt)&&t!=(TOn(),fLt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(Z1(B7((IPn(),Z$t),t)))||n.d.Hc(Fqn((IPn(),Z$t),n.b,t))))||!(!n.f||!aNn((IPn(),n.f),jV(B7(Z$t,t))))&&(e=DW(B7(Z$t,t)),n.e?4==e:2==e)}function DRn(n,t,i,r){var c,a,u,o,s,h,f,l;return s=(u=BB(ZAn(i,(sWn(),gPt)),8)).a,f=u.b+n,(c=e.Math.atan2(f,s))<0&&(c+=Z3n),(c+=t)>Z3n&&(c-=Z3n),h=(o=BB(ZAn(r,gPt),8)).a,l=o.b+n,(a=e.Math.atan2(l,h))<0&&(a+=Z3n),(a+=t)>Z3n&&(a-=Z3n),h$(),rin(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:zO(isNaN(c),isNaN(a))}function RRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),57),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),57)).i=KQn,a=t.c.Kc();a.Ob();)c=BB(a.Pb(),57),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).c.$b(),t.c=BB(qI(AY(u.f,t)),15);_xn(n)}function KRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),81),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),81)).o=KQn,a=t.f.Kc();a.Ob();)c=BB(a.Pb(),81),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).f.$b(),t.f=BB(qI(AY(u.f,t)),15);BNn(n)}function _Rn(n,t,e,i){var r,c;for(Gkn(n,t,e,i),xl(t,n.j-t.j+e),Dl(t,n.k-t.k+i),c=new Wb(t.f);c.a<c.c.c.length;)switch((r=BB(n0(c),324)).a.g){case 0:won(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:won(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:won(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:won(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function FRn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw Hp(new Sv);a=t>>5,c=yz(1,dG(yz(31&t,1))),n.n[e][a]=r?i0(n.n[e][a],c):e0(n.n[e][a],uH(c)),c=yz(c,1),n.n[e][a]=i?i0(n.n[e][a],c):e0(n.n[e][a],uH(c))}catch(u){throw cL(u=lun(u),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(u)}}function BRn(n,t,i,r){var c,a;t&&(c=Gy(MD(mMn(t,(qqn(),fkt))))+r,a=i+Gy(MD(mMn(t,ukt)))/2,hon(t,gkt,iln(dG(fan(e.Math.round(c))))),hon(t,pkt,iln(dG(fan(e.Math.round(a))))),0==t.d.b||BRn(n,BB(iL(new wg(spn(new bg(t).a.d,0))),86),i+Gy(MD(mMn(t,ukt)))+n.a,r+Gy(MD(mMn(t,okt)))),null!=mMn(t,wkt)&&BRn(n,BB(mMn(t,wkt),86),i,r))}function HRn(n,t){var i,r,c,a,u,o,s,h,f,l,b;for(c=2*Gy(MD(mMn(s=vW(t.a),(HXn(),Tpt)))),f=Gy(MD(mMn(s,Apt))),h=e.Math.max(c,f),a=x8(xNt,qQn,25,t.f-t.c+1,15,1),r=-h,i=0,o=t.b.Kc();o.Ob();)u=BB(o.Pb(),10),r+=n.a[u.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Wb(t.e);b.a<b.c.c.length;)l=BB(n0(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function qRn(n,t,e,i){var r,c,a,u,o,s,h,f;for(f=new dE(new Yd(n)),u=0,o=(a=Pun(Gk(Out,1),a1n,10,0,[t,e])).length;u<o;++u)for(h=Lfn(a[u],i).Kc();h.Ob();)for(c=new m6((s=BB(h.Pb(),11)).b);y$(c.a)||y$(c.b);)b5(r=BB(y$(c.a)?n0(c.a):n0(c.b),17))||(Mon(f.a,s,(hN(),ptt)),CW(r)&&ZU(f,s==r.c?r.d:r.c));return yX(f),new t_(f)}function GRn(n,t){var e,i,r,c;if(0!=(c=BB(ZAn(n,(sWn(),wPt)),61).g-BB(ZAn(t,wPt),61).g))return c;if(e=BB(ZAn(n,sPt),19),i=BB(ZAn(t,sPt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(BB(ZAn(n,wPt),61).g){case 1:return Pln(n.i,t.i);case 2:return Pln(n.j,t.j);case 3:return Pln(t.i,n.i);case 4:return Pln(t.j,n.j);default:throw Hp(new Fy(r1n))}}function zRn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(n6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function URn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(t6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function XRn(n,t){var e,i,r,c,a,u;if(null==t||0==t.length)return null;if(!(r=BB(SJ(n.a,t),149))){for(i=new Kb(new Ob(n.b).a.vc().Kc());i.a.Ob();)if(c=BB(i.a.Pb(),42),a=(e=BB(c.dd(),149)).c,u=t.length,mK(a.substr(a.length-u,u),t)&&(t.length==a.length||46==fV(a,a.length-t.length-1))){if(r)return null;r=e}r&&mZ(n.a,t,r)}return r}function WRn(n,t){var e,i,r;return e=new xn,(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())<(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?-1:i==r?0:1}function VRn(n){var t,e,i;Lx(n,(HXn(),$gt))&&((i=BB(mMn(n,$gt),21)).dc()||(e=new YK(t=BB(Vj(GCt),9),BB(SR(t,t.length),9),0),i.Hc((n$n(),$Ct))?orn(e,$Ct):orn(e,LCt),i.Hc(OCt)||orn(e,OCt),i.Hc(ICt)?orn(e,DCt):i.Hc(CCt)?orn(e,xCt):i.Hc(ACt)&&orn(e,NCt),i.Hc(DCt)?orn(e,ICt):i.Hc(xCt)?orn(e,CCt):i.Hc(NCt)&&orn(e,ACt),hon(n,$gt,e)))}function QRn(n){var t,e,i,r,c,a,u;for(r=BB(mMn(n,(hWn(),rlt)),10),l1(0,(i=n.j).c.length),e=BB(i.c[0],11),a=new Wb(r.j);a.a<a.c.c.length;)if(GI(c=BB(n0(a),11))===GI(mMn(e,dlt))){c.j==(kUn(),sIt)&&n.p>r.p?(qCn(c,SIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=u-t)):c.j==SIt&&r.p>n.p&&(qCn(c,sIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=-(u-t)));break}return r}function YRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;if(c=e,e<i)for(b=new Fan(n.p),w=new Fan(n.p),Frn(b.e,n.e),b.q=n.q,b.r=w,rX(b),Frn(w.j,n.j),w.r=b,rX(w),f=BB((l=new rI(b,w)).a,112),h=BB(l.b,112),l1(c,t.c.length),a=$Dn(n,f,h,r=BB(t.c[c],329)),s=e+1;s<=i;s++)l1(s,t.c.length),Vpn(u=BB(t.c[s],329),o=$Dn(n,f,h,u),r,a)&&(r=u,a=o);return c}function JRn(n,t,e,i,r){var c,a,u,o,s,h,f;if(!(cL(t,239)||cL(t,354)||cL(t,186)))throw Hp(new _y("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,o=t.i+i-a,h=t.j+r-a,s=o+t.g+n.a,f=h+t.f+n.a,DH(c=new km,new xC(o,h)),DH(c,new xC(o,f)),DH(c,new xC(s,f)),DH(c,new xC(s,h)),qan(u=new EAn(c),t),e&&VW(n.b,t,u),u}function ZRn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function nKn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function tKn(n){if(0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i)throw Hp(new ck("Edges must have a source."));if(0==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new ck("Edges must have a target."));if(!n.b&&(n.b=new hK(KOt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)))throw Hp(new ck("Hyperedges are not supported."))}function eKn(n,t){var e,i,r,c,a,u,o,s,h,f;for(f=0,d3(c=new Lp,t);c.b!=c.c;)for(o=BB(dU(c),214),s=0,h=BB(mMn(t.j,(HXn(),Ldt)),339),a=Gy(MD(mMn(t.j,Idt))),u=Gy(MD(mMn(t.j,Odt))),h!=(mon(),Nvt)&&(s+=a*S$n(o.e,h),s+=u*rxn(o.e)),f+=syn(o.d,o.e)+s,r=new Wb(o.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(f+=nCn(n,e));return f}function iKn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=b=t.length,b1(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(uHn(),cet)[10])|0,0!=(g=b%c)&&++r,u=x8(ANt,hQn,25,r,15,1),e=ret[8],a=0,w=l+(0==g?c:g),d=l;d<o;w=(d=w)+c)i=l_n(t.substr(d,w-d),_Vn,DWn),$On(),s=dvn(u,u,a,e),s+=Uwn(u,a,i),u[a++]=s;h=a,n.e=f,n.d=h,n.a=u,X0(n)}function rKn(n,t,e,i,r,c,a){if(n.c=i.qf().a,n.d=i.qf().b,r&&(n.c+=r.qf().a,n.d+=r.qf().b),n.b=t.rf().a,n.a=t.rf().b,r)switch(r.Hf().g){case 0:case 2:n.c+=r.rf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.rf().a;break;case 1:n.c+=r.rf().a+a,n.d-=a+c.b+a+t.rf().b;break;case 3:n.c+=r.rf().a+a,n.d+=r.rf().b+a+c.b+a}else e?n.c-=a+t.rf().a:n.c+=i.rf().a+a}function cKn(n,t){var e,i;for(this.b=new Np,this.e=new Np,this.a=n,this.d=t,Gpn(this),pdn(this),this.b.dc()?this.c=n.c.p:this.c=BB(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=BB(xq(this.e,this.e.c.length-1),10).c.p,i=BB(mMn(n,(hWn(),Plt)),15).Kc();i.Ob();)if(Lx(e=BB(i.Pb(),70),(HXn(),Vdt))){this.d=BB(mMn(e,Vdt),227);break}}function aKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.e,t),53),a=BB(RX(n.e,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.e,s),53),t),Frn(BB(RX(n.e,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function uKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.b,t),53),a=BB(RX(n.b,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.b,s),53),t),Frn(BB(RX(n.b,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function oKn(n,t){var e,i,r;switch(OTn(t,"Breaking Point Insertion",1),i=new MAn(n),BB(mMn(n,(HXn(),Bpt)),337).g){case 2:r=new Tc;case 0:r=new wc;break;default:r=new Mc}if(e=r.Vf(n,i),qy(TD(mMn(n,qpt)))&&(e=Dqn(n,e)),!r.Wf()&&Lx(n,Xpt))switch(BB(mMn(n,Xpt),338).g){case 2:e=XCn(i,e);break;case 1:e=KTn(i,e)}e.dc()||tXn(n,e),HSn(t)}function sKn(n,t,e){var i,r,c,a,u,o,s;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),a=N2(s,L6n),VCn((i=new oI(n,o)).a,i.b,a),u=N2(s,N6n),QCn((r=new sI(n,o)).a,r.b,u),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),sXn(n,s,o),xon(n,s,o)}function hKn(n,t){var i,r,c,a,u,o,s;for(c=x8(ANt,hQn,25,n.e.a.c.length,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)c[(a=BB(n0(u),121)).d]+=a.b.a.c.length;for(o=zB(t);0!=o.b;)for(r=L9(new Wb((a=BB(0==o.b?null:(Px(0!=o.b),Atn(o,o.a.a)),121)).g.a));r.Ob();)(s=(i=BB(r.Pb(),213)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&r5(o,s,o.c.b,o.c)}function fKn(n){var t,i,r,c,a,u,o,s,h,f,l;for(i=_Vn,c=DWn,o=new Wb(n.e.a);o.a<o.c.c.length;)a=BB(n0(o),121),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=x8(ANt,hQn,25,i-c+1,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function lKn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return BB(Kxn(n),19).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return QI(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:Nfn(n.n,n.g)}default:return!1}}function bKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,K5n),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Vu))),u2(n,K5n,QJn,dCt),u2(n,K5n,g3n,mpn(gCt)),u2(n,K5n,g5n,mpn(hCt)),u2(n,K5n,PZn,mpn(fCt)),u2(n,K5n,BZn,mpn(bCt)),u2(n,K5n,Y2n,mpn(lCt))}function wKn(n,t,e){var i,r,c,a;if(i=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),a=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),(c=Jrn(n,t,i))&&a==c.f&&wW(e,c.i))return e;if(Zrn(n,e,a))throw Hp(new _y("value already present: "+e));return r=new qW(t,i,e,a),c?(LLn(n,c),YCn(n,r,c),c.e=null,c.c=null,c.i):(YCn(n,r,null),qkn(n),null)}function dKn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=c.b?new xC(a,l):new xC(s,l),h=c.c?new xC(s,b):new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function gKn(n,t,e){var i,r,c,a,u,o;if(t){if(e<=-1){if(cL(i=itn(t.Tg(),-1-e),99))return BB(i,18);for(u=0,o=(a=BB(t.ah(i),153)).gc();u<o;++u)if(GI(a.jl(u))===GI(n)&&cL(r=a.il(u),99)&&0!=((c=BB(r,18)).Bb&h6n))return c;throw Hp(new Fy("The containment feature could not be located"))}return Cvn(BB(itn(n.Tg(),e),18))}return null}function pKn(n){var t,e,i,r,c;for(i=n.length,t=new Pk,c=0;c<i;)if(9!=(e=fV(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(b1(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(NX(t,r&QVn),++c):(t.a+="\\",NX(t,r&QVn),++c):NX(t,e&QVn);else for(;c<i&&13!=(e=fV(n,c++))&&10!=e;);return t.a}function vKn(n,t){var e,i,r;for(i=new Wb(t);i.a<i.c.c.length;)if(e=BB(n0(i),33),JIn(n.a,e,e),JIn(n.b,e,e),0!=(r=wDn(e)).c.length)for(n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33));0!=Dun(r).c.length;)r=Dun(r),n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33))}function mKn(n){var t,e,i,r,c,a,u,o,s,h;for(e=0,u=new Wb(n.d);u.a<u.c.c.length;)(a=BB(n0(u),101)).i&&(a.i.c=e++);for(t=kq($Nt,[sVn,ZYn],[177,25],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(l1(r,h.c.length),(o=BB(h.c[r],101)).i)for(c=r+1;c<h.c.length;c++)l1(c,h.c.length),(s=BB(h.c[c],101)).i&&(i=rMn(o,s),t[o.i.c][s.i.c]=i,t[s.i.c][o.i.c]=i);return t}function yKn(n,t,e,i){var r,c,a;return a=new yT(t,e),n.a?i?(++(r=BB(RX(n.b,t),283)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:BB(RX(n.b,t),283).b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(n.e.b=a,a.d=n.e,n.e=a,(r=BB(RX(n.b,t),283))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(VW(n.b,t,r=new sY(a)),++n.c)):(n.a=n.e=a,VW(n.b,t,new sY(a)),++n.c),++n.d,a}function kKn(n,t){var e,i,r,c,a,u,o,s;for(e=new RegExp(t,"g"),o=x8(Qtt,sVn,2,0,6,1),i=0,s=n,c=null;;){if(null==(u=e.exec(s))||""==s){o[i]=s;break}a=u.index,o[i]=s.substr(0,a),s=fx(s,a+u[0].length,s.length),e.lastIndex=0,c==s&&(o[i]=s.substr(0,1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=o.length;r>0&&""==o[r-1];)--r;r<o.length&&(o.length=r)}return o}function jKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,r=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=jKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(r||(r=!0,u=new rG(u)),u.Gc(e)):u=e);return(i=xIn(n,t)).dc()?u||(SQ(),SQ(),set):u?(r||(u=new rG(u)),u.Gc(i),u):i}function EKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,i=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=EKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(i||(i=!0,u=new rG(u)),u.Gc(e)):u=e);return(r=VOn(n,t)).dc()?u||(SQ(),SQ(),set):u?(i||(u=new rG(u)),u.Gc(r),u):r}function TKn(n,t,e){var i,r,c,a,u,o;if(cL(t,72))return _pn(n,t,e);for(u=null,c=null,i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(t,(r=i[a]).dd())&&cL(c=r.ak(),99)&&0!=(BB(c,18).Bb&h6n)){u=r;break}return u&&(mA(n.e)&&(o=c.$j()?LY(n,4,c,t,null,pBn(n,c,t,cL(c,99)&&0!=(BB(c,18).Bb&BQn)),!0):LY(n,c.Kj()?2:1,c,t,c.zj(),-1,!0),e?e.Ei(o):e=o),e=TKn(n,u,e)),e}function MKn(n){var t,i,r,c;r=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?c=r.a:(c=SIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(c=e.Math.max(c,SIn(BB(oV(n.p,(kUn(),sIt)),244))),c=e.Math.max(c,SIn(BB(oV(n.p,SIt),244)))),(t=oan(n))&&(c=e.Math.max(c,t.a))),qy(TD(n.e.yf().We((sWn(),FSt))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,_Fn(n.f)}function SKn(n,t){var e,i,r,c,a,u,o,s,h;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"memberTypes")))){for(s=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)cL(h=-1==(i=(r=c[a]).lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148)&&WB(s,BB(h,148));return s}return SQ(),SQ(),set}function PKn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,aZn,1),n.bf(t),c=0;n.df(c);){for(h=new Wb(t.e);h.a<h.c.c.length;)for(o=BB(n0(h),144),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[t.e,t.d,t.b])));dAn(u);)(a=BB(U5(u),357))!=o&&(r=n.af(a,o))&&UR(o.a,r);for(s=new Wb(t.e);s.a<s.c.c.length;)WSn(i=(o=BB(n0(s),144)).a,-n.d,-n.d,n.d,n.d),UR(o.d,i),kO(i);n.cf(),++c}HSn(e)}function CKn(n,t,e){var i,r,c,a;if(a=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj()){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(r,e))return fDn(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(e,r.dd()))return fDn(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&null==r.dd())return fDn(n,c),!0;return!1}function IKn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=x8($Nt,ZYn,25,t.c.length,16,1):nk(n.c),n.a=new Np,i=0,a=new Wb(t);a.a<a.c.c.length;)(r=BB(n0(a),10)).p=i++;for(e=new YT,c=new Wb(t);c.a<c.c.c.length;)r=BB(n0(c),10),n.c[r.p]||(hIn(n,r),0==e.b||(Px(0!=e.b),BB(e.a.a.c,15)).gc()<n.a.c.length?hO(e,n.a):fO(e,n.a),n.a=new Np);return e}function OKn(n,t,e,i){var r,c,a,u,o,s,h;for(Pen(a=BB(Wtn(t,0),33),0),Cen(a,0),(o=new Np).c[o.c.length]=a,u=a,c=new eq(n.a,a.g,a.f,(YLn(),_Et)),s=1;s<t.i;s++)Pen(h=BB(Wtn(t,s),33),(r=aqn(n,nHn(n,DEt,h,u,c,o,e),nHn(n,xEt,h,u,c,o,e),nHn(n,KEt,h,u,c,o,e),nHn(n,REt,h,u,c,o,e),h,u,i)).d),Cen(h,r.e),ab(r,_Et),c=r,u=h,o.c[o.c.length]=h;return c}function AKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,Q4n),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new eu))),u2(n,Q4n,K4n,mpn(qTt)),u2(n,Q4n,QJn,BTt),u2(n,Q4n,vZn,8),u2(n,Q4n,q4n,mpn(HTt)),u2(n,Q4n,U4n,mpn(_Tt)),u2(n,Q4n,X4n,mpn(FTt)),u2(n,Q4n,X2n,(hN(),!1))}function $Kn(n,t,e,i){var r,c,a,u,o,s,h,f;for(a=_x(t.c,e,i),h=new Wb(t.a);h.a<h.c.c.length;){for(UR((s=BB(n0(h),10)).n,a),f=new Wb(s.j);f.a<f.c.c.length;)for(c=new Wb(BB(n0(f),11).g);c.a<c.c.c.length;)for(Ztn((r=BB(n0(c),17)).a,a),(u=BB(mMn(r,(HXn(),vgt)),74))&&Ztn(u,a),o=new Wb(r.b);o.a<o.c.c.length;)UR(BB(n0(o),70).n,a);WB(n.a,s),s.a=n}}function LKn(n,t){var e,i,r,c;if(OTn(t,"Node and Port Label Placement and Node Sizing",1),RA((gM(),new HV(n,!0,!0,new Ve))),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft)))for(i=(r=BB(mMn(n,(HXn(),cpt)),21)).Hc((lIn(),iIt)),c=qy(TD(mMn(n,apt))),e=new Wb(n.b);e.a<e.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(e),29).a,16)),new Qe),new K_(r,i,c));HSn(t)}function NKn(n,t){var e,i,r,c,a,u;if((e=t.Hh(n.a))&&null!=(u=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),n8n))))switch(r=mN(u,YTn(35)),i=t.Hj(),-1==r?(a=az(n,Utn(i)),c=u):0==r?(a=null,c=u.substr(1)):(a=u.substr(0,r),c=u.substr(r+1)),DW(B7(n,t))){case 2:case 3:return Don(n,i,a,c);case 0:case 4:case 5:case 6:return Ron(n,i,a,c)}return null}function xKn(n,t,e){var i,r,c,a,u;if(ZM(),a=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))return!1}else for(u=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c],u.rl(r.ak()))return!(a?Nfn(r,e):null==e?null==r.dd():Nfn(e,r.dd()))&&(BB(ovn(n,c,a?BB(e,72):Z3(t,e)),72),!0);return f9(n,a?BB(e,72):Z3(t,e))}function DKn(n){var t,e,i,r,c;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));for(n.c==(Ffn(),BPt)&&Mzn(n,_Pt),t=new Wb(n.a.a);t.a<t.c.c.length;)BB(n0(t),189).e=0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((i=BB(n0(r),81)).o=KQn,e=i.f.Kc();e.Ob();)++BB(e.Pb(),81).d.e;for(Gzn(n),c=new Wb(n.a.b);c.a<c.c.c.length;)BB(n0(c),81).k=!0;return n}function RKn(n,t){var e,i,r,c,a,u,o,s;for(u=new pPn(n),r5(e=new YT,t,e.c.b,e.c);0!=e.b;){for((i=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),113)).d.p=1,a=new Wb(i.e);a.a<a.c.c.length;)jTn(u,r=BB(n0(a),409)),0==(s=r.d).d.p&&r5(e,s,e.c.b,e.c);for(c=new Wb(i.b);c.a<c.c.c.length;)jTn(u,r=BB(n0(c),409)),0==(o=r.c).d.p&&r5(e,o,e.c.b,e.c)}return u}function KKn(n){var t,e,i,r,c;if(1!=(i=Gy(MD(ZAn(n,(sWn(),yPt))))))for(MA(n,i*n.g,i*n.f),e=XO(_B((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),new Bu)),c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n),(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),e])));dAn(c);)(r=BB(U5(c),470)).Gg(i*r.Dg(),i*r.Eg()),r.Fg(i*r.Cg(),i*r.Bg()),(t=BB(r.We(cPt),8))&&(t.a*=i,t.b*=i)}function _Kn(n,t,e,i,r){var c,a,u,o,s,h;for(c=new Wb(n.b);c.a<c.c.c.length;)for(s=0,h=(o=n2(BB(n0(c),29).a)).length;s<h;++s)switch(BB(mMn(u=o[s],(HXn(),kgt)),163).g){case 1:vxn(u),PZ(u,t),lvn(u,!0,i);break;case 3:ZNn(u),PZ(u,e),lvn(u,!1,r)}for(a=new M2(n.b,0);a.b<a.d.gc();)0==(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)).a.c.length&&fW(a)}function FKn(n,t){var e,i,r,c,a,u,o;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),M7n)))){for(i=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)mK(r=c[a],"##other")?WB(i,"!##"+az(n,Utn(t.Hj()))):mK(r,"##local")?i.c[i.c.length]=null:mK(r,E7n)?WB(i,az(n,Utn(t.Hj()))):i.c[i.c.length]=r;return i}return SQ(),SQ(),set}function BKn(n,t){var e,i,r;return e=new Xn,(i=1==(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())?1:0)<(r=1==(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?1:0)?-1:i==r?0:1}function HKn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(r=qy(TD(mMn(u=n.i,(HXn(),wgt)))),h=0,i=0,s=new Wb(n.g);s.a<s.c.c.length;)c=(a=b5(o=BB(n0(s),17)))&&r&&qy(TD(mMn(o,dgt))),l=o.d.i,a&&c?++i:a&&!c?++h:vW(l).e==u?++i:++h;for(e=new Wb(n.e);e.a<e.c.c.length;)c=(a=b5(t=BB(n0(e),17)))&&r&&qy(TD(mMn(t,dgt))),f=t.c.i,a&&c?++h:a&&!c?++i:vW(f).e==u?++h:++i;return h-i}function qKn(n,t,e,i){this.e=n,this.k=BB(mMn(n,(hWn(),Alt)),304),this.g=x8(Out,a1n,10,t,0,1),this.b=x8(Ptt,sVn,333,t,7,1),this.a=x8(Out,a1n,10,t,0,1),this.d=x8(Ptt,sVn,333,t,7,1),this.j=x8(Out,a1n,10,t,0,1),this.i=x8(Ptt,sVn,333,t,7,1),this.p=x8(Ptt,sVn,333,t,7,1),this.n=x8(ktt,sVn,476,t,8,1),yS(this.n,(hN(),!1)),this.f=x8(ktt,sVn,476,t,8,1),yS(this.f,!0),this.o=e,this.c=i}function GKn(n,t){var e,i,r;if(!t.dc())if(BB(t.Xb(0),286).d==($Pn(),nht))Akn(n,t);else for(i=t.Kc();i.Ob();){switch((e=BB(i.Pb(),286)).d.g){case 5:hPn(n,e,Vbn(n,e));break;case 0:hPn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:hPn(n,e,$nn(n,e));break;case 2:Kwn(e),hPn(n,e,$En(e)?e.c:e.f);break;case 1:Kwn(e),hPn(n,e,$En(e)?e.f:e.c)}hMn(e.a)}}function zKn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=BB(i.Pb(),17),t.o&&t.d.a.gc()<=1?(a=new xC((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),DH(BB(t.d.a.ec().Kc().Pb(),17).a,a)):(r=BB(RX(t.c,e),459)).b||r.c?dKn(n,e,t):n.d==(Usn(),rmt)&&(r.d||r.e)&&LOn(n,t)&&t.d.a.gc()<=1?dzn(e,t):DDn(n,e,t);t.k&&e5(t.d,new Te)}}function UKn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g,p,v,m;for(o=(r+c)/2+a,g=i*e.Math.cos(o),p=i*e.Math.sin(o),v=g-t.g/2,m=p-t.f/2,Pen(t,v),Cen(t,m),l=n.a.jg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,u=(r+c-d)/2):(b=(c-r)/l,u=r),w=wDn(t),n.e&&(n.e.kg(n.d),n.e.lg(w)),h=new Wb(w);h.a<h.c.c.length;)s=BB(n0(h),33),f=n.a.jg(s),UKn(n,s,i+n.c,u,u+b*f,a),u+=b*f}function XKn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[i]);break;case 3:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Enn(n,i+1,t)}}function WKn(n,t){var e,i,r,c;if(OTn(t,"Network simplex",1),n.e.a.c.length<1)HSn(t);else{for(r=new Wb(n.e.a);r.a<r.c.c.length;)BB(n0(r),121).e=0;for((c=n.e.a.c.length>=40)&&EFn(n),BHn(n),Txn(n),e=yln(n),i=0;e&&i<n.f;)e_n(n,e,e$n(n,e)),e=yln(n),++i;c&&tTn(n),n.a?p$n(n,fKn(n)):fKn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,HSn(t)}}function VKn(n,t,e,i){var r,c,a,u,o,s,h,f;for(XR(u=new xC(e,i),BB(mMn(t,(Mrn(),oat)),8)),f=new Wb(t.e);f.a<f.c.c.length;)UR((h=BB(n0(f),144)).d,u),WB(n.e,h);for(a=new Wb(t.c);a.a<a.c.c.length;){for(r=new Wb((c=BB(n0(a),282)).a);r.a<r.c.c.length;)UR(BB(n0(r),559).d,u);WB(n.c,c)}for(s=new Wb(t.d);s.a<s.c.c.length;)UR((o=BB(n0(s),447)).d,u),WB(n.d,o)}function QKn(n,t){var e,i,r,c,a,u,o,s;for(o=new Wb(t.j);o.a<o.c.c.length;)for(r=new m6((u=BB(n0(o),11)).b);y$(r.a)||y$(r.b);)t!=(c=(e=(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==u?i.d:i.c).i)&&((s=BB(mMn(i,(HXn(),fpt)),19).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&DH(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&DH(n.e,c))))}function YKn(n){var t,e,i,r,c,a,u;for(c=new dE(BB(yX(new Rn),62)),u=KQn,e=new Wb(n.d);e.a<e.c.c.length;){for(u=(t=BB(n0(e),222)).c.c;0!=c.a.c&&(a=BB(MU(q9(c.a)),222)).c.c+a.c.b<u;)$J(c.a,a);for(r=new Fb(new BR(new xN(new _b(c.a).a).b));aS(r.a.a);)DH((i=BB(mx(r.a).cd(),222)).b,t),DH(t.b,i);Mon(c.a,t,(hN(),ptt))}}function JKn(n,t,e){var i,r,c,a,u,o,s,h,f;for(c=new J6(t.c.length),s=new Wb(t);s.a<s.c.c.length;)a=BB(n0(s),10),WB(c,n.b[a.c.p][a.p]);for(mqn(n,c,e),f=null;f=ezn(c);)rBn(n,BB(f.a,233),BB(f.b,233),c);for(t.c=x8(Ant,HWn,1,0,5,1),r=new Wb(c);r.a<r.c.c.length;)for(o=0,h=(u=(i=BB(n0(r),233)).d).length;o<h;++o)a=u[o],t.c[t.c.length]=a,n.a[a.c.p][a.p].a=lL(i.g,i.d[0]).a}function ZKn(n,t){var e,i,r,c;if(0<(cL(n,14)?BB(n,14).gc():F3(n.Kc()))){if(1<(r=t)){for(--r,c=new pa,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));return ZKn(c,r)}if(r<0){for(c=new va,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));if(0<(cL(c,14)?BB(c,14).gc():F3(c.Kc())))return ZKn(c,r)}}return BB(iL(n.Kc()),86)}function n_n(){n_n=O,GIt=new QC("DEFAULT_MINIMUM_SIZE",0),UIt=new QC("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),qIt=new QC("COMPUTE_PADDING",2),XIt=new QC("OUTSIDE_NODE_LABELS_OVERHANG",3),WIt=new QC("PORTS_OVERHANG",4),QIt=new QC("UNIFORM_PORT_SPACING",5),VIt=new QC("SPACE_EFFICIENT_PORT_LABELS",6),zIt=new QC("FORCE_TABULAR_NODE_LABELS",7),HIt=new QC("ASYMMETRICAL",8)}function t_n(n,t){var e,i,r,c,a,u,o,s;if(t){if(e=(c=t.Tg())?Utn(c).Nh().Jh(c):null){for(Jgn(n,t,e),o=0,s=(null==(r=t.Tg()).i&&qFn(r),r.i).length;o<s;++o)null==r.i&&qFn(r),i=r.i,(u=o>=0&&o<i.length?i[o]:null).Ij()&&!u.Jj()&&(cL(u,322)?nvn(n,BB(u,34),t,e):0!=((a=BB(u,18)).Bb&h6n)&&sEn(n,a,t,e));t.kh()&&BB(e,49).vh(BB(t,49).qh())}return e}return null}function e_n(n,t,e){var i,r,c;if(!t.f)throw Hp(new _y("Given leave edge is no tree edge."));if(e.f)throw Hp(new _y("Given enter edge is a tree edge already."));for(t.f=!1,eL(n.p,t),e.f=!0,TU(n.p,e),i=e.e.e-e.d.e-e.a,FCn(n,e.e,t)||(i=-i),c=new Wb(n.e.a);c.a<c.c.c.length;)FCn(n,r=BB(n0(c),121),t)||(r.e+=i);n.j=1,nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}function i_n(n,t){var e,i,r,c,a,u;if((u=BB(mMn(t,(HXn(),ept)),98))==(QEn(),WCt)||u==XCt)for(r=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((e=BB(mMn(c,(hWn(),Qft)),61))!=(kUn(),oIt)&&e!=CIt||(i=Gy(MD(mMn(c,Tlt))),u==WCt&&(i*=r),c.n.b=i-BB(mMn(c,npt),8).b,Jan(c,!1,!0)))}function r_n(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;if(Ytn(n,t,e),c=t[e],b=i?(kUn(),CIt):(kUn(),oIt),mL(t.length,e,i)){for(G6(n,r=t[i?e-1:e+1],i?(ain(),qvt):(ain(),Hvt)),h=0,l=(o=c).length;h<l;++h)xvn(n,a=o[h],b);for(G6(n,c,i?(ain(),Hvt):(ain(),qvt)),s=0,f=(u=r).length;s<f;++s)(a=u[s]).e||xvn(n,a,Tln(b))}else for(s=0,f=(u=c).length;s<f;++s)xvn(n,a=u[s],b);return!1}function c_n(n,t,e,i){var r,c,a,u,o;u=abn(t,e),(e==(kUn(),SIt)||e==CIt)&&(u=cL(u,152)?o6(BB(u,152)):cL(u,131)?BB(u,131).a:cL(u,54)?new fy(u):new CT(u)),a=!1;do{for(r=!1,c=0;c<u.gc()-1;c++)BMn(n,BB(u.Xb(c),11),BB(u.Xb(c+1),11),i)&&(a=!0,k0(n.a,BB(u.Xb(c),11),BB(u.Xb(c+1),11)),o=BB(u.Xb(c+1),11),u._c(c+1,BB(u.Xb(c),11)),u._c(c,o),r=!0)}while(r);return a}function a_n(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;if(!mA(n.e))return BB(YIn(n,t,e),72);if(t!=e&&(a=(b=(r=BB(n.g,119))[e]).ak(),$xn(n.e,a))){for(w=axn(n.e.Tg(),a),o=-1,u=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?u=i++:(c=r[s],h=w.rl(c.ak()),s==t&&(o=s!=f||h?i:i-1),h&&++i);return l=BB(Iln(n,t,e),72),u!=o&&Lv(n,new j9(n.e,7,a,iln(u),b.dd(),o)),l}return BB(Iln(n,t,e),72)}function u_n(n,t){var e,i,r,c,a,u;for(OTn(t,"Port order processing",1),u=BB(mMn(n,(HXn(),opt)),421),e=new Wb(n.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)i=BB(n0(r),10),c=BB(mMn(i,ept),98),a=i.j,c==(QEn(),UCt)||c==WCt||c==XCt?(SQ(),m$(a,sst)):c!=QCt&&c!=YCt&&(SQ(),m$(a,fst),Lvn(a),u==(U7(),_vt)&&m$(a,hst)),i.i=!0,eIn(i);HSn(t)}function o_n(n){var t,i,r,c,a,u,o,s;for(s=new xp,t=new Fv,u=n.Kc();u.Ob();)c=BB(u.Pb(),10),o=AN(oM(new qv,c),t),jCn(s.f,c,o);for(a=n.Kc();a.Ob();)for(r=new oz(ZL(lbn(c=BB(a.Pb(),10)).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||UNn(aM(cM(rM(uM(new Hv,e.Math.max(1,BB(mMn(i,(HXn(),lpt)),19).a)),1),BB(RX(s,i.c.i),121)),BB(RX(s,i.d.i),121)));return t}function s_n(){s_n=O,byt=dq(new B2,(yMn(),Fat),(lWn(),vot)),dyt=dq(new B2,_at,jot),gyt=WG(dq(new B2,_at,Dot),Bat,xot),lyt=WG(dq(dq(new B2,_at,lot),Fat,bot),Bat,wot),pyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),wyt=WG(new B2,Bat,mot),hyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),fyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function h_n(n,t,e,i,r,c){var a,u,o,s,h,f;for(a=lSn(t,o=jon(t)-jon(n)),u=M$(0,0,0);o>=0&&(!Cyn(n,a)||(o<22?u.l|=1<<o:o<44?u.m|=1<<o-22:u.h|=1<<o-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--o;return e&&Oon(u),c&&(i?(ltt=aon(n),r&&(ltt=hun(ltt,(X7(),dtt)))):ltt=M$(n.l,n.m,n.h)),u}function f_n(n,t){var e,i,r,c,a,u,o,s,h,f;for(s=n.e[t.c.p][t.p]+1,o=t.c.a.c.length+1,u=new Wb(n.a);u.a<u.c.c.length;){for(a=BB(n0(u),11),f=0,c=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(a),new Gw(a)])));dAn(r);)(i=BB(U5(r),11)).i.c==t.c&&(f+=bL(n,i.i)+1,++c);e=f/c,(h=a.j)==(kUn(),oIt)?n.f[a.p]=e<s?n.c-e:n.b+(o-e):h==CIt&&(n.f[a.p]=e<s?n.b+e:n.c-(o-e))}}function l_n(n,t,e){var i,r,c,a;if(null==n)throw Hp(new Mk(zWn));for(i=(c=n.length)>0&&(b1(0,n.length),45==n.charCodeAt(0)||(b1(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==egn((b1(i,n.length),n.charCodeAt(i))))throw Hp(new Mk(DQn+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw Hp(new Mk(DQn+n+'"'));if(r||a>e)throw Hp(new Mk(DQn+n+'"'));return a}function b_n(n){var t,i,r,c,a,u;for(a=new YT,c=new Wb(n.a);c.a<c.c.c.length;)Vl(r=BB(n0(c),112),r.f.c.length),Ql(r,r.k.c.length),0==r.i&&(r.o=0,r5(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),112)).o+1,t=new Wb(r.f);t.a<t.c.c.length;)Yl(u=BB(n0(t),129).a,e.Math.max(u.o,i)),Ql(u,u.i-1),0==u.i&&r5(a,u,a.c.b,a.c)}function w_n(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n);a.a<a.c.c.length;){for(c=BB(n0(a),79),u=(i=PTn(BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82))).i,o=i.j,CA(r=BB(Wtn((!c.a&&(c.a=new eU(FOt,c,6,6)),c.a),0),202),r.j+u,r.k+o),PA(r,r.b+u,r.c+o),e=new AL((!r.a&&(r.a=new $L(xOt,r,5)),r.a));e.e!=e.i.gc();)TA(t=BB(kpn(e),469),t.a+u,t.b+o);Yrn(BB(ZAn(c,(sWn(),OSt)),74),u,o)}}function d_n(n){switch(n){case 100:return mWn(snt,!0);case 68:return mWn(snt,!1);case 119:return mWn(hnt,!0);case 87:return mWn(hnt,!1);case 115:return mWn(fnt,!0);case 83:return mWn(fnt,!1);case 99:return mWn(lnt,!0);case 67:return mWn(lnt,!1);case 105:return mWn(bnt,!0);case 73:return mWn(bnt,!1);default:throw Hp(new dy(ont+n.toString(16)))}}function g_n(n){var t,i,r,c,a;switch(c=BB(xq(n.a,0),10),t=new $vn(n),WB(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,BB(mMn(c,(hWn(),Qft)),61).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return CZ(r=new CSn,t),SZ(i=new wY,a=BB(xq(c.j,0),11)),MZ(i,r),UR(kO(r.n),a.n),UR(kO(r.a),a.a),t}function p_n(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.b],10).k==(uSn(),Sut)?hFn(BB(n.a[n.b],10),(Xyn(),jCt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.c-1&n.a.length-1],10).k==(uSn(),Sut)?hFn(BB(n.a[n.c-1&n.a.length-1],10),(Xyn(),ECt)):2==(n.c-n.b&n.a.length-1)?(hFn(BB(Eon(n),10),(Xyn(),jCt)),hFn(BB(Eon(n),10),ECt)):sLn(n,r),o4(n)}function v_n(n,t,i){var r,c,a,u,o;for(a=0,c=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));c.e!=c.i.gc();)u="",0==(!(r=BB(kpn(c),33)).n&&(r.n=new eU(zOt,r,1,7)),r.n).i||(u=BB(Wtn((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n),0),137).a),qan(o=new csn(a++,t,u),r),hon(o,(qqn(),skt),r),o.e.b=r.j+r.f/2,o.f.a=e.Math.max(r.g,1),o.e.a=r.i+r.g/2,o.f.b=e.Math.max(r.f,1),DH(t.b,o),jCn(i.f,r,o)}function m_n(n){var t,e,i,r,c;i=BB(mMn(n,(hWn(),dlt)),33),c=BB(ZAn(i,(HXn(),Fgt)),174).Hc((mdn(),_It)),n.e||(r=BB(mMn(n,Zft),21),t=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((bDn(),lft))?(Ypn(i,ept,(QEn(),XCt)),KUn(i,t.a,t.b,!1,!0)):qy(TD(ZAn(i,Bgt)))||KUn(i,t.a,t.b,!0,!0)),Ypn(i,Fgt,c?nbn(_It):new YK(e=BB(Vj(YIt),9),BB(SR(e,e.length),9),0))}function y_n(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(fV(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=UIn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==fV(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=UIn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function k_n(n){var t,e,i,r,c,a,u;for(r=new Np,i=new oz(ZL(lbn(n.b).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))&&WB(r,new j6(e,v9(n,e.c),v9(n,e.d)));for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(c=BB(t.dd(),113)).d.p=0;for(a=new Kb(new Ob(n.e).a.vc().Kc());a.a.Ob();)t=BB(a.a.Pb(),42),0==(c=BB(t.dd(),113)).d.p&&WB(n.d,RKn(n,c))}function j_n(n){var t,e,i,r,c;for(c=WJ(n),r=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));r.e!=r.i.gc();)if(i=BB(kpn(r),79),!Ctn(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82)),c))return!0;for(e=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));e.e!=e.i.gc();)if(t=BB(kpn(e),79),!Ctn(PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),c))return!0;return!1}function E_n(n){var t,i,r,c,a,u,o,s;for(s=new km,o=null,i=BB(b3(t=spn(n,0)),8),c=BB(b3(t),8);t.b!=t.d.c;)o=i,i=c,c=BB(b3(t),8),a=ctn(XR(new xC(o.a,o.b),i)),u=ctn(XR(new xC(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(u.a+u.b)/2),a.a=HH(a.a)*r,a.b=HH(a.b)*r,u.a=HH(u.a)*r,u.b=HH(u.b)*r,DH(s,UR(a,i)),DH(s,UR(u,i));return s}function T_n(n,t,e,i){var r,c,a,u,o;return a=n.eh(),r=null,(o=n.Zg())?t&&0==(gKn(n,t,e).Bb&BQn)?(i=_pn(o.Vk(),n,i),n.uh(null),r=t.fh()):o=null:(a&&(o=a.fh()),t&&(r=t.fh())),o!=r&&o&&o.Zk(n),u=n.Vg(),n.Rg(t,e),o!=r&&r&&r.Yk(n),n.Lg()&&n.Mg()&&(a&&u>=0&&u!=e&&(c=new nU(n,1,u,a,null),i?i.Ei(c):i=c),e>=0&&(c=new nU(n,1,e,u==e?a:null,t),i?i.Ei(c):i=c)),i}function M_n(n){var t,e,i;if(null==n.b){if(i=new Sk,null!=n.i&&(cO(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(rQ(n.i)||(i.a+="//"),cO(i,n.a)),null!=n.d&&(i.a+="/",cO(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),cO(i,n.j[t]);null!=n.g&&(i.a+="?",cO(i,n.g))}else cO(i,n.a);null!=n.e&&(i.a+="#",cO(i,n.e)),n.b=i.a}return n.b}function S_n(n,t){var e,i,r,c,a,u;for(r=new Wb(t.a);r.a<r.c.c.length;)cL(c=mMn(i=BB(n0(r),10),(hWn(),dlt)),11)&&(u=yFn(t,i,(a=BB(c,11)).o.a,a.o.b),a.n.a=u.a,a.n.b=u.b,qCn(a,BB(mMn(i,Qft),61)));e=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))?(hon(n,(HXn(),ept),(QEn(),XCt)),BB(mMn(vW(n),Zft),21).Fc(dft),bGn(n,e,!1)):bGn(n,e,!0)}function P_n(n,t,e){var i,r,c,a,u;OTn(e,"Minimize Crossings "+n.a,1),i=0==t.b.c.length||!jE(AV(new Rq(null,new w1(t.b,16)),new aw(new Ac))).sd((dM(),tit)),u=1==t.b.c.length&&1==BB(xq(t.b,0),29).a.c.length,c=GI(mMn(t,(HXn(),sgt)))===GI((ufn(),pCt)),i||u&&!c||(Ssn(r=sxn(n,t),(a=BB(Dpn(r,0),214)).c.Rf()?a.c.Lf()?new Ud(n):new Xd(n):new zd(n)),afn(n)),HSn(e)}function C_n(n,t,e,i){var r,c,a,u;if(u=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),r=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),a=Zrn(n,t,u),c=Jrn(n,e,r),a&&r==a.a&&wW(e,a.g))return e;if(c&&!i)throw Hp(new _y("key already present: "+e));return a&&LLn(n,a),c&&LLn(n,c),YCn(n,new qW(e,r,t,u),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),qkn(n),a?a.g:null}function I_n(n,t,e){var i,r,c,a,u;for(c=0;c<t;c++){for(i=0,u=c+1;u<t;u++)i=rbn(rbn(cbn(e0(n[c],UQn),e0(n[u],UQn)),e0(e[c+u],UQn)),e0(dG(i),UQn)),e[c+u]=dG(i),i=jz(i,32);e[c+t]=dG(i)}for(ncn(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=rbn(rbn(cbn(e0(n[r],UQn),e0(n[r],UQn)),e0(e[a],UQn)),e0(dG(i),UQn)),e[a]=dG(i),i=rbn(i=jz(i,32),e0(e[++a],UQn)),e[a]=dG(i),i=jz(i,32);return e}function O_n(n,t,i){var r,c,a,u,o,s,h,f;if(!h3(t)){for(s=Gy(MD(edn(i.c,(HXn(),Npt)))),!(h=BB(edn(i.c,Lpt),142))&&(h=new lm),r=i.a,c=null,o=t.Kc();o.Ob();)u=BB(o.Pb(),11),f=0,c?(f=s,f+=c.o.b):f=h.d,a=AN(oM(new qv,u),n.f),VW(n.k,u,a),UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(f))),r),a)),c=u,r=a;UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function A_n(n,t,e,i,r,c,a,u){var o,s,h;return h=!1,s=c-e.s,o=e.t-t.f+cHn(e,s,!1).a,!(i.g+u>s)&&(o+u+cHn(i,s,!1).a<=t.b&&(p9(e,c-e.s),e.c=!0,p9(i,c-e.s),Tvn(i,e.s,e.t+e.d+u),i.k=!0,xcn(e.q,i),h=!0,r&&(tin(t,i),i.j=t,n.c.length>a&&(Tkn((l1(a,n.c.length),BB(n.c[a],200)),i),0==(l1(a,n.c.length),BB(n.c[a],200)).a.c.length&&s6(n,a)))),h)}function $_n(n,t){var e,i,r,c,a;if(OTn(t,"Partition midprocessing",1),r=new pJ,JT(AV(new Rq(null,new w1(n.a,16)),new di),new ld(r)),0!=r.d){for(a=BB(P4(a1(new Rq(null,(r.i||(r.i=new HL(r,r.c))).Nc())),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=BB((i=a.Kc()).Pb(),19);i.Ob();)c=BB(i.Pb(),19),XLn(BB(h6(r,e),21),BB(h6(r,c),21)),e=c;HSn(t)}}function L_n(n,t,e){var i,r,c,a,u;if(0==t.p){for(t.p=1,(r=e)||(r=new rI(new Np,new YK(i=BB(Vj(FIt),9),BB(SR(i,i.length),9),0))),BB(r.a,15).Fc(t),t.k==(uSn(),Mut)&&BB(r.b,21).Fc(BB(mMn(t,(hWn(),Qft)),61)),a=new Wb(t.j);a.a<a.c.c.length;)for(c=BB(n0(a),11),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(c),new Gw(c)])));dAn(u);)L_n(n,BB(U5(u),11).i,r);return r}return null}function N_n(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=BB(n.Ab.g,1934),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(mK(t,(e=r[c]).d))return e}else if(null==t){for(i=new AL(n.Ab);i.e!=i.i.gc();)if(null==(e=BB(kpn(i),590)).d)return e}else for(i=new AL(n.Ab);i.e!=i.i.gc();)if(mK(t,(e=BB(kpn(i),590)).d))return e;return null}function x_n(n,t){var e,i,r,c,a,u,o;if(null==(o=TD(mMn(t,(CAn(),Nkt))))||(kW(o),o)){for(DOn(n,t),r=new Np,u=spn(t.b,0);u.b!=u.d.c;)(e=xPn(n,BB(b3(u),86),null))&&(qan(e,t),r.c[r.c.length]=e);if(n.a=null,n.b=null,r.c.length>1)for(i=new Wb(r);i.a<i.c.c.length;)for(c=0,a=spn((e=BB(n0(i),135)).b,0);a.b!=a.d.c;)BB(b3(a),86).g=c++;return r}return u6(Pun(Gk(Gyt,1),tZn,135,0,[t]))}function D_n(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p;crn(b=A3(n,qun(t),r),R2(r,q6n)),d=D2(w=r,U6n),cSn(new Lg(b).a,d),g=D2(w,"endPoint"),rSn(new Rg(b).a,g),p=N2(w,D6n),SEn(new Fg(b).a,p),f=R2(r,K6n),qR((c=new hI(n,b)).a,c.b,f),l=R2(r,R6n),GR((a=new fI(n,b)).a,a.b,l),s=N2(r,F6n),Fyn((u=new lI(e,b)).b,u.a,s),h=N2(r,_6n),Byn((o=new bI(i,b)).b,o.a,h)}function R_n(n,t,e){var i,r,c,a,u;switch(u=null,t.g){case 1:for(r=new Wb(n.j);r.a<r.c.c.length;)if(qy(TD(mMn(i=BB(n0(r),11),(hWn(),tlt)))))return i;hon(u=new CSn,(hWn(),tlt),(hN(),!0));break;case 2:for(a=new Wb(n.j);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),11),(hWn(),klt)))))return c;hon(u=new CSn,(hWn(),klt),(hN(),!0))}return u&&(CZ(u,n),qCn(u,e),yvn(u.n,n.o,e)),u}function K_n(n,t){var i,r,c,a,u,o;for(o=-1,u=new YT,r=new m6(n.b);y$(r.a)||y$(r.b);){for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),o=e.Math.max(o,Gy(MD(mMn(i,(HXn(),agt))))),i.c==n?JT(AV(new Rq(null,new w1(i.b,16)),new fe),new nd(u)):JT(AV(new Rq(null,new w1(i.b,16)),new le),new td(u)),a=spn(u,0);a.b!=a.d.c;)Lx(c=BB(b3(a),70),(hWn(),Uft))||hon(c,Uft,i);gun(t,u),yQ(u)}return o}function __n(n,t,e,i,r){var c,a,u,o;Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,(hWn(),dlt),t.c.i),hon(a=new CSn,dlt,t.c),qCn(a,r),CZ(a,c),hon(t.c,Elt,c),Bl(u=new $vn(n),Iut),hon(u,ept,XCt),hon(u,dlt,t.d.i),hon(o=new CSn,dlt,t.d),qCn(o,r),CZ(o,u),hon(t.d,Elt,u),SZ(t,a),MZ(t,o),LZ(0,e.c.length),MS(e.c,0,c),i.c[i.c.length]=u,hon(c,Bft,iln(1)),hon(u,Bft,iln(1))}function F_n(n,t,i,r,c){var a,u,o,s,h;o=c?r.b:r.a,FT(n.a,r)||(h=o>i.s&&o<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(o-Gy(MD(gx(i.e))))<lZn&&e.Math.abs(o-Gy(MD(gx(i.j))))<lZn,s|=e.Math.abs(o-Gy(MD(px(i.e))))<lZn&&e.Math.abs(o-Gy(MD(px(i.j))))<lZn),(h||s)&&((u=BB(mMn(t,(HXn(),vgt)),74))||(u=new km,hon(t,vgt,u)),r5(u,a=new wA(r),u.c.b,u.c),TU(n.a,a)))}function B_n(n,t,e,i){var r,c,a,u,o,s,h;if(WIn(n,t,e,i))return!0;for(a=new Wb(t.f);a.a<a.c.c.length;){switch(c=BB(n0(a),324),u=!1,s=(o=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:u=Osn(n,o+c.b.a,0,o+c.c.a,h-1);break;case 1:u=Osn(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:u=Osn(n,o+c.b.a,r,o+c.c.a,n.p-1);break;default:u=Osn(n,0,h+c.b.a,o-1,h+c.c.a)}if(u)return!0}return!1}function H_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(fbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.c.i,e)));SQ(),m$(s,n.c),kG(n.b,u.p,s)}}function q_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(lbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.d.i,e)));SQ(),m$(s,n.c),kG(n.f,u.p,s)}}function G_n(n){NM(n,new MTn(vj(wj(pj(gj(new du,l5n),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new xu))),u2(n,l5n,QJn,zMt),u2(n,l5n,vZn,15),u2(n,l5n,pZn,iln(0)),u2(n,l5n,A4n,mpn(_Mt)),u2(n,l5n,PZn,mpn(BMt)),u2(n,l5n,SZn,mpn(qMt)),u2(n,l5n,VJn,f5n),u2(n,l5n,jZn,mpn(FMt)),u2(n,l5n,BZn,mpn(HMt)),u2(n,l5n,b5n,mpn(RMt)),u2(n,l5n,u3n,mpn(KMt))}function z_n(n,t){var e,i,r,c,a,u,o,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return kUn(),PIt;switch(s=n.n.a,h=n.n.b,u=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return kUn(),CIt;if(s+u>a)return kUn(),oIt;break;case 4:case 3:if(h<0)return kUn(),sIt;if(h+e>c)return kUn(),SIt}return(o=(s+u/2)/a)+(i=(h+e/2)/c)<=1&&o-i<=0?(kUn(),CIt):o+i>=1&&o-i>=0?(kUn(),oIt):i<.5?(kUn(),sIt):(kUn(),SIt)}function U_n(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(e=!1,o=Gy(MD(mMn(t,(HXn(),Opt)))),l=KVn*o,r=new Wb(t.b);r.a<r.c.c.length;)for(i=BB(n0(r),29),c=BB(n0(u=new Wb(i.a)),10),s=wU(n.a[c.p]);u.a<u.c.c.length;)a=BB(n0(u),10),s!=(h=wU(n.a[a.p]))&&(f=K$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function X_n(n,t,e,i,r,c,a){var u,o,s,h,f;for(f=new bA,o=t.Kc();o.Ob();)for(h=new Wb(BB(o.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),XPt))&&(rKn(f,s,!1,i,r,c,a),CPn(n,f));for(u=e.Kc();u.Ob();)for(h=new Wb(BB(u.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),UPt))&&(rKn(f,s,!0,i,r,c,a),CPn(n,f))}function W_n(n,t,e){var i,r,c,a,u,o,s;for(a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new oz(ZL(dLn(c=BB(kpn(a),33)).a.Kc(),new h));dAn(r);)nAn(i=BB(U5(r),79))||nAn(i)||QIn(i)||(o=BB(qI(AY(e.f,c)),86),s=BB(RX(e,PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))),86),o&&s&&(hon(u=new UQ(o,s),(qqn(),skt),i),qan(u,i),DH(o.d,u),DH(s.b,u),DH(t.a,u)))}function V_n(n,t){var i,r,c,a,u,o,s;for(o=BB(BB(h6(n.r,t),21),84).Kc();o.Ob();)(r=(u=BB(o.Pb(),111)).c?WH(u.c):0)>0?u.a?r>(s=u.b.rf().b)&&(n.v||1==u.c.d.c.length?(a=(r-s)/2,u.d.d=a,u.d.a=a):(i=(BB(xq(u.c.d,0),181).rf().b-s)/2,u.d.d=e.Math.max(0,i),u.d.a=r-i-s)):u.d.a=n.t+r:Hz(n.u)&&((c=_Tn(u.b)).d<0&&(u.d.d=-c.d),c.d+c.a>u.b.rf().b&&(u.d.a=c.d+c.a-u.b.rf().b))}function Q_n(n,t){var e;switch(vnn(n)){case 6:return XI(t);case 7:return UI(t);case 8:return zI(t);case 3:return Array.isArray(t)&&!((e=vnn(t))>=14&&e<=16);case 11:return null!=t&&typeof t===xWn;case 12:return null!=t&&(typeof t===AWn||typeof t==xWn);case 0:return Qpn(t,n.__elementTypeId$);case 2:return DU(t)&&!(t.im===I);case 1:return DU(t)&&!(t.im===I)||Qpn(t,n.__elementTypeId$);default:return!0}}function Y_n(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function J_n(n,t){var i,r,c,a,u,o;return(c=iin(n))==(o=iin(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*zQn)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*zQn)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=yhn(n.f)),a=n.c,!t.c&&(t.c=yhn(t.f)),u=t.c,r<0?a=Nnn(a,kBn(-r)):r>0&&(u=Nnn(u,kBn(r))),tgn(a,u))):c<o?-1:1}function Z_n(n,t){var e,i,r,c,a,u,o;for(c=0,u=0,o=0,r=new Wb(n.f.e);r.a<r.c.c.length;)t!=(i=BB(n0(r),144))&&(c+=a=n.i[t.b][i.b],(e=W8(t.d,i.d))>0&&n.d!=(q7(),Aat)&&(u+=a*(i.d.a+n.a[t.b][i.b]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(q7(),Iat)&&(o+=a*(i.d.b+n.a[t.b][i.b]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new xC(u/c,t.d.b);case 2:return new xC(t.d.a,o/c);default:return new xC(u/c,o/c)}}function nFn(n,t){var e,i,r,c;if(zsn(),c=BB(mMn(n.i,(HXn(),ept)),98),0!=n.j.g-t.j.g||c!=(QEn(),UCt)&&c!=WCt&&c!=XCt)return 0;if(c==(QEn(),UCt)&&(e=BB(mMn(n,ipt),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function tFn(n){var t,e,i,r,c;for(WB(c=new J6((!n.a&&(n.a=new $L(xOt,n,5)),n.a).i+2),new xC(n.j,n.k)),JT(new Rq(null,(!n.a&&(n.a=new $L(xOt,n,5)),new w1(n.a,16))),new Ig(c)),WB(c,new xC(n.b,n.c)),t=1;t<c.c.length-1;)l1(t-1,c.c.length),e=BB(c.c[t-1],8),l1(t,c.c.length),i=BB(c.c[t],8),l1(t+1,c.c.length),r=BB(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?s6(c,t):++t;return c}function eFn(n,t){var e,i,r,c,a,u,o;for(e=ON(iM(tM(eM(new Wv,t),new gY(t.e)),gst),n.a),0==t.j.c.length||V9(BB(xq(t.j,0),57).a,e),o=new Dp,VW(n.e,e,o),a=new Rv,u=new Rv,c=new Wb(t.k);c.a<c.c.c.length;)TU(a,(r=BB(n0(c),17)).c),TU(u,r.d);(i=a.a.gc()-u.a.gc())<0?(Uun(o,!0,(Ffn(),_Pt)),Uun(o,!1,FPt)):i>0&&(Uun(o,!1,(Ffn(),_Pt)),Uun(o,!0,FPt)),Otn(t.g,new sP(n,e)),VW(n.g,t,e)}function iFn(){var n;for(iFn=O,Ltt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Ntt=x8(ANt,hQn,25,37,15,1),xtt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),Dtt=x8(LNt,FQn,25,37,14,1),n=2;n<=36;n++)Ntt[n]=CJ(e.Math.pow(n,Ltt[n])),Dtt[n]=Ojn(bVn,Ntt[n])}function rFn(n){var t;if(1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));return t=new km,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),!1)),bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),!0)),t}function cFn(n,t){var e,i,r;for(r=!1,i=new oz(ZL((t.d?n.a.c==(gJ(),tyt)?fbn(t.b):lbn(t.b):n.a.c==(gJ(),nyt)?fbn(t.b):lbn(t.b)).a.Kc(),new h));dAn(i);)if(e=BB(U5(i),17),(qy(n.a.f[n.a.g[t.b.p].p])||b5(e)||e.c.i.c!=e.d.i.c)&&!qy(n.a.n[n.a.g[t.b.p].p])&&!qy(n.a.n[n.a.g[t.b.p].p])&&(r=!0,FT(n.b,n.a.g[Lmn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function aFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(SQ(),m$(n,new Xu),u=new M2(n,0),f=new Np,c=0;u.b<u.d.gc();)Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),157),0!=f.c.length&&iG(a)*eG(a)>2*c?(h=new Gtn(f),s=iG(a)/eG(a),o=yXn(h,t,new bm,e,i,r,s),UR(kO(h.e),o),f.c=x8(Ant,HWn,1,0,5,1),c=0,f.c[f.c.length]=h,f.c[f.c.length]=a,c=iG(h)*eG(h)+iG(a)*eG(a)):(f.c[f.c.length]=a,c+=iG(a)*eG(a));return f}function uFn(n,t,e){var i,r,c,a,u,o,s;if(0==(i=e.gc()))return!1;if(n.ej())if(o=n.fj(),kwn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,o):n.Zi(5,null,e,t,o),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)s=n.Oi(r),u=n.cj(s,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(kwn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)u=n.cj(n.Oi(r),u);u&&u.Fi()}return!0}function oFn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=n.Ui(t,n.oi(t,e)),e,t,c),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))?(a&&(r=n.dj(a,r)),(r=n.cj(e,r))?(r.Ei(i),r.Fi()):n.$i(i)):r?(r.Ei(i),r.Fi()):n.$i(i),a):(a=n.Ui(t,n.oi(t,e)),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))&&(r=null,a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function sFn(n,t){var i,r,c,a,u,o,s,h;if(n.e=t,n.f=BB(mMn(t,(Mrn(),hat)),230),XTn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!qy(TD(mMn(t,(fRn(),Hct)))))for(h=n.e.e.c.length,o=new Wb(t.e);o.a<o.c.c.length;)(s=BB(n0(o),144).d).a=OG(n.f)*h,s.b=OG(n.f)*h;for(i=t.b,a=new Wb(t.c);a.a<a.c.c.length;)if(c=BB(n0(a),282),(r=BB(mMn(c,eat),19).a)>0){for(u=0;u<r;u++)WB(i,new hX(c));BCn(c)}}function hFn(n,t){var i,r,c,a,u;if(n.k==(uSn(),Sut)&&(i=jE(AV(BB(mMn(n,(hWn(),Plt)),15).Oc(),new aw(new ri))).sd((dM(),tit))?t:(Xyn(),TCt),hon(n,ult,i),i!=(Xyn(),ECt)))for(r=BB(mMn(n,dlt),17),u=Gy(MD(mMn(r,(HXn(),agt)))),a=0,i==jCt?a=n.o.b-e.Math.ceil(u/2):i==TCt&&(n.o.b-=Gy(MD(mMn(vW(n),jpt))),a=(n.o.b-e.Math.ceil(u))/2),c=new Wb(n.j);c.a<c.c.c.length;)BB(n0(c),11).n.b=a}function fFn(){fFn=O,JM(),TNt=new Rh,Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(z7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(X7n)]),Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),new $A("-1"),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE("\\c+")])]),new $A("0"),new $A("0"),new $A("1"),new $A("0"),new $A(int)}function lFn(n){var t,e;return n.c&&n.c.kh()&&(e=BB(n.c,49),n.c=BB(tfn(n,e),138),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,2,e,n.c)),cL(n.Cb,399)?n.Db>>16==-15&&n.Cb.nh()&&$7(new k9(n.Cb,9,13,e,n.c,uvn(H7(BB(n.Cb,59)),n))):cL(n.Cb,88)&&n.Db>>16==-23&&n.Cb.nh()&&(cL(t=n.c,88)||(gWn(),t=d$t),cL(e,88)||(gWn(),e=d$t),$7(new k9(n.Cb,9,10,e,t,uvn(a4(BB(n.Cb,26)),n)))))),n.c}function bFn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hypernodes processing",1),i=new Wb(n.b);i.a<i.c.c.length;)for(a=new Wb(BB(n0(i),29).a);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),10),(HXn(),bgt))))&&c.j.c.length<=2){for(s=0,o=0,e=0,r=0,u=new Wb(c.j);u.a<u.c.c.length;)switch(BB(n0(u),11).j.g){case 1:++s;break;case 2:++o;break;case 3:++e;break;case 4:++r}0==s&&0==e&&jXn(n,c,r<=o)}HSn(t)}function wFn(n,t){var e,i,r,c,a,u,o,s,h;for(OTn(t,"Layer constraint edge reversal",1),a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),h=-1,e=new Np,s=n2(c.a),r=0;r<s.length;r++)i=BB(mMn(s[r],(hWn(),ilt)),303),-1==h?i!=(z7(),Cft)&&(h=r):i==(z7(),Cft)&&(PZ(s[r],null),Qyn(s[r],h++,c)),i==(z7(),Sft)&&WB(e,s[r]);for(o=new Wb(e);o.a<o.c.c.length;)PZ(u=BB(n0(o),10),null),PZ(u,c)}HSn(t)}function dFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Hyperedge merging",1),xAn(n,t),u=new M2(t.b,0);u.b<u.d.gc();)if(Px(u.b<u.d.gc()),0!=(s=BB(u.d.Xb(u.c=u.b++),29).a).c.length)for(i=null,r=null,c=null,a=null,o=0;o<s.c.length;o++)l1(o,s.c.length),(r=(i=BB(s.c[o],10)).k)==(uSn(),Put)&&a==Put&&(h=hHn(i,c)).a&&(rDn(i,c,h.b,h.c),l1(o,s.c.length),PE(s.c,o,1),--o,i=c,r=a),c=i,a=r;HSn(e)}function gFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=eKn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=eKn(n,t)}while(r>e);return r}function pFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=nCn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=nCn(n,t)}while(r>e);return r}function vFn(n,t,e){var i,r,c,a,u,o,s;if(t==e)return!0;if(t=bAn(n,t),e=bAn(n,e),i=qvn(t)){if((o=qvn(e))!=i)return!!o&&(a=i.Dj())==o.Dj()&&null!=a;if(!t.d&&(t.d=new $L(VAt,t,1)),r=(c=t.d).i,!e.d&&(e.d=new $L(VAt,e,1)),r==(s=e.d).i)for(u=0;u<r;++u)if(!vFn(n,BB(Wtn(c,u),87),BB(Wtn(s,u),87)))return!1;return!0}return t.e==e.e}function mFn(n,t,e,i){var r,c,a,u,o,s,h,f;if($xn(n.e,t)){for(f=axn(n.e.Tg(),t),c=BB(n.g,119),h=null,o=-1,u=-1,r=0,s=0;s<n.i;++s)a=c[s],f.rl(a.ak())&&(r==e&&(o=s),r==i&&(u=s,h=a.dd()),++r);if(-1==o)throw Hp(new Ay(u8n+e+o8n+r));if(-1==u)throw Hp(new Ay(s8n+i+o8n+r));return Iln(n,o,u),mA(n.e)&&Lv(n,LY(n,7,t,iln(i),h,e,!0)),h}throw Hp(new _y("The feature must be many-valued to support move"))}function yFn(n,t,e,i){var r,c,a,u,o;switch((o=new wA(t.n)).a+=t.o.a/2,o.b+=t.o.b/2,u=Gy(MD(mMn(t,(HXn(),tpt)))),c=n.f,a=n.d,r=n.c,BB(mMn(t,(hWn(),Qft)),61).g){case 1:o.a+=a.b+r.a-e/2,o.b=-i-u,t.n.b=-(a.d+u+r.b);break;case 2:o.a=c.a+a.b+a.c+u,o.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+u-r.a;break;case 3:o.a+=a.b+r.a-e/2,o.b=c.b+a.d+a.a+u,t.n.b=c.b+a.a+u-r.b;break;case 4:o.a=-e-u,o.b+=a.d+r.b-i/2,t.n.a=-(a.b+u+r.a)}return o}function kFn(n){var t,e,i,r,c,a;return qan(i=new min,n),GI(mMn(i,(HXn(),Udt)))===GI((Ffn(),BPt))&&hon(i,Udt,Wln(i)),null==mMn(i,(C6(),TMt))&&(a=BB($Mn(n),160),hon(i,TMt,iO(a.We(TMt)))),hon(i,(hWn(),dlt),n),hon(i,Zft,new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),r=Pzn((JJ(n)&&(GM(),new Dy(JJ(n))),GM(),new JN(JJ(n)?new Dy(JJ(n)):null,n)),FPt),c=BB(mMn(i,zgt),116),eZ(e=i.d,c),eZ(e,r),i}function jFn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,TD(mMn(i,slt)))):i.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,(hN(),!0))):r.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(r,hlt),11)),hon(n,flt,BB(mMn(r,flt),11)),hon(n,slt,(hN(),!0))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function EFn(n){var t,e,i,r,c,a,u;for(n.o=new Lp,i=new YT,a=new Wb(n.e.a);a.a<a.c.c.length;)1==kbn(c=BB(n0(a),121)).c.length&&r5(i,c,i.c.b,i.c);for(;0!=i.b;)0!=kbn(c=BB(0==i.b?null:(Px(0!=i.b),Atn(i,i.a.a)),121)).c.length&&(t=BB(xq(kbn(c),0),213),e=c.g.a.c.length>0,u=Nbn(t,c),KN(e?u.b:u.g,t),1==kbn(u).c.length&&r5(i,u,i.c.b,i.c),r=new rI(c,t),d3(n.o,r),y7(n.e.a,c))}function TFn(n,t){var i,r,c,a;return r=e.Math.abs(qz(n.b).a-qz(t.b).a),a=e.Math.abs(qz(n.b).b-qz(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function MFn(n){var t,e,i;for(nUn(n,n.e,n.f,(dJ(),Lyt),!0,n.c,n.i),nUn(n,n.e,n.f,Lyt,!1,n.c,n.i),nUn(n,n.e,n.f,Nyt,!0,n.c,n.i),nUn(n,n.e,n.f,Nyt,!1,n.c,n.i),IFn(n,n.c,n.e,n.f,n.i),e=new M2(n.i,0);e.b<e.d.gc();)for(Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),128),i=new M2(n.i,e.b);i.b<i.d.gc();)Px(i.b<i.d.gc()),Nqn(t,BB(i.d.Xb(i.c=i.b++),128));IXn(n.i,BB(mMn(n.d,(hWn(),Slt)),230)),GGn(n.i)}function SFn(n,t){var e,i;if(null!=t)if(i=iyn(n)){if(0==(1&i.i))return nS(),!(e=BB(RX(mAt,i),55))||e.wj(t);if(i==$Nt)return zI(t);if(i==ANt)return cL(t,19);if(i==DNt)return cL(t,155);if(i==NNt)return cL(t,217);if(i==ONt)return cL(t,172);if(i==xNt)return UI(t);if(i==RNt)return cL(t,184);if(i==LNt)return cL(t,162)}else if(cL(t,56))return n.uk(BB(t,56));return!1}function PFn(){var n,t,e,i,r,c,a,u,o;for(PFn=O,WLt=x8(NNt,v6n,25,255,15,1),VLt=x8(ONt,WVn,25,64,15,1),t=0;t<255;t++)WLt[t]=-1;for(e=90;e>=65;e--)WLt[e]=e-65<<24>>24;for(i=122;i>=97;i--)WLt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)WLt[r]=r-48+52<<24>>24;for(WLt[43]=62,WLt[47]=63,c=0;c<=25;c++)VLt[c]=65+c&QVn;for(a=26,o=0;a<=51;++a,o++)VLt[a]=97+o&QVn;for(n=52,u=0;n<=61;++n,u++)VLt[n]=48+u&QVn;VLt[62]=43,VLt[63]=47}function CFn(n,t){var i,r,c,a,u,o,s,h,f,l,b;if(n.dc())return new Gj;for(s=0,f=0,r=n.Kc();r.Ob();)c=BB(r.Pb(),37).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*Gy(MD(mMn(BB(n.Kc().Pb(),37),(HXn(),Edt))))),l=0,b=0,o=0,i=t,u=n.Kc();u.Ob();)l+(h=(a=BB(u.Pb(),37)).f).a>s&&(l=0,b+=o+t,o=0),ZRn(a,l,b),i=e.Math.max(i,l+h.a),o=e.Math.max(o,h.b),l+=h.a+t;return new xC(i+t,b+o+t)}function IFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(a=new Wb(t);a.a<a.c.c.length;){if(o=(c=BB(n0(a),17)).c,e.a._b(o))dJ(),s=Lyt;else{if(!i.a._b(o))throw Hp(new _y("Source port must be in one of the port sets."));dJ(),s=Nyt}if(h=c.d,e.a._b(h))dJ(),f=Lyt;else{if(!i.a._b(h))throw Hp(new _y("Target port must be in one of the port sets."));dJ(),f=Nyt}u=new tCn(c,s,f),VW(n.b,c,u),r.c[r.c.length]=u}}function OFn(n,t){var e,i,r,c,a,u,o;if(!WJ(n))throw Hp(new Fy(F5n));if(c=(i=WJ(n)).g,r=i.f,c<=0&&r<=0)return kUn(),PIt;switch(u=n.i,o=n.j,t.g){case 2:case 1:if(u<0)return kUn(),CIt;if(u+n.g>c)return kUn(),oIt;break;case 4:case 3:if(o<0)return kUn(),sIt;if(o+n.f>r)return kUn(),SIt}return(a=(u+n.g/2)/c)+(e=(o+n.f/2)/r)<=1&&a-e<=0?(kUn(),CIt):a+e>=1&&a-e>=0?(kUn(),oIt):e<.5?(kUn(),sIt):(kUn(),SIt)}function AFn(n,t,e,i,r){var c,a;if(c=rbn(e0(t[0],UQn),e0(i[0],UQn)),n[0]=dG(c),c=kz(c,32),e>=r){for(a=1;a<r;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}else{for(a=1;a<e;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<r;a++)c=rbn(c,e0(i[a],UQn)),n[a]=dG(c),c=kz(c,32)}0!=Vhn(c,0)&&(n[a]=dG(c))}function $Fn(n){var t,e,i,r,c,a;if(wWn(),4!=n.e&&5!=n.e)throw Hp(new _y("Token#complementRanges(): must be RANGE: "+n.e));for(T$n(c=n),qHn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==unt&&(i-=2),(r=new M0(4)).b=x8(ANt,hQn,25,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=unt&&(r.b[a++]=e+1,r.b[a]=unt),r.a=!0,r}function LFn(n,t,e){var i,r,c,a,u,o,s,h;if(0==(i=e.gc()))return!1;if(n.ej())if(s=n.fj(),BTn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,s):n.Zi(5,null,e,t,s),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)h=n.g[r],u=n.cj(h,u),u=n.jj(h,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(BTn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)o=n.g[r],u=n.cj(o,u);u&&u.Fi()}return!0}function NFn(n,t,e,i){var r,c,a,u,o;for(a=new Wb(n.k);a.a<a.c.c.length;)r=BB(n0(a),129),i&&r.c!=(O6(),Tyt)||(o=r.b).g<0&&r.d>0&&(Vl(o,o.d-r.d),r.c==(O6(),Tyt)&&Xl(o,o.a-r.d),o.d<=0&&o.i>0&&r5(t,o,t.c.b,t.c));for(c=new Wb(n.f);c.a<c.c.c.length;)r=BB(n0(c),129),i&&r.c!=(O6(),Tyt)||(u=r.a).g<0&&r.d>0&&(Ql(u,u.i-r.d),r.c==(O6(),Tyt)&&Wl(u,u.b-r.d),u.i<=0&&u.d>0&&r5(e,u,e.c.b,e.c))}function xFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Processor compute fanout",1),$U(n.b),$U(n.a),u=null,c=spn(t.b,0);!u&&c.b!=c.d.c;)qy(TD(mMn(s=BB(b3(c),86),(qqn(),dkt))))&&(u=s);for(r5(o=new YT,u,o.c.b,o.c),jUn(n,o),h=spn(t.b,0);h.b!=h.d.c;)a=SD(mMn(s=BB(b3(h),86),(qqn(),rkt))),r=null!=SJ(n.b,a)?BB(SJ(n.b,a),19).a:0,hon(s,ikt,iln(r)),i=1+(null!=SJ(n.a,a)?BB(SJ(n.a,a),19).a:0),hon(s,tkt,iln(i));HSn(e)}function DFn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(f=yEn(n,e),u=0;u<t;u++){for(yR(r,e),l=new Np,Px(i.b<i.d.gc()),b=BB(i.d.Xb(i.c=i.b++),407),s=f+u;s<n.b;s++)a=b,Px(i.b<i.d.gc()),WB(l,new Exn(a,b=BB(i.d.Xb(i.c=i.b++),407),e));for(h=f+u;h<n.b;h++)Px(i.b>0),i.a.Xb(i.c=--i.b),h>f+u&&fW(i);for(c=new Wb(l);c.a<c.c.c.length;)yR(i,BB(n0(c),407));if(u<t-1)for(o=f+u;o<n.b;o++)Px(i.b>0),i.a.Xb(i.c=--i.b)}}function RFn(){var n,t,e,i,r,c;if(wWn(),CNt)return CNt;for(sHn(n=new M0(4),ZUn(pnt,!0)),WGn(n,ZUn("M",!0)),WGn(n,ZUn("C",!0)),c=new M0(4),i=0;i<11;i++)Yxn(c,i,i);return sHn(t=new M0(4),ZUn("M",!0)),Yxn(t,4448,4607),Yxn(t,65438,65439),tqn(r=new r$(2),n),tqn(r,sNt),(e=new r$(2)).$l(gG(c,ZUn("L",!0))),e.$l(t),e=new h4(3,e),e=new UU(r,e),CNt=e}function KFn(n){var t,e;if(!Ycn(t=SD(ZAn(n,(sWn(),eSt))),n)&&!P8(n,mPt)&&(0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i||qy(TD(ZAn(n,SSt))))){if(null!=t&&0!=RMn(t).length)throw gzn(n,e=oO(oO(new lN("Layout algorithm '"),t),"' not found for ")),Hp(new rk(e.a));if(!Ycn(w1n,n))throw gzn(n,e=oO(oO(new lN("Unable to load default layout algorithm "),w1n)," for unconfigured node ")),Hp(new rk(e.a))}}function _Fn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(u=n.a).length;s<f;++s)UG(c=u[s],w,b);else r=Wvn(n,!1),UG(n.a[0],i.c+t.b,r[0]),UG(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),UG(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Te()}function FFn(n){var t,e,i,r,c,a,u,o,s,h,f;for((f=new aa).d=0,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),29),f.d+=c.a.c.length;for(i=0,r=0,f.a=x8(ANt,hQn,25,n.b.c.length,15,1),s=0,h=0,f.e=x8(ANt,hQn,25,f.d,15,1),e=new Wb(n.b);e.a<e.c.c.length;)for((t=BB(n0(e),29)).p=i++,f.a[t.p]=r++,h=0,o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p=s++,f.e[u.p]=h++;return f.c=new fg(f),f.b=sx(f.d),H_n(f,n),f.f=sx(f.d),q_n(f,n),f}function BFn(n,t){var i,r,c;for(c=BB(xq(n.n,n.n.c.length-1),211).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Wb(n.n);i.a<i.c.c.length;)r+=BB(n0(i),211).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function HFn(n,t){var e,i,r,c,a,u,o,s,h;if(null==(s=TD(mMn(t,(fRn(),iat))))||(kW(s),s)){for(h=x8($Nt,ZYn,25,t.e.c.length,16,1),a=kOn(t),r=new YT,o=new Wb(t.e);o.a<o.c.c.length;)(e=Y$n(n,BB(n0(o),144),null,null,h,a))&&(qan(e,t),r5(r,e,r.c.b,r.c));if(r.b>1)for(i=spn(r,0);i.b!=i.d.c;)for(c=0,u=new Wb((e=BB(b3(i),231)).e);u.a<u.c.c.length;)BB(n0(u),144).b=c++;return r}return u6(Pun(Gk(Kct,1),tZn,231,0,[t]))}function qFn(n){var t,e,i,r,c;if(!n.g){if(c=new To,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,qFn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();++i)ub(BB(kpn(r),449),i);pX(c,(!n.s&&(n.s=new eU(FAt,n,21,17)),n.s)),chn(c),n.g=new don(n,c),n.i=BB(c.g,247),null==n.i&&(n.i=I$t),n.p=null,P5(n).b&=-5}return n.g}function GFn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=Xvn(n,!1),XG(n.a[0],r.d+i.d,t[0]),XG(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XG(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(u=n.a).length;s<f;++s)XG(c=u[s],w,b);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Ue()}function zFn(n){var t,e,i,r,c,a,u,o,s;for(s=x8(ANt,hQn,25,n.b.c.length+1,15,1),o=new Rv,i=0,c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),s[i++]=o.a.gc(),u=new Wb(r.a);u.a<u.c.c.length;)for(e=new oz(ZL(lbn(BB(n0(u),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.zc(t,o);for(a=new Wb(r.a);a.a<a.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(a),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.Bc(t)}return s}function UFn(n,t,e,i){var r,c,a,u,o;if(o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&Nfn(c,e))return!0}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],o.rl(c.ak())&&Nfn(e,c.dd()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&GI(e)===GI(hD(n,BB(c.dd(),56))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&null==c.dd())return!1;return!1}function XFn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),a=BB(n.g,119),$xn(n.e,t)){if(t.hi()&&(c=pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))>=0&&c!=e)throw Hp(new _y(a8n));for(r=0,o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak())){if(r==e)return BB(ovn(n,o,(ZM(),BB(t,66).Oj()?BB(i,72):Z3(t,i))),72);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak()))return ZM(),BB(t,66).Oj()?u:u.dd();return null}function WFn(n,t,i,r){var c,a,u,o;for(o=i,u=new Wb(t.a);u.a<u.c.c.length;){if(a=BB(n0(u),221),c=BB(a.b,65),Ibn(n.b.c,c.b.c+c.b.b)<=0&&Ibn(c.b.c,n.b.c+n.b.b)<=0&&Ibn(n.b.d,c.b.d+c.b.a)<=0&&Ibn(c.b.d,n.b.d+n.b.a)<=0){if(0==Ibn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Ibn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Ibn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Ibn(c.b.d+c.b.a,n.b.d)&&r.b>0){o=0;break}}else o=e.Math.min(o,HCn(n,c,r));o=e.Math.min(o,WFn(n,a,o,r))}return o}function VFn(n,t){var e,i,r,c,a,u;if(n.b<2)throw Hp(new _y("The vector chain must contain at least a source and a target point."));for(Px(0!=n.b),CA(t,(i=BB(n.a.a.c,8)).a,i.b),u=new cx((!t.a&&(t.a=new $L(xOt,t,5)),t.a)),c=spn(n,1);c.a<n.b-1;)a=BB(b3(c),8),u.e!=u.i.gc()?e=BB(kpn(u),469):(tE(),odn(u,e=new ro)),TA(e,a.a,a.b);for(;u.e!=u.i.gc();)kpn(u),Qjn(u);Px(0!=n.b),PA(t,(r=BB(n.c.b.c,8)).a,r.b)}function QFn(n,t){var e,i,r,c,a,u,o,s;for(e=0,i=new Wb((l1(0,n.c.length),BB(n.c[0],101)).g.b.j);i.a<i.c.c.length;)BB(n0(i),11).p=e++;for(t==(kUn(),sIt)?m$(n,new nc):m$(n,new tc),a=0,s=n.c.length-1;a<s;)l1(a,n.c.length),c=BB(n.c[a],101),l1(s,n.c.length),o=BB(n.c[s],101),r=t==sIt?c.c:c.a,u=t==sIt?o.a:o.c,bU(c,t,(Oun(),yst),r),bU(o,t,mst,u),++a,--s;a==s&&bU((l1(a,n.c.length),BB(n.c[a],101)),t,(Oun(),vst),null)}function YFn(n,t,e){var i,r,c,a,u,o,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new xC(t.i+t.g/2,t.j+t.f/2),(o=BB(ZAn(t,(sWn(),gPt)),8)).a=o.a+h,o.b=o.b+f,r=(a.b-o.b)/(a.a-o.a),i=a.b-r*a.a,u=new xC(e.i+e.g/2,e.j+e.f/2),(s=BB(ZAn(e,gPt),8)).a=s.a+h,s.b=s.b+f,c=(u.b-s.b)/(u.a-s.a),l=(i-(u.b-c*u.a))/(c-r),!(o.a<l&&a.a<l||l<o.a&&l<a.a||s.a<l&&u.a<l||l<s.a&&l<u.a)}function JFn(n,t){var e,i,r,c,a,u;if(!(a=BB(RX(n.c,t),183)))throw Hp(new ek("Edge did not exist in input."));return i=Qdn(a),!WE((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a))&&(e=new MB(n,i,u=new Cl),wO((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),e),rtn(a,x6n,u)),P8(t,(sWn(),OSt))&&!(!(r=BB(ZAn(t,OSt),74))||pW(r))&&(e5(r,new Qg(c=new Cl)),rtn(a,"junctionPoints",c)),AH(a,"container",XJ(t).k),null}function ZFn(n,t,e){var i,r,c,a,u,o;this.a=n,this.b=t,this.c=e,this.e=u6(Pun(Gk(uit,1),HWn,168,0,[new xS(n,t),new xS(t,e),new xS(e,n)])),this.f=u6(Pun(Gk(PMt,1),sVn,8,0,[n,t,e])),this.d=(i=XR(B$(this.b),this.a),r=XR(B$(this.c),this.a),c=XR(B$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),u=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),o=2*(i.a*c.b-i.b*c.a),new xC((r.b*a-i.b*u)/o,(i.a*u-r.a*a)/o))}function nBn(n,t,e,i){var r,c,a,u,o,s,h,f,l;if(f=new GX(n.p),rtn(t,t8n,f),e&&!(n.f?rY(n.f):null).a.dc())for(rtn(t,"logs",s=new Cl),u=0,l=new qb((n.f?rY(n.f):null).b.Kc());l.b.Ob();)h=new GX(SD(l.b.Pb())),dnn(s,u),r4(s,u,h),++u;if(i&&rtn(t,"executionTime",new Sl(n.q)),!rY(n.a).a.dc())for(a=new Cl,rtn(t,A6n,a),u=0,c=new qb(rY(n.a).b.Kc());c.b.Ob();)r=BB(c.b.Pb(),1949),o=new py,dnn(a,u),r4(a,u,o),nBn(r,o,e,i),++u}function tBn(n,t){var e,i,r,c,a,u;for(c=n.c,a=n.d,SZ(n,null),MZ(n,null),t&&qy(TD(mMn(a,(hWn(),tlt))))?SZ(n,R_n(a.i,(ain(),qvt),(kUn(),oIt))):SZ(n,a),t&&qy(TD(mMn(c,(hWn(),klt))))?MZ(n,R_n(c.i,(ain(),Hvt),(kUn(),CIt))):MZ(n,c),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),70),(r=BB(mMn(e,(HXn(),Ydt)),272))==(Rtn(),XPt)?hon(e,Ydt,UPt):r==UPt&&hon(e,Ydt,XPt);u=qy(TD(mMn(n,(hWn(),Clt)))),hon(n,Clt,(hN(),!u)),n.a=Jon(n.a)}function eBn(n,t,i){var r,c,a,u,o;for(r=0,a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)u="",0==(!(c=BB(kpn(a),33)).n&&(c.n=new eU(zOt,c,1,7)),c.n).i||(u=BB(Wtn((!c.n&&(c.n=new eU(zOt,c,1,7)),c.n),0),137).a),qan(o=new qX(u),c),hon(o,(Mrn(),sat),c),o.b=r++,o.d.a=c.i+c.g/2,o.d.b=c.j+c.f/2,o.e.a=e.Math.max(c.g,1),o.e.b=e.Math.max(c.f,1),WB(t.e,o),jCn(i.f,c,o),BB(ZAn(c,(fRn(),Yct)),98),QEn()}function iBn(n,t){var i,r,c,a,u,o,s,h,f,l,b;i=AN(new qv,n.f),o=n.i[t.c.i.p],l=n.i[t.d.i.p],u=t.c,f=t.d,a=u.a.b,h=f.a.b,o.b||(a+=u.n.b),l.b||(h+=f.n.b),s=CJ(e.Math.max(0,a-h)),c=CJ(e.Math.max(0,h-a)),b=e.Math.max(1,BB(mMn(t,(HXn(),bpt)),19).a)*X3(t.c.i.k,t.d.i.k),r=new nC(UNn(aM(cM(rM(uM(new Hv,b),c),i),BB(RX(n.k,t.c),121))),UNn(aM(cM(rM(uM(new Hv,b),s),i),BB(RX(n.k,t.d),121)))),n.c[t.p]=r}function rBn(n,t,e,i){var r,c,a,u,o,s;for(a=new uGn(n,t,e),o=new M2(i,0),r=!1;o.b<o.d.gc();)Px(o.b<o.d.gc()),(u=BB(o.d.Xb(o.c=o.b++),233))==t||u==e?fW(o):!r&&Gy(lL(u.g,u.d[0]).a)>Gy(lL(a.g,a.d[0]).a)?(Px(o.b>0),o.a.Xb(o.c=--o.b),yR(o,a),r=!0):u.e&&u.e.gc()>0&&(c=(!u.e&&(u.e=new Np),u.e).Mc(t),s=(!u.e&&(u.e=new Np),u.e).Mc(e),(c||s)&&((!u.e&&(u.e=new Np),u.e).Fc(a),++a.c));r||(i.c[i.c.length]=a)}function cBn(n){var t,e,i;if(vA(BB(mMn(n,(HXn(),ept)),98)))for(e=new Wb(n.j);e.a<e.c.c.length;)(t=BB(n0(e),11)).j==(kUn(),PIt)&&((i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,oIt):qCn(t,CIt));else{for(e=new Wb(n.j);e.a<e.c.c.length;)t=BB(n0(e),11),(i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,(kUn(),oIt)):qCn(t,(kUn(),CIt));hon(n,ept,(QEn(),VCt))}}function aBn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=n<32?"\\x"+fx(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=BQn?"\\v"+fx(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&QVn)}return e}function uBn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=n.e,0==(o=t.e))return n;if(0==a)return 0==t.e?t:new lU(-t.e,t.d,t.a);if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a<0&&(e=j7(e)),o<0&&(i=j7(i)),npn(ibn(e,i));if(-1==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))f=-o,h=a==o?d6(t.a,u,n.a,c):N8(t.a,u,n.a,c);else if(f=a,a==o){if(0==r)return ODn(),eet;h=d6(n.a,c,t.a,u)}else h=N8(n.a,c,t.a,u);return X0(s=new lU(f,h.length,h)),s}function oBn(n){var t,e,i,r,c,a;for(this.e=new Np,this.a=new Np,e=n.b-1;e<3;e++)Kx(n,0,BB(Dpn(n,0),8));if(n.b<4)throw Hp(new _y("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,I$n(this,n.b+this.b-1),a=new Np,c=new Wb(this.e),t=0;t<this.b-1;t++)WB(a,MD(n0(c)));for(r=spn(n,0);r.b!=r.d.c;)i=BB(b3(r),8),WB(a,MD(n0(c))),WB(this.a,new wJ(i,a)),l1(0,a.c.length),a.c.splice(0,1)}function sBn(n,t){var e,i,r,c,a,u,o;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)for((c=BB(n0(a),10)).k==(uSn(),Sut)&&(u=BB(U5(new oz(ZL(fbn(c).a.Kc(),new h))),17),o=BB(U5(new oz(ZL(lbn(c).a.Kc(),new h))),17),hFn(c,qy(TD(mMn(u,(hWn(),Clt))))&&qy(TD(mMn(o,Clt)))?Xun(t):t)),i=new oz(ZL(lbn(c).a.Kc(),new h));dAn(i);)vun(e=BB(U5(i),17),qy(TD(mMn(e,(hWn(),Clt))))?Xun(t):t)}function hBn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=BB(xq(t.n,t.n.c.length-1),211)).e+c.d+e.g+r<=i&&(BB(xq(t.n,t.n.c.length-1),211).f-n.f+e.f<=n.b||1==n.a.c.length))return ybn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return WB(t.b,e),a=BB(xq(t.n,t.n.c.length-1),211),WB(t.n,new RJ(t.s,a.f+a.a+t.i,t.i)),smn(BB(xq(t.n,t.n.c.length-1),211),e),BFn(t,e),!0}return!1}function fBn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=onn(n,t,e),e,t,c),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))?(null!=a&&(r=n.dj(a,r)),r=n.cj(e,r),n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):(n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)),a):(a=onn(n,t,e),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))&&(r=null,null!=a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function lBn(n,t){var i,r,c,a,u,o,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(u=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(o=u/60|0,s=u%60,r=n.q.getDate(),n.q.getHours()+o>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+o,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function bBn(n,t){var e,i,r,c;if(OTn(t,"Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new MAn(n)).i&&(r.i=Wrn(r,new kc)),e=Gy(r.i)*r.f/(null==r.i&&(r.i=Wrn(r,new kc)),Gy(r.i)),r.b>e)HSn(t);else{switch(BB(mMn(n,(HXn(),Bpt)),337).g){case 2:c=new Tc;break;case 0:c=new wc;break;default:c=new Mc}if(i=c.Vf(n,r),!c.Wf())switch(BB(mMn(n,Xpt),338).g){case 2:i=XCn(r,i);break;case 1:i=KTn(r,i)}iqn(n,r,i),HSn(t)}else HSn(t)}function wBn(n,t){var e,i,r,c;if(f1(n.d,n.e),n.c.a.$b(),0!=Gy(MD(mMn(t.j,(HXn(),Idt))))||0!=Gy(MD(mMn(t.j,Idt))))for(e=ZJn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=gFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);else for(e=DWn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=pFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);}function dBn(n,t){var e,i,r,c,a,u;for(r=new Np,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=BB(n.Xb(e),19).a+a;(l1(c+1,t.c.length),BB(t.c[c+1],19)).a<i;)++c;for(u=0,i-(l1(c,t.c.length),BB(t.c[c],19)).a>(l1(c+1,t.c.length),BB(t.c[c+1],19)).a-i&&++u,WB(r,(l1(c+u,t.c.length),BB(t.c[c+u],19))),a+=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a-i,++e;e<n.gc()&&BB(n.Xb(e),19).a+a<=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a;)++e;c+=1+u}return r}function gBn(n){var t,e,i,r,c;if(!n.d){if(c=new Po,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,gBn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new eU(QAt,n,11,10)),i=new AL(n.q);i.e!=i.i.gc();++r)BB(kpn(i),399);pX(c,(!n.q&&(n.q=new eU(QAt,n,11,10)),n.q)),chn(c),n.d=new NO((BB(Wtn(QQ((QX(),t$t).o),9),18),c.i),c.g),n.e=BB(c.g,673),null==n.e&&(n.e=C$t),P5(n).b&=-17}return n.d}function pBn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),o=0,r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(Nfn(c,e))return o;++o}}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],s.rl(c.ak())){if(Nfn(e,c.dd()))return o;++o}if(i)for(o=0,a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(GI(e)===GI(hD(n,BB(c.dd(),56))))return o;++o}}else for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(null==c.dd())return o;++o}return-1}function vBn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(SQ(),m$(n,new zu),a=zB(n),b=new Np,l=new Np,u=null,o=0;0!=a.b;)c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),157),!u||iG(u)*eG(u)/2<iG(c)*eG(c)?(u=c,b.c[b.c.length]=c):(o+=iG(c)*eG(c),l.c[l.c.length]=c,l.c.length>1&&(o>iG(u)*eG(u)/2||0==a.b)&&(f=new Gtn(l),h=iG(u)/eG(u),s=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),s),u=f,b.c[b.c.length]=f,o=0,l.c=x8(Ant,HWn,1,0,5,1)));return gun(b,l),b}function mBn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(e.mh(t)&&(h=(b=t)?BB(i,49).xh(b):null))if(d=e.bh(t,n.a),(w=t.t)>1||-1==w)if(f=BB(d,69),l=BB(h,69),f.dc())l.$b();else for(a=!!Cvn(t),c=0,u=n.a?f.Kc():f.Zh();u.Ob();)s=BB(u.Pb(),56),(r=BB(lnn(n,s),56))?(a?-1==(o=l.Xc(r))?l.Xh(c,r):c!=o&&l.ji(c,r):l.Xh(c,r),++c):n.b&&!a&&(l.Xh(c,s),++c);else null==d?h.Wb(null):null==(r=lnn(n,d))?n.b&&!Cvn(t)&&h.Wb(d):h.Wb(r)}function yBn(n,t){var i,r,c,a,u,o,s,f;for(i=new Le,c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&eTn(o=r.c.i,Xut)){if(-1==(f=VDn(n,o,Xut,Uut)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Np),WB(i.a,o)}for(u=new oz(ZL(lbn(t).a.Kc(),new h));dAn(u);)if(!b5(a=BB(U5(u),17))&&eTn(s=a.d.i,Uut)){if(-1==(f=VDn(n,s,Uut,Xut)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Np),WB(i.c,s)}return i}function kBn(n){var t,e,i,r;if($On(),t=CJ(n),n<uet.length)return uet[t];if(n<=50)return uOn((ODn(),net),t);if(n<=VVn)return G5(uOn(aet[1],t),t);if(n>1e6)throw Hp(new Oy("power of ten too big"));if(n<=DWn)return G5(uOn(aet[1],t),t);for(r=i=uOn(aet[1],DWn),e=fan(n-DWn),t=CJ(n%DWn);Vhn(e,DWn)>0;)r=Nnn(r,i),e=ibn(e,DWn);for(r=G5(r=Nnn(r,uOn(aet[1],t)),DWn),e=fan(n-DWn);Vhn(e,DWn)>0;)r=G5(r,DWn),e=ibn(e,DWn);return r=G5(r,t)}function jBn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hierarchical port dummy size processing",1),u=new Np,s=new Np,e=2*Gy(MD(mMn(n,(HXn(),kpt)))),r=new Wb(n.b);r.a<r.c.c.length;){for(i=BB(n0(r),29),u.c=x8(Ant,HWn,1,0,5,1),s.c=x8(Ant,HWn,1,0,5,1),a=new Wb(i.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((o=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt)?u.c[u.c.length]=c:o==SIt&&(s.c[s.c.length]=c));HOn(u,!0,e),HOn(s,!1,e)}HSn(t)}function EBn(n,t){var e,i,r,c,a;OTn(t,"Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(l1(0,a.c.length),_Kn(n,BB(a.c[0],29),BB(xq(a,a.c.length-1),29),e=new HX(n),r=new HX(n)),0==e.a.c.length||(LZ(0,a.c.length),MS(a.c,0,e)),0==r.a.c.length||(a.c[a.c.length]=r)),Lx(n,(hWn(),nlt))&&(yDn(n,i=new HX(n),c=new HX(n)),0==i.a.c.length||(LZ(0,a.c.length),MS(a.c,0,i)),0==c.a.c.length||(a.c[a.c.length]=c)),HSn(t)}function TBn(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),oIt)||r==CIt))for(i=new oz(ZL(hbn(c).a.Kc(),new h));dAn(i);)0!=(t=(e=BB(U5(i),17)).a).b&&((u=e.c).i==c&&(Px(0!=t.b),BB(t.a.a.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).b),(o=e.d).i==c&&(Px(0!=t.b),BB(t.c.b.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).b))}function MBn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Sort By Input Model "+mMn(n,(HXn(),Ldt)),1),r=0,i=new Wb(n.b);i.a<i.c.c.length;){for(e=BB(n0(i),29),o=0==r?0:r-1,u=BB(xq(n.b,o),29),a=new Wb(e.a);a.a<a.c.c.length;)GI(mMn(c=BB(n0(a),10),ept))!==GI((QEn(),UCt))&&GI(mMn(c,ept))!==GI(XCt)&&(SQ(),m$(c.j,new O7(u,okn(c))),OH(t,"Node "+c+" ports: "+c.j));SQ(),m$(e.a,new Grn(u,BB(mMn(n,Ldt),339),BB(mMn(n,Adt),378))),OH(t,"Layer "+r+": "+e),++r}HSn(t)}function SBn(n,t){var e,i,r;if(r=kFn(t),JT(new Rq(null,(!t.c&&(t.c=new eU(XOt,t,9,9)),new w1(t.c,16))),new Uw(r)),uzn(t,i=BB(mMn(r,(hWn(),Zft)),21)),i.Hc((bDn(),lft)))for(e=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));e.e!=e.i.gc();)Qzn(n,t,r,BB(kpn(e),118));return 0!=BB(ZAn(t,(HXn(),Fgt)),174).gc()&&mDn(t,r),qy(TD(mMn(r,Xgt)))&&i.Fc(pft),Lx(r,gpt)&&My(new uwn(Gy(MD(mMn(r,gpt)))),r),GI(ZAn(t,sgt))===GI((ufn(),pCt))?cWn(n,t,r):eXn(n,t,r),r}function PBn(n,t,i,r){var c,a,u;if(this.j=new Np,this.k=new Np,this.b=new Np,this.c=new Np,this.e=new bA,this.i=new km,this.f=new Dp,this.d=new Np,this.g=new Np,WB(this.b,n),WB(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=BB(mMn(r,(HXn(),vgt)),74))for(u=spn(c,0);u.b!=u.d.c;)aen((a=BB(b3(u),8)).a,n.a)&&DH(this.i,a);i&&WB(this.j,i),WB(this.k,r)}function CBn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(h=new Xz(new xw(e)),vU(u=x8($Nt,ZYn,25,n.f.e.c.length,16,1),u.length),e[t.b]=0,s=new Wb(n.f.e);s.a<s.c.c.length;)(o=BB(n0(s),144)).b!=t.b&&(e[o.b]=DWn),F8(eMn(h,o));for(;0!=h.b.c.length;)for(u[(f=BB(mnn(h),144)).b]=!0,c=vN(new mT(n.b,f),0);c.c;)u[(l=$mn(r=BB(EZ(c),282),f)).b]||(a=Lx(r,(rkn(),pat))?Gy(MD(mMn(r,pat))):n.c,(i=e[f.b]+a)<e[l.b]&&(e[l.b]=i,srn(h,l),F8(eMn(h,l))))}function IBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(r=!0,a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),s=KQn,h=null,o=new Wb(c.a);o.a<o.c.c.length;){if(u=BB(n0(o),10),f=Gy(t.p[u.p])+Gy(t.d[u.p])-u.d.d,i=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a,!(f>s&&i>s)){r=!1,e.n&&OH(e,"bk node placement breaks on "+u+" which should have been after "+h);break}h=u,s=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a}if(!r)break}return e.n&&OH(e,t+" is feasible: "+r),r}function OBn(n,t,e,i){var r,c,a,u,o,s,h;for(u=-1,h=new Wb(n);h.a<h.c.c.length;)(s=BB(n0(h),112)).g=u--,a=r=dG(E2(NV(AV(new Rq(null,new w1(s.f,16)),new sa),new ha)).d),o=c=dG(E2(NV(AV(new Rq(null,new w1(s.k,16)),new fa),new la)).d),i||(a=dG(E2(NV(new Rq(null,new w1(s.f,16)),new ba)).d),o=dG(E2(NV(new Rq(null,new w1(s.k,16)),new wa)).d)),s.d=a,s.a=r,s.i=o,s.b=c,0==o?r5(e,s,e.c.b,e.c):0==a&&r5(t,s,t.c.b,t.c)}function ABn(n,t,e,i){var r,c,a,u,o,s,h;if(e.d.i!=t.i){for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),h=e.d,MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,h),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),GI(mMn(o=BB(s.d.Xb(s.c=s.b++),70),Ydt))===GI((Rtn(),UPt))&&(hon(o,Uft,e),fW(s),WB(c.b,o));yAn(r,a,u)}}function $Bn(n,t,e,i){var r,c,a,u,o,s;if(e.c.i!=t.i)for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,t),yAn(r,a,u),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),o=BB(s.d.Xb(s.c=s.b++),70),BB(mMn(o,Ydt),272)==(Rtn(),UPt)&&(Lx(o,Uft)||hon(o,Uft,e),fW(s),WB(c.b,o))}function LBn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(l=new Np,p=S4(r),g=t*n.a,w=0,a=new Rv,u=new Rv,o=new Np,v=0,m=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=tbn(p,c,u))&&(p.a.Bc(s),o.c[o.c.length]=s,a.a.zc(s,a),w=n.f[s.p],v+=n.e[s.p]-w*n.b,m+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||v>=g&&n.e[s.p]>w*n.b||m>=i*g)&&(l.c[l.c.length]=o,o=new Np,Frn(u,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=m,v=m,m=0,f=0,d=0);return new rI(b,l)}function NBn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(e=new Kb(new Ob(n.c.b).a.vc().Kc());e.a.Ob();)u=BB(e.a.Pb(),42),null==(r=(t=BB(u.dd(),149)).a)&&(r=""),!(i=_D(n.c,r))&&0==r.length&&(i=yfn(n)),i&&!ywn(i.c,t,!1)&&DH(i.c,t);for(a=spn(n.a,0);a.b!=a.d.c;)c=BB(b3(a),478),s=T5(n.c,c.a),l=T5(n.c,c.b),s&&l&&DH(s.c,new rI(l,c.c));for(yQ(n.a),f=spn(n.b,0);f.b!=f.d.c;)h=BB(b3(f),478),t=KD(n.c,h.a),o=T5(n.c,h.b),t&&o&&DM(t,o,h.c);yQ(n.b)}function xBn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;c=new Pl(n),d5((a=new dkn).g),d5(a.j),$U(a.b),d5(a.d),d5(a.i),$U(a.k),$U(a.c),$U(a.e),b=bIn(a,c,null),O$n(a,c),r=b,t&&(u=eHn(s=new Pl(t)),vSn(r,Pun(Gk(nMt,1),HWn,527,0,[u]))),l=!1,f=!1,e&&(s=new Pl(e),l8n in s.a&&(l=zJ(s,l8n).ge().a),b8n in s.a&&(f=zJ(s,b8n).ge().a)),h=$j(Fen(new Xm,l),f),BSn(new su,r,h),l8n in c.a&&rtn(c,l8n,null),(l||f)&&(nBn(h,o=new py,l,f),rtn(c,l8n,o)),i=new Xg(a),Uon(new OA(r),i)}function DBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(a=new Ykn,s=Pun(Gk(ANt,1),hQn,25,15,[0]),r=-1,c=0,i=0,o=0;o<n.b.c.length;++o){if(!((h=BB(xq(n.b,o),434)).b>0)){if(r=-1,32==fV(h.c,0)){if(f=s[0],ynn(t,s),s[0]>f)continue}else if($Y(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=o,c=s[0],i=0),r>=0){if(u=h.b,o==r&&0==(u-=i++))return 0;if(!LUn(t,s,h,u,a)){o=r-1,s[0]=c;continue}}else if(r=-1,!LUn(t,s,h,0,a))return 0}return dUn(a,e)?s[0]:0}function RBn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Mo,c=new Mo,null==(t=P$t).a.zc(n,t)){for(r=new AL(kY(n));r.e!=r.i.gc();)pX(a,RBn(BB(kpn(r),26)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),i=new AL(n.s);i.e!=i.i.gc();)cL(e=BB(kpn(i),170),99)&&f9(c,BB(e,18));chn(c),n.r=new TH(n,(BB(Wtn(QQ((QX(),t$t).o),6),18),c.i),c.g),pX(a,n.r),chn(a),n.f=new NO((BB(Wtn(QQ(t$t.o),5),18),a.i),a.g),P5(n).b&=-3}return n.f}function KBn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(a=n.o,i=x8(ANt,hQn,25,a,15,1),r=x8(ANt,hQn,25,a,15,1),e=n.p,t=x8(ANt,hQn,25,e,15,1),c=x8(ANt,hQn,25,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!vmn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!vmn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(u=0;u<a&&!vmn(n,u,b);)++u;t[b]=u}for(w=0;w<e;w++){for(u=a-1;u>=0&&!vmn(n,u,w);)--u;c[w]=u}for(o=0;o<a;o++)for(l=0;l<e;l++)o<c[l]&&o>t[l]&&l<r[o]&&l>i[o]&&FRn(n,o,l,!1,!0)}function _Bn(n){var t,e,i,r,c,a,u,o;e=qy(TD(mMn(n,(fRn(),Bct)))),c=n.a.c.d,u=n.a.d.d,e?(a=kL(XR(new xC(u.a,u.b),c),.5),o=kL(B$(n.e),.5),t=XR(UR(new xC(c.a,c.b),a),o),Hx(n.d,t)):(r=Gy(MD(mMn(n.a,rat))),i=n.d,c.a>=u.a?c.b>=u.b?(i.a=u.a+(c.a-u.a)/2+r,i.b=u.b+(c.b-u.b)/2-r-n.e.b):(i.a=u.a+(c.a-u.a)/2+r,i.b=c.b+(u.b-c.b)/2+r):c.b>=u.b?(i.a=c.a+(u.a-c.a)/2+r,i.b=u.b+(c.b-u.b)/2+r):(i.a=c.a+(u.a-c.a)/2+r,i.b=c.b+(u.b-c.b)/2-r-n.e.b))}function FBn(n,t){var e,i,r,c,a,u,o;if(null==n)return null;if(0==(c=n.length))return"";for(o=x8(ONt,WVn,25,c,15,1),_8(0,c,n.length),_8(0,c,o.length),YU(n,0,c,o,0),e=null,u=t,r=0,a=0;r<c;r++)i=o[r],EWn(),i<=32&&0!=(2&JLt[i])?u?(!e&&(e=new fN(n)),aY(e,r-a++)):(u=t,32!=i&&(!e&&(e=new fN(n)),sV(e,r-a,r-a+1,String.fromCharCode(32)))):u=!1;return u?e?(c=e.a.length)>0?fx(e.a,0,c-1):"":n.substr(0,c-1):e?e.a:n}function BBn(n){NM(n,new MTn(vj(wj(pj(gj(new du,UJn),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new at))),u2(n,UJn,XJn,mpn(Ect)),u2(n,UJn,WJn,mpn(pct)),u2(n,UJn,VJn,mpn(lct)),u2(n,UJn,QJn,mpn(vct)),u2(n,UJn,XYn,mpn(kct)),u2(n,UJn,WYn,mpn(yct)),u2(n,UJn,UYn,mpn(jct)),u2(n,UJn,VYn,mpn(mct)),u2(n,UJn,BJn,mpn(wct)),u2(n,UJn,HJn,mpn(bct)),u2(n,UJn,qJn,mpn(dct)),u2(n,UJn,GJn,mpn(gct))}function HBn(n,t,e,i){var r,c,a,u,o,s,h;if(Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),r=0,t){for(hon(a=new CSn,(hWn(),dlt),t),hon(c,dlt,t.i),qCn(a,(kUn(),CIt)),CZ(a,c),s=0,h=(o=Z0(t.e)).length;s<h;++s)MZ(o[s],a);hon(t,Elt,c),++r}if(e){for(u=new CSn,hon(c,(hWn(),dlt),e.i),hon(u,dlt,e),qCn(u,(kUn(),oIt)),CZ(u,c),s=0,h=(o=Z0(e.g)).length;s<h;++s)SZ(o[s],u);hon(e,Elt,c),++r}return hon(c,(hWn(),Bft),iln(r)),i.c[i.c.length]=c,c}function qBn(){qBn=O,OOt=Pun(Gk(ONt,1),WVn,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),AOt=new RegExp("[ \t\n\r\f]+");try{IOt=Pun(Gk(D$t,1),HWn,2015,0,[new vp((s$(),sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",fR((fk(),fk(),rtt))))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm",fR(rtt))),new vp(sdn("yyyy-MM-dd",fR(rtt)))])}catch(n){if(!cL(n=lun(n),78))throw Hp(n)}}function GBn(n){var t,i,r,c;if(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=iin(n)<0?1:0,i=n.e,r.length,e.Math.abs(CJ(n.e)),c=new Ik,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>qtt.length;i-=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(i)),oO(c,r.substr(t))}else oO(c,fx(r,t,CJ(i=t-i))),c.a+=".",oO(c,nO(r,CJ(i)));else{for(oO(c,r.substr(t));i<-qtt.length;i+=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(-i))}return c.a}function zBn(n,t,i,r){var c,a,u,o,s,h,f,l,b;return h=(s=XR(new xC(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=W8(n,c=UR(new xC(i.a,i.b),kL(new xC(r.a,r.b),.5))),u=W8(UR(new xC(n.a,n.b),t),c),o=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<u&&a<=o?new xC(n.a,n.b):u<=o?UR(new xC(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?UR(new xC(n.a,n.b),kL(new xC(t.a,t.b),l)):null}function UBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(u=new Wb(n.a);u.a<u.c.c.length;)(a=BB(n0(u),10)).k==(uSn(),Mut)&&((r=BB(mMn(a,Qft),61))==(kUn(),oIt)?a.n.a+=e.a-t.a:r==SIt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function XBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,Qft),61))==(kUn(),oIt)?c.n.a+=e.a-t.a:r==SIt&&(c.n.b+=e.b-t.b));u=n.d,n.f.a=e.a-u.b-u.c,n.f.b=e.b-u.d-u.a}function WBn(n){var t,i,r,c,a,u,o,s,h,f;for(s=new Ib(new Cb(xOn(n)).a.vc().Kc());s.a.Ob();){for(r=BB(s.a.Pb(),42),h=0,f=0,h=(o=BB(r.cd(),10)).d.d,f=o.o.b+o.d.a,n.d[o.p]=0,t=o;(c=n.a[t.p])!=o;)i=Mgn(t,c),u=0,u=n.c==(gJ(),nyt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=Gy(n.d[t.p])+u,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=o;do{n.d[t.p]=Gy(n.d[t.p])+h,t=n.a[t.p]}while(t!=o);n.b[o.p]=h+f}}function VBn(n){var t,i,r,c,a,u,o,s,h,f,l;for(n.b=!1,f=RQn,o=KQn,l=RQn,s=KQn,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=BB(i.Pb(),266)).a,f=e.Math.min(f,r.c),o=e.Math.max(o,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Wb(t.c);a.a<a.c.c.length;)(c=BB(n0(a),395)).a.a?(u=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,u)):(u=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),o=e.Math.max(o,u));n.a=new xC(o-f,s-l),n.c=new xC(f+n.d.a,l+n.d.b)}function QBn(n,t,e){var i,r,c,a,u,o,s,h;for(h=new Np,c=0,tin(s=new x0(0,e),new asn(0,0,s,e)),r=0,o=new AL(n);o.e!=o.i.gc();)u=BB(kpn(o),33),i=BB(xq(s.a,s.a.c.length-1),187),r+u.g+(0==BB(xq(s.a,0),187).b.c.length?0:e)>t&&(r=0,c+=s.b+e,h.c[h.c.length]=s,tin(s=new x0(c,e),i=new asn(0,s.f,s,e)),r=0),0==i.b.c.length||u.f>=i.o&&u.f<=i.f||.5*i.a<=u.f&&1.5*i.a>=u.f?ybn(i,u):(tin(s,a=new asn(i.s+i.r+e,s.f,s,e)),ybn(a,u)),r=u.i+u.g;return h.c[h.c.length]=s,h}function YBn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new gp(n),t=new So,null==(e=P$t).a.zc(n,e)){for(c=new AL(kY(n));c.e!=c.i.gc();)pX(a,YBn(BB(kpn(c),26)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();)cL(i=BB(kpn(r),170),322)&&f9(t,BB(i,34));chn(t),n.k=new EH(n,(BB(Wtn(QQ((QX(),t$t).o),7),18),t.i),t.g),pX(a,n.k),chn(a),n.a=new NO((BB(Wtn(QQ(t$t.o),4),18),a.i),a.g),P5(n).b&=-2}return n.a}function JBn(n,t,e,i,r,c,a){var u,o,s,h,f;return h=!1,u=dNn(e.q,t.f+t.b-e.q.f),!((f=r-(e.q.e+u-a))<i.g)&&(o=c==n.c.length-1&&f>=(l1(c,n.c.length),BB(n.c[c],200)).e,!((s=cHn(i,f,!1).a)>t.b&&!o)&&((o||s<=t.b)&&(o&&s>t.b?(e.d=s,p9(e,FSn(e,s))):(aEn(e.q,u),e.c=!0),p9(i,r-(e.s+e.r)),Tvn(i,e.q.e+e.q.d,t.f),tin(t,i),n.c.length>c&&(Tkn((l1(c,n.c.length),BB(n.c[c],200)),i),0==(l1(c,n.c.length),BB(n.c[c],200)).a.c.length&&s6(n,c)),h=!0),h))}function ZBn(n,t,e,i){var r,c,a,u,o,s,h;if(h=axn(n.e.Tg(),t),r=0,c=BB(n.g,119),o=null,ZM(),BB(t,66).Oj()){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(a,e)){o=a;break}++r}}else if(null!=e){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(e,a.dd())){o=a;break}++r}}else for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(null==a.dd()){o=a;break}++r}return o&&(mA(n.e)&&(s=t.$j()?new b4(n.e,4,t,e,null,r,!0):LY(n,t.Kj()?2:1,t,e,t.zj(),-1,!0),i?i.Ei(s):i=s),i=TKn(n,o,i)),i}function nHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,o=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+u,d=n.c?gTn(w,a,r,u):r.j,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 1:d=r.j+r.f+u,w=n.c?dTn(d,a,r,u):r.i,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 2:w=s+u,d=0,l=s+u+b,h=e.Math.max(o,f);break;case 3:w=0,d=o+u,l=e.Math.max(s,b),h=o+u+f;break;default:throw Hp(new _y("IllegalPlacementOption."))}return new awn(n.a,l,h,t,w,d)}function tHn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if(o=n.d,l=BB(mMn(n,(hWn(),Klt)),15),t=BB(mMn(n,Dft),15),l||t){if(a=Gy(MD(edn(n,(HXn(),ppt)))),u=Gy(MD(edn(n,vpt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),o.d+=h+u}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),o.a+=h+u}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,o.b=e.Math.max(o.b,f),o.c=e.Math.max(o.c,f))}}function eHn(n){var t,e,i,r,c,a;for(cA(r=new R0,(Nun(),JTt)),i=new Sb(new Jy(new TT(n,jrn(n,x8(Qtt,sVn,2,0,6,1))).b));i.b<i.d.gc();)Px(i.b<i.d.gc()),e=SD(i.d.Xb(i.c=i.b++)),(c=pGn(lAt,e))&&null!=(a=Zqn(c,(t=zJ(n,e)).je()?t.je().a:t.ge()?""+t.ge().a:t.he()?""+t.he().a:t.Ib()))&&((SN(c.j,(rpn(),sMt))||SN(c.j,hMt))&&son(Ynn(r,UOt),c,a),SN(c.j,uMt)&&son(Ynn(r,_Ot),c,a),SN(c.j,fMt)&&son(Ynn(r,XOt),c,a),SN(c.j,oMt)&&son(Ynn(r,zOt),c,a));return r}function iHn(n,t,e,i){var r,c,a,u,o,s;if(o=axn(n.e.Tg(),t),c=BB(n.g,119),$xn(n.e,t)){for(r=0,u=0;u<n.i;++u)if(a=c[u],o.rl(a.ak())){if(r==e)return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(r=0,u=0;u<n.i;++u){if(a=c[u],o.rl(a.ak()))return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}return t.zj()}function rHn(n,t,e){var i,r,c,a,u,o,s,h;if(r=BB(n.g,119),$xn(n.e,t))return ZM(),BB(t,66).Oj()?new lq(t,n):new xI(t,n);for(s=axn(n.e.Tg(),t),i=0,u=0;u<n.i;++u){if(a=(c=r[u]).ak(),s.rl(a)){if(ZM(),BB(t,66).Oj())return c;if(a==(TOn(),lLt)||a==sLt){for(o=new lN(Bbn(c.dd()));++u<n.i;)((a=(c=r[u]).ak())==lLt||a==sLt)&&oO(o,Bbn(c.dd()));return gK(BB(t.Yj(),148),o.a)}return null!=(h=c.dd())&&e&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(h=FIn(n,t,u,i,h)),h}++i}return t.zj()}function cHn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=0,u=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c=x8(Ant,HWn,1,0,5,1),WB(n.n,new RJ(n.s,n.t,n.i))),o=0,f=new Wb(n.b);f.a<f.c.c.length;)a+(h=BB(n0(f),33)).g+(o>0?n.i:0)>t&&s>0&&(a=0,u+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,WB(n.n,new RJ(n.s,u,n.i))),o=0),b+=h.g+(o>0?n.i:0),s=e.Math.max(s,h.f),i&&smn(BB(xq(n.n,l),211),h),a+=h.g+(o>0?n.i:0),++o;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,yyn(n.j)),new UV(n.s,n.t,c,r)}function aHn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;if($T(),SU(n,"src"),SU(e,"dest"),l=tsn(n),o=tsn(e),pH(0!=(4&l.i),"srcType is not an array"),pH(0!=(4&o.i),"destType is not an array"),f=l.c,a=o.c,pH(0!=(1&f.i)?f==a:0==(1&a.i),"Array types don't match"),b=n.length,s=e.length,t<0||i<0||r<0||t+r>b||i+r>s)throw Hp(new fv);if(0==(1&f.i)&&l!=o)if(h=een(n),c=een(e),GI(n)===GI(e)&&t<i)for(t+=r,u=i+r;u-- >i;)$X(c,u,h[--t]);else for(u=i+r;i<u;)$X(c,i++,h[t++]);else r>0&&_Cn(n,t,e,i,r,!0)}function uHn(){uHn=O,ret=Pun(Gk(ANt,1),hQn,25,15,[_Vn,1162261467,OVn,1220703125,362797056,1977326743,OVn,387420489,AQn,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,OVn,1291467969,1544804416,1838265625,60466176]),cet=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function oHn(n){var t,e,i,r,c,a,u;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(a0(BB(n0(i),29).a));c.a<c.c.c.length;)if(Znn(r=BB(n0(c),10))&&!(e=BB(mMn(r,(hWn(),Rft)),305)).g&&e.d)for(t=e,u=e.d;u;)eRn(u.i,u.k,!1,!0),A7(t.a),A7(u.i),A7(u.k),A7(u.b),MZ(u.c,t.c.d),MZ(t.c,null),PZ(t.a,null),PZ(u.i,null),PZ(u.k,null),PZ(u.b,null),(a=new v3(t.i,u.a,t.e,u.j,u.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=u.c,a.g=t.g,a.d=u.d,hon(t.i,Rft,a),hon(u.a,Rft,a),u=u.d,t=a}function sHn(n,t){var e,i,r,c,a;if(a=BB(t,136),T$n(n),T$n(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=x8(ANt,hQn,25,a.b.length,15,1),void aHn(a.b,0,n.b,0,a.b.length);for(c=x8(ANt,hQn,25,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function hHn(n,t){var e,i,r,c,a,u,o,s,h,f;return e=qy(TD(mMn(n,(hWn(),slt)))),u=qy(TD(mMn(t,slt))),i=BB(mMn(n,hlt),11),o=BB(mMn(t,hlt),11),r=BB(mMn(n,flt),11),s=BB(mMn(t,flt),11),h=!!i&&i==o,f=!!r&&r==s,e||u?(c=(!qy(TD(mMn(n,slt)))||qy(TD(mMn(n,olt))))&&(!qy(TD(mMn(t,slt)))||qy(TD(mMn(t,olt)))),a=!(qy(TD(mMn(n,slt)))&&qy(TD(mMn(n,olt)))||qy(TD(mMn(t,slt)))&&qy(TD(mMn(t,olt)))),new R_(h&&c||f&&a,h,f)):new R_(BB(n0(new Wb(n.j)),11).p==BB(n0(new Wb(t.j)),11).p,h,f)}function fHn(n){var t,i,r,c,a,u,o,s;for(r=0,i=0,s=new YT,t=0,o=new Wb(n.n);o.a<o.c.c.length;)0==(u=BB(n0(o),211)).c.c.length?r5(s,u,s.c.b,s.c):(r=e.Math.max(r,u.d),i+=u.a+(t>0?n.i:0)),++t;for(nwn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=RQn,n.p=RQn,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),33),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function lHn(n){var t,e,i,r;return 0!=(64&n.Db)?Yln(n):(t=new lN(V5n),(i=n.k)?oO(oO((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new hK(KOt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",oO(t,JL(new mk,new AL(n.b))),e&&(t.a+="]"),t.a+=e1n,e&&(t.a+="["),oO(t,JL(new mk,new AL(n.c))),e&&(t.a+="]"),t.a)}function bHn(n,t){var e,i,r,c,a,u,o;if(n.a){if(o=null,null!=(u=n.a.ne())?t.a+=""+u:null!=(a=n.a.Dj())&&(-1!=(c=GO(a,YTn(91)))?(o=a.substr(c),t.a+=""+fx(null==a?zWn:(kW(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new AL(n.d);i.e!=i.i.gc();)e=BB(kpn(i),87),r?r=!1:t.a+=FWn,bHn(e,t);t.a+=">"}null!=o&&(t.a+=""+o)}else n.e?null!=(u=n.e.zb)&&(t.a+=""+u):(t.a+="?",n.b?(t.a+=" super ",bHn(n.b,t)):n.f&&(t.a+=" extends ",bHn(n.f,t)))}function wHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(y=n.c,k=t.c,e=E7(y.a,n,0),i=E7(k.a,t,0),v=BB(xwn(n,(ain(),Hvt)).Kc().Pb(),11),T=BB(xwn(n,qvt).Kc().Pb(),11),m=BB(xwn(t,Hvt).Kc().Pb(),11),M=BB(xwn(t,qvt).Kc().Pb(),11),g=Z0(v.e),j=Z0(T.g),p=Z0(m.e),E=Z0(M.g),Qyn(n,i,k),s=0,b=(c=p).length;s<b;++s)MZ(c[s],v);for(h=0,w=(a=E).length;h<w;++h)SZ(a[h],T);for(Qyn(t,e,y),f=0,d=(u=g).length;f<d;++f)MZ(u[f],m);for(o=0,l=(r=j).length;o<l;++o)SZ(r[o],M)}function dHn(n,t,e,i){var r,c,a,u,o,s;if(c=Wln(i),!qy(TD(mMn(i,(HXn(),Igt))))&&!qy(TD(mMn(n,bgt)))||vA(BB(mMn(n,ept),98)))switch(CZ(u=new CSn,n),t?((s=u.n).a=t.a-n.n.a,s.b=t.b-n.n.b,WSn(s,0,0,n.o.a,n.o.b),qCn(u,z_n(u,c))):(r=hwn(c),qCn(u,e==(ain(),qvt)?r:Tln(r))),a=BB(mMn(i,(hWn(),Zft)),21),o=u.j,c.g){case 2:case 1:(o==(kUn(),sIt)||o==SIt)&&a.Fc((bDn(),gft));break;case 4:case 3:(o==(kUn(),oIt)||o==CIt)&&a.Fc((bDn(),gft))}else r=hwn(c),u=R_n(n,e,e==(ain(),qvt)?r:Tln(r));return u}function gHn(n,t,i){var r,c,a,u,o,s,h;return e.Math.abs(t.s-t.c)<lZn||e.Math.abs(i.s-i.c)<lZn?0:(r=WNn(n,t.j,i.e),c=WNn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new zZ((O6(),Tyt),i,t,1),++a),-1==c&&(new zZ((O6(),Tyt),t,i,1),++a)):(u=Tfn(t.j,i.s,i.c),u+=Tfn(i.e,t.s,t.c),o=Tfn(i.j,t.s,t.c),(s=r+16*u)<(h=c+16*(o+=Tfn(t.e,i.s,i.c)))?new zZ((O6(),Myt),t,i,h-s):s>h?new zZ((O6(),Myt),i,t,s-h):s>0&&h>0&&(new zZ((O6(),Myt),t,i,0),new zZ(Myt,i,t,0))),a)}function pHn(n,t){var i,r,c,a,u;for(u=new usn(new Pb(n.f.b).a);u.b;){if(c=BB((a=ten(u)).cd(),594),1==t){if(c.gf()!=(Ffn(),HPt)&&c.gf()!=KPt)continue}else if(c.gf()!=(Ffn(),_Pt)&&c.gf()!=FPt)continue;switch(r=BB(BB(a.dd(),46).b,81),i=BB(BB(a.dd(),46).a,189).c,c.gf().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function vHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=x8(ANt,hQn,25,t.b.c.length,15,1),h=x8($ut,$Vn,267,t.b.c.length,0,1),s=x8(Out,a1n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,u=new Wb((f=l[b]).e);u.a<u.c.c.length;)++o[r=tA((c=BB(n0(u),10)).c)],d=Gy(MD(mMn(t,(HXn(),ypt)))),o[r]>0&&s[r]&&(d=K$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Wb(f.e);a.a<a.c.c.length;)(c=BB(n0(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[E7(i.b.b,i,0)]=c.k,s[E7(i.b.b,i,0)]=c}}function mHn(n,t){var e,i,r,c,a,u,o,s,f,l,b;for(i=new oz(ZL(dLn(t).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(o=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),nAn(e)||(a=t.i+t.g/2,u=t.j+t.f/2,f=o.i+o.g/2,l=o.j+o.f/2,(b=new Gj).a=f-a,b.b=l-u,Ukn(c=new xC(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,u=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=u+b.b,Ien(r=cDn(e,!0,!0),a),Aen(r,u),Ten(r,f),Oen(r,l),mHn(n,o)))}function yHn(n){NM(n,new MTn(vj(wj(pj(gj(new du,R4n),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new tu))),u2(n,R4n,K4n,mpn(kTt)),u2(n,R4n,_4n,mpn(vTt)),u2(n,R4n,F4n,mpn(pTt)),u2(n,R4n,B4n,mpn(dTt)),u2(n,R4n,H4n,mpn(gTt)),u2(n,R4n,QJn,wTt),u2(n,R4n,vZn,8),u2(n,R4n,q4n,mpn(yTt)),u2(n,R4n,G4n,mpn(hTt)),u2(n,R4n,z4n,mpn(fTt)),u2(n,R4n,X2n,(hN(),!1))}function kHn(n,t){var i,r,c,a,u,o,s,h,f,l;for(OTn(t,"Simple node placement",1),l=BB(mMn(n,(hWn(),Alt)),304),o=0,a=new Wb(n.b);a.a<a.c.c.length;){for((u=(r=BB(n0(a),29)).c).b=0,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(u.b+=Idn(s,i,l.c)),u.b+=s.d.d+s.o.b+s.d.a,i=s;o=e.Math.max(o,u.b)}for(c=new Wb(n.b);c.a<c.c.c.length;)for(f=(o-(u=(r=BB(n0(c),29)).c).b)/2,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(f+=Idn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;HSn(t)}function jHn(n,t,e,i){var r,c,a,u,o,s,h,f;if(0==i.gc())return!1;if(ZM(),a=(o=BB(t,66).Oj())?i:new gtn(i.gc()),$xn(n.e,t)){if(t.hi())for(h=i.Kc();h.Ob();)UFn(n,t,s=h.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(c=Z3(t,s),a.Fc(c));else if(!o)for(h=i.Kc();h.Ob();)c=Z3(t,s=h.Pb()),a.Fc(c)}else{for(f=axn(n.e.Tg(),t),r=BB(n.g,119),u=0;u<n.i;++u)if(c=r[u],f.rl(c.ak()))throw Hp(new _y(I7n));if(i.gc()>1)throw Hp(new _y(I7n));o||(c=Z3(t,i.Kc().Pb()),a.Fc(c))}return oon(n,EPn(n,t,e),a)}function EHn(n,t){var e,i,r,c;for(Qtn(t.b.j),JT($V(new Rq(null,new w1(t.d,16)),new cc),new ac),c=new Wb(t.d);c.a<c.c.c.length;){switch((r=BB(n0(c),101)).e.g){case 0:e=BB(xq(r.j,0),113).d.j,Gl(r,BB($N(Oz(BB(h6(r.k,e),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,e),15).Oc(),Qst)),113));break;case 1:i=Hyn(r),Gl(r,BB($N(Oz(BB(h6(r.k,i[0]),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,i[1]),15).Oc(),Qst)),113));break;case 2:VPn(n,r);break;case 3:KNn(r);break;case 4:GNn(n,r)}Vtn(r)}n.a=null}function THn(n,t,e){var i,r,c,a,u,o,s,h;return i=n.a.o==(oZ(),cyt)?RQn:KQn,!(u=cFn(n,new aC(t,e))).a&&u.c?(DH(n.d,u),i):u.a?(r=u.a.c,o=u.a.d,e?(s=n.a.c==(gJ(),tyt)?o:r,c=n.a.c==tyt?r:o,a=n.a.g[c.i.p],h=Gy(n.a.p[a.p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(gJ(),nyt)?o:r,c=n.a.c==nyt?r:o,h=Gy(n.a.p[n.a.g[c.i.p].p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(hN(),!0),n.a.n[n.a.g[o.i.p].p]=!0,h):i}function MHn(n,t,e){var i,r,c,a,u,o,s;if($xn(n.e,t))ZM(),AOn((u=BB(t,66).Oj()?new lq(t,n):new xI(t,n)).c,u.b),Z$(u,BB(e,14));else{for(s=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c].ak(),s.rl(r)){if(r==(TOn(),lLt)||r==sLt){for(a=c,(o=Ovn(n,t,e))?fDn(n,c):++c;c<n.i;)(r=i[c].ak())==lLt||r==sLt?fDn(n,c):++c;o||BB(ovn(n,a,Z3(t,e)),72)}else Ovn(n,t,e)?fDn(n,c):BB(ovn(n,c,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e))),72);return}Ovn(n,t,e)||f9(n,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e)))}}function SHn(n,t,e){var i,r,c,a,u,o,s,h;return Nfn(e,n.b)||(n.b=e,c=new Jn,a=BB(P4($V(new Rq(null,new w1(e.f,16)),c),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((Hpn(),Brt)),i=a.Hc(Hrt),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(Frt),i=a.Hc(qrt),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=BB(n.a.Ce(t,e),46),o=BB(h.a,19).a,s=BB(h.b,19).a,u=!1,o<0?n.c||(u=!0):n.e||(u=!0),s<0?n.d||(u=!0):n.f||(u=!0),u?SHn(n,h,e):h}function PHn(n){var t,i,r,c;c=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?t=c.b:(t=MIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(t=e.Math.max(t,MIn(BB(oV(n.p,(kUn(),oIt)),244))),t=e.Math.max(t,MIn(BB(oV(n.p,CIt),244)))),(i=oan(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(KIt)&&(n.q!=(QEn(),WCt)&&n.q!=XCt||(t=e.Math.max(t,XH(BB(oV(n.b,(kUn(),oIt)),124))),t=e.Math.max(t,XH(BB(oV(n.b,CIt),124)))))),qy(TD(n.e.yf().We((sWn(),FSt))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,GFn(n.f)}function CHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)BB(a.Pb(),225).Of(h,t);for(f=0;f<t[h].length;f++){for(u=n.Kc();u.Ob();)BB(u.Pb(),225).Pf(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(o=n.Kc();o.Ob();)BB(o.Pb(),225).Qf(h,f,l,t);for(l1(l,b.c.length),e=0,r=new m6(BB(b.c[l],11).b);y$(r.a)||y$(r.b);)for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),s=n.Kc();s.Ob();)BB(s.Pb(),225).Nf(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)BB(c.Pb(),225).Mf()}function IHn(n,t){var e,i,r,c,a;for(n.b=Gy(MD(mMn(t,(HXn(),kpt)))),n.c=Gy(MD(mMn(t,Tpt))),n.d=BB(mMn(t,rgt),336),n.a=BB(mMn(t,Pdt),275),fmn(t),r=(c=BB(P4(AV(AV(wnn(wnn(new Rq(null,new w1(t.b,16)),new ye),new ke),new je),new Ee),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Kc();r.Ob();)e=BB(r.Pb(),17),BB(mMn(e,(hWn(),Nlt)),15).Jc(new ed(n)),hon(e,Nlt,null);for(i=c.Kc();i.Ob();)e=BB(i.Pb(),17),a=BB(mMn(e,(hWn(),xlt)),17),FXn(n,BB(mMn(e,$lt),15),a),hon(e,$lt,null)}function OHn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function AHn(n){var t,e,i,r,c;if(n.k!=(uSn(),Cut))return!1;if(n.j.c.length<=1)return!1;if(BB(mMn(n,(HXn(),ept)),98)==(QEn(),XCt))return!1;if(bvn(),(i=(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))==lvt)return!1;if(i!=fvt&&i!=hvt){if(r=Gy(MD(edn(n,Npt))),!(t=BB(mMn(n,Lpt),142))&&(t=new HR(r,r,r,r)),c=abn(n,(kUn(),CIt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=abn(n,oIt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function $Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(a=n.e,o=t.e,0==a)return t;if(0==o)return n;if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a==o?(w=dG(h=rbn(e,i)),0==(b=dG(jz(h,32)))?new X6(a,w):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[w,b]))):npn(a<0?ibn(i,e):ibn(e,i));if(a==o)l=a,f=c>=u?N8(n.a,c,t.a,u):N8(t.a,u,n.a,c);else{if(0==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))return ODn(),eet;1==r?(l=a,f=d6(n.a,c,t.a,u)):(l=o,f=d6(t.a,u,n.a,c))}return X0(s=new lU(l,f.length,f)),s}function LHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w;return l=qy(TD(mMn(t,(HXn(),Ogt)))),b=null,a==(ain(),Hvt)&&r.c.i==i?b=r.c:a==qvt&&r.d.i==i&&(b=r.d),(h=u)&&l&&!b?(WB(h.e,r),w=e.Math.max(Gy(MD(mMn(h.d,agt))),Gy(MD(mMn(r,agt)))),hon(h.d,agt,w)):(kUn(),f=PIt,b?f=b.j:vA(BB(mMn(i,ept),98))&&(f=a==Hvt?CIt:oIt),s=xHn(n,t,i,a,f,r),o=W5((vW(i),r)),a==Hvt?(SZ(o,BB(xq(s.j,0),11)),MZ(o,c)):(SZ(o,c),MZ(o,BB(xq(s.j,0),11))),h=new zfn(r,o,s,BB(mMn(s,(hWn(),dlt)),11),a,!b)),JIn(n.a,r,new L_(h.d,t,a)),h}function NHn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=null,n.d&&(h=BB(SJ(n.d,t),138)),!h){if(f=(c=n.a.Mh()).i,!n.d||NT(n.d)!=f){for(o=new xp,n.d&&Tcn(o,n.d),u=s=o.f.c+o.g.c;u<f;++u)i=BB(Wtn(c,u),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));if(o.f.c+o.g.c!=f)for(a=0;a<s;++a)i=BB(Wtn(c,a),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));n.d=o}h=BB(SJ(n.d,t),138)}return h}function xHn(n,t,e,i,r,c){var a,u,o,s,h,f;return a=null,s=i==(ain(),Hvt)?c.c:c.d,o=Wln(t),s.i==e?(a=BB(RX(n.b,s),10))||(hon(a=bXn(s,BB(mMn(e,(HXn(),ept)),98),r,HKn(s),null,s.n,s.o,o,t),(hWn(),dlt),s),VW(n.b,s,a)):(u=AEn(a=bXn((h=new Zn,f=Gy(MD(mMn(t,(HXn(),ypt))))/2,son(h,tpt,f),h),BB(mMn(e,ept),98),r,i==Hvt?-1:1,null,new Gj,new xC(0,0),o,t),e,i),hon(a,(hWn(),dlt),u),VW(n.b,u,a)),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)),vA(BB(mMn(t,(HXn(),ept)),98))?hon(t,ept,(QEn(),VCt)):hon(t,ept,(QEn(),QCt)),a}function DHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;OTn(t,"Orthogonal edge routing",1),s=Gy(MD(mMn(n,(HXn(),Apt)))),e=Gy(MD(mMn(n,kpt))),i=Gy(MD(mMn(n,Tpt))),l=new fX(0,e),d=0,a=new M2(n.b,0),u=null,h=null,o=null,f=null;do{f=(h=a.b<a.d.gc()?(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)):null)?h.a:null,u&&(Tqn(u,d),d+=u.c.a),w=AGn(l,n,o,f,u?d+i:d),r=!u||VI(o,(dxn(),jyt)),c=!h||VI(f,(dxn(),jyt)),w>0?(b=(w-1)*e,u&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),u=h,o=f}while(h);n.f.a=d,HSn(t)}function RHn(){var n;RHn=O,EAt=new Sm,kAt=x8(Qtt,sVn,2,0,6,1),SAt=i0(Bun(33,58),Bun(1,26)),PAt=i0(Bun(97,122),Bun(65,90)),CAt=Bun(48,57),TAt=i0(SAt,0),MAt=i0(PAt,CAt),IAt=i0(i0(0,Bun(1,6)),Bun(33,38)),OAt=i0(i0(CAt,Bun(65,70)),Bun(97,102)),xAt=i0(TAt,dpn("-_.!~*'()")),DAt=i0(MAt,Xwn("-_.!~*'()")),dpn(u9n),Xwn(u9n),i0(xAt,dpn(";:@&=+$,")),i0(DAt,Xwn(";:@&=+$,")),AAt=dpn(":/?#"),$At=Xwn(":/?#"),LAt=dpn("/?#"),NAt=Xwn("/?#"),(n=new Rv).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),SQ(),jAt=new Ak(n)}function KHn(n,t){var e,i,r,c,a;if(hon(t,(qqn(),okt),0),r=BB(mMn(t,akt),86),0==t.d.b)r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a)):hon(t,fkt,0);else{for(e=new wg(spn(new bg(t).a.d,0));EE(e.a);)KHn(n,BB(b3(e.a),188).c);i=BB(iL(new wg(spn(new bg(t).a.d,0))),86),c=(Gy(MD(mMn(BB(TN(new wg(spn(new bg(t).a.d,0))),86),fkt)))+Gy(MD(mMn(i,fkt))))/2,r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a),hon(t,okt,Gy(MD(mMn(t,fkt)))-c),IGn(n,t)):hon(t,fkt,c)}}function _Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;u=0,b=0,o=TJ(n.f,n.f.length),c=n.d,a=n.i,i=n.a,r=n.b;do{for(l=0,s=new Wb(n.p);s.a<s.c.c.length;)f=OGn(n,BB(n0(s),10)),e=!0,(n.q==(sNn(),Tvt)||n.q==Pvt)&&(e=qy(TD(f.b))),BB(f.a,19).a<0&&e?(++l,o=TJ(n.f,n.f.length),n.d=n.d+BB(f.a,19).a,b+=c-n.d,c=n.d+BB(f.a,19).a,a=n.i,i=a0(n.a),r=a0(n.b)):(n.f=TJ(o,o.length),n.d=c,n.a=(yX(i),i?new t_(i):HB(new Wb(i))),n.b=(yX(r),r?new t_(r):HB(new Wb(r))),n.i=a);++u,h=0!=l&&qy(TD(t.Kb(new rI(iln(b),iln(u)))))}while(h)}function FHn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return a=n.f,l=t.f,u=a==(YLn(),xEt)||a==REt,o=a==DEt||a==KEt,b=l==DEt||l==KEt,s=a==DEt||a==xEt,w=l==DEt||l==xEt,!u||l!=xEt&&l!=REt?o&&b?n.f==KEt?n:t:s&&w?(a==DEt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,v=i.i+i.g,m=h.d+r.g,c<=(e.Math.max(v,m)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==DEt?n:t:n.f==xEt?n:t):n:n.f==REt?n:t}function BHn(n){var t,e,i,r,c,a,u,o,s,h;for(s=n.e.a.c.length,c=new Wb(n.e.a);c.a<c.c.c.length;)BB(n0(c),121).j=!1;for(n.i=x8(ANt,hQn,25,s,15,1),n.g=x8(ANt,hQn,25,s,15,1),n.n=new Np,r=0,h=new Np,u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).d=r++,0==a.b.a.c.length&&WB(n.n,a),gun(h,a.g);for(t=0,i=new Wb(h);i.a<i.c.c.length;)(e=BB(n0(i),213)).c=t++,e.f=!1;o=h.c.length,null==n.b||n.b.length<o?(n.b=x8(xNt,qQn,25,o,15,1),n.c=x8($Nt,ZYn,25,o,16,1)):nk(n.c),n.d=h,n.p=new LN(etn(n.d.c.length)),n.j=1}function HHn(n,t){var e,i,r,c,a,u,o,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=BB(mMn(n.f,(rkn(),vat)),379),n.g=BB(mMn(n.f,jat),19).a,n.e=Gy(MD(mMn(n.f,mat))),n.c=Gy(MD(mMn(n.f,pat))),cX(n.b),r=new Wb(n.f.c);r.a<r.c.c.length;)i=BB(n0(r),282),yKn(n.b,i.c,i,null),yKn(n.b,i.d,i,null);for(u=n.f.e.c.length,n.a=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),s=new Wb(n.f.e);s.a<s.c.c.length;)CBn(n,o=BB(n0(s),144),n.a[o.b]);for(n.i=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),c=0;c<u;++c)for(a=0;a<u;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function qHn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw Hp(new dy("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=x8(ANt,hQn,25,t,15,1),aHn(n.b,0,i,0,t),n.b=i),n.a=!0}}function GHn(n,t){var e,i,r,c,a,u,o;for(a=gz(n.a).Kc();a.Ob();){if((c=BB(a.Pb(),17)).b.c.length>0)for(i=new t_(BB(h6(n.a,c),21)),SQ(),m$(i,new _w(t)),r=new M2(c.b,0);r.b<r.d.gc();){switch(Px(r.b<r.d.gc()),e=BB(r.d.Xb(r.c=r.b++),70),u=-1,BB(mMn(e,(HXn(),Ydt)),272).g){case 1:u=i.c.length-1;break;case 0:u=Jjn(i);break;case 2:u=0}-1!=u&&(l1(u,i.c.length),WB((o=BB(i.c[u],243)).b.b,e),BB(mMn(vW(o.b.c.i),(hWn(),Zft)),21).Fc((bDn(),fft)),BB(mMn(vW(o.b.c.i),Zft),21).Fc(sft),fW(r),hon(e,vlt,c))}SZ(c,null),MZ(c,null)}}function zHn(n,t){var e,i,r,c;return e=new _n,1==(r=2==(r=(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Fn),Wcn(jgn(0),new en)),162).a,2),0)&&(r=0),1==(c=2==(c=(i=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Bn),Wcn(jgn(0),new en)),162).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function UHn(n){var t,e,i,r,c,a,u,o,s,h,f;if(o=new Np,!Lx(n,(hWn(),Wft)))return o;for(i=BB(mMn(n,Wft),15).Kc();i.Ob();)dqn(t=BB(i.Pb(),10),n),o.c[o.c.length]=t;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&(u=BB(mMn(c,Vft),10))&&(CZ(s=new CSn,c),qCn(s,BB(mMn(c,Qft),61)),h=BB(xq(u.j,0),11),SZ(f=new wY,s),MZ(f,h));for(e=new Wb(o);e.a<e.c.c.length;)PZ(t=BB(n0(e),10),BB(xq(n.b,n.b.c.length-1),29));return o}function XHn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(c=qy(TD(ZAn(t=WJ(n),(HXn(),wgt)))),h=0,r=0,s=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));s.e!=s.i.gc();)a=(u=QIn(o=BB(kpn(s),79)))&&c&&qy(TD(ZAn(o,dgt))),l=PTn(BB(Wtn((!o.c&&(o.c=new hK(KOt,o,5,8)),o.c),0),82)),u&&a?++r:u&&!a?++h:JJ(l)==t||l==t?++r:++h;for(i=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));i.e!=i.i.gc();)a=(u=QIn(e=BB(kpn(i),79)))&&c&&qy(TD(ZAn(e,dgt))),f=PTn(BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),u&&a?++h:u&&!a?++r:JJ(f)==t||f==t?++h:++r;return h-r}function WHn(n,t){var e,i,r,c,a,u,o,s,h;if(OTn(t,"Edge splitting",1),n.b.c.length<=2)HSn(t);else{for(Px((c=new M2(n.b,0)).b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29);c.b<c.d.gc();)for(r=a,Px(c.b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29),u=new Wb(r.a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(i=new Wb(BB(n0(o),11).g);i.a<i.c.c.length;)(s=(e=BB(n0(i),17)).d.i.c)!=r&&s!=a&&zxn(e,(Bl(h=new $vn(n),(uSn(),Put)),hon(h,(hWn(),dlt),e),hon(h,(HXn(),ept),(QEn(),XCt)),PZ(h,a),h));HSn(t)}}function VHn(n,t){var e,i,r,c,a,u,o,s,h;if((a=null!=t.p&&!t.b)||OTn(t,aZn,1),c=1/(e=BB(mMn(n,(hWn(),Mlt)),15)).gc(),t.n)for(OH(t,"ELK Layered uses the following "+e.gc()+" modules:"),h=0,s=e.Kc();s.Ob();)OH(t," Slot "+(h<10?"0":"")+h+++": "+nE(tsn(BB(s.Pb(),51))));for(o=e.Kc();o.Ob();)BB(o.Pb(),51).pf(n,mcn(t,c));for(r=new Wb(n.b);r.a<r.c.c.length;)i=BB(n0(r),29),gun(n.a,i.a),i.a.c=x8(Ant,HWn,1,0,5,1);for(u=new Wb(n.a);u.a<u.c.c.length;)PZ(BB(n0(u),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),a||HSn(t)}function QHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;r=Gy(MD(mMn(t,(HXn(),Dgt)))),l=4,c=3,j=20/(k=BB(mMn(t,xpt),19).a),b=!1,s=0,u=DWn;do{for(a=1!=s,f=0!=s,E=0,v=0,y=(g=n.a).length;v<y;++v)(w=g[v]).f=null,Bzn(n,w,a,f,r),E+=e.Math.abs(w.a);do{o=U_n(n,t)}while(o);for(p=0,m=(d=n.a).length;p<m;++p)if(0!=(i=wU(w=d[p]).a))for(h=new Wb(w.e);h.a<h.c.c.length;)BB(n0(h),10).n.b+=i;0==s||1==s?--l<=0&&(E<u||-l>k)?(s=2,u=DWn):0==s?(s=1,u=E):(s=0,u=E):(b=E>=u||u-E<j,u=E,b&&--c)}while(!(b&&c<=0))}function YHn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(w=new xp,c=n.a.ec().Kc();c.Ob();)VW(w,i=BB(c.Pb(),168),e.Je(i));for(yX(n),m$(a=n?new t_(n):HB(n.a.ec().Kc()),new Ew(w)),u=S4(a),o=new C$(t),jCn((b=new xp).f,t,o);0!=u.a.gc();){for(s=null,h=null,f=null,r=u.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),168),Gy(MD(qI(AY(w.f,i))))<=RQn){if(hU(b,i.a)&&!hU(b,i.b)){h=i.b,f=i.a,s=i;break}if(hU(b,i.b)&&!hU(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),WB(BB(qI(AY(b.f,f)),221).a,l),jCn(b.f,h,l),u.a.Bc(s)}return o}function JHn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Depth-first cycle removal",1),o=(s=t.a).c.length,n.c=new Np,n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,o,16,1),n.b=new Np,c=0,u=new Wb(s);u.a<u.c.c.length;)(a=BB(n0(u),10)).p=c,h3(fbn(a))&&WB(n.c,a),++c;for(h=new Wb(n.c);h.a<h.c.c.length;)GPn(n,BB(n0(h),10));for(r=0;r<o;r++)n.d[r]||(l1(r,s.c.length),GPn(n,BB(s.c[r],10)));for(i=new Wb(n.b);i.a<i.c.c.length;)tBn(BB(n0(i),17),!0),hon(t,(hWn(),qft),(hN(),!0));n.c=null,n.d=null,n.a=null,n.b=null,HSn(e)}function ZHn(n,t){var e,i,r,c,a,u,o;for(n.a.c=x8(Ant,HWn,1,0,5,1),i=spn(t.b,0);i.b!=i.d.c;)0==(e=BB(b3(i),86)).b.b&&(hon(e,(qqn(),dkt),(hN(),!0)),WB(n.a,e));switch(n.a.c.length){case 0:hon(r=new csn(0,t,"DUMMY_ROOT"),(qqn(),dkt),(hN(),!0)),hon(r,ekt,!0),DH(t.b,r);break;case 1:break;default:for(c=new csn(0,t,"SUPER_ROOT"),u=new Wb(n.a);u.a<u.c.c.length;)hon(o=new UQ(c,a=BB(n0(u),86)),(qqn(),ekt),(hN(),!0)),DH(c.a.a,o),DH(c.d,o),DH(a.b,o),hon(a,dkt,!1);hon(c,(qqn(),dkt),(hN(),!0)),hon(c,ekt,!0),DH(t.b,c)}}function nqn(n,t){var i,r,c,a,u,o;return jDn(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),u=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),o=e.Math.max(u,i),h$(),rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>=0^(rin(A3n),(e.Math.abs(o)<=A3n||0==o||isNaN(o)&&isNaN(0)?0:o<0?-1:o>0?1:zO(isNaN(o),isNaN(0)))>=0)?e.Math.max(o,r):(rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>0?e.Math.sqrt(o*o+r*r):-e.Math.sqrt(o*o+r*r))}function tqn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new _v),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=BB(bW(n.a,a-1),117)).e&&10!=c.e||0!=t.e&&10!=t.e?Cv(n.a,t):(0==t.e||t.bm().length,0==c.e?(e=new Pk,(i=c._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn),c=new vJ(10,null,0),kU(n.a,c,a-1)):(c.bm().length,cO(e=new Pk,c.bm())),0==t.e?(i=t._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn):cO(e,t.bm()),BB(c,521).b=e.a):Cv(n.a,t);else for(r=0;r<t.em();r++)tqn(n,t.am(r));else Cv(n.a,t)}function eqn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=DUn(fan(n.f),CJ(n.e)),n.g):(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=yhn(n.f)),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new Ck).a+=""+r,n.e>0&&i>=-6?i>=0?kZ(c,e-CJ(n.e),String.fromCharCode(46)):(c.a=fx(c.a,0,t-1)+"0."+nO(c.a,t-1),kZ(c,t+1,Bdn(qtt,0,-CJ(i)-1))):(e-t>=1&&(kZ(c,t,String.fromCharCode(46)),++e),kZ(c,e,String.fromCharCode(69)),i>0&&kZ(c,++e,String.fromCharCode(43)),kZ(c,++e,""+vz(fan(i)))),n.g=c.a,n.g))}function iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=BB((i=e.Kc()).Pb(),19).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?BB(i.Pb(),19).a:t.f+1),a!=h)for(b=BB(xq(n.b,a),29),f=BB(xq(n.b,h),29),s=new Wb(a0(b.a));s.a<s.c.c.length;)if(Qyn(o=BB(n0(s),10),f.a.c.length,f),0==h)for(c=new Wb(a0(fbn(o)));c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(n,(hWn(),qft),(hN(),!0)),iGn(n,r,1);++h,++a}for(u=new M2(n.b,0);u.b<u.d.gc();)Px(u.b<u.d.gc()),0==BB(u.d.Xb(u.c=u.b++),29).a.c.length&&fW(u)}}function rqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=(a=t.b).o,o=a.d,i=Gy(MD(gpn(a,(HXn(),ypt)))),r=Gy(MD(gpn(a,jpt))),s=Gy(MD(gpn(a,$pt))),rH(u=new fm,o.d,o.c,o.a,o.b),l=MRn(t,i,r,s),p=new Wb(t.d);p.a<p.c.c.length;){for(w=(g=BB(n0(p),101)).f.a.ec().Kc();w.Ob();)c=(b=BB(w.Pb(),409)).a,f=ETn(b),v=new km,bTn(b,b.c,l,v),FMn(b,f,l,v),bTn(b,b.d,l,v),e=v,e=n.Uf(b,f,e),yQ(c.a),Frn(c.a,e),JT(new Rq(null,new w1(e,16)),new wP(h,u));(d=g.i)&&(aTn(g,d,l,r),pgn(h,u,m=new wA(d.g)),UR(m,d.j),pgn(h,u,m))}rH(o,u.d,u.c,u.a,u.b)}function cqn(n,t,e){var i,r,c;if((r=BB(mMn(t,(HXn(),Pdt)),275))!=(JMn(),cft)){switch(OTn(e,"Horizontal Compaction",1),n.a=t,Vk(i=new yOn(((c=new I7).d=t,c.c=BB(mMn(c.d,Zdt),218),UDn(c),SGn(c),sRn(c),c.a)),n.b),1===BB(mMn(t,Sdt),422).g?Wk(i,new grn(n.a)):Wk(i,(CQ(),fit)),r.g){case 1:C$n(i);break;case 2:C$n(Tzn(i,(Ffn(),FPt)));break;case 3:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new gr));break;case 4:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new kd(c)));break;case 5:C$n(Xk(i,wst))}Tzn(i,(Ffn(),_Pt)),i.e=!0,Lzn(c),HSn(e)}}function aqn(n,t,e,i,r,c,a,u){var o,s,h,f;switch(o=u6(Pun(Gk(FEt,1),HWn,220,0,[t,e,i,r])),f=null,n.b.g){case 1:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ja,new Qa,new Ya]));break;case 0:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ya,new Qa,new Ja]));break;case 2:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Qa,new Ja,new Ya]))}for(h=new Wb(f);h.a<h.c.c.length;)s=BB(n0(h),526),o.c.length>1&&(o=s.mg(o,n.a,u));return 1==o.c.length?BB(xq(o,o.c.length-1),220):2==o.c.length?FHn((l1(0,o.c.length),BB(o.c[0],220)),(l1(1,o.c.length),BB(o.c[1],220)),a,c):null}function uqn(n){var t,i,r,c,a,u;for(Otn(n.a,new nt),i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),221),r=XR(B$(BB(n.b,65).c),BB(t.b,65).c),ect?(u=BB(n.b,65).b,a=BB(t.b,65).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>u.d&&a.d<u.d+u.a&&NH(r,e.Math.max(u.c-(a.c+a.b),a.c-(u.c+u.b)))):(r.a=0,a.c+a.b>u.c&&a.c<u.c+u.b&&NH(r,e.Math.max(u.d-(a.d+a.a),a.d-(u.d+u.a))))):NH(r,TFn(BB(n.b,65),BB(t.b,65))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),NH(r,c=HEn(Wrt,t,c,r)),LG(BB(t.b,65),r),Otn(t.a,new Aw(r)),BB(Wrt.b,65),K8(Wrt,Vrt,t)}function oqn(n){var t,i,r,c,a,u,o,s,f,l,b,w;for(n.f=new Fv,o=0,r=0,c=new Wb(n.e.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;){for((a=BB(n0(u),10)).p=o++,i=new oz(ZL(lbn(a).a.Kc(),new h));dAn(i);)BB(U5(i),17).p=r++;for(t=AHn(a),l=new Wb(a.j);l.a<l.c.c.length;)f=BB(n0(l),11),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-j2(fan(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-j2(fan(e.Math.round(b))),f.n.b-=s)}n.g=o,n.b=r,n.i=x8(eyt,HWn,401,o,0,1),n.c=x8(Jmt,HWn,649,r,0,1),n.d.a.$b()}function sqn(n){var t,e,i,r,c,a,u,o,s;if(n.ej())if(o=n.fj(),n.i>0){if(t=new DI(n.i,n.g),c=(e=n.i)<100?null:new Fj(e),n.ij())for(i=0;i<n.i;++i)a=n.g[i],c=n.kj(a,c);if(a6(n),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new ax(t);i.e!=i.i.gc();)c=n.dj(jpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r)}else a6(n),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if(n.i>0){for(u=n.g,s=n.i,a6(n),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else a6(n);else a6(n)}function hqn(n,t,i){var r,c,a,u,o,s,h,f,l;for(_an(this),i==(dJ(),Lyt)?TU(this.r,n):TU(this.w,n),f=RQn,h=KQn,u=t.a.ec().Kc();u.Ob();)c=BB(u.Pb(),46),o=BB(c.a,455),(s=(r=BB(c.b,17)).c)==n&&(s=r.d),TU(o==Lyt?this.r:this.w,s),l=(kUn(),yIt).Hc(s.j)?Gy(MD(mMn(s,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(XMn(this,(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=BB(a.Pb(),46),tPn(this,BB(c.b,17));this.o=!1}function fqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return e=8191&n.l,i=n.l>>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(u=8191&t.l),p=r*u,v=c*u,m=a*u,0!=(o=t.l>>13|(15&t.m)<<9)&&(g+=e*o,p+=i*o,v+=r*o,m+=c*o),0!=(s=t.m>>4&8191)&&(p+=e*s,v+=i*s,m+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(v+=e*h,m+=i*h),0!=(f=(1048320&t.h)>>8)&&(m+=e*f),b=((d=e*u)>>22)+(g>>9)+((262143&p)<<4)+((31&v)<<17),w=(p>>18)+(v>>5)+((4095&m)<<8),w+=(b+=(l=(d&SQn)+((511&g)<<13))>>22)>>22,M$(l&=SQn,b&=SQn,w&=PQn)}function lqn(n){var t,i,r,c,a,u,o;if(0!=(o=BB(xq(n.j,0),11)).g.c.length&&0!=o.e.c.length)throw Hp(new Fy("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=o.g.c.length){for(a=RQn,i=new Wb(o.g);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.d.i,(HXn(),Cgt)),142),a=e.Math.min(a,u.n.a-r.b);return new qf(yX(a))}if(0!=o.e.c.length){for(c=KQn,i=new Wb(o.e);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.c.i,(HXn(),Cgt)),142),c=e.Math.max(c,u.n.a+u.o.a+r.c);return new qf(yX(c))}return iy(),iy(),Ont}function bqn(n,t){var e,i,r,c,a,u;if(n.Fk()){if(n.i>4){if(!n.wj(t))return!1;if(n.rk()){if(u=(e=(i=BB(t,49)).Ug())==n.e&&(n.Dk()?i.Og(i.Vg(),n.zk())==n.Ak():-1-i.Vg()==n.aj()),n.Ek()&&!u&&!e&&i.Zg())for(r=0;r<n.i;++r)if(GI(n.Gk(BB(n.g[r],56)))===GI(t))return!0;return u}if(n.Dk()&&!n.Ck()){if(GI(c=BB(t,56).ah(Cvn(BB(n.ak(),18))))===GI(n.e))return!0;if(null==c||!BB(c,56).kh())return!1}}if(a=Sjn(n,t),n.Ek()&&!a)for(r=0;r<n.i;++r)if(GI(i=n.Gk(BB(n.g[r],56)))===GI(t))return!0;return a}return Sjn(n,t)}function wqn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(h=new Np,l=new Rv,a=t.b,r=0;r<a.c.length;r++){for(s=(l1(r,a.c.length),BB(a.c[r],29)).a,h.c=x8(Ant,HWn,1,0,5,1),c=0;c<s.c.length;c++)(u=n.a[r][c]).p=c,u.k==(uSn(),Iut)&&(h.c[h.c.length]=u),c5(BB(xq(t.b,r),29).a,c,u),u.j.c=x8(Ant,HWn,1,0,5,1),gun(u.j,BB(BB(xq(n.b,r),15).Xb(c),14)),LK(BB(mMn(u,(HXn(),ept)),98))||hon(u,ept,(QEn(),UCt));for(i=new Wb(h);i.a<i.c.c.length;)f=QRn(e=BB(n0(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(o=l.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),SQ(),m$(u.j,(zsn(),sst)),u.i=!0,eIn(u)}function dqn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=BB(mMn(n,(hWn(),Qft)),61),i=BB(xq(n.j,0),11),h==(kUn(),sIt)?qCn(i,SIt):h==SIt&&qCn(i,sIt),BB(mMn(t,(HXn(),Fgt)),174).Hc((mdn(),_It))){if(o=Gy(MD(mMn(n,Cpt))),s=Gy(MD(mMn(n,Ipt))),a=Gy(MD(mMn(n,Spt))),(u=BB(mMn(t,cpt),21)).Hc((lIn(),eIt)))for(e=s,f=n.o.a/2-i.n.a,c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(u.Hc(rIt))for(c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.a=o+n.o.a-i.n.a;f0(new Pw((gM(),new HV(t,!1,!1,new Ft))),new __(null,n,!1))}}function gqn(n,t){var i,r,c,a,u,o,s;if(0!=t.c.length){for(SQ(),yG(t.c,t.c.length,null),r=BB(n0(c=new Wb(t)),145);c.a<c.c.c.length;)i=BB(n0(c),145),!aen(r.e.c,i.e.c)||Kdn(BD(r.e).b,i.e.d)||Kdn(BD(i.e).b,r.e.d)?(eFn(n,r),r=i):(gun(r.k,i.k),gun(r.b,i.b),gun(r.c,i.c),Frn(r.i,i.i),gun(r.d,i.d),gun(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),u=e.Math.min(r.e.d,i.e.d),o=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-u,xH(r.e,a,u,o,s),t0(r.f,i.f),!r.a&&(r.a=i.a),gun(r.g,i.g),WB(r.g,i));eFn(n,r)}}function pqn(n,t,e,i){var r,c,a,u,o,s;if((u=n.j)==(kUn(),PIt)&&t!=(QEn(),QCt)&&t!=(QEn(),YCt)&&(qCn(n,u=z_n(n,e)),!(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),tpt))&&u!=PIt&&(0!=n.n.a||0!=n.n.b)&&hon(n,tpt,jkn(n,u))),t==(QEn(),WCt)){switch(s=0,u.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}hon(n,(hWn(),Tlt),s)}if(o=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=QCt&&t!=YCt&&u!=PIt)switch(u.g){case 1:a.a=o.a/2;break;case 2:a.a=o.a,a.b=o.b/2;break;case 3:a.a=o.a/2,a.b=o.b;break;case 4:a.b=o.b/2}else a.a=o.a/2,a.b=o.b/2}function vqn(n){var t,e,i,r,c,a,u,o,s,h;if(n.ej())if(h=n.Vi(),o=n.fj(),h>0)if(t=new jcn(n.Gi()),c=(e=h)<100?null:new Fj(e),JD(n,e,t.g),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new AL(t);i.e!=i.i.gc();)c=n.dj(kpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r);else JD(n,n.Vi(),n.Wi()),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if((h=n.Vi())>0){for(u=n.Wi(),s=h,JD(n,h,u),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else JD(n,n.Vi(),n.Wi());else JD(n,n.Vi(),n.Wi())}function mqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(u=new Wb(t);u.a<u.c.c.length;)(c=BB(n0(u),233)).e=null,c.c=0;for(o=null,a=new Wb(t);a.a<a.c.c.length;)if(f=(c=BB(n0(a),233)).d[0],!e||f.k==(uSn(),Cut)){for(b=BB(mMn(f,(hWn(),clt)),15).Kc();b.Ob();)l=BB(b.Pb(),10),e&&l.k!=(uSn(),Cut)||((!c.e&&(c.e=new Np),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(uSn(),Cut)){if(o)for(h=BB(h6(n.d,o),21).Kc();h.Ob();)for(s=BB(h.Pb(),10),r=BB(h6(n.d,f),21).Kc();r.Ob();)i=BB(r.Pb(),10),UB(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;o=f}}}function yqn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),11),nhn(n.b,n.d[r.p]),o.c=x8(Ant,HWn,1,0,5,1),r.i.k.g){case 0:Otn(BB(mMn(r,(hWn(),Elt)),10).j,new Zd(o));break;case 1:S$(Qon(AV(new Rq(null,new w1(r.i.j,16)),new ng(r))),new tg(o));break;case 3:WB(o,new rI(BB(mMn(r,(hWn(),dlt)),11),iln(r.e.c.length+r.g.c.length)))}for(u=new Wb(o);u.a<u.c.c.length;)a=BB(n0(u),46),(i=ME(n,BB(a.a,11)))>n.d[r.p]&&(e+=n5(n.b,i)*BB(a.b,19).a,d3(n.a,iln(i)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function kqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for((f=new wA(BB(ZAn(n,(SMn(),HMt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=MD(ZAn(n,DMt)))||(kW(c),c<=0))&&(c=1.3),u=new Np,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)a=new zx(BB(kpn(l),33)),u.c[u.c.length]=a;switch(BB(ZAn(n,RMt),311).g){case 3:w=aFn(u,t,f.a,f.b,(s=r,kW(c),s));break;case 1:w=vBn(u,t,f.a,f.b,(h=r,kW(c),h));break;default:w=Mqn(u,t,f.a,f.b,(o=r,kW(c),o))}KUn(n,(b=yXn(new Gtn(w),t,i,f.a,f.b,r,(kW(c),c))).a,b.b,!1,!0)}function jqn(n,t){var e,i,r,c;c=new t_((e=t.b).j),r=0,(i=e.j).c=x8(Ant,HWn,1,0,5,1),eX(BB(gan(n.b,(kUn(),sIt),(Crn(),Rst)),15),e),r=Jmn(c,r,new xr,i),eX(BB(gan(n.b,sIt,Dst),15),e),r=Jmn(c,r,new Nr,i),eX(BB(gan(n.b,sIt,xst),15),e),eX(BB(gan(n.b,oIt,Rst),15),e),eX(BB(gan(n.b,oIt,Dst),15),e),r=Jmn(c,r,new Dr,i),eX(BB(gan(n.b,oIt,xst),15),e),eX(BB(gan(n.b,SIt,Rst),15),e),r=Jmn(c,r,new Rr,i),eX(BB(gan(n.b,SIt,Dst),15),e),r=Jmn(c,r,new Kr,i),eX(BB(gan(n.b,SIt,xst),15),e),eX(BB(gan(n.b,CIt,Rst),15),e),r=Jmn(c,r,new Qr,i),eX(BB(gan(n.b,CIt,Dst),15),e),eX(BB(gan(n.b,CIt,xst),15),e)}function Eqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Layer size calculation",1),f=RQn,h=KQn,c=!1,o=new Wb(n.b);o.a<o.c.c.length;)if((s=(u=BB(n0(o),29)).c).a=0,s.b=0,0!=u.a.c.length){for(c=!0,b=new Wb(u.a);b.a<b.c.c.length;)d=(l=BB(n0(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=BB(xq(u.a,0),10)).n.b-r.d.d,r.k==(uSn(),Mut)&&(g-=BB(mMn(n,(HXn(),Lpt)),142).d),i=(a=BB(xq(u.a,u.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==Mut&&(i+=BB(mMn(n,(HXn(),Lpt)),142).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,HSn(t)}function Tqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Wb(n.a);s.a<s.c.c.length;)u=BB(n0(s),10),c=e.Math.max(c,u.d.b),a=e.Math.max(a,u.d.c);for(o=new Wb(n.a);o.a<o.c.c.length;){switch(u=BB(n0(o),10),BB(mMn(u,(HXn(),kdt)),248).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Wb(u.j);b.a<b.c.c.length;)0==(l=BB(n0(b),11)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=u.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=u.d.b)&&(p=r),d=u.d.c,p>g.a-d-h&&(p=g.a-d-h),u.n.a=t+p}}function Mqn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(u=x8(xNt,qQn,25,n.c.length,15,1),ikn(l=new Xz(new Uu),n),s=0,b=new Np;0!=l.b.c.length;)if(a=BB(0==l.b.c.length?null:xq(l.b,0),157),s>1&&iG(a)*eG(a)/2>u[0]){for(c=0;c<b.c.length-1&&iG(a)*eG(a)/2>u[c];)++c;f=new Gtn(new s1(b,0,c+1)),h=iG(a)/eG(a),o=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),o),F8(eMn(l,f)),ikn(l,new s1(b,c+1,b.c.length)),b.c=x8(Ant,HWn,1,0,5,1),s=0,jG(u,u.length,0)}else null!=(0==l.b.c.length?null:xq(l.b,0))&&hrn(l,0),s>0&&(u[s]=u[s-1]),u[s]+=iG(a)*eG(a),++s,b.c[b.c.length]=a;return b}function Sqn(n){var t,e,i;if((e=BB(mMn(n,(HXn(),kgt)),163))==(Tbn(),Flt)){for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(!X5(BB(U5(t),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Hlt)for(i=new oz(ZL(lbn(n).a.Kc(),new h));dAn(i);)if(!X5(BB(U5(i),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Pqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(OTn(t,"Label dummy removal",1),i=Gy(MD(mMn(n,(HXn(),jpt)))),r=Gy(MD(mMn(n,Spt))),o=BB(mMn(n,Udt),103),u=new Wb(n.b);u.a<u.c.c.length;)for(h=new M2(BB(n0(u),29).a,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),(s=BB(h.d.Xb(h.c=h.b++),10)).k==(uSn(),Sut)&&(f=BB(mMn(s,(hWn(),dlt)),17),b=Gy(MD(mMn(f,agt))),a=GI(mMn(s,ult))===GI((Xyn(),ECt)),e=new wA(s.n),a&&(e.b+=b+i),c=new xC(s.o.a,s.o.b-b-i),l=BB(mMn(s,Plt),15),o==(Ffn(),HPt)||o==KPt?ADn(l,e,r,c,a,o):qhn(l,e,r,c),gun(f.b,l),rGn(s,GI(mMn(n,Zdt))===GI((Mbn(),YPt))),fW(h));HSn(t)}function Cqn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(u=new Np,r=new Wb(t.a);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),10).j);a.a<a.c.c.length;){for(s=null,m=0,y=(v=Z0((c=BB(n0(a),11)).g)).length;m<y;++m)wan((p=v[m]).d.i,e)||((g=LHn(n,t,e,p,p.c,(ain(),qvt),s))!=s&&(u.c[u.c.length]=g),g.c&&(s=g));for(o=null,w=0,d=(b=Z0(c.e)).length;w<d;++w)wan((l=b[w]).c.i,e)||((g=LHn(n,t,e,l,l.d,(ain(),Hvt),o))!=o&&(u.c[u.c.length]=g),g.c&&(o=g))}for(f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),441),-1!=E7(t.a,h.a,0)||WB(t.a,h.a),h.c&&(i.c[i.c.length]=h)}function Iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Interactive cycle breaking",1),h=new Np,l=new Wb(t.a);l.a<l.c.c.length;)for((f=BB(n0(l),10)).p=1,b=Fjn(f).a,s=xwn(f,(ain(),qvt)).Kc();s.Ob();)for(c=new Wb(BB(s.Pb(),11).g);c.a<c.c.c.length;)(w=(i=BB(n0(c),17)).d.i)!=f&&Fjn(w).a<b&&(h.c[h.c.length]=i);for(a=new Wb(h);a.a<a.c.c.length;)tBn(i=BB(n0(a),17),!0);for(h.c=x8(Ant,HWn,1,0,5,1),o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p>0&&lPn(n,u,h);for(r=new Wb(h);r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0);h.c=x8(Ant,HWn,1,0,5,1),HSn(e)}function Oqn(n,t){var e,i,r,c,a,u,o,s,h;return s="",0==t.length?n.de(XVn,zVn,-1,-1):(mK((h=RMn(t)).substr(0,3),"at ")&&(h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=RMn(h.substr(a+1)),h=RMn(h.substr(0,a))):(e=h.indexOf(")",a),s=h.substr(a+1,e-(a+1)),h=RMn(h.substr(0,a))),-1!=(a=GO(h,YTn(46)))&&(h=h.substr(a+1)),(0==h.length||mK(h,"Anonymous function"))&&(h=zVn),u=mN(s,YTn(58)),r=MK(s,YTn(58),u-1),o=-1,i=-1,c=XVn,-1!=u&&-1!=r&&(c=s.substr(0,r),o=hx(s.substr(r+1,u-(r+1))),i=hx(s.substr(u+1))),n.de(c,h,o,i))}function Aqn(n,t,e){var i,r,c,a,u,o;if(0==t.l&&0==t.m&&0==t.h)throw Hp(new Oy("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(ltt=M$(0,0,0)),M$(0,0,0);if(t.h==CQn&&0==t.m&&0==t.l)return Fbn(n,e);if(o=!1,t.h>>19!=0&&(t=aon(t),o=!o),a=OLn(t),c=!1,r=!1,i=!1,n.h==CQn&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return u=jAn(n,a),o&&Oon(u),e&&(ltt=M$(0,0,0)),u;n=WO((X7(),btt)),i=!0,o=!o}else n.h>>19!=0&&(c=!0,n=aon(n),i=!0,o=!o);return-1!=a?Bon(n,a,o,c,e):Kkn(n,t)<0?(e&&(ltt=c?aon(n):M$(n.l,n.m,n.h)),M$(0,0,0)):h_n(i?n:M$(n.l,n.m,n.h),t,o,c,r,e)}function $qn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw Hp(new Fy("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=BB(Vj(n.g),9),b=sx(n.f),u=0,s=(c=h).length;u<s;++u)(f=BB(D7(n,(i=c[u]).g),246))?WB(b,BB(own(n,f),123)):b.c[b.c.length]=null;for(w=new B2,JT(AV($V(AV(new Rq(null,new w1(b,16)),new hu),new Eg(t)),new fu),new Tg(w)),Jcn(w,n.a),e=new Np,a=0,o=(r=h).length;a<o;++a)gun(e,Eun(n,JQ(BB(D7(w,(i=r[a]).g),20)))),(l=BB(xq(b,i.g),123))&&(e.c[e.c.length]=l);return gun(e,Eun(n,JQ(BB(D7(w,h[h.length-1].g+1),20)))),e}function Lqn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w;for(OTn(i,"Model order cycle breaking",1),n.a=0,n.b=0,l=new Np,h=t.a.c.length,s=new Wb(t.a);s.a<s.c.c.length;)Lx(o=BB(n0(s),10),(hWn(),wlt))&&(h=e.Math.max(h,BB(mMn(o,wlt),19).a+1));for(w=new Wb(t.a);w.a<w.c.c.length;)for(u=zPn(n,b=BB(n0(w),10),h),f=xwn(b,(ain(),qvt)).Kc();f.Ob();)for(a=new Wb(BB(f.Pb(),11).g);a.a<a.c.c.length;)zPn(n,(r=BB(n0(a),17)).d.i,h)<u&&(l.c[l.c.length]=r);for(c=new Wb(l);c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(t,(hWn(),qft),(hN(),!0));l.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function Nqn(n,t){var e,i,r,c,a,u,o;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=BB(a.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(u=n.r.a.ec().Kc();u.Ob();)r=BB(u.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(o=t.w.a.ec().Kc();o.Ob();)r=BB(o.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=BB(c.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new S6(n,t,i-e):i<e?new S6(t,n,e-i):(new S6(t,n,0),new S6(n,t,0))}}function xqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(s=t.c,r=QA(n.e),f=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,o=new Wb(s);o.a<o.c.c.length;){switch(b=e+(l=(u=BB(n0(o),395)).b).a,g=i+l.b,w=CJ(b/n.a),p=CJ(g/n.b),(c=u.a).g){case 0:Hpn(),h=Brt;break;case 1:Hpn(),h=Frt;break;case 2:Hpn(),h=Hrt;break;default:Hpn(),h=qrt}c.a?(v=CJ((g+u.c)/n.b),WB(n.f,new x_(h,iln(p),iln(v))),c==(qpn(),tct)?won(n,0,p,w,v):won(n,w,p,n.d-1,v)):(d=CJ((b+u.c)/n.a),WB(n.f,new x_(h,iln(w),iln(d))),c==(qpn(),Zrt)?won(n,w,0,d,p):won(n,w,p,d,n.c-1))}}function Dqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(l=new Np,c=new Np,d=null,u=t.Kc();u.Ob();)a=new Hd(BB(u.Pb(),19).a),c.c[c.c.length]=a,d&&(a.d=d,d.e=a),d=a;for(m=zFn(n),h=0;h<c.c.length;++h){for(b=null,g=D6((l1(0,c.c.length),BB(c.c[0],652))),i=null,r=RQn,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,o=w):(s=g,o=p),y=Gy(MD(mMn(n,(HXn(),Hpt)))),(v=m[f]+e.Math.pow(o,y))<r&&(r=v,(i=s).c=f),g&&f==g.b&&(b=g,g=xz(g));i&&(WB(l,iln(i.c)),i.a=!0,vln(i))}return SQ(),yG(l.c,l.c.length,null),l}function Rqn(n){var t,e,i,r,c,a,u,o,s,h;for(t=new To,e=new To,s=mK(K9n,(r=N_n(n.b,_9n))?SD(cdn((!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),r.b),F9n)):null),o=0;o<n.i;++o)cL(u=BB(n.g[o],170),99)?0!=((a=BB(u,18)).Bb&h6n)?(0==(a.Bb&hVn)||!s&&null==((c=N_n(a,_9n))?SD(cdn((!c.b&&(c.b=new Jx((gWn(),k$t),X$t,c)),c.b),n8n)):null))&&f9(t,a):(h=Cvn(a))&&0!=(h.Bb&h6n)||(0==(a.Bb&hVn)||!s&&null==((i=N_n(a,_9n))?SD(cdn((!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),i.b),n8n)):null))&&f9(e,a):(ZM(),BB(u,66).Oj()&&(u.Jj()||(f9(t,u),f9(e,u))));chn(t),chn(e),n.a=BB(t.g,247),BB(e.g,247)}function Kqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(o=xSn(t),BB(mMn(t,(HXn(),qdt)),314)!=(Oin(),hht)&&e5(o,new vt),e5(o,new Dw(BB(mMn(t,Rdt),292))),b=0,s=new Np,r=new bV(o);r.a!=r.b;)i=BB(_hn(r),37),$Gn(n.c,i),b+=(f=BB(mMn(i,(hWn(),Mlt)),15)).gc(),WB(s,new rI(i,f.Kc()));for(OTn(e,"Recursive hierarchical layout",b),l=BB(BB(xq(s,s.c.length-1),46).b,47);l.Ob();)for(u=new Wb(s);u.a<u.c.c.length;)for(a=BB(n0(u),46),f=BB(a.b,47),c=BB(a.a,37);f.Ob();){if(cL(h=BB(f.Pb(),51),507)){if(c.e)break;h.pf(c,mcn(e,1));break}h.pf(c,mcn(e,1))}HSn(e)}function _qn(n,t){var e,i,r,c,a,u,o,s;if(b1(u=t.length-1,t.length),93==(a=t.charCodeAt(u))){if((c=GO(t,YTn(91)))>=0)return r=dbn(n,t.substr(1,c-1)),YUn(n,t.substr(c+1,u-(c+1)),r)}else{if(e=-1,null==Ett&&(Ett=new RegExp("\\d")),Ett.test(String.fromCharCode(a))&&(e=MK(t,YTn(46),u-1))>=0){i=BB(V5(n,Ptn(n,t.substr(1,e-1)),!1),58),o=0;try{o=l_n(t.substr(e+1),_Vn,DWn)}catch(h){throw cL(h=lun(h),127)?Hp(new L7(h)):Hp(h)}if(o<i.gc())return cL(s=i.Xb(o),72)&&(s=BB(s,72).dd()),BB(s,56)}if(e<0)return BB(V5(n,Ptn(n,t.substr(1)),!1),56)}return null}function Fqn(n,t,e){var i,r,c,a,u,o,s;if(Awn(t,e)>=0)return e;switch(DW(B7(n,e))){case 2:if(mK("",Cfn(n,e.Hj()).ne())){if(o=m$n(n,t,u=jV(B7(n,e)),kV(B7(n,e))))return o;for(a=0,s=(r=jKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(r.Xb(a),170))),u))return o}return null;case 4:if(mK("",Cfn(n,e.Hj()).ne())){for(i=e;i;i=J1(B7(n,i)))if(o=y$n(n,t,jV(B7(n,i)),kV(B7(n,i))))return o;if(u=jV(B7(n,e)),mK(S7n,u))return mjn(n,t);for(a=0,s=(c=EKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(c.Xb(a),170))),u))return o}return null;default:return null}}function Bqn(n,t,e){var i,r,c,a,u,o,s,h;if(0==e.gc())return!1;if(ZM(),c=(u=BB(t,66).Oj())?e:new gtn(e.gc()),$xn(n.e,t)){if(t.hi())for(s=e.Kc();s.Ob();)UFn(n,t,o=s.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(r=Z3(t,o),c.Hc(r)||c.Fc(r));else if(!u)for(s=e.Kc();s.Ob();)r=Z3(t,o=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw Hp(new _y(I7n));for(h=axn(n.e.Tg(),t),i=BB(n.g,119),a=0;a<n.i;++a)if(r=i[a],h.rl(r.ak())){if(e.Hc(u?r:r.dd()))return!1;for(s=e.Kc();s.Ob();)o=s.Pb(),BB(ovn(n,a,u?BB(o,72):Z3(t,o)),72);return!0}u||(r=Z3(t,e.Kc().Pb()),c.Fc(r))}return pX(n,c)}function Hqn(n,t){var i,r,c,a,u,o,s;for(s=new YT,o=new Kb(new Ob(n.c).a.vc().Kc());o.a.Ob();)c=BB(o.a.Pb(),42),0==(a=BB(c.dd(),458)).b&&r5(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=BB(0==s.b?null:(Px(0!=s.b),Atn(s,s.a.a)),458)).a&&(a.a=0),r=new Wb(a.d);r.a<r.c.c.length;)null==(i=BB(n0(r),654)).b.a?i.b.a=Gy(a.a)+i.a:t.o==(oZ(),ryt)?i.b.a=e.Math.min(Gy(i.b.a),Gy(a.a)+i.a):i.b.a=e.Math.max(Gy(i.b.a),Gy(a.a)+i.a),--i.b.b,0==i.b.b&&DH(s,i.b);for(u=new Kb(new Ob(n.c).a.vc().Kc());u.a.Ob();)c=BB(u.a.Pb(),42),a=BB(c.dd(),458),t.i[a.c.p]=a.a}function qqn(){qqn=O,skt=new up(OZn),new up(AZn),new iR("DEPTH",iln(0)),ikt=new iR("FAN",iln(0)),tkt=new iR(U3n,iln(0)),dkt=new iR("ROOT",(hN(),!1)),ckt=new iR("LEFTNEIGHBOR",null),bkt=new iR("RIGHTNEIGHBOR",null),akt=new iR("LEFTSIBLING",null),wkt=new iR("RIGHTSIBLING",null),ekt=new iR("DUMMY",!1),new iR("LEVEL",iln(0)),lkt=new iR("REMOVABLE_EDGES",new YT),gkt=new iR("XCOOR",iln(0)),pkt=new iR("YCOOR",iln(0)),ukt=new iR("LEVELHEIGHT",0),rkt=new iR("ID",""),hkt=new iR("POSITION",iln(0)),fkt=new iR("PRELIM",0),okt=new iR("MODIFIER",0),nkt=new up($Zn),Zyt=new up(LZn)}function Gqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Wb(t.j);w.a<w.c.c.length;){if(b=BB(n0(w),11),c=Aon(Pun(Gk(PMt,1),sVn,8,0,[b.i.n,b.n,b.a])),t.k==(uSn(),Iut)&&(o=BB(mMn(b,(hWn(),dlt)),11),c.a=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).a,t.n.a=c.a),u=new xC(0,c.b),b.j==(kUn(),oIt))u.a=f;else{if(b.j!=CIt)continue;u.a=i}if(!(e.Math.abs(c.a-u.a)<=r)||Nkn(t))for(a=b.g.c.length+b.e.c.length>1,h=new m6(b.b);y$(h.a)||y$(h.b);)l=(s=BB(y$(h.a)?n0(h.a):n0(h.b),17)).c==b?s.d:s.c,e.Math.abs(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).b-u.b)>1&&pxn(n,s,u,a,b)}}function zqn(n){var t,i,r,c,a,u;if(c=new M2(n.e,0),r=new M2(n.a,0),n.d)for(i=0;i<n.b;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);for(t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++))));n.f-t>D3n;){for(a=t,u=0;e.Math.abs(t-a)<D3n;)++u,t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++)))),Px(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);u<n.b&&(Px(c.b>0),c.a.Xb(c.c=--c.b),DFn(n,n.b-u,a,r,c),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),Px(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);n.d=!0,n.c=!0}function Uqn(){Uqn=O,pLt=(cE(),gLt).b,yLt=BB(Wtn(QQ(gLt.b),0),34),vLt=BB(Wtn(QQ(gLt.b),1),34),mLt=BB(Wtn(QQ(gLt.b),2),34),OLt=gLt.bb,BB(Wtn(QQ(gLt.bb),0),34),BB(Wtn(QQ(gLt.bb),1),34),$Lt=gLt.fb,LLt=BB(Wtn(QQ(gLt.fb),0),34),BB(Wtn(QQ(gLt.fb),1),34),BB(Wtn(QQ(gLt.fb),2),18),xLt=gLt.qb,KLt=BB(Wtn(QQ(gLt.qb),0),34),BB(Wtn(QQ(gLt.qb),1),18),BB(Wtn(QQ(gLt.qb),2),18),DLt=BB(Wtn(QQ(gLt.qb),3),34),RLt=BB(Wtn(QQ(gLt.qb),4),34),FLt=BB(Wtn(QQ(gLt.qb),6),34),_Lt=BB(Wtn(QQ(gLt.qb),5),18),kLt=gLt.j,jLt=gLt.k,ELt=gLt.q,TLt=gLt.w,MLt=gLt.B,SLt=gLt.A,PLt=gLt.C,CLt=gLt.D,ILt=gLt._,ALt=gLt.cb,NLt=gLt.hb}function Xqn(n,t,i){var r,c,a,u,o,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,u=(s=BB(h.Pb(),11)).j==(kUn(),sIt)||s.j==SIt){if(!(f=BB(mMn(s,(hWn(),Elt)),10)))continue;l+=iRn(n,r,s,f)}else{for(o=new Wb(s.g);o.a<o.c.c.length;){if((c=BB(n0(o),17).d).i.c==t.c){WB(n.a,s);continue n}l+=n.g[c.p]}for(a=new Wb(s.e);a.a<a.c.c.length;){if((c=BB(n0(a),17).c).i.c==t.c){WB(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):u&&(n.f[s.p]=l)}}function Wqn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function Vqn(n,t,e){var i,r;for(OTn(e,"Graph transformation ("+n.a+")",1),r=a0(t.a),i=new Wb(t.b);i.a<i.c.c.length;)gun(r,BB(n0(i),29).a);if(BB(mMn(t,(HXn(),Xdt)),419)==(_nn(),Sht))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r);break;case 3:bdn(t,r);break;case 4:n.a==(Srn(),qut)?(bdn(t,r),$2(t,r)):($2(t,r),bdn(t,r))}else if(n.a==(Srn(),qut))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:bdn(t,r),L2(t,r);break;case 4:L2(t,r),bdn(t,r)}else switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:L2(t,r),bdn(t,r);break;case 4:bdn(t,r),L2(t,r)}HSn(e)}function Qqn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w;for(o=new fA,s=new fA,b=new fA,w=new fA,u=Gy(MD(mMn(t,(HXn(),Opt)))),r=Gy(MD(mMn(t,ypt))),a=new Wb(e);a.a<a.c.c.length;)if(c=BB(n0(a),10),(f=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt))for(s.a.zc(c,s),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(o,BB(U5(i),17).c.i);else if(f==SIt)for(w.a.zc(c,w),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(b,BB(U5(i),17).c.i);0!=o.a.gc()&&(l=AGn(new fX(2,r),t,o,s,-u-t.c.b))>0&&(n.a=u+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=AGn(new fX(1,r),t,b,w,t.f.b+u-t.c.b))>0&&(t.f.b+=u+(l-1)*r)}function Yqn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,Dsn(n,null)):(n.F=(kW(t),t),-1!=(i=GO(t,YTn(60)))?(r=t.substr(0,i),-1==GO(t,YTn(46))&&!mK(r,$Wn)&&!mK(r,S9n)&&!mK(r,P9n)&&!mK(r,C9n)&&!mK(r,I9n)&&!mK(r,O9n)&&!mK(r,A9n)&&!mK(r,$9n)&&(r=L9n),-1!=(e=mN(t,YTn(62)))&&(r+=""+t.substr(e+1)),Dsn(n,r)):(r=t,-1==GO(t,YTn(46))&&(-1!=(i=GO(t,YTn(91)))&&(r=t.substr(0,i)),mK(r,$Wn)||mK(r,S9n)||mK(r,P9n)||mK(r,C9n)||mK(r,I9n)||mK(r,O9n)||mK(r,A9n)||mK(r,$9n)?r=t:(r=L9n,-1!=i&&(r+=""+t.substr(i)))),Dsn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,c,t))}function Jqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(!((d=t.b.c.length)<3)){for(b=x8(ANt,hQn,25,d,15,1),f=0,h=new Wb(t.b);h.a<h.c.c.length;)s=BB(n0(h),29),b[f++]=s.a.c.length;for(l=new M2(t.b,2),i=1;i<d-1;i++)for(Px(l.b<l.d.gc()),w=new Wb((e=BB(l.d.Xb(l.c=l.b++),29)).a),c=0,u=0,o=0;o<b[i+1];o++)if(m=BB(n0(w),10),o==b[i+1]-1||YSn(n,m,i+1,i)){for(a=b[i]-1,YSn(n,m,i+1,i)&&(a=n.c.e[BB(BB(BB(xq(n.c.b,m.p),15).Xb(0),46).a,10).p]);u<=o;){if(!YSn(n,v=BB(xq(e.a,u),10),i+1,i))for(p=BB(xq(n.c.b,v.p),15).Kc();p.Ob();)g=BB(p.Pb(),46),((r=n.c.e[BB(g.a,10).p])<c||r>a)&&TU(n.b,BB(g.b,17));++u}c=a}}}function Zqn(n,t){var e;if(null==t||mK(t,zWn))return null;if(0==t.length&&n.k!=(PPn(),pMt))return null;switch(n.k.g){case 1:return mgn(t,a5n)?(hN(),vtt):mgn(t,u5n)?(hN(),ptt):null;case 2:try{return iln(l_n(t,_Vn,DWn))}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 4:try{return bSn(t)}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 3:return t;case 5:return rhn(n),HIn(n,t);case 6:return rhn(n),K$n(n,n.a,t);case 7:try{return(e=rAn(n)).Jf(t),e}catch(i){if(cL(i=lun(i),32))return null;throw Hp(i)}default:throw Hp(new Fy("Invalid type set for this layout option."))}}function nGn(n){var t,e,i,r,c,a,u;for(Dnn(),u=new Vv,e=new Wb(n);e.a<e.c.c.length;)t=BB(n0(e),140),(!u.b||t.c>=u.b.c)&&(u.b=t),(!u.c||t.c<=u.c.c)&&(u.d=u.c,u.c=t),(!u.e||t.d>=u.e.d)&&(u.e=t),(!u.f||t.d<=u.f.d)&&(u.f=t);return i=new Tpn((Aun(),Zat)),i2(n,out,new Jy(Pun(Gk(Jat,1),HWn,369,0,[i]))),a=new Tpn(eut),i2(n,uut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[a]))),r=new Tpn(nut),i2(n,aut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[r]))),c=new Tpn(tut),i2(n,cut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[c]))),xLn(i.c,Zat),xLn(r.c,nut),xLn(c.c,tut),xLn(a.c,eut),u.a.c=x8(Ant,HWn,1,0,5,1),gun(u.a,i.c),gun(u.a,ean(r.c)),gun(u.a,c.c),gun(u.a,ean(a.c)),u}function tGn(n){var t;switch(n.d){case 1:if(n.hj())return-2!=n.o;break;case 2:if(n.hj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.gj(),n.p){case 0:return null!=t&&qy(TD(t))!=JI(n.k,0);case 1:return null!=t&&BB(t,217).a!=dG(n.k)<<24>>24;case 2:return null!=t&&BB(t,172).a!=(dG(n.k)&QVn);case 6:return null!=t&&JI(BB(t,162).a,n.k);case 5:return null!=t&&BB(t,19).a!=dG(n.k);case 7:return null!=t&&BB(t,184).a!=dG(n.k)<<16>>16;case 3:return null!=t&&Gy(MD(t))!=n.j;case 4:return null!=t&&BB(t,155).a!=n.j;default:return null==t?null!=n.n:!Nfn(t,n.n)}}function eGn(n,t,e){var i,r,c,a;return n.Fk()&&n.Ek()&&GI(a=Gz(n,BB(e,56)))!==GI(e)?(n.Oi(t),n.Ui(t,B9(n,t,a)),n.rk()&&(r=BB(e,49),c=n.Dk()?n.Bk()?r.ih(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),null):r.ih(n.b,Awn(r.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,null):r.ih(n.b,-1-n.aj(),null,null),!BB(a,49).eh()&&(i=BB(a,49),c=n.Dk()?n.Bk()?i.gh(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),c):i.gh(n.b,Awn(i.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,c):i.gh(n.b,-1-n.aj(),null,c)),c&&c.Fi()),mA(n.b)&&n.$i(n.Zi(9,e,a,t,!1)),a):e}function iGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(f=Gy(MD(mMn(n,(HXn(),Ept)))),r=Gy(MD(mMn(n,Rpt))),hon(b=new Yu,Ept,f+r),v=(h=t).d,g=h.c.i,m=h.d.i,p=tA(g.c),y=tA(m.c),c=new Np,l=p;l<=y;l++)Bl(o=new $vn(n),(uSn(),Put)),hon(o,(hWn(),dlt),h),hon(o,ept,(QEn(),XCt)),hon(o,Mpt,b),w=BB(xq(n.b,l),29),l==p?Qyn(o,w.a.c.length-i,w):PZ(o,w),(k=Gy(MD(mMn(h,agt))))<0&&hon(h,agt,k=0),o.o.b=k,d=e.Math.floor(k/2),qCn(u=new CSn,(kUn(),CIt)),CZ(u,o),u.n.b=d,qCn(s=new CSn,oIt),CZ(s,o),s.n.b=d,MZ(h,u),qan(a=new wY,h),hon(a,vgt,null),SZ(a,s),MZ(a,v),zkn(o,h,a),c.c[c.c.length]=a,h=a;return c}function rGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(u=BB(DSn(n,(kUn(),CIt)).Kc().Pb(),11).e,f=BB(DSn(n,oIt).Kc().Pb(),11).g,a=u.c.length,g=g1(BB(xq(n.j,0),11));a-- >0;){for(l1(0,u.c.length),b=BB(u.c[0],17),l1(0,f.c.length),r=E7((i=BB(f.c[0],17)).d.e,i,0),A2(b,i.d,r),SZ(i,null),MZ(i,null),l=b.a,t&&DH(l,new wA(g)),e=spn(i.a,0);e.b!=e.d.c;)DH(l,new wA(BB(b3(e),8)));for(d=b.b,h=new Wb(i.b);h.a<h.c.c.length;)s=BB(n0(h),70),d.c[d.c.length]=s;if(w=BB(mMn(b,(HXn(),vgt)),74),c=BB(mMn(i,vgt),74))for(w||(w=new km,hon(b,vgt,w)),o=spn(c,0);o.b!=o.d.c;)DH(w,new wA(BB(b3(o),8)))}}function cGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((lIn(),eIt)),u=0,o=s.Kc(),f=null,l=0,b=0;o.Ob();)c=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),a=r.b.rf().a,n.A.Hc((mdn(),_It))&&yRn(n,t),f?(w=b+f.d.c+n.w+r.d.b,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-c)<=fJn||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(u=e.Math.max(u,lcn(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-1)<=fJn||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=u}function aGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((lIn(),eIt)),u=0,n.A.Hc((mdn(),_It))&&kRn(n,t),o=s.Kc(),f=null,b=0,l=0;o.Ob();)a=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),c=r.b.rf().b,f?(w=l+f.d.a+n.w+r.d.d,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-a)<=fJn||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(u=e.Math.max(u,lcn(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-1)<=fJn||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=u}function uGn(n,t,e){var i,r,c,a,u,o;for(this.g=n,u=t.d.length,o=e.d.length,this.d=x8(Out,a1n,10,u+o,0,1),a=0;a<u;a++)this.d[a]=t.d[a];for(c=0;c<o;c++)this.d[u+c]=e.d[c];if(t.e){if(this.e=zB(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=BB(r.Pb(),233))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=zB(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Jtn(this,this.f/this.a):null!=lL(t.g,t.d[0]).a&&null!=lL(e.g,e.d[0]).a?Jtn(this,(Gy(lL(t.g,t.d[0]).a)+Gy(lL(e.g,e.d[0]).a))/2):null!=lL(t.g,t.d[0]).a?Jtn(this,lL(t.g,t.d[0]).a):null!=lL(e.g,e.d[0]).a&&Jtn(this,lL(e.g,e.d[0]).a)}function oGn(n,t){var e,i,r,c,a,u,o,s,h;for(n.a=new BX($cn(WPt)),i=new Wb(t.a);i.a<i.c.c.length;){for(e=BB(n0(i),841),a=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),WB(n.a.a,a),o=new Wb(e.d);o.a<o.c.c.length;)FGn(s=new NN(n,u=BB(n0(o),110)),BB(mMn(e.c,(hWn(),Xft)),21)),hU(n.g,e)||(VW(n.g,e,new xC(u.c,u.d)),VW(n.f,e,s)),WB(n.a.b,s),g2(a,s);for(c=new Wb(e.b);c.a<c.c.c.length;)s=new NN(n,(r=BB(n0(c),594)).kf()),VW(n.b,r,new rI(a,s)),FGn(s,BB(mMn(e.c,(hWn(),Xft)),21)),r.hf()&&(FGn(h=new Sgn(n,r.hf(),1),BB(mMn(e.c,Xft),21)),g2(new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),h),JIn(n.c,r.gf(),new rI(a,h)))}return n.a}function sGn(n){var t;this.a=n,t=(uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])).length,this.b=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),this.c=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),FY(this,Cut,(HXn(),Opt),Apt),tun(this,Cut,Put,Ept,Tpt),_Y(this,Cut,Iut,Ept),_Y(this,Cut,Mut,Ept),tun(this,Cut,Sut,Opt,Apt),FY(this,Put,ypt,kpt),_Y(this,Put,Iut,ypt),_Y(this,Put,Mut,ypt),tun(this,Put,Sut,Ept,Tpt),ZA(this,Iut,ypt),_Y(this,Iut,Mut,ypt),_Y(this,Iut,Sut,Ppt),ZA(this,Mut,Npt),tun(this,Mut,Sut,Ipt,Cpt),FY(this,Sut,ypt,ypt),FY(this,Tut,ypt,kpt),tun(this,Tut,Cut,Ept,Tpt),tun(this,Tut,Sut,Ept,Tpt),tun(this,Tut,Put,Ept,Tpt)}function hGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(cL(a=e.ak(),99)&&0!=(BB(a,18).Bb&BQn)&&(l=BB(e.dd(),49),(d=tfn(n.e,l))!=l)){if(jL(n,t,sTn(n,t,h=Z3(a,d))),f=null,mA(n.e)&&(i=Fqn((IPn(),Z$t),n.e.Tg(),a))!=itn(n.e.Tg(),n.c)){for(g=axn(n.e.Tg(),a),u=0,c=BB(n.g,119),o=0;o<t;++o)r=c[o],g.rl(r.ak())&&++u;(f=new b4(n.e,9,i,l,d,u,!1)).Ei(new N7(n.e,9,n.c,e,h,t,!1))}return(b=Cvn(w=BB(a,18)))?(f=l.ih(n.e,Awn(l.Tg(),b),null,f),f=BB(d,49).gh(n.e,Awn(d.Tg(),b),null,f)):0!=(w.Bb&h6n)&&(s=-1-Awn(n.e.Tg(),w),f=l.ih(n.e,s,null,null),!BB(d,49).eh()&&(f=BB(d,49).gh(n.e,s,null,f))),f&&f.Fi(),h}return e}function fGn(n){var t,i,r,c,a,u,o,s;for(a=new Wb(n.a.b);a.a<a.c.c.length;)(c=BB(n0(a),81)).b.c=c.g.c,c.b.d=c.g.d;for(s=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(o=TX(n.c).a.nc();o.Ob();)u=BB(o.Pb(),46),i=BB(u.b,81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=qx(new xC(s.a,s.b)),n.e=XR(new xC(t.a,t.b),s),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1)}function lGn(n){var t,e,i;for(ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Nf])),e=new Tl(n),i=0;i<e.a.length;++i)mK(t=dnn(e,i).je().a,"layered")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new hf])):mK(t,"force")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new zh])):mK(t,"stress")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Xh])):mK(t,"mrtree")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Pf])):mK(t,"radial")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new yf])):mK(t,"disco")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Gh,new Hh])):mK(t,"sporeOverlap")||mK(t,"sporeCompaction")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Tf])):mK(t,"rectpacking")&&ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Of]))}function bGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=new wA(n.o),p=t.a/l.a,u=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=GI(mMn(n,(HXn(),ept)))===GI((QEn(),XCt)),w=new Wb(n.j);w.a<w.c.c.length;)switch((b=BB(n0(w),11)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=u);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=u)}for(s=new Wb(n.b);s.a<s.c.c.length;)h=(o=BB(n0(s),70)).n.a+o.o.a/2,f=o.n.b+o.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(o.n.a+=d,o.n.b+=c*a):g-a<0&&h>=0&&(o.n.a+=d*g,o.n.b+=c));n.o.a=t.a,n.o.b=t.b,hon(n,(HXn(),Fgt),(mdn(),new YK(i=BB(Vj(YIt),9),BB(SR(i,i.length),9),0)))}function wGn(n,t,e,i,r,c){if(null!=t&&Xbn(t,AAt,$At))throw Hp(new _y("invalid scheme: "+t));if(!(n||null!=e&&-1==GO(e,YTn(35))&&e.length>0&&(b1(0,e.length),47!=e.charCodeAt(0))))throw Hp(new _y("invalid opaquePart: "+e));if(n&&(null==t||!xT(jAt,t.toLowerCase()))&&null!=e&&Xbn(e,LAt,NAt))throw Hp(new _y(o9n+e));if(n&&null!=t&&xT(jAt,t.toLowerCase())&&!CEn(e))throw Hp(new _y(o9n+e));if(!Ubn(i))throw Hp(new _y("invalid device: "+i));if(!Rhn(r))throw Hp(new _y(null==r?"invalid segments: null":"invalid segment: "+shn(r)));if(null!=c&&-1!=GO(c,YTn(35)))throw Hp(new _y("invalid query: "+c))}function dGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(t,"Calculate Graph Size",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),o=ZJn,s=ZJn,a=n4n,u=n4n,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)d=(h=BB(kpn(l),33)).i,g=h.j,v=h.g,r=h.f,c=BB(ZAn(h,(sWn(),$St)),142),o=e.Math.min(o,d-c.b),s=e.Math.min(s,g-c.d),a=e.Math.max(a,d+v+c.c),u=e.Math.max(u,g+r+c.a);for(b=new xC(o-(w=BB(ZAn(n,(sWn(),XSt)),116)).b,s-w.d),f=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));f.e!=f.i.gc();)Pen(h=BB(kpn(f),33),h.i-b.a),Cen(h,h.j-b.b);p=a-o+(w.b+w.c),i=u-s+(w.d+w.a),Sen(n,p),Men(n,i),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function gGn(n){var t,e,i,r,c,a,u,o,s,h;for(i=new Np,a=new Wb(n.e.a);a.a<a.c.c.length;){for(h=0,(r=BB(n0(a),121)).k.c=x8(Ant,HWn,1,0,5,1),e=new Wb(kbn(r));e.a<e.c.c.length;)(t=BB(n0(e),213)).f&&(WB(r.k,t),++h);1==h&&(i.c[i.c.length]=r)}for(c=new Wb(i);c.a<c.c.c.length;)for(r=BB(n0(c),121);1==r.k.c.length;){for(s=BB(n0(new Wb(r.k)),213),n.b[s.c]=s.g,u=s.d,o=s.e,e=new Wb(kbn(r));e.a<e.c.c.length;)Nfn(t=BB(n0(e),213),s)||(t.f?u==t.d||o==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==u?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);y7(u.k,s),y7(o.k,s),r=u==r?s.e:s.d}}function pGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=BB(SJ(n.f,t),23))){for(r=new Kb(new Ob(n.d).a.vc().Kc());r.a.Ob();)if(a=BB(r.a.Pb(),42),u=(e=BB(a.dd(),23)).f,l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new Kb(new Ob(n.d).a.vc().Kc());i.a.Ob();)if(a=BB(i.a.Pb(),42),null!=(f=(e=BB(a.dd(),23)).g))for(s=0,h=(o=f).length;s<h;++s)if(u=o[s],l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}c&&mZ(n.f,t,c)}return c}function vGn(n,t){var e,i,r,c,a;for(e=new Ik,a=!1,c=0;c<t.length;c++)if(b1(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):GO("GyMLdkHmsSEcDahKzZv",YTn(i))>0?(Ppn(n,e,0),e.a+=String.fromCharCode(i),Ppn(n,e,r=cgn(t,c)),c+=r-1):39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ppn(n,e,0),e.a+=" ",Ppn(n,e,0);c+1<t.length&&(b1(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ppn(n,e,0),pTn(n)}function mGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(OTn(i,"Network simplex layering",1),n.b=t,p=4*BB(mMn(t,(HXn(),xpt)),19).a,(g=n.b.a).c.length<1)HSn(i);else{for(d=null,c=spn(a=IKn(n,g),0);c.b!=c.d.c;){for(r=BB(b3(c),15),o=p*CJ(e.Math.sqrt(r.gc())),WKn(Qk(Jk(Yk(B_(u=o_n(r)),o),d),!0),mcn(i,1)),l=n.b.b,w=new Wb(u.a);w.a<w.c.c.length;){for(b=BB(n0(w),121);l.c.length<=b.e;)kG(l,l.c.length,new HX(n.b));PZ(BB(b.f,10),BB(xq(l,b.e),29))}if(a.b>1)for(d=x8(ANt,hQn,25,n.b.b.c.length,15,1),f=0,h=new Wb(n.b.b);h.a<h.c.c.length;)s=BB(n0(h),29),d[f++]=s.a.c.length}g.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,n.c=null,HSn(i)}}function yGn(n){var t,i,r,c,a,u,o;for(t=0,a=new Wb(n.b.a);a.a<a.c.c.length;)(r=BB(n0(a),189)).b=0,r.c=0;for(ESn(n,0),ewn(n,n.g),kNn(n.c),Zy(n.c),Ffn(),i=_Pt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Mzn(n.c,i)),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.g),kMn(n,0),pHn(n,0),M$n(n,1),ESn(n,1),ewn(n,n.d),kNn(n.c),u=new Wb(n.b.a);u.a<u.c.c.length;)r=BB(n0(u),189),t+=e.Math.abs(r.c);for(o=new Wb(n.b.a);o.a<o.c.c.length;)(r=BB(n0(o),189)).b=0,r.c=0;for(i=HPt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Zy(Mzn(n.c,i))),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.d),kMn(n,1),pHn(n,1),M$n(n,0),Zy(n.c),c=new Wb(n.b.a);c.a<c.c.c.length;)r=BB(n0(c),189),t+=e.Math.abs(r.c);return t}function kGn(n,t){var e,i,r,c,a,u,o,s,h;if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)i+=2;else if(c>=u&&r<=o)u<=r&&c<=o?(e[h++]=r,e[h++]=c,i+=2):u<=r?(e[h++]=r,e[h++]=o,n.b[i]=o+1,a+=2):c<=o?(e[h++]=u,e[h++]=c,i+=2):(e[h++]=u,e[h++]=o,n.b[i]=o+1);else{if(!(o<r))throw Hp(new dy("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}function jGn(n){var t,i,r,c,a,u,o;for(t=new Np,n.g=new Np,n.d=new Np,u=new usn(new Pb(n.f.b).a);u.b;)WB(t,BB(BB((a=ten(u)).dd(),46).b,81)),dA(BB(a.cd(),594).gf())?WB(n.d,BB(a.dd(),46)):WB(n.g,BB(a.dd(),46));for(ewn(n,n.d),ewn(n,n.g),n.c=new sOn(n.b),ej(n.c,(vM(),Gat)),Bln(n,n.d),Bln(n,n.g),gun(t,n.c.a.b),n.e=new xC(RQn,RQn),n.a=new xC(KQn,KQn),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),81),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);tj(n.c,new jt),o=0;do{c=yGn(n),++o}while((o<2||c>KVn)&&o<10);tj(n.c,new Et),yGn(n),IU(n.c),fGn(n.f)}function EGn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(qy(TD(mMn(e,(HXn(),wgt)))))for(r=new Wb(e.j);r.a<r.c.c.length;)for(u=0,o=(a=Z0(BB(n0(r),11).g)).length;u<o;++u)(c=a[u]).d.i==e&&qy(TD(mMn(c,dgt)))&&(h=c.c,(s=BB(RX(n.b,h),10))||(hon(s=bXn(h,(QEn(),QCt),h.j,-1,null,null,h.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),h),VW(n.b,h,s),WB(t.a,s)),l=c.d,(f=BB(RX(n.b,l),10))||(hon(f=bXn(l,(QEn(),QCt),l.j,1,null,null,l.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),l),VW(n.b,l,f),WB(t.a,f)),SZ(i=W5(c),BB(xq(s.j,0),11)),MZ(i,BB(xq(f.j,0),11)),JIn(n.a,c,new L_(i,t,(ain(),qvt))),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)))}function TGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Label dummy switching",1),i=BB(mMn(t,(HXn(),Vdt)),227),pcn(t),r=j$n(t,i),n.a=x8(xNt,qQn,25,t.b.c.length,15,1),$Pn(),h=0,b=(u=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;h<b;++h)if(((c=u[h])==eht||c==Yst||c==nht)&&!BB(SN(r.a,c)?r.b[c.g]:null,15).dc()){Zcn(n,t);break}for(f=0,w=(o=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;f<w;++f)(c=o[f])==eht||c==Yst||c==nht||GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;s<l;++s)((c=a[s])==eht||c==Yst||c==nht)&&GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));n.a=null,HSn(e)}function MGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;switch(n.k.g){case 1:if(i=BB(mMn(n,(hWn(),dlt)),17),(e=BB(mMn(i,glt),74))?qy(TD(mMn(i,Clt)))&&(e=Jon(e)):e=new km,s=BB(mMn(n,hlt),11)){if(t<=(h=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;r5(e,h,e.a,e.a.a)}if(f=BB(mMn(n,flt),11)){if((l=Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;r5(e,l,e.c.b,e.c)}if(e.b>=2){for(a=BB(b3(o=spn(e,0)),8),u=BB(b3(o),8);u.a<t&&o.b!=o.d.c;)a=u,u=BB(b3(o),8);return a.b+(t-a.a)/(u.a-a.a)*(u.b-a.b)}break;case 3:switch(r=(c=BB(mMn(BB(xq(n.j,0),11),(hWn(),dlt)),11)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return Fjn(n).b}function SGn(n){var t,e,i,r,c,a,u,o,s,f;for(c=new Wb(n.d.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;)!qy(TD(mMn(a=BB(n0(u),10),(HXn(),Tdt))))||h3(hbn(a))?(r=new UV(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=ON(iM(tM(eM(new Wv,a),r),dst),n.a),IN(nM(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),t),n.a),o=new Dp,VW(n.e,t,o),(e=F3(new oz(ZL(fbn(a).a.Kc(),new h)))-F3(new oz(ZL(lbn(a).a.Kc(),new h))))<0?Uun(o,!0,(Ffn(),_Pt)):e>0&&Uun(o,!0,(Ffn(),FPt)),a.k==(uSn(),Mut)&&wV(o),VW(n.f,a,t)):((s=(i=BB(iY(hbn(a)),17)).c.i)==a&&(s=i.d.i),f=new rI(s,XR(B$(a.n),s.n)),VW(n.b,a,f))}function PGn(n,t,i){var r,c,a,u,o,s,h,f;switch(OTn(i,"Node promotion heuristic",1),n.g=t,yUn(n),n.q=BB(mMn(t,(HXn(),Sgt)),260),f=BB(mMn(n.g,Mgt),19).a,a=new hi,n.q.g){case 2:case 1:default:_Hn(n,a);break;case 3:for(n.q=(sNn(),Ovt),_Hn(n,a),s=0,o=new Wb(n.a);o.a<o.c.c.length;)u=BB(n0(o),19),s=e.Math.max(s,u.a);s>n.j&&(n.q=Tvt,_Hn(n,a));break;case 4:for(n.q=(sNn(),Ovt),_Hn(n,a),h=0,c=new Wb(n.b);c.a<c.c.c.length;)r=MD(n0(c)),h=e.Math.max(h,(kW(r),r));h>n.k&&(n.q=Pvt,_Hn(n,a));break;case 6:_Hn(n,new od(CJ(e.Math.ceil(n.f.length*f/100))));break;case 5:_Hn(n,new sd(CJ(e.Math.ceil(n.d*f/100))))}oDn(n,t),HSn(i)}function CGn(n,t,e){var i,r,c,a;this.j=n,this.e=qEn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?BB(xq(e,vW(this.o).p),214):null,r=BB(mMn(n,(hWn(),Zft)),21),this.g=r.Hc((bDn(),lft)),this.b=new Np,this.d=new wdn(this.e),a=BB(mMn(this.j,Slt),230),this.q=Han(t,a,this.e),this.k=new aZ(this),c=u6(Pun(Gk(jst,1),HWn,225,0,[this,this.d,this.k,this.q])),t!=(oin(),Omt)||qy(TD(mMn(n,(HXn(),xdt))))?t==Omt&&qy(TD(mMn(n,(HXn(),xdt))))?(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new prn(i,a,BB(this.q,402))):this.c=new vP(t,this):(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new G2(i,a,BB(this.q,402))),WB(c,this.c),CHn(c,this.e),this.s=wXn(this.k)}function IGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=(s=BB(iL(new wg(spn(new bg(t).a.d,0))),86))?BB(mMn(s,(qqn(),ckt)),86):null,r=1;s&&l;){for(a=0,v=0,e=s,i=l,c=0;c<r;c++)e=G8(e),i=G8(i),v+=Gy(MD(mMn(e,(qqn(),okt)))),a+=Gy(MD(mMn(i,okt)));if(p=Gy(MD(mMn(l,(qqn(),fkt)))),g=Gy(MD(mMn(s,fkt))),h=E5(s,l),0<(f=p+a+n.a+h-g-v)){for(u=t,o=0;u&&u!=i;)++o,u=BB(mMn(u,akt),86);if(!u)return;for(d=f/o,u=t;u!=i;)w=Gy(MD(mMn(u,fkt)))+f,hon(u,fkt,w),b=Gy(MD(mMn(u,okt)))+f,hon(u,okt,b),f-=d,u=BB(mMn(u,akt),86)}++r,l=(s=0==s.d.b?ZKn(new bg(t),r):BB(iL(new wg(spn(new bg(s).a.d,0))),86))?BB(mMn(s,ckt),86):null}}function OGn(n,t){var e,i,r,c,a,u,o,s,f;for(u=!0,r=0,o=n.f[t.p],s=t.o.b+n.n,e=n.c[t.p][2],c5(n.a,o,iln(BB(xq(n.a,o),19).a-1+e)),c5(n.b,o,Gy(MD(xq(n.b,o)))-s+e*n.e),++o>=n.i?(++n.i,WB(n.a,iln(1)),WB(n.b,s)):(i=n.c[t.p][1],c5(n.a,o,iln(BB(xq(n.a,o),19).a+1-i)),c5(n.b,o,Gy(MD(xq(n.b,o)))+s-i*n.e)),(n.q==(sNn(),Tvt)&&(BB(xq(n.a,o),19).a>n.j||BB(xq(n.a,o-1),19).a>n.j)||n.q==Pvt&&(Gy(MD(xq(n.b,o)))>n.k||Gy(MD(xq(n.b,o-1)))>n.k))&&(u=!1),c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)a=BB(U5(c),17).c.i,n.f[a.p]==o&&(r+=BB((f=OGn(n,a)).a,19).a,u=u&&qy(TD(f.b)));return n.f[t.p]=o,new rI(iln(r+=n.c[t.p][0]),(hN(),!!u))}function AGn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=new xp,u=new Np,rIn(n,i,n.d.fg(),u,l),rIn(n,r,n.d.gg(),u,l),n.b=.2*(g=BAn(wnn(new Rq(null,new w1(u,16)),new Sa)),p=BAn(wnn(new Rq(null,new w1(u,16)),new Pa)),e.Math.min(g,p)),a=0,o=0;o<u.c.length-1;o++)for(l1(o,u.c.length),s=BB(u.c[o],112),d=o+1;d<u.c.length;d++)a+=gHn(n,s,(l1(d,u.c.length),BB(u.c[d],112)));for(b=BB(mMn(t,(hWn(),Slt)),230),a>=2&&(v=QLn(u,!0,b),!n.e&&(n.e=new lg(n)),sgn(n.e,v,u,n.b)),iTn(u,b),czn(u),w=-1,f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),112),e.Math.abs(h.s-h.c)<lZn||(w=e.Math.max(w,h.o),n.d.dg(h,c,n.c));return n.d.a.a.$b(),w+1}function $Gn(n,t){var e,i;Gy(MD(mMn(t,(HXn(),ypt))))<2&&hon(t,ypt,2),BB(mMn(t,Udt),103)==(Ffn(),BPt)&&hon(t,Udt,Wln(t)),0==(e=BB(mMn(t,wpt),19)).a?hon(t,(hWn(),Slt),new sbn):hon(t,(hWn(),Slt),new C4(e.a)),null==TD(mMn(t,xgt))&&hon(t,xgt,(hN(),GI(mMn(t,Zdt))===GI((Mbn(),QPt)))),JT(new Rq(null,new w1(t.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(t.b,16)),new mt),new Kw(n)),i=new sGn(t),hon(t,(hWn(),Alt),i),h2(n.a),CU(n.a,(yMn(),Rat),BB(mMn(t,Gdt),246)),CU(n.a,Kat,BB(mMn(t,Pgt),246)),CU(n.a,_at,BB(mMn(t,qdt),246)),CU(n.a,Fat,BB(mMn(t,_gt),246)),CU(n.a,Bat,San(BB(mMn(t,Zdt),218))),aA(n.a,LXn(t)),hon(t,Mlt,$qn(n.a,t))}function LGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;return l=n.c[t],b=n.c[e],!((w=BB(mMn(l,(hWn(),clt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(uSn(),Put)&&b.k!=Put,v=(g=BB(mMn(l,rlt),10))!=(p=BB(mMn(b,rlt),10)),m=!!g&&g!=l||!!p&&p!=b,y=omn(l,(kUn(),sIt)),k=omn(b,SIt),m|=omn(l,SIt)||omn(b,sIt),d&&(m&&v||y||k))||l.k==(uSn(),Iut)&&b.k==Cut||b.k==(uSn(),Iut)&&l.k==Cut)&&(h=n.c[t],c=n.c[e],r=fjn(n.e,h,c,(kUn(),CIt)),o=fjn(n.i,h,c,oIt),TNn(n.f,h,c),s=Nsn(n.b,h,c)+BB(r.a,19).a+BB(o.a,19).a+n.f.d,u=Nsn(n.b,c,h)+BB(r.b,19).a+BB(o.b,19).a+n.f.b,n.a&&(f=BB(mMn(h,dlt),11),a=BB(mMn(c,dlt),11),s+=BB((i=qyn(n.g,f,a)).a,19).a,u+=BB(i.b,19).a),s>u)}function NGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(i=BB(mMn(n,(HXn(),ept)),98),u=n.f,a=n.d,o=u.a+a.b+a.c,s=0-a.d-n.c.b,f=u.b+a.d+a.a-n.c.b,h=new Np,l=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),10),i.g){case 1:case 2:case 3:_Nn(r);break;case 4:w=(b=BB(mMn(r,npt),8))?b.a:0,r.n.a=o*Gy(MD(mMn(r,(hWn(),Tlt))))-w,Jan(r,!0,!1);break;case 5:g=(d=BB(mMn(r,npt),8))?d.a:0,r.n.a=Gy(MD(mMn(r,(hWn(),Tlt))))-g,Jan(r,!0,!1),u.a=e.Math.max(u.a,r.n.a+r.o.a/2)}switch(BB(mMn(r,(hWn(),Qft)),61).g){case 1:r.n.b=s,h.c[h.c.length]=r;break;case 3:r.n.b=f,l.c[l.c.length]=r}}switch(i.g){case 1:case 2:Rfn(h,n),Rfn(l,n);break;case 3:Kfn(h,n),Kfn(l,n)}}function xGn(n,t){var e,i,r,c,a,u,o,s,h,f;for(h=new Np,f=new Lp,c=null,r=0,i=0;i<t.length;++i)switch(Rsn(c,e=t[i])&&(r=Cdn(n,f,h,Kmt,r)),Lx(e,(hWn(),rlt))&&(c=BB(mMn(e,rlt),10)),e.k.g){case 0:for(o=qA(KB(abn(e,(kUn(),sIt)),new xc));Zin(o);)a=BB(P7(o),11),n.d[a.p]=r++,h.c[h.c.length]=a;for(r=Cdn(n,f,h,Kmt,r),s=qA(KB(abn(e,SIt),new xc));Zin(s);)a=BB(P7(s),11),n.d[a.p]=r++,h.c[h.c.length]=a;break;case 3:abn(e,Rmt).dc()||(a=BB(abn(e,Rmt).Xb(0),11),n.d[a.p]=r++,h.c[h.c.length]=a),abn(e,Kmt).dc()||d3(f,e);break;case 1:for(u=abn(e,(kUn(),CIt)).Kc();u.Ob();)a=BB(u.Pb(),11),n.d[a.p]=r++,h.c[h.c.length]=a;abn(e,oIt).Jc(new ZP(f,e))}return Cdn(n,f,h,Kmt,r),h}function DGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=RQn,f=RQn,o=KQn,s=KQn,b=new Wb(t.i);b.a<b.c.c.length;)l=BB(n0(b),65),SA(c=BB(BB(RX(n.g,l.a),46).b,33),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),o=e.Math.max(o,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=BB(ZAn(n.c,(MMn(),bTt)),116),KUn(n.c,o-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),lMn(n.c,-h+w.b,-f+w.d),r=new AL(iQ(n.c));r.e!=r.i.gc();)u=cDn(i=BB(kpn(r),79),!0,!0),d=PMn(i),p=OMn(i),g=new xC(d.i+d.g/2,d.j+d.f/2),a=new xC(p.i+p.g/2,p.j+p.f/2),Ukn(v=XR(new xC(a.a,a.b),g),d.g,d.f),UR(g,v),Ukn(m=XR(new xC(g.a,g.b),a),p.g,p.f),UR(a,m),CA(u,g.a,g.b),PA(u,a.a,a.b)}function RGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;if(n.c=n.d,l=null==(b=TD(mMn(t,(HXn(),dpt))))||(kW(b),b),c=BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft)),e=!((r=BB(mMn(t,ept),98))==(QEn(),UCt)||r==WCt||r==XCt),!l||!e&&c)f=new Jy(Pun(Gk(jut,1),JZn,37,0,[t]));else{for(h=new Wb(t.a);h.a<h.c.c.length;)BB(n0(h),10).p=0;for(f=new Np,s=new Wb(t.a);s.a<s.c.c.length;)if(i=L_n(n,BB(n0(s),10),null)){for(qan(o=new min,t),hon(o,Xft,BB(i.b,21)),kQ(o.d,t.d),hon(o,Hgt,null),u=BB(i.a,15).Kc();u.Ob();)a=BB(u.Pb(),10),WB(o.a,a),a.a=o;f.Fc(o)}c&&(GI(mMn(t,Cdt))===GI((Bfn(),lut))?n.c=n.b:n.c=n.a)}return GI(mMn(t,Cdt))!==GI((Bfn(),wut))&&(SQ(),f.ad(new xt)),f}function KGn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,Q3n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Na),Y3n),nbn((hAn(),JOt))))),u2(n,Q3n,QJn,Okt),u2(n,Q3n,vZn,20),u2(n,Q3n,VJn,dZn),u2(n,Q3n,pZn,iln(1)),u2(n,Q3n,kZn,(hN(),!0)),u2(n,Q3n,X2n,mpn(Ekt)),u2(n,Q3n,PZn,mpn(Mkt)),u2(n,Q3n,BZn,mpn(Skt)),u2(n,Q3n,SZn,mpn(Pkt)),u2(n,Q3n,CZn,mpn(Tkt)),u2(n,Q3n,MZn,mpn(Ckt)),u2(n,Q3n,IZn,mpn(Akt)),u2(n,Q3n,X3n,mpn(Dkt)),u2(n,Q3n,W3n,mpn(Lkt))}function _Gn(n){n.q||(n.q=!0,n.p=kan(n,0),n.a=kan(n,1),Krn(n.a,0),n.f=kan(n,2),Krn(n.f,1),Rrn(n.f,2),n.n=kan(n,3),Rrn(n.n,3),Rrn(n.n,4),Rrn(n.n,5),Rrn(n.n,6),n.g=kan(n,4),Krn(n.g,7),Rrn(n.g,8),n.c=kan(n,5),Krn(n.c,7),Krn(n.c,8),n.i=kan(n,6),Krn(n.i,9),Krn(n.i,10),Krn(n.i,11),Krn(n.i,12),Rrn(n.i,13),n.j=kan(n,7),Krn(n.j,9),n.d=kan(n,8),Krn(n.d,3),Krn(n.d,4),Krn(n.d,5),Krn(n.d,6),Rrn(n.d,7),Rrn(n.d,8),Rrn(n.d,9),Rrn(n.d,10),n.b=kan(n,9),Rrn(n.b,0),Rrn(n.b,1),n.e=kan(n,10),Rrn(n.e,1),Rrn(n.e,2),Rrn(n.e,3),Rrn(n.e,4),Krn(n.e,5),Krn(n.e,6),Krn(n.e,7),Krn(n.e,8),Krn(n.e,9),Krn(n.e,10),Rrn(n.e,11),n.k=kan(n,11),Rrn(n.k,0),Rrn(n.k,1),n.o=jan(n,12),n.s=jan(n,13))}function FGn(n,t){t.dc()&&eH(n.j,!0,!0,!0,!0),Nfn(t,(kUn(),dIt))&&eH(n.j,!0,!0,!0,!1),Nfn(t,hIt)&&eH(n.j,!1,!0,!0,!0),Nfn(t,EIt)&&eH(n.j,!0,!0,!1,!0),Nfn(t,MIt)&&eH(n.j,!0,!1,!0,!0),Nfn(t,gIt)&&eH(n.j,!1,!0,!0,!1),Nfn(t,fIt)&&eH(n.j,!1,!0,!1,!0),Nfn(t,TIt)&&eH(n.j,!0,!1,!1,!0),Nfn(t,jIt)&&eH(n.j,!0,!1,!0,!1),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,bIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,lIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,kIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,mIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,vIt)&&eH(n.j,!0,!0,!0,!0)}function BGn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(c=new Np,s=new Wb(i);s.a<s.c.c.length;)if(a=null,(u=BB(n0(s),441)).f==(ain(),qvt))for(w=new Wb(u.e);w.a<w.c.c.length;)vW(g=(b=BB(n0(w),17)).d.i)==t?Stn(n,t,u,b,u.b,b.d):!e||wan(g,e)?GMn(n,t,u,i,b):((l=LHn(n,t,e,b,u.b,qvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l));else for(f=new Wb(u.e);f.a<f.c.c.length;)if(vW(d=(h=BB(n0(f),17)).c.i)==t)Stn(n,t,u,h,h.c,u.b);else{if(!e||wan(d,e))continue;(l=LHn(n,t,e,h,u.b,Hvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l)}for(o=new Wb(c);o.a<o.c.c.length;)u=BB(n0(o),441),-1!=E7(t.a,u.a,0)||WB(t.a,u.a),u.c&&(r.c[r.c.length]=u)}function HGn(n,t,e){var i,r,c,a,u,o,s,h;for(o=new Np,u=new Wb(t.a);u.a<u.c.c.length;)for(h=abn(BB(n0(u),10),(kUn(),oIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).g);r.a<r.c.c.length;)!b5(i=BB(n0(r),17))&&i.c.i.c==i.d.i.c||b5(i)||i.d.i.c!=e||(o.c[o.c.length]=i);for(a=ean(e.a).Kc();a.Ob();)for(h=abn(BB(a.Pb(),10),(kUn(),CIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).e);r.a<r.c.c.length;)if((b5(i=BB(n0(r),17))||i.c.i.c!=i.d.i.c)&&!b5(i)&&i.c.i.c==t){for(Px((s=new M2(o,o.c.length)).b>0),c=BB(s.a.Xb(s.c=--s.b),17);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,Px(s.b>0),c=BB(s.a.Xb(s.c=--s.b),17);s.b>0&&fW(s)}}function qGn(n,t,e){var i,r,c,a,u,o,s,h,f;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(i=Cfn((IPn(),Z$t),t).$k())return i.Aj().Nh().Ih(i,e);if(a=Cfn(Z$t,t).al()){if(null==e)return null;if((u=BB(e,15)).dc())return"";for(f=new Sk,c=u.Kc();c.Ob();)r=c.Pb(),cO(f,a.Aj().Nh().Ih(a,r)),f.a+=" ";return KO(f,f.a.length-1)}if(!(h=Cfn(Z$t,t).bl()).dc()){for(s=h.Kc();s.Ob();)if((o=BB(s.Pb(),148)).wj(e))try{if(null!=(f=o.Aj().Nh().Ih(o,e)))return f}catch(l){if(!cL(l=lun(l),102))throw Hp(l)}throw Hp(new _y("Invalid value: '"+e+"' for datatype :"+t.ne()))}return BB(t,834).Fj(),null==e?null:cL(e,172)?""+BB(e,172).a:tsn(e)==mtt?H$(IOt[0],BB(e,199)):Bbn(e)}function GGn(n){var t,i,r,c,a,u,o,s,h;for(s=new YT,u=new YT,c=new Wb(n);c.a<c.c.c.length;)(i=BB(n0(c),128)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&r5(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&r5(u,i,u.c.b,u.c);for(a=-1;0!=s.b;)for(t=new Wb((i=BB(tkn(s,0),128)).t);t.a<t.c.c.length;)(h=BB(n0(t),268).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&r5(s,h,s.c.b,s.c);if(a>-1){for(r=spn(u,0);r.b!=r.d.c;)(i=BB(b3(r),128)).v=a;for(;0!=u.b;)for(t=new Wb((i=BB(tkn(u,0),128)).i);t.a<t.c.c.length;)0==(o=BB(n0(t),268).a).r.a.gc()&&(o.v=e.Math.min(o.v,i.v-1),--o.u,0==o.u&&r5(u,o,u.c.b,u.c))}}function zGn(n,t,i,r,c){var a,u,o,s;return s=RQn,u=!1,a=!!(o=zBn(n,XR(new xC(t.a,t.b),n),UR(new xC(i.a,i.b),c),XR(new xC(r.a,r.b),i)))&&!(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n||e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n),(o=zBn(n,XR(new xC(t.a,t.b),n),i,c))&&((e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a?s=e.Math.min(s,lW(XR(o,i))):u=!0),(o=zBn(n,XR(new xC(t.a,t.b),n),r,c))&&(u||(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a)&&(s=e.Math.min(s,lW(XR(o,r)))),s}function UGn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,_Zn),FZn),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),gZn))),u2(n,_Zn,jZn,mpn(kat)),u2(n,_Zn,TZn,(hN(),!0)),u2(n,_Zn,PZn,mpn(Tat)),u2(n,_Zn,BZn,mpn(Mat)),u2(n,_Zn,SZn,mpn(Sat)),u2(n,_Zn,CZn,mpn(Eat)),u2(n,_Zn,MZn,mpn(Pat)),u2(n,_Zn,IZn,mpn(Cat)),u2(n,_Zn,NZn,mpn(yat)),u2(n,_Zn,DZn,mpn(vat)),u2(n,_Zn,RZn,mpn(mat)),u2(n,_Zn,KZn,mpn(jat)),u2(n,_Zn,xZn,mpn(pat))}function XGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Interactive crossing minimization",1),a=0,c=new Wb(n.b);c.a<c.c.c.length;)(i=BB(n0(c),29)).p=a++;for(d=new Rj((l=qEn(n)).length),CHn(new Jy(Pun(Gk(jst,1),HWn,225,0,[d])),l),w=0,a=0,r=new Wb(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Wb((i=BB(n0(r),29)).a);h.a<h.c.c.length;)for((o=BB(n0(h),10)).n.a>0&&(e+=o.n.a+o.o.a/2,++f),b=new Wb(o.j);b.a<b.c.c.length;)BB(n0(b),11).p=w++;for(f>0&&(e/=f),g=x8(xNt,qQn,25,i.a.c.length,15,1),u=0,s=new Wb(i.a);s.a<s.c.c.length;)(o=BB(n0(s),10)).p=u++,g[o.p]=MGn(o,e),o.k==(uSn(),Put)&&hon(o,(hWn(),plt),g[o.p]);SQ(),m$(i.a,new Gd(g)),r_n(d,l,a,!0),++a}HSn(t)}function WGn(n,t){var e,i,r,c,a,u,o,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=u&&r<=o)u<=r&&c<=o?i+=2:u<=r?(n.b[i]=o+1,a+=2):c<=o?(e[h++]=r,e[h++]=u-1,i+=2):(e[h++]=r,e[h++]=u-1,n.b[i]=o+1,a+=2);else{if(!(o<r))throw Hp(new dy("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}else kGn(n,t)}function VGn(n){var t,e,i,r,c,a,u;if(!n.A.dc()){if(n.A.Hc((mdn(),KIt))&&(BB(oV(n.b,(kUn(),sIt)),124).k=!0,BB(oV(n.b,SIt),124).k=!0,t=n.q!=(QEn(),WCt)&&n.q!=XCt,Nl(BB(oV(n.b,oIt),124),t),Nl(BB(oV(n.b,CIt),124),t),Nl(n.g,t),n.A.Hc(_It)&&(BB(oV(n.b,sIt),124).j=!0,BB(oV(n.b,SIt),124).j=!0,BB(oV(n.b,oIt),124).k=!0,BB(oV(n.b,CIt),124).k=!0,n.g.k=!0)),n.A.Hc(RIt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,u=n.B.Hc((n_n(),XIt)),c=0,a=(r=tpn()).length;c<a;++c)i=r[c],(e=BB(oV(n.i,i),306))&&(agn(i)?(e.j=!0,e.k=!0):(e.j=!u,e.k=!u));n.A.Hc(DIt)&&n.B.Hc((n_n(),UIt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function QGn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;for(e=new Wb(n.e.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),o=(f=n.i[i.p]).a.e,u=f.d.e,i.n.b=o,d=u-o-i.o.b,t=AHn(i),bvn(),h=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197),t&&(h==fvt||h==hvt)&&(i.o.b+=d),t&&(h==bvt||h==fvt||h==hvt)){for(b=new Wb(i.j);b.a<b.c.c.length;)l=BB(n0(b),11),(kUn(),bIt).Hc(l.j)&&(s=BB(RX(n.k,l),121),l.n.b=s.e-o);for(a=new Wb(i.b);a.a<a.c.c.length;)c=BB(n0(a),70),(w=BB(mMn(i,$gt),21)).Hc((n$n(),NCt))?c.n.b+=d:w.Hc(xCt)&&(c.n.b+=d/2);(h==fvt||h==hvt)&&abn(i,(kUn(),SIt)).Jc(new ag(d))}}function YGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(o=new H8(null,null)).a[1]=n.b,f=o;f.a[r];)s=r,u=l,l=f,f=f.a[r],r=(i=n.a.ue(t,f.d))<0?0:1,0==i&&(!e.c||cV(f.e,e.d))&&(a=f),f&&f.b||Vy(f.a[r])||(Vy(f.a[1-r])?l=l.a[s]=wrn(f,r):Vy(f.a[1-r])||(b=l.a[1-s])&&(Vy(b.a[1-s])||Vy(b.a[s])?(c=u.a[1]==l?1:0,Vy(b.a[s])?u.a[c]=r2(l,s):Vy(b.a[1-s])&&(u.a[c]=wrn(l,s)),f.b=u.a[c].b=!0,u.a[c].a[0].b=!1,u.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(bMn(n,o,a,h=new H8(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=o.a[1],n.b&&(n.b.b=!1),e.b}function JGn(n){var t,i,r,c,a,u,o,s,h,f,l,b;for(c=new Wb(n.a.a.b);c.a<c.c.c.length;)for(s=(r=BB(n0(c),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),r.a!=o.a&&(l=dA(n.a.d)?n.a.g.Oe(r,o):n.a.g.Pe(r,o),a=r.b.a+r.d.b+l-o.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),Z7(r,o)?(u=AN(new qv,n.d),t=(h=CJ(e.Math.ceil(o.b.a-r.b.a)))-(o.b.a-r.b.a),i=r,(f=f3(r).a)||(f=f3(o).a,t=-t,i=o),f&&(i.b.a-=t,f.n.a-=t),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,h)),1),u),n.c[r.a.d])),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,-h)),1),u),n.c[o.a.d]))):(b=1,(cL(r.g,145)&&cL(o.g,10)||cL(o.g,145)&&cL(r.g,10))&&(b=2),UNn(aM(cM(uM(rM(new Hv,CJ(a)),b),n.c[r.a.d]),n.c[o.a.d]))))}function ZGn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(i)for(r=-1,f=new M2(t,0);f.b<f.d.gc();){if(Px(f.b<f.d.gc()),o=BB(f.d.Xb(f.c=f.b++),10),null==(l=n.c[o.c.p][o.p].a)){for(u=r+1,a=new M2(t,f.b);a.b<a.d.gc();)if(null!=(b=wL(n,(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),10))).a)){kW(b),u=b;break}l=(r+u)/2,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=(kW(l),l),n.c[o.c.p][o.p].b=1}kW(l),r=l}else{for(c=0,h=new Wb(t);h.a<h.c.c.length;)o=BB(n0(h),10),null!=n.c[o.c.p][o.p].a&&(c=e.Math.max(c,Gy(n.c[o.c.p][o.p].a)));for(c+=2,s=new Wb(t);s.a<s.c.c.length;)o=BB(n0(s),10),null==n.c[o.c.p][o.p].a&&(l=H$n(n.i,24)*uYn*c-1,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=l,n.c[o.c.p][o.p].b=1)}}function nzn(){RO(BAt,new ts),RO(KAt,new ls),RO(qAt,new Es),RO(HAt,new Is),RO(GAt,new Os),RO(XAt,new As),RO(WAt,new $s),RO(HOt,new Ls),RO(BOt,new zo),RO(qOt,new Uo),RO(LOt,new Xo),RO(QAt,new Wo),RO(GOt,new Vo),RO(YAt,new Qo),RO(JAt,new Yo),RO(FAt,new Jo),RO(_At,new Zo),RO(X$t,new ns),RO(VAt,new es),RO(O$t,new is),RO(ktt,new rs),RO(Gk(NNt,1),new cs),RO(Ttt,new as),RO(Stt,new us),RO(mtt,new os),RO(_Nt,new ss),RO(Ptt,new hs),RO(uAt,new fs),RO(yAt,new bs),RO(oLt,new ws),RO($$t,new ds),RO(Ctt,new gs),RO(Att,new ps),RO($nt,new vs),RO(Rtt,new ms),RO(Nnt,new ys),RO(iLt,new ks),RO(FNt,new js),RO(_tt,new Ts),RO(Qtt,new Ms),RO(sAt,new Ss),RO(BNt,new Ps)}function tzn(n,t,e){var i,r,c,a,u,o,s,h,f;for(!e&&(e=Gun(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),o=u=new PD(rbn(fan(t.q.getTime()),r)),u.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,o=new PD(rbn(fan(t.q.getTime()),r))),h=new Ik,s=n.a.length,c=0;c<s;)if((i=fV(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&fV(n.a,a)==i;++a);aWn(h,i,a-c,u,o,e),c=a}else if(39==i){if(++c<s&&39==fV(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=fV(n.a,a);)++a;if(a>=s)throw Hp(new _y("Missing trailing '"));a+1<s&&39==fV(n.a,a+1)?++a:f=!0,oO(h,fx(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function ezn(n){var t,e,i,r,c,a,u,o;for(t=null,i=new Wb(n);i.a<i.c.c.length;)Gy(lL((e=BB(n0(i),233)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Np),t.c[t.c.length]=e);if(t)for(;0!=t.c.length;){if((e=BB(s6(t,0),233)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Np),c=new Wb(e.b);c.a<c.c.c.length;)if(zy(lL((r=BB(n0(c),233)).g,r.d[0]).a)==zy(lL(e.g,e.d[0]).a)){if(E7(n,r,0)>E7(n,e,0))return new rI(r,e)}else if(Gy(lL(r.g,r.d[0]).a)>Gy(lL(e.g,e.d[0]).a))return new rI(r,e);for(u=(!e.e&&(e.e=new Np),e.e).Kc();u.Ob();)!(a=BB(u.Pb(),233)).b&&(a.b=new Np),LZ(0,(o=a.b).c.length),MS(o.c,0,e),a.c==o.c.length&&(t.c[t.c.length]=a)}return null}function izn(n,t){var e,i,r,c,a,u;if(null==n)return zWn;if(null!=t.a.zc(n,t))return"[...]";for(e=new $an(FWn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&tsn(i).i)?!Array.isArray(i)||(u=vnn(i))>=14&&u<=16?cL(i,177)?b6(e,RCn(BB(i,177))):cL(i,190)?b6(e,JEn(BB(i,190))):cL(i,195)?b6(e,kSn(BB(i,195))):cL(i,2012)?b6(e,ZEn(BB(i,2012))):cL(i,48)?b6(e,DCn(BB(i,48))):cL(i,364)?b6(e,gIn(BB(i,364))):cL(i,832)?b6(e,xCn(BB(i,832))):cL(i,104)&&b6(e,NCn(BB(i,104))):t.a._b(i)?(e.a?oO(e.a,e.b):e.a=new lN(e.d),aO(e.a,"[...]")):b6(e,izn(een(i),new $q(t))):b6(e,null==i?zWn:Bbn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function rzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(w=qSn(cDn(t,!1,!1)),r&&(w=Jon(w)),g=Gy(MD(ZAn(t,(Epn(),pct)))),Px(0!=w.b),b=BB(w.a.a.c,8),h=BB(Dpn(w,1),8),w.b>2?(gun(s=new Np,new s1(w,1,w.b)),qan(d=new EAn(XXn(s,g+n.a)),t),i.c[i.c.length]=d):d=BB(RX(n.b,r?PMn(t):OMn(t)),266),u=PMn(t),r&&(u=OMn(t)),a=iPn(b,u),o=g+n.a,a.a?(o+=e.Math.abs(b.b-h.b),l=new xC(h.a,(h.b+b.b)/2)):(o+=e.Math.abs(b.a-h.a),l=new xC((h.a+b.a)/2,h.b)),VW(r?n.d:n.c,t,new Imn(d,a,l,o)),VW(n.b,t,d),!t.n&&(t.n=new eU(zOt,t,1,7)),f=new AL(t.n);f.e!=f.i.gc();)c=JRn(n,BB(kpn(f),137),!0,0,0),i.c[i.c.length]=c}function czn(n){var t,i,r,c,a,u,o,s,h;for(s=new Np,u=new Np,a=new Wb(n);a.a<a.c.c.length;)Vl(r=BB(n0(a),112),r.f.c.length),Ql(r,r.k.c.length),0==r.d&&(s.c[s.c.length]=r),0==r.i&&0==r.e.b&&(u.c[u.c.length]=r);for(i=-1;0!=s.c.length;)for(t=new Wb((r=BB(s6(s,0),112)).k);t.a<t.c.c.length;)Yl(h=BB(n0(t),129).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Vl(h,h.d-1),0==h.d&&(s.c[s.c.length]=h);if(i>-1){for(c=new Wb(u);c.a<c.c.c.length;)(r=BB(n0(c),112)).o=i;for(;0!=u.c.length;)for(t=new Wb((r=BB(s6(u,0),112)).f);t.a<t.c.c.length;)(o=BB(n0(t),129).a).e.b>0||(Yl(o,e.Math.min(o.o,r.o-1)),Ql(o,o.i-1),0==o.i&&(u.c[u.c.length]=o))}}function azn(n,t,e){var i,r,c,a,u;if(u=n.c,!t&&(t=L$t),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new nU(n,1,2,u,n.c),e?e.Ei(a):e=a),u!=t)if(cL(n.Cb,284))n.Db>>16==-10?e=BB(n.Cb,284).nk(t,e):n.Db>>16==-15&&(!t&&(gWn(),t=l$t),!u&&(gWn(),u=l$t),n.Cb.nh()&&(a=new N7(n.Cb,1,13,u,t,uvn(H7(BB(n.Cb,59)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,88))n.Db>>16==-23&&(cL(t,88)||(gWn(),t=d$t),cL(u,88)||(gWn(),u=d$t),n.Cb.nh()&&(a=new N7(n.Cb,1,10,u,t,uvn(a4(BB(n.Cb,26)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,444))for(!(c=BB(n.Cb,836)).b&&(c.b=new Tp(new xm)),r=new Mp(new usn(new Pb(c.b.a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,c),e);return e}function uzn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(a=qy(TD(ZAn(n,(HXn(),wgt)))),l=BB(ZAn(n,cpt),21),o=!1,s=!1,f=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));!(f.e==f.i.gc()||o&&s);){for(c=BB(kpn(f),118),u=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!c.d&&(c.d=new hK(_Ot,c,8,5)),c.d),(!c.e&&(c.e=new hK(_Ot,c,7,4)),c.e)])));dAn(r)&&(i=BB(U5(r),79),h=a&&QIn(i)&&qy(TD(ZAn(i,dgt))),e=bqn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),c)?n==JJ(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))):n==JJ(PTn(BB(Wtn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),0),82))),!((h||e)&&++u>1)););(u>0||l.Hc((lIn(),eIt))&&(!c.n&&(c.n=new eU(zOt,c,1,7)),c.n).i>0)&&(o=!0),u>1&&(s=!0)}o&&t.Fc((bDn(),lft)),s&&t.Fc((bDn(),bft))}function ozn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if((b=BB(ZAn(n,(sWn(),KSt)),21)).dc())return null;if(o=0,u=0,b.Hc((mdn(),KIt))){for(f=BB(ZAn(n,uPt),98),r=2,i=2,c=2,a=2,t=JJ(n)?BB(ZAn(JJ(n),bSt),103):BB(ZAn(n,bSt),103),h=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=BB(kpn(h),118),(l=BB(ZAn(s,wPt),61))==(kUn(),PIt)&&(l=OFn(s,t),Ypn(s,wPt,l)),f==(QEn(),XCt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}o=e.Math.max(r,c),u=e.Math.max(i,a)}return KUn(n,o,u,!0,!0)}function szn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(m=BB(P4(ytn(AV(new Rq(null,new w1(t.d,16)),new $d(i)),new Ld(i)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),l=DWn,f=_Vn,s=new Wb(t.b.j);s.a<s.c.c.length;)(o=BB(n0(s),11)).j==i&&(l=e.Math.min(l,o.p),f=e.Math.max(f,o.p));if(l==DWn)for(u=0;u<m.gc();u++)g9(BB(m.Xb(u),101),i,u);else for(Zq(y=x8(ANt,hQn,25,c.length,15,1),y.length),v=m.Kc();v.Ob();){for(p=BB(v.Pb(),101),a=BB(RX(n.b,p),177),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,k=new Rv,b=0;b<c.length;b++)c[w][b]&&TU(k,iln(y[b]));for(;FT(k,iln(h));)++h}for(g9(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(y[p.i.c]=h)}}function hzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(c=null,r=new Wb(t.a);r.a<r.c.c.length;)AHn(i=BB(n0(r),10))?(h=new GV(i,!0,o=AN(oM(new qv,i),n.f),s=AN(oM(new qv,i),n.f)),f=i.o.b,bvn(),b=1e4,(l=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197))==hvt&&(b=1),w=UNn(aM(cM(rM(uM(new Hv,b),CJ(e.Math.ceil(f))),o),s)),l==fvt&&TU(n.d,w),O_n(n,ean(abn(i,(kUn(),CIt))),h),O_n(n,abn(i,oIt),h),a=h):(d=AN(oM(new qv,i),n.f),JT(AV(new Rq(null,new w1(i.j,16)),new Bc),new tC(n,d)),a=new GV(i,!1,d,d)),n.i[i.p]=a,c&&(u=c.c.d.a+K$(n.n,c.c,i)+i.d.d,c.b||(u+=c.c.o.b),UNn(aM(cM(uM(rM(new Hv,CJ(e.Math.ceil(u))),0),c.d),a.a))),c=a}function fzn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g;for(OTn(t,"Label dummy insertions",1),b=new Np,u=Gy(MD(mMn(n,(HXn(),jpt)))),f=Gy(MD(mMn(n,Spt))),l=BB(mMn(n,Udt),103),w=new Wb(n.a);w.a<w.c.c.length;)for(a=new oz(ZL(lbn(BB(n0(w),10)).a.Kc(),new h));dAn(a);)if((c=BB(U5(a),17)).c.i!=c.d.i&&tL(c.b,nst)){for(i=oLn(n,c,g=Etn(c),d=sx(c.b.c.length)),b.c[b.c.length]=i,r=i.o,o=new M2(c.b,0);o.b<o.d.gc();)Px(o.b<o.d.gc()),GI(mMn(s=BB(o.d.Xb(o.c=o.b++),70),Ydt))===GI((Rtn(),zPt))&&(l==(Ffn(),HPt)||l==KPt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),d.c[d.c.length]=s,fW(o));l==(Ffn(),HPt)||l==KPt?(r.a-=f,r.b+=u+g):r.b+=u-f+g}gun(n.a,b),HSn(t)}function lzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(l=XDn(n,t,a=new dOn(t)),w=e.Math.max(Gy(MD(mMn(t,(HXn(),agt)))),1),f=new Wb(l.a);f.a<f.c.c.length;)h=BB(n0(f),46),s=Bgn(BB(h.a,8),BB(h.b,8),w),zH(i,new xC(s.c,s.d)),zH(i,_x(new xC(s.c,s.d),s.b,0)),zH(i,_x(new xC(s.c,s.d),0,s.a)),zH(i,_x(new xC(s.c,s.d),s.b,s.a));switch(b=a.d,o=Bgn(BB(l.b.a,8),BB(l.b.b,8),w),b==(kUn(),CIt)||b==oIt?(r.c[b.g]=e.Math.min(r.c[b.g],o.d),r.b[b.g]=e.Math.max(r.b[b.g],o.d+o.a)):(r.c[b.g]=e.Math.min(r.c[b.g],o.c),r.b[b.g]=e.Math.max(r.b[b.g],o.c+o.b)),c=KQn,u=a.c.i.d,b.g){case 4:c=u.c;break;case 2:c=u.b;break;case 1:c=u.a;break;case 3:c=u.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function bzn(n){var t,e,i,r;if(-1!=(t=GO(e=null!=n.D?n.D:n.B,YTn(91)))){i=e.substr(0,t),r=new Sk;do{r.a+="["}while(-1!=(t=lx(e,91,++t)));mK(i,$Wn)?r.a+="Z":mK(i,S9n)?r.a+="B":mK(i,P9n)?r.a+="C":mK(i,C9n)?r.a+="D":mK(i,I9n)?r.a+="F":mK(i,O9n)?r.a+="I":mK(i,A9n)?r.a+="J":mK(i,$9n)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}}else if(-1==GO(e,YTn(46))){if(mK(e,$Wn))return $Nt;if(mK(e,S9n))return NNt;if(mK(e,P9n))return ONt;if(mK(e,C9n))return xNt;if(mK(e,I9n))return DNt;if(mK(e,O9n))return ANt;if(mK(e,A9n))return LNt;if(mK(e,$9n))return RNt}return null}function wzn(n,t,e){var i,r,c,a,u,o,s,h;for(qan(s=new $vn(e),t),hon(s,(hWn(),dlt),t),s.o.a=t.g,s.o.b=t.f,s.n.a=t.i,s.n.b=t.j,WB(e.a,s),VW(n.a,t,s),(0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i||qy(TD(ZAn(t,(HXn(),wgt)))))&&hon(s,_ft,(hN(),!0)),o=BB(mMn(e,Zft),21),(h=BB(mMn(s,(HXn(),ept)),98))==(QEn(),YCt)?hon(s,ept,QCt):h!=QCt&&o.Fc((bDn(),dft)),i=BB(mMn(e,Udt),103),u=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));u.e!=u.i.gc();)qy(TD(ZAn(a=BB(kpn(u),118),Ggt)))||Zzn(n,a,s,o,i,h);for(c=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));c.e!=c.i.gc();)!qy(TD(ZAn(r=BB(kpn(c),137),Ggt)))&&r.a&&WB(s.b,Hhn(r));return qy(TD(mMn(s,Tdt)))&&o.Fc((bDn(),hft)),qy(TD(mMn(s,bgt)))&&(o.Fc((bDn(),wft)),o.Fc(bft),hon(s,ept,QCt)),s}function dzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;u=BB(RX(t.c,n),459),g=t.a.c,o=t.a.c+t.a.b,a=(E=u.f)<(T=u.a),b=new xC(g,E),p=new xC(o,T),w=new xC(r=(g+o)/2,E),v=new xC(r,T),c=eNn(n,E,T),y=g1(t.B),k=new xC(r,c),j=g1(t.D),e=lon(Pun(Gk(PMt,1),sVn,8,0,[y,k,j])),f=!1,(d=t.B.i)&&d.c&&u.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(cNn(i=ion(BB(xq(d.c.a,h),10)),y,e[0])||Bz(i,y,e[0]))):f=!0),l=!1,(m=t.D.i)&&m.c&&u.e&&(a&&m.p>0||!a&&m.p<m.c.a.c.length-1?(h=m.p,a?--h:++h,l=!(cNn(i=ion(BB(xq(m.c.a,h),10)),e[0],j)||Bz(i,e[0],j))):l=!0),f&&l&&DH(n.a,k),f||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[b,w])),l||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[v,p]))}function gzn(n,t){var e,i,r,c,a,u,o;if(cL(n.Ug(),160)?(gzn(BB(n.Ug(),160),t),t.a+=" > "):t.a+="Root ",mK((e=n.Tg().zb).substr(0,3),"Elk")?oO(t,e.substr(3)):t.a+=""+e,r=n.zg())oO((t.a+=" ",t),r);else if(cL(n,354)&&(o=BB(n,137).a))oO((t.a+=" ",t),o);else{for(c=new AL(n.Ag());c.e!=c.i.gc();)if(o=BB(kpn(c),137).a)return void oO((t.a+=" ",t),o);if(cL(n,352)&&(!(i=BB(n,79)).b&&(i.b=new hK(KOt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new hK(KOt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new cx((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=FWn),gzn(BB(kpn(a),160),t);for(t.a+=e1n,u=new cx((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c));u.e!=u.i.gc();)u.e>0&&(t.a+=FWn),gzn(BB(kpn(u),160),t);t.a+=")"}}}function pzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(c=BB(mMn(n,(hWn(),dlt)),79)){for(i=n.a,UR(r=new wA(e),$jn(n)),wan(n.d.i,n.c.i)?(l=n.c,XR(f=Aon(Pun(Gk(PMt,1),sVn,8,0,[l.n,l.a])),e)):f=g1(n.c),r5(i,f,i.a,i.a.a),b=g1(n.d),null!=mMn(n,Rlt)&&UR(b,BB(mMn(n,Rlt),8)),r5(i,b,i.c.b,i.c),Ztn(i,r),Lin(a=cDn(c,!0,!0),BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82)),Nin(a,BB(Wtn((!c.c&&(c.c=new hK(KOt,c,5,8)),c.c),0),82)),VFn(i,a),h=new Wb(n.b);h.a<h.c.c.length;)s=BB(n0(h),70),Sen(u=BB(mMn(s,dlt),137),s.o.a),Men(u,s.o.b),SA(u,s.n.a+r.a,s.n.b+r.b),Ypn(u,(Irn(),tst),TD(mMn(s,tst)));(o=BB(mMn(n,(HXn(),vgt)),74))?(Ztn(o,r),Ypn(c,vgt,o)):Ypn(c,vgt,null),t==(Mbn(),JPt)?Ypn(c,Zdt,JPt):Ypn(c,Zdt,null)}}function vzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(b=t.c.length,l=0,f=new Wb(n.b);f.a<f.c.c.length;)if(0!=(p=(h=BB(n0(f),29)).a).c.length){for(s=0,v=null,r=BB(n0(g=new Wb(p)),10),c=null;r;){if((c=BB(xq(t,r.p),257)).c>=0){for(o=null,u=new M2(h.a,s+1);u.b<u.d.gc()&&(Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),10),!((o=BB(xq(t,a.p),257)).d==c.d&&o.c<c.c));)o=null;o&&(v&&(c5(i,r.p,iln(BB(xq(i,r.p),19).a-1)),BB(xq(e,v.p),15).Mc(c)),c=wTn(c,r,b++),t.c[t.c.length]=c,WB(e,new Np),v?(BB(xq(e,v.p),15).Fc(c),WB(i,iln(1))):WB(i,iln(0)))}w=null,g.a<g.c.c.length&&(w=BB(n0(g),10),d=BB(xq(t,w.p),257),BB(xq(e,r.p),15).Fc(d),c5(i,w.p,iln(BB(xq(i,w.p),19).a+1))),c.d=l,c.c=s++,v=r,r=w}++l}}function mzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return o=n,h=XR(new xC(t.a,t.b),n),s=i,f=XR(new xC(r.a,r.b),i),l=o.a,g=o.b,w=s.a,v=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(m=f.b),h$(),rin(A3n),!(e.Math.abs(0-c)<=A3n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-v)*b),u=1/c*-(-(l-w)*m+(g-v)*d),rin(A3n),(e.Math.abs(0-a)<=A3n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:zO(isNaN(0),isNaN(a)))<0&&(rin(A3n),(e.Math.abs(a-1)<=A3n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:zO(isNaN(a),isNaN(1)))<0)&&(rin(A3n),(e.Math.abs(0-u)<=A3n||0==u||isNaN(0)&&isNaN(u)?0:0<u?-1:0>u?1:zO(isNaN(0),isNaN(u)))<0)&&(rin(A3n),(e.Math.abs(u-1)<=A3n||1==u||isNaN(u)&&isNaN(1)?0:u<1?-1:u>1?1:zO(isNaN(u),isNaN(1)))<0))}function yzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(f=new hW(new iw(n));f.b!=f.c.a.d;)for(u=BB((h=s9(f)).d,56),t=BB(h.e,56),d=0,y=(null==(a=u.Tg()).i&&qFn(a),a.i).length;d<y;++d)if(null==a.i&&qFn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).Ij()&&!s.Jj())if(cL(s,99))0==((o=BB(s,18)).Bb&h6n)&&(!(j=Cvn(o))||0==(j.Bb&h6n))&&mBn(n,o,u,t);else if(ZM(),BB(s,66).Oj()&&(e=BB((k=s)?BB(t,49).xh(k):null,153)))for(b=BB(u.ah(s),153),i=e.gc(),g=0,w=b.gc();g<w;++g)if(cL(l=b.il(g),99)){if(null==(r=lnn(n,m=b.jl(g)))&&null!=m){if(v=BB(l,18),!n.b||0!=(v.Bb&h6n)||Cvn(v))continue;r=m}if(!e.dl(l,r))for(p=0;p<i;++p)if(e.il(p)==l&&GI(e.jl(p))===GI(r)){e.ii(e.gc()-1,p),--i;break}}else e.dl(b.il(g),b.jl(g))}function kzn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;if(p=QBn(t,i,n.g),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),n.b)for(g=0;g<p.c.length;g++)l1(g,p.c.length),f=BB(p.c[g],200),0!=g&&(l1(g-1,p.c.length),ghn(f,(b=BB(p.c[g-1],200)).f+b.b+n.g)),mXn(g,p,i,n.g),Hkn(n,f),c.n&&a&&y0(c,o2(a),(Bsn(),uOt));else for(d=new Wb(p);d.a<d.c.c.length;)for(h=new Wb((w=BB(n0(d),200)).a);h.a<h.c.c.length;)xcn(v=new KJ((s=BB(n0(h),187)).s,s.t,n.g),s),WB(w.d,v);return zmn(n,p),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),m=e.Math.max(n.d,r.a-(u.b+u.c)),o=(l=e.Math.max(n.c,r.b-(u.d+u.a)))-n.c,n.e&&n.f&&(m/l<n.a?m=l*n.a:o+=m/n.a-l),n.e&&Odn(p,m,o),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),new eq(n.a,m,n.c+o,(YLn(),_Et))}function jzn(n){var t,i,r,c,a,u,o,s,h,f;for(n.j=x8(ANt,hQn,25,n.g,15,1),n.o=new Np,JT(wnn(new Rq(null,new w1(n.e.b,16)),new Wc),new ug(n)),n.a=x8($Nt,ZYn,25,n.b,16,1),$fn(new Rq(null,new w1(n.e.b,16)),new sg(n)),f=new Np,JT(AV(wnn(new Rq(null,new w1(n.e.b,16)),new Qc),new og(n)),new eC(n,f)),o=new Wb(f);o.a<o.c.c.length;)if(!((u=BB(n0(o),508)).c.length<=1))if(2!=u.c.length){if(!XEn(u)&&!NPn(u,new Vc))for(s=new Wb(u),r=null;s.a<s.c.c.length;)t=BB(n0(s),17),i=n.c[t.p],h=!r||s.a>=s.c.c.length?X3((uSn(),Cut),Put):X3((uSn(),Put),Put),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else zAn(u),AHn((l1(0,u.c.length),BB(u.c[0],17)).d.i)||WB(n.o,u)}function Ezn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(m=GB(n),o=new Np,s=(c=n.c.length)-1,h=c+1;0!=m.a.c;){for(;0!=e.b;)Px(0!=e.b),p=BB(Atn(e,e.a.a),112),$J(m.a,p),p.g=s--,NFn(p,t,e,i);for(;0!=t.b;)Px(0!=t.b),v=BB(Atn(t,t.a.a),112),$J(m.a,v),v.g=h++,NFn(v,t,e,i);for(u=_Vn,d=new Fb(new BR(new xN(new _b(m.a).a).b));aS(d.a.a);){if(w=BB(mx(d.a).cd(),112),!i&&w.b>0&&w.a<=0){o.c=x8(Ant,HWn,1,0,5,1),o.c[o.c.length]=w;break}(b=w.i-w.d)>=u&&(b>u&&(o.c=x8(Ant,HWn,1,0,5,1),u=b),o.c[o.c.length]=w)}0!=o.c.length&&(a=BB(xq(o,pvn(r,o.c.length)),112),$J(m.a,a),a.g=h++,NFn(a,t,e,i),o.c=x8(Ant,HWn,1,0,5,1))}for(g=n.c.length+1,l=new Wb(n);l.a<l.c.c.length;)(f=BB(n0(l),112)).g<c&&(f.g=f.g+g)}function Tzn(n,t){var e;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));if(!SS(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:Hmn(n);break;case 1:Con(n),Hmn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 2:switch(t.g){case 1:Con(n),RRn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 1:switch(t.g){case 2:Con(n),RRn(n);break;case 4:Con(n),nEn(n),Hmn(n);break;case 3:Con(n),nEn(n),Con(n),Hmn(n)}break;case 4:switch(t.g){case 2:nEn(n),Hmn(n);break;case 1:nEn(n),Con(n),Hmn(n);break;case 3:Con(n),RRn(n)}break;case 3:switch(t.g){case 2:Con(n),nEn(n),Hmn(n);break;case 1:Con(n),nEn(n),Con(n),Hmn(n);break;case 4:Con(n),RRn(n)}}return n}function Mzn(n,t){var e;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));if(!PC(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:Zon(n);break;case 1:Pon(n),Zon(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 2:switch(t.g){case 1:Pon(n),KRn(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 1:switch(t.g){case 2:Pon(n),KRn(n);break;case 4:Pon(n),tEn(n),Zon(n);break;case 3:Pon(n),tEn(n),Pon(n),Zon(n)}break;case 4:switch(t.g){case 2:tEn(n),Zon(n);break;case 1:tEn(n),Pon(n),Zon(n);break;case 3:Pon(n),KRn(n)}break;case 3:switch(t.g){case 2:Pon(n),tEn(n),Zon(n);break;case 1:Pon(n),tEn(n),Pon(n),Zon(n);break;case 4:Pon(n),KRn(n)}}return n}function Szn(n,t,i){var r,c,a,u,o,s,f,l;for(s=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new oz(ZL(dLn(o=BB(kpn(s),33)).a.Kc(),new h));dAn(c);){if(!(r=BB(U5(c),79)).b&&(r.b=new hK(KOt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new hK(KOt,r,5,8)),r.c.i<=1)))throw Hp(new ck("Graph must not contain hyperedges."));if(!nAn(r)&&o!=PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82)))for(qan(f=new IR,r),hon(f,(Mrn(),sat),r),Rl(f,BB(qI(AY(i.f,o)),144)),Kl(f,BB(RX(i,PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82))),144)),WB(t.c,f),u=new AL((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n));u.e!=u.i.gc();)qan(l=new m4(f,(a=BB(kpn(u),137)).a),a),hon(l,sat,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),_Bn(l),WB(t.d,l)}}function Pzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(EJ(l=new eUn(n),!(t==(Ffn(),HPt)||t==KPt)),f=l.a,b=new bm,Dtn(),u=0,s=(c=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;u<s;++u)i=c[u],(h=fL(f,Git,i))&&(b.d=e.Math.max(b.d,h.Re()));for(a=0,o=(r=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;a<o;++a)i=r[a],(h=fL(f,Uit,i))&&(b.a=e.Math.max(b.a,h.Re()));for(p=0,m=(d=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;p<m;++p)(h=fL(f,d[p],Git))&&(b.b=e.Math.max(b.b,h.Se()));for(g=0,v=(w=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;g<v;++g)(h=fL(f,w[g],Uit))&&(b.c=e.Math.max(b.c,h.Se()));return b.d>0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function Czn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(b=i.d,l=i.c,u=(a=new xC(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Wb(n.a);h.a<h.c.c.length;)if((o=BB(n0(h),10)).k==(uSn(),Mut)){switch(r=BB(mMn(o,(hWn(),Qft)),61),c=BB(mMn(o,Yft),8),f=o.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==(QEn(),WCt)?(w=Gy(MD(mMn(o,Tlt))),f.b=a.b*w-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0)):t==XCt&&(f.b=Gy(MD(mMn(o,Tlt)))-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0))}u=e.Math.max(u,d)}for(i.f.b+=u-a.b,s=new Wb(n.a);s.a<s.c.c.length;)if((o=BB(n0(s),10)).k==(uSn(),Mut))switch(r=BB(mMn(o,(hWn(),Qft)),61),f=o.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function Izn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(r=BB(mMn(n,(qqn(),skt)),33),o=DWn,s=DWn,a=_Vn,u=_Vn,k=spn(n.b,0);k.b!=k.d.c;)w=(m=BB(b3(k),86)).e,d=m.f,o=e.Math.min(o,w.a-d.a/2),s=e.Math.min(s,w.b-d.b/2),a=e.Math.max(a,w.a+d.a/2),u=e.Math.max(u,w.b+d.b/2);for(l=new xC((b=BB(ZAn(r,(CAn(),Ikt)),116)).b-o,b.d-s),y=spn(n.b,0);y.b!=y.d.c;)cL(f=mMn(m=BB(b3(y),86),skt),239)&&SA(c=BB(f,33),(h=UR(m.e,l)).a-c.g/2,h.b-c.f/2);for(v=spn(n.a,0);v.b!=v.d.c;)p=BB(b3(v),188),(i=BB(mMn(p,skt),79))&&(r5(t=p.a,g=new wA(p.b.e),t.a,t.a.a),r5(t,j=new wA(p.c.e),t.c.b,t.c),ZMn(g,BB(Dpn(t,1),8),p.b.f),ZMn(j,BB(Dpn(t,t.b-2),8),p.c.f),VFn(t,cDn(i,!0,!0)));KUn(r,a-o+(b.b+b.c),u-s+(b.d+b.a),!1,!1)}function Ozn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(yR(o=new M2(s=n.b,0),new HX(n)),g=!1,c=1;o.b<o.d.gc();){for(Px(o.b<o.d.gc()),u=BB(o.d.Xb(o.c=o.b++),29),l1(c,s.c.length),b=BB(s.c[c],29),d=(w=a0(u.a)).c.length,l=new Wb(w);l.a<l.c.c.length;)PZ(h=BB(n0(l),10),b);if(g){for(f=W1(new fy(w),0);f.c.Sb();)for(r=new Wb(a0(fbn(h=BB(w5(f),10))));r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0),hon(n,(hWn(),qft),(hN(),!0)),e=iGn(n,i,d),t=BB(mMn(h,Rft),305),p=BB(xq(e,e.c.length-1),17),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(l1(0,w.c.length),BB(w.c[0],10).k==(uSn(),Tut)&&(g=!0,c=-1));++c}for(a=new M2(n.b,0);a.b<a.d.gc();)Px(a.b<a.d.gc()),0==BB(a.d.Xb(a.c=a.b++),29).a.c.length&&fW(a)}function Azn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=BB(BB(h6(n.r,t),21),84)).gc()<=2||t==(kUn(),oIt)||t==(kUn(),CIt))JUn(n,t);else{for(g=n.u.Hc((lIn(),cIt)),i=t==(kUn(),sIt)?(Dan(),Rrt):(Dan(),Nrt),v=t==sIt?(G7(),irt):(G7(),crt),r=Zk(H_(i),n.s),p=t==sIt?RQn:KQn,h=f.Kc();h.Ob();)!(o=BB(h.Pb(),111)).c||o.c.d.c.length<=0||(d=o.b.rf(),w=o.e,(b=(l=o.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(u=l.n,l.e.b+u.d+u.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,OY(v,uJn),l.f=v,l9(l,(J9(),Jit)),WB(r.d,new xG(b,kln(r,b))),p=t==sIt?e.Math.min(p,w.b):e.Math.max(p,w.b+o.b.rf().b));for(p+=t==sIt?-n.t:n.t,Pwn((r.e=p,r)),s=f.Kc();s.Ob();)!(o=BB(s.Pb(),111)).c||o.c.d.c.length<=0||((b=o.c.i).c-=o.e.a,b.d-=o.e.b)}}function $zn(n,t,i){var r;if(OTn(i,"StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=RQn,n.g=KQn,n.d=Gy(MD(mMn(t,(HXn(),ypt)))),zpn(n),PAn(n),SAn(n),xjn(n),ddn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=_vn(n),r=new HX(n.c),WB(n.c.b,r),n.r=a0(n.p),n.n=TJ(n.k,n.k.length);0!=n.r.c.length;)n.o=zhn(n),!n.o||Ton(n)&&0!=n.b.a.gc()?(xEn(n,r),r=new HX(n.c),WB(n.c.b,r),Frn(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Ton(n)?(n.c.b.c=x8(Ant,HWn,1,0,5,1),r=new HX(n.c),WB(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=a0(n.p),n.n=TJ(n.k,n.k.length)):(PZ(n.o,r),y7(n.r,n.o),TU(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c=x8(Ant,HWn,1,0,5,1),JPn(t.b),HSn(i)}else HSn(i)}function Lzn(n){var t,i,r,c;for(JT(AV(new Rq(null,new w1(n.a.b,16)),new yr),new kr),fEn(n),JT(AV(new Rq(null,new w1(n.a.b,16)),new jr),new Er),n.c==(Mbn(),JPt)&&(JT(AV(wnn(new Rq(null,new w1(new Cb(n.f),1)),new Tr),new Mr),new Md(n)),JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Pd(n))),c=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),57),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);UR(kO(n.d.c),qx(new xC(c.a,c.b))),UR(kO(n.d.f),XR(new xC(t.a,t.b),c)),oNn(n,c,t),$U(n.f),$U(n.b),$U(n.g),$U(n.e),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.d=null}function Nzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(i=new Np,w=new Wb(t.a);w.a<w.c.c.length;)if((l=(b=BB(n0(w),10)).e)&&(gun(i,Nzn(n,l,b)),EGn(n,l,b),BB(mMn(l,(hWn(),Zft)),21).Hc((bDn(),lft))))for(p=BB(mMn(b,(HXn(),ept)),98),f=BB(mMn(b,cpt),174).Hc((lIn(),eIt)),g=new Wb(b.j);g.a<g.c.c.length;)for(d=BB(n0(g),11),(r=BB(RX(n.b,d),10))||(hon(r=bXn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new Gj,d.o,BB(mMn(l,Udt),103),l),dlt,d),VW(n.b,d,r),WB(l.a,r)),c=BB(xq(r.j,0),11),s=new Wb(d.f);s.a<s.c.c.length;)o=BB(n0(s),70),(a=new qj).o.a=o.o.a,a.o.b=o.o.b,WB(c.f,a),f||(v=d.j,h=0,Hz(BB(mMn(b,cpt),21))&&(h=$In(o.n,o.o,d.o,0,v)),p==(QEn(),QCt)||(kUn(),bIt).Hc(v)?a.o.a=h:a.o.b=h);return BGn(n,t,e,i,u=new Np),e&&Cqn(n,t,e,u),u}function xzn(n,t,e){var i,r,c,a,u,o,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Wb(t.j);h.a<h.c.c.length;)for(s=BB(n0(h),11),o=(e?new Hw(s):new Gw(s)).Kc();o.Ob();)(a=(u=BB(o.Pb(),11)).i).c==t.c?a!=t&&(xzn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[u.p],++n.c[t.c.p][t.p].b);if(c=BB(mMn(t,(hWn(),xft)),15))for(r=c.Kc();r.Ob();)i=BB(r.Pb(),10),t.c==i.c&&(xzn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=H$n(n.i,24)*uYn*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function Dzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(l=new Wb(n);l.a<l.c.c.length;){for(nx((f=BB(n0(l),10)).n),nx(f.o),V6(f.f),VRn(f),aRn(f),w=new Wb(f.j);w.a<w.c.c.length;){for(nx((b=BB(n0(w),11)).n),nx(b.a),nx(b.o),qCn(b,amn(b.j)),(r=BB(mMn(b,(HXn(),ipt)),19))&&hon(b,ipt,iln(-r.a)),i=new Wb(b.g);i.a<i.c.c.length;){for(t=spn((e=BB(n0(i),17)).a,0);t.b!=t.d.c;)nx(BB(b3(t),8));if(a=BB(mMn(e,vgt),74))for(c=spn(a,0);c.b!=c.d.c;)nx(BB(b3(c),8));for(s=new Wb(e.b);s.a<s.c.c.length;)nx((u=BB(n0(s),70)).n),nx(u.o)}for(h=new Wb(b.f);h.a<h.c.c.length;)nx((u=BB(n0(h),70)).n),nx(u.o)}for(f.k==(uSn(),Mut)&&(hon(f,(hWn(),Qft),amn(BB(mMn(f,Qft),61))),wxn(f)),o=new Wb(f.b);o.a<o.c.c.length;)VRn(u=BB(n0(o),70)),nx(u.o),nx(u.n)}}function Rzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(n.e=t,u=nOn(t),m=new Np,i=new Wb(u);i.a<i.c.c.length;){for(e=BB(n0(i),15),y=new Np,m.c[m.c.length]=y,o=new Rv,l=e.Kc();l.Ob();){for(c=JRn(n,f=BB(l.Pb(),33),!0,0,0),y.c[y.c.length]=c,new xC(b=f.i,w=f.j),!f.n&&(f.n=new eU(zOt,f,1,7)),h=new AL(f.n);h.e!=h.i.gc();)r=JRn(n,BB(kpn(h),137),!1,b,w),y.c[y.c.length]=r;for(!f.c&&(f.c=new eU(XOt,f,9,9)),g=new AL(f.c);g.e!=g.i.gc();)for(a=JRn(n,d=BB(kpn(g),118),!1,b,w),y.c[y.c.length]=a,p=d.i+b,v=d.j+w,!d.n&&(d.n=new eU(zOt,d,1,7)),s=new AL(d.n);s.e!=s.i.gc();)r=JRn(n,BB(kpn(s),137),!1,p,v),y.c[y.c.length]=r;Frn(o,JQ(Wen(Pun(Gk(xnt,1),HWn,20,0,[dLn(f),wLn(f)]))))}ULn(n,o,y)}return n.f=new _j(m),qan(n.f,t),n.f}function Kzn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;null==(w=RX(n.e,i))&&(s=BB(w=new py,183),o=new GX(t+"_s"+r),rtn(s,q6n,o)),nW(e,b=BB(w,183)),qQ(g=new py,"x",i.j),qQ(g,"y",i.k),rtn(b,U6n,g),qQ(f=new py,"x",i.b),qQ(f,"y",i.c),rtn(b,"endPoint",f),!WE((!i.a&&(i.a=new $L(xOt,i,5)),i.a))&&(c=new Wg(h=new Cl),e5((!i.a&&(i.a=new $L(xOt,i,5)),i.a),c),rtn(b,D6n,h)),!!Svn(i)&&cMn(n.a,b,K6n,RPn(n,Svn(i))),!!Pvn(i)&&cMn(n.a,b,R6n,RPn(n,Pvn(i))),!(0==(!i.e&&(i.e=new hK(FOt,i,10,9)),i.e).i)&&(a=new SI(n,l=new Cl),e5((!i.e&&(i.e=new hK(FOt,i,10,9)),i.e),a),rtn(b,F6n,l)),0!=(!i.g&&(i.g=new hK(FOt,i,9,10)),i.g).i&&(u=new PI(n,d=new Cl),e5((!i.g&&(i.g=new hK(FOt,i,9,10)),i.g),u),rtn(b,_6n,d))}function _zn(n){var t,i,r,c,a,u,o;for(qD(),r=n.f.n,u=EX(n.r).a.nc();u.Ob();){if(c=0,(a=BB(u.Pb(),111)).b.Xe((sWn(),aPt))&&(c=Gy(MD(a.b.We(aPt))))<0)switch(a.b.Hf().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(Hz(n.u))switch(t=vcn(a.b,c),o=!BB(n.e.We(qSt),174).Hc((n_n(),HIt)),i=!1,a.b.Hf().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),o&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),o&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),o&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),o&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function Fzn(n){var t,e,i,r,c,a,u,o,s,h,f;for(s=new Wb(n);s.a<s.c.c.length;){switch(o=BB(n0(s),10),c=null,(a=BB(mMn(o,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),c=$ht;break;case 3:case 4:Jun(),c=Oht}if(c)hon(o,(hWn(),Gft),(Jun(),$ht)),c==Oht?RNn(o,a,(ain(),Hvt)):c==$ht&&RNn(o,a,(ain(),qvt));else if(vA(BB(mMn(o,ept),98))&&0!=o.j.c.length){for(t=!0,f=new Wb(o.j);f.a<f.c.c.length;){if(!((h=BB(n0(f),11)).j==(kUn(),oIt)&&h.e.c.length-h.g.c.length>0||h.j==CIt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Wb(h.g);r.a<r.c.c.length;)if(e=BB(n0(r),17),(u=BB(mMn(e.d.i,kgt),163))==(Tbn(),Blt)||u==Hlt){t=!1;break}for(i=new Wb(h.e);i.a<i.c.c.length;)if(e=BB(n0(i),17),(u=BB(mMn(e.c.i,kgt),163))==(Tbn(),_lt)||u==Flt){t=!1;break}}t&&RNn(o,a,(ain(),Gvt))}}}function Bzn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(E=0,w=0,l=new Wb(t.e);l.a<l.c.c.length;){for(f=BB(n0(l),10),b=0,o=0,s=i?BB(mMn(f,Xmt),19).a:_Vn,v=r?BB(mMn(f,Wmt),19).a:_Vn,h=e.Math.max(s,v),y=new Wb(f.j);y.a<y.c.c.length;){if(m=BB(n0(y),11),k=f.n.b+m.n.b+m.a.b,r)for(u=new Wb(m.g);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).d).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o));if(i)for(u=new Wb(m.e);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).c).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o))}o>0&&(E+=b/o,++w)}w>0?(t.a=c*E/w,t.g=w):(t.a=0,t.g=0)}function Hzn(n,t){var e,i,r,c,a,u,o,s,h,f;for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(u=new Wb(BB(n0(i),29).a);u.a<u.c.c.length;)a=BB(n0(u),10),t.j[a.p]=a,t.i[a.p]=t.o==(oZ(),cyt)?KQn:RQn;for($U(n.c),c=n.a.b,t.c==(gJ(),nyt)&&(c=cL(c,152)?o6(BB(c,152)):cL(c,131)?BB(c,131).a:cL(c,54)?new fy(c):new CT(c)),R9(n.e,t,n.b),yS(t.p,null),r=c.Kc();r.Ob();)for(o=BB(r.Pb(),29).a,t.o==(oZ(),cyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),f=o.Kc();f.Ob();)h=BB(f.Pb(),10),t.g[h.p]==h&&oXn(n,h,t);for(Hqn(n,t),e=c.Kc();e.Ob();)for(f=new Wb(BB(e.Pb(),29).a);f.a<f.c.c.length;)h=BB(n0(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=Gy(t.i[t.j[h.p].p]),(t.o==(oZ(),cyt)&&s>KQn||t.o==ryt&&s<RQn)&&(t.p[h.p]=Gy(t.p[h.p])+s));n.e.cg()}function qzn(n,t,e,i){var r,c,a,u,o;return pNn(u=new eUn(t),i),r=!0,n&&n.Xe((sWn(),bSt))&&(r=(c=BB(n.We((sWn(),bSt)),103))==(Ffn(),BPt)||c==_Pt||c==FPt),oRn(u,!1),Otn(u.e.wf(),new $_(u,!1,r)),LJ(u,u.f,(Dtn(),Git),(kUn(),sIt)),LJ(u,u.f,Uit,SIt),LJ(u,u.g,Git,CIt),LJ(u,u.g,Uit,oIt),Bpn(u,sIt),Bpn(u,SIt),hV(u,oIt),hV(u,CIt),qD(),(a=u.A.Hc((mdn(),DIt))&&u.B.Hc((n_n(),UIt))?ndn(u):null)&&rj(u.a,a),_zn(u),ryn(u),cyn(u),VGn(u),MKn(u),mkn(u),_gn(u,sIt),_gn(u,SIt),CRn(u),PHn(u),e?(Gbn(u),ykn(u),_gn(u,oIt),_gn(u,CIt),o=u.B.Hc((n_n(),XIt)),MCn(u,o,sIt),MCn(u,o,SIt),SCn(u,o,oIt),SCn(u,o,CIt),JT(new Rq(null,new w1(new Ob(u.i),0)),new In),JT(AV(new Rq(null,EX(u.r).a.oc()),new On),new An),BEn(u),u.e.uf(u.o),JT(new Rq(null,EX(u.r).a.oc()),new Ln),u.o):u.o}function Gzn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),81),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),189)).i=h,0==a.e&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),189)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),81),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(Ffn(),FPt)||n.c==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),81)).f.Kc();s.Ob();)o=BB(s.Pb(),81),d=dA(n.c)?n.f.ef(f,o):n.f.ff(f,o),o.d.i=e.Math.max(o.d.i,f.o+f.g.b+d-o.e.a),o.k||(o.d.i=e.Math.max(o.d.i,o.g.c-o.e.a)),--o.d.e,0==o.d.e&&DH(w,o.d)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),81)).g.c=t.o}function zzn(n){var t,e,i,r,c,a,u,o;switch(u=n.b,t=n.a,0===BB(mMn(n,(_kn(),Mit)),427).g?m$(u,new nw(new Gn)):m$(u,new nw(new zn)),1===BB(mMn(n,Eit),428).g?(m$(u,new qn),m$(u,new Un),m$(u,new Kn)):(m$(u,new qn),m$(u,new Hn)),BB(mMn(n,Pit),250).g){case 0:o=new Yn;break;case 1:o=new Vn;break;case 2:o=new Qn;break;case 3:o=new Wn;break;case 5:o=new Ow(new Qn);break;case 4:o=new Ow(new Vn);break;case 7:o=new DS(new Ow(new Vn),new Ow(new Qn));break;case 8:o=new DS(new Ow(new Wn),new Ow(new Qn));break;default:o=new Ow(new Wn)}for(a=new Wb(u);a.a<a.c.c.length;){for(c=BB(n0(a),167),r=0,e=new rI(iln(i=0),iln(r));B_n(t,c,i,r);)e=BB(o.Ce(e,c),46),i=BB(e.a,19).a,r=BB(e.b,19).a;_Rn(t,c,i,r)}}function Uzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,MA(n.e,c.a,c.b),j=l/w,E=h/b,s=new AL(mV(n.e));s.e!=s.i.gc();)Pen(o=BB(kpn(s),137),o.i*j),Cen(o,o.j*E);for(v=new AL(yV(n.e));v.e!=v.i.gc();)y=(p=BB(kpn(v),118)).i,k=p.j,y>0&&Pen(p,y*j),k>0&&Cen(p,k*E);for(nan(n.b,new lt),t=new Np,u=new usn(new Pb(n.c).a);u.b;)i=BB((a=ten(u)).cd(),79),e=BB(a.dd(),395).a,r=cDn(i,!1,!1),VFn(f=lTn(PMn(i),qSn(r),e),r),(m=CMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.a.a.c,8)),e));for(g=new usn(new Pb(n.d).a);g.b;)i=BB((d=ten(g)).cd(),79),e=BB(d.dd(),395).a,r=cDn(i,!1,!1),f=lTn(OMn(i),Jon(qSn(r)),e),VFn(f=Jon(f),r),(m=IMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.c.b.c,8)),e))}function Xzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(0!=i.c.length){for(w=new Np,b=new Wb(i);b.a<b.c.c.length;)WB(w,new xC((l=BB(n0(b),33)).i,l.j));for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt));NMn(n,i);)E$n(n,i,!1);for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),u=0,o=0,c=null,0!=i.c.length&&(l1(0,i.c.length),u=(c=BB(i.c[0],33)).i-(l1(0,w.c.length),BB(w.c[0],8)).a,o=c.j-(l1(0,w.c.length),BB(w.c[0],8)).b),a=e.Math.sqrt(u*u+o*o),f=Uhn(i);0!=f.a.gc();){for(h=f.a.ec().Kc();h.Ob();)s=BB(h.Pb(),33),g=(d=n.f).i+d.g/2,p=d.j+d.f/2,v=s.i+s.g/2,y=s.j+s.f/2-p,j=(m=v-g)/(k=e.Math.sqrt(m*m+y*y)),E=y/k,Pen(s,s.i+j*a),Cen(s,s.j+E*a);r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),f=Uhn(new t_(f))}n.a&&n.a.lg(new t_(f)),r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),Xzn(n,t,new t_(f),r)}}function Wzn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(g=n.n,p=n.o,b=n.d,l=Gy(MD(edn(n,(HXn(),ppt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),o=t.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a-u.o.b,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=u.o.b,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,CZ(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),o=i.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=0,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,CZ(d,n)),c+=r}}function Vzn(n,t){var i,r,c,a,u,o;if(BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))){for(o=new Wb(t.a);o.a<o.c.c.length;)(a=BB(n0(o),10)).k==(uSn(),Cut)&&(c=BB(mMn(a,(HXn(),Cgt)),142),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(u=new Wb(t.a);u.a<u.c.c.length;)if((a=BB(n0(u),10)).k!=(uSn(),Cut))switch(a.k.g){case 2:if((r=BB(mMn(a,(HXn(),kgt)),163))==(Tbn(),Flt)){a.n.a=n.c-10,Yyn(a,new Ge).Jb(new rd(a));break}if(r==Hlt){a.n.a=n.a+10,Yyn(a,new ze).Jb(new cd(a));break}if((i=BB(mMn(a,ilt),303))==(z7(),Cft)){lqn(a).Jb(new ad(a)),a.n.b=n.d-10;break}if(i==Sft){lqn(a).Jb(new ud(a)),a.n.b=n.b+10;break}break;default:throw Hp(new _y("The node type "+a.k+" is not supported by the "+Jot))}}}function Qzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(o=new xC(i.i+i.g/2,i.j+i.f/2),l=XHn(i),b=BB(ZAn(t,(HXn(),ept)),98),d=BB(ZAn(i,upt),61),BI(lpn(i),tpt)||(w=0==i.i&&0==i.j?0:tMn(i,d),Ypn(i,tpt,w)),hon(r=bXn(i,b,d,l,new xC(t.g,t.f),o,new xC(i.g,i.f),BB(mMn(e,Udt),103),e),(hWn(),dlt),i),Hl(c=BB(xq(r.j,0),11),j_n(i)),hon(r,cpt,(lIn(),nbn(rIt))),h=BB(ZAn(t,cpt),174).Hc(eIt),u=new AL((!i.n&&(i.n=new eU(zOt,i,1,7)),i.n));u.e!=u.i.gc();)if(!qy(TD(ZAn(a=BB(kpn(u),137),Ggt)))&&a.a&&(f=Hhn(a),WB(c.f,f),!h))switch(s=0,Hz(BB(ZAn(t,cpt),21))&&(s=$In(new xC(a.i,a.j),new xC(a.g,a.f),new xC(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}hon(r,Cpt,MD(ZAn(JJ(t),Cpt))),hon(r,Ipt,MD(ZAn(JJ(t),Ipt))),hon(r,Spt,MD(ZAn(JJ(t),Spt))),WB(e.a,r),VW(n.a,i,r)}function Yzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(e,"Processor arrange level",1),h=0,SQ(),_rn(t,new ap((qqn(),ikt))),c=t.b,u=spn(t,t.b),s=!0;s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?--c:s=!1;if(a=new n_(new s1(t,0,c)),o=new n_(new s1(t,c,t.b)),0==a.b)for(b=spn(o,0);b.b!=b.d.c;)hon(BB(b3(b),86),hkt,iln(h++));else for(f=a.b,m=spn(a,0);m.b!=m.d.c;){for(hon(v=BB(b3(m),86),hkt,iln(h++)),Yzn(n,i=xun(v),mcn(e,1/f|0)),_rn(i,QW(new ap(hkt))),l=new YT,p=spn(i,0);p.b!=p.d.c;)for(g=BB(b3(p),86),d=spn(v.d,0);d.b!=d.d.c;)(w=BB(b3(d),188)).c==g&&r5(l,w,l.c.b,l.c);for(yQ(v.d),Frn(v.d,l),u=spn(o,o.b),r=v.d.b,s=!0;0<r&&s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?(hon(g,hkt,iln(h++)),--r,mtn(u)):s=!1}HSn(e)}function Jzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Inverted port preprocessing",1),u=new M2(n.b,0),e=null,g=new Np;u.b<u.d.gc();){for(d=e,Px(u.b<u.d.gc()),e=BB(u.d.Xb(u.c=u.b++),29),h=new Wb(g);h.a<h.c.c.length;)PZ(o=BB(n0(h),10),d);for(g.c=x8(Ant,HWn,1,0,5,1),f=new Wb(e.a);f.a<f.c.c.length;)if((o=BB(n0(f),10)).k==(uSn(),Cut)&&vA(BB(mMn(o,(HXn(),ept)),98))){for(w=cRn(o,(ain(),Hvt),(kUn(),oIt)).Kc();w.Ob();)for(l=BB(w.Pb(),11),r=0,c=(i=BB(Qgn(a=l.e,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)$Bn(n,l,i[r],g);for(b=cRn(o,qvt,CIt).Kc();b.Ob();)for(l=BB(b.Pb(),11),r=0,c=(i=BB(Qgn(a=l.g,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)ABn(n,l,i[r],g)}}for(s=new Wb(g);s.a<s.c.c.length;)PZ(o=BB(n0(s),10),e);HSn(t)}function Zzn(n,t,e,i,r,c){var a,u,o,s,h,f;for(qan(s=new CSn,t),qCn(s,BB(ZAn(t,(HXn(),upt)),61)),hon(s,(hWn(),dlt),t),CZ(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,VW(n.a,t,s),(a=o5($V(wnn(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Vt),new Xt),new Ww(t)))||(a=o5($V(wnn(new Rq(null,(!t.d&&(t.d=new hK(_Ot,t,8,5)),new w1(t.d,16))),new Qt),new Wt),new Vw(t))),a||(a=o5(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Yt)),hon(s,elt,(hN(),!!a)),pqn(s,c,r,BB(ZAn(t,npt),8)),o=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));o.e!=o.i.gc();)!qy(TD(ZAn(u=BB(kpn(o),137),Ggt)))&&u.a&&WB(s.f,Hhn(u));switch(r.g){case 2:case 1:(s.j==(kUn(),sIt)||s.j==SIt)&&i.Fc((bDn(),gft));break;case 4:case 3:(s.j==(kUn(),oIt)||s.j==CIt)&&i.Fc((bDn(),gft))}return s}function nUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;for(l=null,r==(dJ(),Lyt)?l=t:r==Nyt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=BB(d.Pb(),11),g=Aon(Pun(Gk(PMt,1),sVn,8,0,[w.i.n,w.n,w.a])).b,m=new Rv,o=new Rv,h=new m6(w.b);y$(h.a)||y$(h.b);)if(qy(TD(mMn(s=BB(y$(h.a)?n0(h.a):n0(h.b),17),(hWn(),Clt))))==c&&-1!=E7(a,s,0)){if(p=s.d==w?s.c:s.d,v=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(v-g)<.2)continue;v<g?t.a._b(p)?TU(m,new rI(Lyt,s)):TU(m,new rI(Nyt,s)):t.a._b(p)?TU(o,new rI(Lyt,s)):TU(o,new rI(Nyt,s))}if(m.a.gc()>1)for(e5(m,new sC(n,b=new hqn(w,m,r))),u.c[u.c.length]=b,f=m.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b);if(o.a.gc()>1)for(e5(o,new hC(n,b=new hqn(w,o,r))),u.c[u.c.length]=b,f=o.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b)}}function tUn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,w4n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Ha),w4n))),u2(n,w4n,g3n,mpn(xjt)),u2(n,w4n,vZn,mpn(Kjt)),u2(n,w4n,PZn,mpn(Cjt)),u2(n,w4n,BZn,mpn(Ijt)),u2(n,w4n,SZn,mpn(Ojt)),u2(n,w4n,CZn,mpn(Pjt)),u2(n,w4n,MZn,mpn(Ajt)),u2(n,w4n,IZn,mpn(Njt)),u2(n,w4n,h4n,mpn(Mjt)),u2(n,w4n,s4n,mpn(Sjt)),u2(n,w4n,b4n,mpn($jt)),u2(n,w4n,u4n,mpn(Ljt)),u2(n,w4n,o4n,mpn(Djt)),u2(n,w4n,f4n,mpn(Rjt)),u2(n,w4n,l4n,mpn(_jt))}function eUn(n){var t;if(this.r=xV(new Pn,new Cn),this.b=new Hbn(BB(yX(FIt),290)),this.p=new Hbn(BB(yX(FIt),290)),this.i=new Hbn(BB(yX(Krt),290)),this.e=n,this.o=new wA(n.rf()),this.D=n.Df()||qy(TD(n.We((sWn(),SSt)))),this.A=BB(n.We((sWn(),KSt)),21),this.B=BB(n.We(qSt),21),this.q=BB(n.We(uPt),98),this.u=BB(n.We(fPt),21),!wMn(this.u))throw Hp(new rk("Invalid port label placement: "+this.u));if(this.v=qy(TD(n.We(bPt))),this.j=BB(n.We(DSt),21),!tLn(this.j))throw Hp(new rk("Invalid node label placement: "+this.j));this.n=BB(nkn(n,NSt),116),this.k=Gy(MD(nkn(n,OPt))),this.d=Gy(MD(nkn(n,IPt))),this.w=Gy(MD(nkn(n,RPt))),this.s=Gy(MD(nkn(n,APt))),this.t=Gy(MD(nkn(n,$Pt))),this.C=BB(nkn(n,xPt),142),this.c=2*this.d,t=!this.B.Hc((n_n(),HIt)),this.f=new Ign(0,t,0),this.g=new Ign(1,t,0),jy(this.f,(Dtn(),zit),this.g)}function iUn(n,t,i,r,c){var a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,g=0,d=0,w=1,m=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));m.e!=m.i.gc();)w+=F3(new oz(ZL(dLn(p=BB(kpn(m),33)).a.Kc(),new h))),T=p.g,g=e.Math.max(g,T),b=p.f,d=e.Math.max(d,b),y+=T*b;for(u=y+2*r*r*w*(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i,a=e.Math.sqrt(u),s=e.Math.max(a*i,g),o=e.Math.max(a/i,d),v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();)p=BB(kpn(v),33),M=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(s-p.g),S=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(o-p.f),Pen(p,M),Cen(p,S);for(E=s+(c.b+c.c),j=o+(c.d+c.a),k=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));k.e!=k.i.gc();)for(l=new oz(ZL(dLn(BB(kpn(k),33)).a.Kc(),new h));dAn(l);)nAn(f=BB(U5(l),79))||BXn(f,t,E,j);KUn(n,E+=c.b+c.c,j+=c.d+c.a,!1,!0)}function rUn(n){var t,e,i,r,c,a,u,o,s,h,f;if(null==n)throw Hp(new Mk(zWn));if(s=n,o=!1,(c=n.length)>0&&(b1(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(n=n.substr(1),--c,o=45==t)),0==c)throw Hp(new Mk(DQn+s+'"'));for(;n.length>0&&(b1(0,n.length),48==n.charCodeAt(0));)n=n.substr(1),--c;if(c>(iFn(),xtt)[10])throw Hp(new Mk(DQn+s+'"'));for(r=0;r<c;r++)if(-1==egn((b1(r,n.length),n.charCodeAt(r))))throw Hp(new Mk(DQn+s+'"'));for(f=0,a=Ltt[10],h=Ntt[10],u=j7(Dtt[10]),e=!0,(i=c%a)>0&&(f=-parseInt(n.substr(0,i),10),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt(n.substr(0,a),10),n=n.substr(a),c-=a,e)e=!1;else{if(Vhn(f,u)<0)throw Hp(new Mk(DQn+s+'"'));f=cbn(f,h)}f=ibn(f,i)}if(Vhn(f,0)>0)throw Hp(new Mk(DQn+s+'"'));if(!o&&Vhn(f=j7(f),0)<0)throw Hp(new Mk(DQn+s+'"'));return f}function cUn(n,t){var e,i,r,c,a,u,o;if(ZH(),this.a=new X$(this),this.b=n,this.c=t,this.f=OU(B7((IPn(),Z$t),t)),this.f.dc())if((u=mjn(Z$t,n))==t)for(this.e=!0,this.d=new Np,this.f=new fo,this.f.Fc(S7n),BB(NHn(F7(Z$t,Utn(n)),""),26)==n&&this.f.Fc(az(Z$t,Utn(n))),r=EKn(Z$t,n).Kc();r.Ob();)switch(i=BB(r.Pb(),170),DW(B7(Z$t,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(OU(B7(Z$t,i)))}else if(ZM(),BB(t,66).Oj())for(this.e=!0,this.f=null,this.d=new Np,a=0,o=(null==n.i&&qFn(n),n.i).length;a<o;++a)for(null==n.i&&qFn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=Z1(B7(Z$t,i));c;c=Z1(B7(Z$t,c)))c==t&&this.d.Fc(i);else 1==DW(B7(Z$t,t))&&u?(this.f=null,this.d=(TOn(),bLt)):(this.f=null,this.e=!0,this.d=(SQ(),new Gb(t)));else this.e=5==DW(B7(Z$t,t)),this.f.Fb(uLt)&&(this.f=uLt)}function aUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(i=0,r=Pmn(n,t),b=n.s,w=n.t,h=BB(BB(h6(n.r,t),21),84).Kc();h.Ob();)if((s=BB(h.Pb(),111)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.rf(),o=s.b.Xe((sWn(),aPt))?Gy(MD(s.b.We(aPt))):0,(l=(f=s.c).i).b=(u=f.n,f.e.a+u.b+u.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+o+r,l9(f,(J9(),Qit)),WD(f,(G7(),crt));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-o-r-l.a,l9(f,(J9(),Qit)),WD(f,(G7(),irt));break;case 2:l.c=-o-r-l.b,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Jit)),WD(f,(G7(),rrt));break;case 4:l.c=d.a+o+r,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Yit)),WD(f,(G7(),rrt))}(t==(kUn(),sIt)||t==SIt)&&(i=e.Math.max(i,l.a))}i>0&&(BB(oV(n.b,t),124).a.b=i)}function uUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Comment pre-processing",1),e=0,o=new Wb(n.a);o.a<o.c.c.length;)if(qy(TD(mMn(u=BB(n0(o),10),(HXn(),Tdt))))){for(++e,r=0,i=null,s=null,w=new Wb(u.j);w.a<w.c.c.length;)r+=(l=BB(n0(w),11)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=BB(xq(l.e,0),17)).c),1==l.g.c.length&&(s=(i=BB(xq(l.g,0),17)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||qy(TD(mMn(s.i,Tdt)))){for(g=new Np,b=new Wb(u.j);b.a<b.c.c.length;){for(f=new Wb((l=BB(n0(b),11)).g);f.a<f.c.c.length;)0==(h=BB(n0(f),17)).d.g.c.length||(g.c[g.c.length]=h);for(a=new Wb(l.e);a.a<a.c.c.length;)0==(c=BB(n0(a),17)).c.e.c.length||(g.c[g.c.length]=c)}for(d=new Wb(g);d.a<d.c.c.length;)tBn(BB(n0(d),17),!0)}else nXn(u,i,s,s.i),AU(o)}t.n&&OH(t,"Found "+e+" comment boxes"),HSn(t)}function oUn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(l=Gy(MD(mMn(n,(HXn(),Cpt)))),b=Gy(MD(mMn(n,Ipt))),f=Gy(MD(mMn(n,Spt))),u=n.o,a=(c=BB(xq(n.j,0),11)).n,d=TPn(c,f)){if(t.Hc((lIn(),eIt)))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:d.c=(u.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(u.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=l}else if(t.Hc(rIt))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Wb(c.f);s.a<s.c.c.length;)(w=(o=BB(n0(s),70)).n).a=d.c,w.b=r,r+=o.o.b+f}}function sUn(){RO(wLt,new Vs),RO(zLt,new ah),RO(ULt,new ph),RO(XLt,new Ch),RO(Qtt,new $h),RO(Gk(NNt,1),new Lh),RO(ktt,new Nh),RO(Ttt,new xh),RO(Qtt,new _s),RO(Qtt,new Fs),RO(Qtt,new Bs),RO(Ptt,new Hs),RO(Qtt,new qs),RO(Rnt,new Gs),RO(Rnt,new zs),RO(Qtt,new Us),RO(Ctt,new Xs),RO(Qtt,new Ws),RO(Qtt,new Qs),RO(Qtt,new Ys),RO(Qtt,new Js),RO(Qtt,new Zs),RO(Gk(NNt,1),new nh),RO(Qtt,new th),RO(Qtt,new eh),RO(Rnt,new ih),RO(Rnt,new rh),RO(Qtt,new ch),RO(Att,new uh),RO(Qtt,new oh),RO(Rtt,new sh),RO(Qtt,new hh),RO(Qtt,new fh),RO(Qtt,new lh),RO(Qtt,new bh),RO(Rnt,new wh),RO(Rnt,new dh),RO(Qtt,new gh),RO(Qtt,new vh),RO(Qtt,new mh),RO(Qtt,new yh),RO(Qtt,new kh),RO(Qtt,new jh),RO(_tt,new Eh),RO(Qtt,new Th),RO(Qtt,new Mh),RO(Qtt,new Sh),RO(_tt,new Ph),RO(Rtt,new Ih),RO(Qtt,new Oh),RO(Att,new Ah)}function hUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=t.length)>0&&(b1(0,t.length),64!=(u=t.charCodeAt(0)))){if(37==u&&(o=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(b1(h+1,t.length),o=46==t.charCodeAt(h+1))))){if(v=mK("%",a=t.substr(1,h-1))?null:$Un(a),i=0,o)try{i=l_n(t.substr(h+2),_Vn,DWn)}catch(m){throw cL(m=lun(m),127)?Hp(new L7(m)):Hp(m)}for(d=Ern(n.Wg());d.Ob();)if(cL(b=Man(d),510)&&(p=(r=BB(b,590)).d,(null==v?null==p:mK(v,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:t.substr(0,s),e=0,-1!=s)try{e=l_n(t.substr(s+1),_Vn,DWn)}catch(m){if(!cL(m=lun(m),127))throw Hp(m);l=t}for(l=mK("%",l)?null:$Un(l),w=Ern(n.Wg());w.Ob();)if(cL(b=Man(w),191)&&(g=(c=BB(b,191)).ne(),(null==l?null==g:mK(l,g))&&0==e--))return c;return null}return _qn(n,t)}function fUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(m=new Np,f=new Wb(n.b);f.a<f.c.c.length;)for(w=new Wb(BB(n0(f),29).a);w.a<w.c.c.length;)if((l=BB(n0(w),10)).k==(uSn(),Mut)&&Lx(l,(hWn(),Vft))){for(d=null,p=null,g=null,j=new Wb(l.j);j.a<j.c.c.length;)switch((k=BB(n0(j),11)).j.g){case 4:d=k;break;case 2:p=k;break;default:g=k}for(s=new Kj((v=BB(xq(g.g,0),17)).a),UR(o=new wA(g.n),l.n),nX(spn(s,0),o),y=Jon(v.a),UR(h=new wA(g.n),l.n),r5(y,h,y.c.b,y.c),E=BB(mMn(l,Vft),10),T=BB(xq(E.j,0),11),c=0,u=(i=BB(Qgn(d.e,x8(yut,c1n,17,0,0,1)),474)).length;c<u;++c)MZ(t=i[c],T),Wsn(t.a,t.a.b,s);for(r=0,a=(e=Z0(p.g)).length;r<a;++r)SZ(t=e[r],T),Wsn(t.a,0,y);SZ(v,null),MZ(v,null),m.c[m.c.length]=l}for(b=new Wb(m);b.a<b.c.c.length;)PZ(l=BB(n0(b),10),null)}function lUn(){var n,t,e;for(lUn=O,new knn(1,0),new knn(10,0),new knn(0,0),Htt=x8(iet,sVn,240,11,0,1),qtt=x8(ONt,WVn,25,100,15,1),Gtt=Pun(Gk(xNt,1),qQn,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ztt=x8(ANt,hQn,25,Gtt.length,15,1),Utt=Pun(Gk(xNt,1),qQn,25,15,[1,10,100,VVn,1e4,GQn,1e6,1e7,1e8,AQn,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Xtt=x8(ANt,hQn,25,Utt.length,15,1),Wtt=x8(iet,sVn,240,11,0,1),n=0;n<Wtt.length;n++)Htt[n]=new knn(n,0),Wtt[n]=new knn(0,n),qtt[n]=48;for(;n<qtt.length;n++)qtt[n]=48;for(e=0;e<ztt.length;e++)ztt[e]=aIn(Gtt[e]);for(t=0;t<Xtt.length;t++)Xtt[t]=aIn(Utt[t]);$On()}function bUn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[iYn]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},zDn()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[iYn]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function wUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(PFn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=x8(ONt,WVn,25,4*(0!=(u=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,o=0;o<l;o++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2|d],c[a++]=VLt[63&i];return 8==u?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[s<<4],c[a++]=61,c[a++]=61):16==u&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2],c[a++]=61),Bdn(c,0,c.length)}function dUn(n,t){var i,r,c,a,u,o;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>_Vn&&e4(t,n.p-sQn),u=t.q.getDate(),FJ(t,1),n.k>=0&&vZ(t,n.k),n.c>=0?FJ(t,n.c):n.k>=0?(r=35-new von(t.q.getFullYear()-sQn,t.q.getMonth(),35).q.getDate(),FJ(t,e.Math.min(r,u))):FJ(t,u),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),aL(t,24==n.f&&n.g?0:n.f),n.j>=0&&g6(t,n.j),n.n>=0&&U8(t,n.n),n.i>=0&&dO(t,rbn(cbn(Ojn(fan(t.q.getTime()),VVn),VVn),n.i)),n.a&&(e4(c=new AT,c.q.getFullYear()-sQn-80),sS(fan(t.q.getTime()),fan(c.q.getTime()))&&e4(t,c.q.getFullYear()-sQn+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),o=t.q.getMonth(),FJ(t,t.q.getDate()+i),t.q.getMonth()!=o&&FJ(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>_Vn&&(a=t.q.getTimezoneOffset(),dO(t,rbn(fan(t.q.getTime()),60*(n.o-a)*VVn))),!0}function gUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(cL(r=mMn(t,(hWn(),dlt)),239)){for(b=BB(r,33),w=t.e,f=new wA(t.c),c=t.d,f.a+=c.b,f.b+=c.d,SN(BB(ZAn(b,(HXn(),qgt)),174),(n_n(),qIt))&&(Ol(l=BB(ZAn(b,zgt),116),c.a),_l(l,c.d),Al(l,c.b),Fl(l,c.c)),e=new Np,s=new Wb(t.a);s.a<s.c.c.length;)for(cL(mMn(u=BB(n0(s),10),dlt),239)?CUn(u,f):cL(mMn(u,dlt),186)&&!w&&SA(i=BB(mMn(u,dlt),118),(g=yFn(t,u,i.g,i.f)).a,g.b),d=new Wb(u.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Qw(u)),new Yw(e));if(w)for(d=new Wb(w.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Jw(w)),new Zw(e));for(p=BB(ZAn(b,Zdt),218),a=new Wb(e);a.a<a.c.c.length;)pzn(BB(n0(a),17),p,f);for(m_n(t),o=new Wb(t.a);o.a<o.c.c.length;)(h=(u=BB(n0(o),10)).e)&&gUn(n,h)}}function pUn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,gZn),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new dt),gZn),EG((hAn(),tAt),Pun(Gk(aAt,1),$Vn,237,0,[ZOt]))))),u2(n,gZn,pZn,iln(1)),u2(n,gZn,vZn,80),u2(n,gZn,mZn,5),u2(n,gZn,VJn,dZn),u2(n,gZn,yZn,iln(1)),u2(n,gZn,kZn,(hN(),!0)),u2(n,gZn,QJn,Qct),u2(n,gZn,jZn,mpn(Hct)),u2(n,gZn,EZn,mpn(Yct)),u2(n,gZn,TZn,!1),u2(n,gZn,MZn,mpn(Wct)),u2(n,gZn,SZn,mpn(Xct)),u2(n,gZn,PZn,mpn(Uct)),u2(n,gZn,CZn,mpn(zct)),u2(n,gZn,IZn,mpn(Jct)),u2(n,gZn,oZn,mpn(Gct)),u2(n,gZn,fZn,mpn(aat)),u2(n,gZn,sZn,mpn(qct)),u2(n,gZn,bZn,mpn(tat)),u2(n,gZn,hZn,mpn(eat))}function vUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,f=PDn(n,t),r=s.b-o.b-o.c,c=u.a.a,a=s.c+o.b,w=n.w,f!=(cpn(),BCt)&&f!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=f==BCt?c-2*n.w:c,f=FCt),r<c&&!n.B.Hc((n_n(),WIt)))f==BCt?a+=w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=f==BCt?c-2*n.w:c,f=FCt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),w+=e.Math.max(0,i)}for(b=BB(BB(h6(n.r,t),21),84).Kc();b.Ob();)(l=BB(b.Pb(),111)).e.a=a+l.d.b,l.e.b=(h=l.b).Xe((sWn(),aPt))?h.Hf()==(kUn(),sIt)?-h.rf().b-Gy(MD(h.We(aPt))):Gy(MD(h.We(aPt))):h.Hf()==(kUn(),sIt)?-h.rf().b:0,a+=l.d.b+l.b.rf().a+l.d.c+w}}function mUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,l=PDn(n,t),r=s.a-o.d-o.a,c=u.a.b,a=s.d+o.d,d=n.w,h=n.o.a,l!=(cpn(),BCt)&&l!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=l==BCt?c-2*n.w:c,l=FCt),r<c&&!n.B.Hc((n_n(),WIt)))l==BCt?a+=d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=l==BCt?c-2*n.w:c,l=FCt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),d+=e.Math.max(0,i)}for(w=BB(BB(h6(n.r,t),21),84).Kc();w.Ob();)(b=BB(w.Pb(),111)).e.a=(f=b.b).Xe((sWn(),aPt))?f.Hf()==(kUn(),CIt)?-f.rf().a-Gy(MD(f.We(aPt))):h+Gy(MD(f.We(aPt))):f.Hf()==(kUn(),CIt)?-f.rf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.rf().b+b.d.a+d}}function yUn(n){var t,i,r,c,a,u,o,s,f,l,b,w,d,g,p;for(n.n=Gy(MD(mMn(n.g,(HXn(),Opt)))),n.e=Gy(MD(mMn(n.g,Tpt))),n.i=n.g.b.c.length,o=n.i-1,w=0,n.j=0,n.k=0,n.a=u6(x8(Att,sVn,19,n.i,0,1)),n.b=u6(x8(Ptt,sVn,333,n.i,7,1)),u=new Wb(n.g.b);u.a<u.c.c.length;){for((c=BB(n0(u),29)).p=o,b=new Wb(c.a);b.a<b.c.c.length;)(l=BB(n0(b),10)).p=w,++w;--o}for(n.f=x8(ANt,hQn,25,w,15,1),n.c=kq(ANt,[sVn,hQn],[48,25],15,[w,3],2),n.o=new Np,n.p=new Np,t=0,n.d=0,a=new Wb(n.g.b);a.a<a.c.c.length;){for(o=(c=BB(n0(a),29)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Wb(c.a);b.a<b.c.c.length;)w=(l=BB(n0(b),10)).p,n.f[w]=l.c.p,f+=l.o.b+n.n,i=F3(new oz(ZL(fbn(l).a.Kc(),new h))),g=F3(new oz(ZL(lbn(l).a.Kc(),new h))),n.c[w][0]=g-i,n.c[w][1]=i,n.c[w][2]=g,r+=i,p+=g,i>0&&WB(n.p,l),WB(n.o,l);d=s+(t-=r),f+=t*n.e,c5(n.a,o,iln(d)),c5(n.b,o,f),n.j=e.Math.max(n.j,d),n.k=e.Math.max(n.k,f),n.d+=t,t+=p}}function kUn(){var n;kUn=O,PIt=new WC(hJn,0),sIt=new WC(mJn,1),oIt=new WC(yJn,2),SIt=new WC(kJn,3),CIt=new WC(jJn,4),SQ(),wIt=new Ak(new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),dIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[]))),hIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[]))),EIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[]))),MIt=ffn(EG(CIt,Pun(Gk(FIt,1),YZn,61,0,[]))),yIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),bIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),jIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),gIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt]))),TIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),fIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),mIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,CIt]))),lIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),kIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),pIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt]))),vIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt])))}function jUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(0!=t.b){for(l=new YT,a=null,b=null,i=CJ(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),u=0,v=spn(t,0);v.b!=v.d.c;)for(g=BB(b3(v),86),GI(b)!==GI(mMn(g,(qqn(),rkt)))&&(b=SD(mMn(g,rkt)),u=0),a=null!=b?b+d0(u++,i):d0(u++,i),hon(g,rkt,a),d=new wg(spn(new bg(g).a.d,0));EE(d.a);)r5(l,w=BB(b3(d.a),188).c,l.c.b,l.c),hon(w,rkt,a);for(f=new xp,c=0;c<a.length-i;c++)for(p=spn(t,0);p.b!=p.d.c;)mZ(f,o=fx(SD(mMn(g=BB(b3(p),86),(qqn(),rkt))),0,c+1),iln(null!=(null==o?qI(AY(f.f,null)):hS(f.g,o))?BB(null==o?qI(AY(f.f,null)):hS(f.g,o),19).a+1:1));for(h=new usn(new Pb(f).a);h.b;)s=ten(h),r=iln(null!=RX(n.a,s.cd())?BB(RX(n.a,s.cd()),19).a:0),mZ(n.a,SD(s.cd()),iln(BB(s.dd(),19).a+r.a)),(!(r=BB(RX(n.b,s.cd()),19))||r.a<BB(s.dd(),19).a)&&mZ(n.b,SD(s.cd()),BB(s.dd(),19));jUn(n,l)}}function EUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(i,"Interactive node layering",1),r=new Np,w=new Wb(t.a);w.a<w.c.c.length;){for(s=(h=(l=BB(n0(w),10)).n.a)+l.o.a,s=e.Math.max(h+1,s),v=new M2(r,0),c=null;v.b<v.d.gc();){if(Px(v.b<v.d.gc()),(g=BB(v.d.Xb(v.c=v.b++),569)).c>=s){Px(v.b>0),v.a.Xb(v.c=--v.b);break}g.a>h&&(c?(gun(c.b,g.b),c.a=e.Math.max(c.a,g.a),fW(v)):(WB(g.b,l),g.c=e.Math.min(g.c,h),g.a=e.Math.max(g.a,s),c=g))}c||((c=new im).c=h,c.a=s,yR(v,c),WB(c.b,l))}for(o=t.b,f=0,p=new Wb(r);p.a<p.c.c.length;)for(g=BB(n0(p),569),(a=new HX(t)).p=f++,o.c[o.c.length]=a,d=new Wb(g.b);d.a<d.c.c.length;)PZ(l=BB(n0(d),10),a),l.p=0;for(b=new Wb(t.a);b.a<b.c.c.length;)0==(l=BB(n0(b),10)).p&&CDn(n,l,t);for(u=new M2(o,0);u.b<u.d.gc();)0==(Px(u.b<u.d.gc()),BB(u.d.Xb(u.c=u.b++),29)).a.c.length&&fW(u);t.a.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function TUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(0!=t.e.c.length&&0!=e.e.c.length){if((i=BB(xq(t.e,0),17).c.i)==(a=BB(xq(e.e,0),17).c.i))return E$(BB(mMn(BB(xq(t.e,0),17),(hWn(),wlt)),19).a,BB(mMn(BB(xq(e.e,0),17),wlt),19).a);for(f=0,l=(h=n.a).length;f<l;++f){if((s=h[f])==i)return 1;if(s==a)return-1}}return 0!=t.g.c.length&&0!=e.g.c.length?(c=BB(mMn(t,(hWn(),llt)),10),o=BB(mMn(e,llt),10),r=0,u=0,Lx(BB(xq(t.g,0),17),wlt)&&(r=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),Lx(BB(xq(e.g,0),17),wlt)&&(u=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),c&&c==o?qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&!qy(TD(mMn(BB(xq(e.g,0),17),Clt)))?1:!qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&qy(TD(mMn(BB(xq(e.g,0),17),Clt)))||r<u?-1:r>u?1:0:(n.b&&(n.b._b(c)&&(r=BB(n.b.xc(c),19).a),n.b._b(o)&&(u=BB(n.b.xc(o),19).a)),r<u?-1:r>u?1:0)):0!=t.e.c.length&&0!=e.g.c.length?1:-1}function MUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(OTn(t,O1n,1),w=new Np,y=new Np,s=new Wb(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=n2((o=BB(n0(s),29)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(uSn(),Cut)&&vA(BB(mMn(h,(HXn(),ept)),98))){for(LK(BB(mMn(h,(HXn(),ept)),98))||HNn(h),hon(h,(hWn(),rlt),h),w.c=x8(Ant,HWn,1,0,5,1),y.c=x8(Ant,HWn,1,0,5,1),e=new Np,qrn(v=new YT,DSn(h,(kUn(),sIt))),AXn(n,v,w,y,e),u=g,k=h,c=new Wb(w);c.a<c.c.c.length;)Qyn(i=BB(n0(c),10),u,o),++g,hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(i,clt),15).Fc(k);for(yQ(v),p=DSn(h,SIt).Kc();p.Ob();)r5(v,BB(p.Pb(),11),v.a,v.a.a);for(AXn(n,v,y,null,e),m=h,r=new Wb(y);r.a<r.c.c.length;)Qyn(i=BB(n0(r),10),++g,o),hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(m,clt),15).Fc(i);0==e.c.length||hon(h,xft,e)}HSn(t)}function SUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(h=BB(mMn(n,(Mrn(),sat)),33),d=DWn,g=DWn,b=_Vn,w=_Vn,v=new Wb(n.e);v.a<v.c.c.length;)E=(p=BB(n0(v),144)).d,T=p.e,d=e.Math.min(d,E.a-T.a/2),g=e.Math.min(g,E.b-T.b/2),b=e.Math.max(b,E.a+T.a/2),w=e.Math.max(w,E.b+T.b/2);for(k=new xC((j=BB(ZAn(h,(fRn(),Vct)),116)).b-d,j.d-g),o=new Wb(n.e);o.a<o.c.c.length;)cL(y=mMn(u=BB(n0(o),144),sat),239)&&SA(f=BB(y,33),(m=UR(u.d,k)).a-f.g/2,m.b-f.f/2);for(r=new Wb(n.c);r.a<r.c.c.length;)i=BB(n0(r),282),s=cDn(BB(mMn(i,sat),79),!0,!0),Ukn(S=XR(B$(i.d.d),i.c.d),i.c.e.a,i.c.e.b),CA(s,(M=UR(S,i.c.d)).a,M.b),Ukn(P=XR(B$(i.c.d),i.d.d),i.d.e.a,i.d.e.b),PA(s,(t=UR(P,i.d.d)).a,t.b);for(a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),447),SA(BB(mMn(c,sat),137),(l=UR(c.d,k)).a,l.b);KUn(h,b-d+(j.b+j.c),w-g+(j.d+j.a),!1,!0)}function PUn(n){var t,e,i,r,c,a,u,o,s,h,f;for(e=null,u=null,(r=BB(mMn(n.b,(HXn(),igt)),376))==(A6(),Jvt)&&(e=new Np,u=new Np),a=new Wb(n.d);a.a<a.c.c.length;)if((c=BB(n0(a),101)).i)switch(c.e.g){case 0:t=BB(u4(new QT(c.b)),61),r==Jvt&&t==(kUn(),sIt)?e.c[e.c.length]=c:r==Jvt&&t==(kUn(),SIt)?u.c[u.c.length]=c:Nmn(c,t);break;case 1:o=c.a.d.j,s=c.c.d.j,o==(kUn(),sIt)?bU(c,sIt,(Oun(),mst),c.a):s==sIt?bU(c,sIt,(Oun(),yst),c.c):o==SIt?bU(c,SIt,(Oun(),yst),c.a):s==SIt&&bU(c,SIt,(Oun(),mst),c.c);break;case 2:case 3:SN(i=c.b,(kUn(),sIt))?SN(i,SIt)?SN(i,CIt)?SN(i,oIt)||bU(c,sIt,(Oun(),yst),c.c):bU(c,sIt,(Oun(),mst),c.a):bU(c,sIt,(Oun(),vst),null):bU(c,SIt,(Oun(),vst),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(kUn(),sIt)||f==sIt?bU(c,SIt,(Oun(),vst),null):bU(c,sIt,(Oun(),vst),null)}e&&(0==e.c.length||QFn(e,(kUn(),sIt)),0==u.c.length||QFn(u,(kUn(),SIt)))}function CUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;for(i=BB(mMn(n,(hWn(),dlt)),33),b=BB(mMn(n,(HXn(),Bdt)),19).a,c=BB(mMn(n,jgt),19).a,Ypn(i,Bdt,iln(b)),Ypn(i,jgt,iln(c)),Pen(i,n.n.a+t.a),Cen(i,n.n.b+t.b),(0!=BB(ZAn(i,Fgt),174).gc()||n.e||GI(mMn(vW(n),_gt))===GI((Nvn(),mvt))&&pA((bvn(),(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))))&&(Sen(i,n.o.a),Men(i,n.o.b)),f=new Wb(n.j);f.a<f.c.c.length;)cL(w=mMn(s=BB(n0(f),11),dlt),186)&&(SA(r=BB(w,118),s.n.a,s.n.b),Ypn(r,upt,s.j));for(l=0!=BB(mMn(n,$gt),174).gc(),o=new Wb(n.b);o.a<o.c.c.length;)a=BB(n0(o),70),(l||0!=BB(mMn(a,$gt),174).gc())&&(MA(e=BB(mMn(a,dlt),137),a.o.a,a.o.b),SA(e,a.n.a,a.n.b));if(!Hz(BB(mMn(n,cpt),21)))for(h=new Wb(n.j);h.a<h.c.c.length;)for(u=new Wb((s=BB(n0(h),11)).f);u.a<u.c.c.length;)a=BB(n0(u),70),Sen(e=BB(mMn(a,dlt),137),a.o.a),Men(e,a.o.b),SA(e,a.n.a,a.n.b)}function IUn(n){var t,e,i,r,c;switch(OY(n,i8n),(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i+(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){case 0:throw Hp(new _y("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i?JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))):JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))}if(1==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){if(r=PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),c=PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),JJ(r)==JJ(c))return JJ(r);if(r==JJ(c))return r;if(c==JJ(r))return c}for(t=PTn(BB(U5(i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])))),82));dAn(i);)if((e=PTn(BB(U5(i),82)))!=t&&!Ctn(e,t))if(JJ(e)==JJ(t))t=JJ(e);else if(!(t=B$n(t,e)))return null;return t}function OUn(n,t,i){var r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;for(OTn(i,"Polyline edge routing",1),v=Gy(MD(mMn(t,(HXn(),tgt)))),d=Gy(MD(mMn(t,Apt))),c=Gy(MD(mMn(t,kpt))),r=e.Math.min(1,c/d),k=0,s=0,0!=t.b.c.length&&(k=.4*r*(j=hLn(BB(xq(t.b,0),29)))),o=new M2(t.b,0);o.b<o.d.gc();){for(Px(o.b<o.d.gc()),(a=VI(u=BB(o.d.Xb(o.c=o.b++),29),jyt))&&k>0&&(k-=d),Tqn(u,k),l=0,w=new Wb(u.a);w.a<w.c.c.length;){for(f=0,p=new oz(ZL(lbn(b=BB(n0(w),10)).a.Kc(),new h));dAn(p);)m=g1((g=BB(U5(p),17)).c).b,y=g1(g.d).b,u!=g.d.i.c||b5(g)||(VIn(g,k,.4*r*e.Math.abs(m-y)),g.c.j==(kUn(),CIt)&&(m=0,y=0)),f=e.Math.max(f,e.Math.abs(y-m));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:Gqn(n,b,k,v)}l=e.Math.max(l,f)}o.b<o.d.gc()&&(j=hLn((Px(o.b<o.d.gc()),BB(o.d.Xb(o.c=o.b++),29))),l=e.Math.max(l,j),Px(o.b>0),o.a.Xb(o.c=--o.b)),s=.4*r*l,!a&&o.b<o.d.gc()&&(s+=d),k+=u.c.a+s}n.a.a.$b(),t.f.a=k,HSn(i)}function AUn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v;for(s=new xp,u=new pJ,i=new Wb(n.a.a.b);i.a<i.c.c.length;)if(o=f2(t=BB(n0(i),57)))jCn(s.f,o,t);else if(v=f3(t))for(r=new Wb(v.k);r.a<r.c.c.length;)JIn(u,BB(n0(r),17),t);for(e=new Wb(n.a.a.b);e.a<e.c.c.length;)if(o=f2(t=BB(n0(e),57)))for(a=new oz(ZL(lbn(o).a.Kc(),new h));dAn(a);)if(!b5(c=BB(U5(a),17))&&(w=c.c,p=c.d,!(kUn(),yIt).Hc(c.c.j)||!yIt.Hc(c.d.j))){if(d=BB(RX(s,c.d.i),57),UNn(aM(cM(uM(rM(new Hv,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==CIt&&$z((gcn(),w)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}if(p.j==oIt&&Az((gcn(),p)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}}}function $Un(n){var t,e,i,r,c,a,u,o;if(RHn(),null==n)return null;if((r=GO(n,YTn(37)))<0)return n;for(o=new lN(n.substr(0,r)),t=x8(NNt,v6n,25,4,15,1),u=0,i=0,a=n.length;r<a;r++)if(b1(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&ton((b1(r+1,n.length),n.charCodeAt(r+1)),IAt,OAt)&&ton((b1(r+2,n.length),n.charCodeAt(r+2)),IAt,OAt))if(e=CH((b1(r+1,n.length),n.charCodeAt(r+1)),(b1(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[u++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[u++]=e<<24>>24,i=2):224==(240&e)?(t[u++]=e<<24>>24,i=3):240==(248&e)&&(t[u++]=e<<24>>24,i=4)),i>0){if(u==i){switch(u){case 2:xX(o,((31&t[0])<<6|63&t[1])&QVn);break;case 3:xX(o,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&QVn)}u=0,i=0}}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,o.a+=String.fromCharCode(e)}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,xX(o,(b1(r,n.length),n.charCodeAt(r)))}return o.a}function LUn(n,t,e,i,r){var c,a,u;if(ynn(n,t),a=t[0],c=fV(e.c,0),u=-1,Yon(e))if(i>0){if(a+i>n.length)return!1;u=UIn(n.substr(0,a+i),t)}else u=UIn(n,t);switch(c){case 71:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn]),t),r.e=u,!0;case 77:return gDn(n,t,r,u,a);case 76:return pDn(n,t,r,u,a);case 69:return rCn(n,t,a,r);case 99:return cCn(n,t,a,r);case 97:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"]),t),r.b=u,!0;case 121:return vDn(n,t,a,u,e,r);case 100:return!(u<=0||(r.c=u,0));case 83:return!(u<0)&&jwn(u,a,t[0],r);case 104:12==u&&(u=0);case 75:case 72:return!(u<0||(r.f=u,r.g=!1,0));case 107:return!(u<0||(r.f=u,r.g=!0,0));case 109:return!(u<0||(r.j=u,0));case 115:return!(u<0||(r.n=u,0));case 90:if(a<n.length&&(b1(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return CTn(n,a,t,r);default:return!1}}function NUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(b=BB(BB(h6(n.r,t),21),84),t!=(kUn(),oIt)&&t!=CIt){for(a=t==sIt?(Dan(),Nrt):(Dan(),Rrt),k=t==sIt?(G7(),crt):(G7(),irt),c=(r=(i=BB(oV(n.b,t),124)).i).c+Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.b,n.C.b,n.k])),v=r.c+r.b-Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.c,n.C.c,n.k])),u=Zk(H_(a),n.t),m=t==sIt?KQn:RQn,l=b.Kc();l.Ob();)!(h=BB(l.Pb(),111)).c||h.c.d.c.length<=0||(p=h.b.rf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(o=w.n,w.e.b+o.d+o.a),OY(k,uJn),w.f=k,l9(w,(J9(),Jit)),d.c=g.a-(d.b-p.a)/2,j=e.Math.min(c,g.a),E=e.Math.max(v,g.a+p.a),d.c<j?d.c=j:d.c+d.b>E&&(d.c=E-d.b),WB(u.d,new xG(d,kln(u,d))),m=t==sIt?e.Math.max(m,g.b+h.b.rf().b):e.Math.min(m,g.b));for(m+=t==sIt?n.t:-n.t,(y=Pwn((u.e=m,u)))>0&&(BB(oV(n.b,t),124).a.b=y),f=b.Kc();f.Ob();)!(h=BB(f.Pb(),111)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else aUn(n,t)}function xUn(n){var t,e,i,r,c,a,u,o,s,f;for(t=new xp,a=new AL(n);a.e!=a.i.gc();){for(c=BB(kpn(a),33),e=new Rv,VW(Mct,c,e),f=new ut,i=BB(P4(new Rq(null,new zU(new oz(ZL(wLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)])))),83),Jen(e,BB(i.xc((hN(),!0)),14),new ot),r=BB(P4(AV(BB(i.xc(!1),15).Lc(),new st),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();r.Ob();)(s=CMn(BB(r.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u));for(i=BB(P4(new Rq(null,new zU(new oz(ZL(dLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet])))),83),Jen(e,BB(i.xc(!0),14),new ht),o=BB(P4(AV(BB(i.xc(!1),15).Lc(),new ft),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();o.Ob();)(s=IMn(BB(o.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u))}}function DUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(uHn(),(o=Vhn(n,0)<0)&&(n=j7(n)),0==Vhn(n,0))switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new Ck).a+=t<0?"0E+":"0E",b.a+=t==_Vn?"2147483648":""+-t,b.a}f=x8(ONt,WVn,25,1+(h=18),15,1),e=h,d=n;do{s=d,d=Ojn(d,10),f[--e]=dG(rbn(48,ibn(s,cbn(d,10))))&QVn}while(0!=Vhn(d,0));if(r=ibn(ibn(ibn(h,e),t),1),0==t)return o&&(f[--e]=45),Bdn(f,e,h-e);if(t>0&&Vhn(r,-6)>=0){if(Vhn(r,0)>=0){for(c=e+dG(r),u=h-1;u>=c;u--)f[u+1]=f[u];return f[++c]=46,o&&(f[--e]=45),Bdn(f,e,h-e+1)}for(a=2;sS(a,rbn(j7(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,o&&(f[--e]=45),Bdn(f,e,h-e)}return w=e+1,i=h,l=new Ik,o&&(l.a+="-"),i-w>=1?(xX(l,f[e]),l.a+=".",l.a+=Bdn(f,e+1,h-e-1)):l.a+=Bdn(f,e,h-e),l.a+="E",Vhn(r,0)>0&&(l.a+="+"),l.a+=""+vz(r),l.a}function RUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c=x8(Ant,HWn,1,0,5,1),n.i.c=x8(Ant,HWn,1,0,5,1),n.g.a.$b(),t)for(a=new Wb(t.a);a.a<a.c.c.length;)for(h=DSn(c=BB(n0(a),10),(kUn(),oIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.e,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i));if(e)for(a=new Wb(e.a);a.a<a.c.c.length;){for(o=new Wb((c=BB(n0(a),10)).j);o.a<o.c.c.length;)for(r=new Wb(BB(n0(o),11).g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))&&TU(n.g,i);for(h=DSn(c,(kUn(),CIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.f,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i))}}function KUn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(p=new xC(n.g,n.f),(g=XPn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),E=g.a/p.a,f=g.b/p.b,k=g.a-p.a,s=g.b-p.b,r)for(u=JJ(n)?BB(ZAn(JJ(n),(sWn(),bSt)),103):BB(ZAn(n,(sWn(),bSt)),103),o=GI(ZAn(n,(sWn(),uPt)))===GI((QEn(),XCt)),m=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));m.e!=m.i.gc();)switch(v=BB(kpn(m),118),(y=BB(ZAn(v,wPt),61))==(kUn(),PIt)&&(y=OFn(v,u),Ypn(v,wPt,y)),y.g){case 1:o||Pen(v,v.i*E);break;case 2:Pen(v,v.i+k),o||Cen(v,v.j*f);break;case 3:o||Pen(v,v.i*E),Cen(v,v.j+s);break;case 4:o||Cen(v,v.j*f)}if(MA(n,g.a,g.b),c)for(b=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=BB(kpn(b),137)).i+l.g/2,d=l.j+l.f/2,(j=w/p.a)+(h=d/p.b)>=1&&(j-h>0&&d>=0?(Pen(l,l.i+k),Cen(l,l.j+s*h)):j-h<0&&w>=0&&(Pen(l,l.i+k*j),Cen(l,l.j+s)));return Ypn(n,(sWn(),KSt),(mdn(),new YK(a=BB(Vj(YIt),9),BB(SR(a,a.length),9),0))),new xC(E,f)}function _Un(n){var t,i,r,c,a,u,o,s,h,f,l;if(f=JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))==JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))),u=new Gj,(t=BB(ZAn(n,(Xsn(),hCt)),74))&&t.b>=2){if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),i=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(l=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));l.e!=l.i.gc();)Qjn(l);VFn(t,BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202))}if(f)for(r=new AL((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new AL((!(i=BB(kpn(r),202)).a&&(i.a=new $L(xOt,i,5)),i.a));s.e!=s.i.gc();)o=BB(kpn(s),469),u.a=e.Math.max(u.a,o.a),u.b=e.Math.max(u.b,o.b);for(a=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));a.e!=a.i.gc();)c=BB(kpn(a),137),(h=BB(ZAn(c,gCt),8))&&SA(c,h.a,h.b),f&&(u.a=e.Math.max(u.a,c.i+c.g),u.b=e.Math.max(u.b,c.j+c.f));return u}function FUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(v=t.c.length,c=new qKn(n.a,i,null,null),E=x8(xNt,qQn,25,v,15,1),w=x8(xNt,qQn,25,v,15,1),b=x8(xNt,qQn,25,v,15,1),d=0,o=0;o<v;o++)w[o]=DWn,b[o]=_Vn;for(s=0;s<v;s++)for(l1(s,t.c.length),r=BB(t.c[s],180),E[s]=v$n(r),E[d]>E[s]&&(d=s),f=new Wb(n.a.b);f.a<f.c.c.length;)for(p=new Wb(BB(n0(f),29).a);p.a<p.c.c.length;)g=BB(n0(p),10),k=Gy(r.p[g.p])+Gy(r.d[g.p]),w[s]=e.Math.min(w[s],k),b[s]=e.Math.max(b[s],k+g.o.b);for(j=x8(xNt,qQn,25,v,15,1),h=0;h<v;h++)(l1(h,t.c.length),BB(t.c[h],180)).o==(oZ(),ryt)?j[h]=w[d]-w[h]:j[h]=b[d]-b[h];for(a=x8(xNt,qQn,25,v,15,1),l=new Wb(n.a.b);l.a<l.c.c.length;)for(y=new Wb(BB(n0(l),29).a);y.a<y.c.c.length;){for(m=BB(n0(y),10),u=0;u<v;u++)a[u]=Gy((l1(u,t.c.length),BB(t.c[u],180)).p[m.p])+Gy((l1(u,t.c.length),BB(t.c[u],180)).d[m.p])+j[u];a.sort(ien(T.prototype.te,T,[])),c.p[m.p]=(a[1]+a[2])/2,c.d[m.p]=0}return c}function BUn(n,t,e){var i,r,c,a,u;switch(i=t.i,c=n.i.o,r=n.i.d,u=n.n,a=Aon(Pun(Gk(PMt,1),sVn,8,0,[u,n.a])),n.j.g){case 1:WD(t,(G7(),irt)),i.d=-r.d-e-i.a,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 2:l9(t,(J9(),Yit)),i.c=c.a+r.c+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e);break;case 3:WD(t,(G7(),crt)),i.d=c.b+r.a+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 4:l9(t,(J9(),Jit)),i.c=-r.b-e-i.b,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e)}}function HUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O;for(w=0,S=0,s=new Wb(n);s.a<s.c.c.length;)ozn(o=BB(n0(s),33)),w=e.Math.max(w,o.g),S+=o.g*o.f;for(M=Zyn(n,S/n.c.length),S+=n.c.length*M,w=e.Math.max(w,e.Math.sqrt(S*u))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,DH(T=new YT,iln(0)),j=new YT,h=new M2(n,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),C=(o=BB(h.d.Xb(h.c=h.b++),33)).g,l=o.f,I+C>w&&(a&&(fO(j,b),fO(T,iln(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),Pen(o,I),Cen(o,O),f=e.Math.max(f,I+C+i.c),b=e.Math.max(b,l),I+=C+t;if(f=e.Math.max(f,r),(P=O+b+i.a)<c&&(b+=c-P,P=c),a)for(I=i.b,h=new M2(n,0),fO(T,iln(n.c.length)),p=BB(b3(E=spn(T,0)),19).a,fO(j,b),k=spn(j,0),y=0;h.b<h.d.gc();)h.b==p&&(I=i.b,y=Gy(MD(b3(k))),p=BB(b3(E),19).a),Px(h.b<h.d.gc()),v=(o=BB(h.d.Xb(h.c=h.b++),33)).f,Men(o,y),d=y,h.b==p&&(g=f-I-i.c,m=o.g,Sen(o,g),lCn(o,new xC(g,d),new xC(m,v))),I+=o.g+t;return new xC(f,P)}function qUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(OTn(t,"Compound graph postprocessor",1),i=qy(TD(mMn(n,(HXn(),Dpt)))),o=BB(mMn(n,(hWn(),Hft)),224),f=new Rv,v=o.ec().Kc();v.Ob();){for(p=BB(v.Pb(),17),u=new t_(o.cc(p)),SQ(),m$(u,new _w(n)),j=ccn((l1(0,u.c.length),BB(u.c[0],243))),T=acn(BB(xq(u,u.c.length-1),243)),y=j.i,m=wan(T.i,y)?y.e:vW(y),l=Apn(p,u),yQ(p.a),b=null,a=new Wb(u);a.a<a.c.c.length;)c=BB(n0(a),243),OPn(g=new Gj,c.a,m),w=c.b,Wsn(r=new km,0,w.a),Ztn(r,g),k=new wA(g1(w.c)),E=new wA(g1(w.d)),UR(k,g),UR(E,g),b&&(0==r.b?d=E:(Px(0!=r.b),d=BB(r.a.a.c,8)),M=e.Math.abs(b.a-d.a)>lZn,S=e.Math.abs(b.b-d.b)>lZn,(!i&&M&&S||i&&(M||S))&&DH(p.a,k)),Frn(p.a,r),0==r.b?b=k:(Px(0!=r.b),b=BB(r.c.b.c,8)),Yan(w,l,g),acn(c)==T&&(vW(T.i)!=c.a&&OPn(g=new Gj,vW(T.i),m),hon(p,Rlt,g)),MSn(w,p,m),f.a.zc(w,f);SZ(p,j),MZ(p,T)}for(h=f.a.ec().Kc();h.Ob();)SZ(s=BB(h.Pb(),17),null),MZ(s,null);HSn(t)}function GUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(1==n.gc())return BB(n.Xb(0),231);if(n.gc()<=0)return new y6;for(c=n.Kc();c.Ob();){for(i=BB(c.Pb(),231),d=0,f=DWn,l=DWn,s=_Vn,h=_Vn,w=new Wb(i.e);w.a<w.c.c.length;)b=BB(n0(w),144),d+=BB(mMn(b,(fRn(),Zct)),19).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);hon(i,(fRn(),Zct),iln(d)),hon(i,(Mrn(),oat),new xC(f,l)),hon(i,uat,new xC(s,h))}for(SQ(),n.ad(new wt),qan(g=new y6,BB(n.Xb(0),94)),o=0,m=0,a=n.Kc();a.Ob();)i=BB(a.Pb(),231),p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8)),o=e.Math.max(o,p.a),m+=p.a*p.b;for(o=e.Math.max(o,e.Math.sqrt(m)*Gy(MD(mMn(g,(fRn(),Fct))))),y=0,k=0,u=0,t=v=Gy(MD(mMn(g,cat))),r=n.Kc();r.Ob();)i=BB(r.Pb(),231),y+(p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8))).a>o&&(y=0,k+=u+v,u=0),VKn(g,i,y,k),t=e.Math.max(t,y+p.a),u=e.Math.max(u,p.b),y+=p.a+v;return g}function zUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;switch(h=new km,n.a.g){case 3:l=BB(mMn(t.e,(hWn(),Nlt)),15),b=BB(mMn(t.j,Nlt),15),w=BB(mMn(t.f,Nlt),15),e=BB(mMn(t.e,$lt),15),i=BB(mMn(t.j,$lt),15),r=BB(mMn(t.f,$lt),15),gun(a=new Np,l),b.Jc(new yc),gun(a,cL(b,152)?o6(BB(b,152)):cL(b,131)?BB(b,131).a:cL(b,54)?new fy(b):new CT(b)),gun(a,w),gun(c=new Np,e),gun(c,cL(i,152)?o6(BB(i,152)):cL(i,131)?BB(i,131).a:cL(i,54)?new fy(i):new CT(i)),gun(c,r),hon(t.f,Nlt,a),hon(t.f,$lt,c),hon(t.f,xlt,t.f),hon(t.e,Nlt,null),hon(t.e,$lt,null),hon(t.j,Nlt,null),hon(t.j,$lt,null);break;case 1:Frn(h,t.e.a),DH(h,t.i.n),Frn(h,ean(t.j.a)),DH(h,t.a.n),Frn(h,t.f.a);break;default:Frn(h,t.e.a),Frn(h,ean(t.j.a)),Frn(h,t.f.a)}yQ(t.f.a),Frn(t.f.a,h),SZ(t.f,t.e.c),u=BB(mMn(t.e,(HXn(),vgt)),74),s=BB(mMn(t.j,vgt),74),o=BB(mMn(t.f,vgt),74),(u||s||o)&&(PU(f=new km,o),PU(f,s),PU(f,u),hon(t.f,vgt,f)),SZ(t.j,null),MZ(t.j,null),SZ(t.e,null),MZ(t.e,null),PZ(t.a,null),PZ(t.i,null),t.g&&zUn(n,t.g)}function UUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(PFn(),null==n)return null;if((w=bln(c=V7(n)))%4!=0)return null;if(0==(d=w/4|0))return x8(NNt,v6n,25,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,u=0,o=0,s=0,b=0,l=0,h=0,f=x8(NNt,v6n,25,3*d,15,1);b<d-1;b++){if(!(VE(a=c[h++])&&VE(u=c[h++])&&VE(o=c[h++])&&VE(s=c[h++])))return null;t=WLt[a],e=WLt[u],i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return VE(a=c[h++])&&VE(u=c[h++])?(t=WLt[a],e=WLt[u],o=c[h++],s=c[h++],-1==WLt[o]||-1==WLt[s]?61==o&&61==s?0!=(15&e)?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=o&&61==s?0!=(3&(i=WLt[o]))?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function XUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(t,O1n,1),l=BB(mMn(n,(HXn(),Zdt)),218),i=new Wb(n.b);i.a<i.c.c.length;)for(a=0,u=(c=n2(BB(n0(i),29).a)).length;a<u;++a)if((r=c[a]).k==(uSn(),Iut)){if(l==(Mbn(),JPt))for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||Agn(o),0==o.g.c.length||$gn(o);else if(cL(mMn(r,(hWn(),dlt)),17))w=BB(mMn(r,dlt),17),d=BB(DSn(r,(kUn(),CIt)).Kc().Pb(),11),g=BB(DSn(r,oIt).Kc().Pb(),11),p=BB(mMn(d,dlt),11),SZ(w,v=BB(mMn(g,dlt),11)),MZ(w,p),(m=new wA(g.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[v.i.n,v.n,v.a])).a,DH(w.a,m),(m=new wA(d.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).a,DH(w.a,m);else{if(r.j.c.length>=2){for(b=!0,e=BB(n0(h=new Wb(r.j)),11),f=null;h.a<h.c.c.length;)if(f=e,e=BB(n0(h),11),!Nfn(mMn(f,dlt),mMn(e,dlt))){b=!1;break}}else b=!1;for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||uxn(o,b),0==o.g.c.length||oxn(o,b)}PZ(r,null)}HSn(t)}function WUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;return y=n.c[(l1(0,t.c.length),BB(t.c[0],17)).p],T=n.c[(l1(1,t.c.length),BB(t.c[1],17)).p],!(y.a.e.e-y.a.a-(y.b.e.e-y.b.a)==0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)==0||!cL(v=y.b.e.f,10)||(p=BB(v,10),j=n.i[p.p],E=p.c?E7(p.c.a,p,0):-1,a=RQn,E>0&&(c=BB(xq(p.c.a,E-1),10),u=n.i[c.p],M=e.Math.ceil(K$(n.n,c,p)),a=j.a.e-p.d.d-(u.a.e+c.o.b+c.d.a)-M),h=RQn,E<p.c.a.c.length-1&&(s=BB(xq(p.c.a,E+1),10),f=n.i[s.p],M=e.Math.ceil(K$(n.n,s,p)),h=f.a.e-s.d.d-(j.a.e+p.o.b+p.d.a)-M),!(i&&(h$(),rin(A3n),e.Math.abs(a-h)<=A3n||a==h||isNaN(a)&&isNaN(h)))&&(r=aX(y.a),o=-aX(y.b),l=-aX(T.a),m=aX(T.b),g=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)>0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)<0,d=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)<0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)>0,w=y.a.e.e+y.b.a<T.b.e.e+T.a.a,b=y.a.e.e+y.b.a>T.b.e.e+T.a.a,k=0,!g&&!d&&(b?a+l>0?k=l:h-r>0&&(k=r):w&&(a+o>0?k=o:h-m>0&&(k=m))),j.a.e+=k,j.b&&(j.d.e+=k),1)))}function VUn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(r=new UV(t.qf().a,t.qf().b,t.rf().a,t.rf().b),c=new bA,n.c)for(u=new Wb(t.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+t.qf().a,c.d=a.qf().b+t.qf().b,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);for(h=new Wb(t.Cf());h.a<h.c.c.length;){if(f=(s=BB(n0(h),838)).qf().a+t.qf().a,l=s.qf().b+t.qf().b,n.e&&(c.c=f,c.d=l,c.b=s.rf().a,c.a=s.rf().b,CPn(r,c)),n.d)for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+f,c.d=a.qf().b+l,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);if(n.b){if(b=new xC(-i,-i),BB(t.We((sWn(),fPt)),174).Hc((lIn(),rIt)))for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),b.a+=a.rf().a+i,b.b+=a.rf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),X_n(r,s.Bf(),s.zf(),t,s,b,i)}}n.b&&X_n(r,t.Bf(),t.zf(),t,null,null,i),(o=new A_(t.Af())).d=e.Math.max(0,t.qf().b-r.d),o.a=e.Math.max(0,r.d+r.a-(t.qf().b+t.rf().b)),o.b=e.Math.max(0,t.qf().a-r.c),o.c=e.Math.max(0,r.c+r.b-(t.qf().a+t.rf().a)),t.Ef(o)}function QUn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function YUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(o=new Np,f=t.length,a=Ion(e),s=0;s<f;++s){switch(h=yN(t,YTn(61),s),c=(r=uun(i=fln(a,t.substr(s,h-s)))).Aj().Nh(),fV(t,++h)){case 39:u=lx(t,39,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 34:u=lx(t,34,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 91:WB(o,new CI(i,l=new Np));n:for(;;){switch(fV(t,++h)){case 39:u=lx(t,39,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 34:u=lx(t,34,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));l.c[l.c.length]=null,h+=3}if(!(h<f))break;switch(b1(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw Hp(new dy("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));WB(o,new CI(i,null)),s=h+3}if(!(s<f))break;if(b1(s,t.length),44!=t.charCodeAt(s))throw Hp(new dy("Expecting ,"))}return iDn(n,o,e)}function JUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(s=BB(BB(h6(n.r,t),21),84),a=JTn(n,t),e=n.u.Hc((lIn(),nIt)),o=s.Kc();o.Ob();)if((u=BB(o.Pb(),111)).c&&!(u.c.d.c.length<=0)){switch(l=u.b.rf(),(f=(h=u.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=-f.a-n.t,WD(h,(G7(),irt));break;case 3:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=l.b+n.t,WD(h,(G7(),crt));break;case 2:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=l.a+n.s,l9(h,(J9(),Yit));break;case 4:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=-f.b-n.s,l9(h,(J9(),Jit))}a=!1}}function ZUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(wWn(),0==NT(iNt)){for(f=x8(INt,sVn,117,cNt.length,0,1),a=0;a<f.length;a++)f[a]=new M0(4);for(i=new Pk,c=0;c<eNt.length;c++){if(h=new M0(4),c<84?(b1(u=2*c,vnt.length),l=vnt.charCodeAt(u),b1(u+1,vnt.length),Yxn(h,l,vnt.charCodeAt(u+1))):Yxn(h,aNt[u=2*(c-84)],aNt[u+1]),mK(o=eNt[c],"Specials")&&Yxn(h,65520,65533),mK(o,gnt)&&(Yxn(h,983040,1048573),Yxn(h,1048576,1114109)),mZ(iNt,o,h),mZ(rNt,o,$Fn(h)),0<(s=i.a.length)?i.a=i.a.substr(0,0):0>s&&(i.a+=rL(x8(ONt,WVn,25,-s,15,1))),i.a+="Is",GO(o,YTn(32))>=0)for(r=0;r<o.length;r++)b1(r,o.length),32!=o.charCodeAt(r)&&NX(i,(b1(r,o.length),o.charCodeAt(r)));else i.a+=""+o;Tdn(i.a,o,!0)}Tdn(pnt,"Cn",!1),Tdn(mnt,"Cn",!0),Yxn(e=new M0(4),0,unt),mZ(iNt,"ALL",e),mZ(rNt,"ALL",$Fn(e)),!SNt&&(SNt=new xp),mZ(SNt,pnt,pnt),!SNt&&(SNt=new xp),mZ(SNt,mnt,mnt),!SNt&&(SNt=new xp),mZ(SNt,"ALL","ALL")}return BB(SJ(t?iNt:rNt,n),136)}function nXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,vA(BB(mMn(i,(HXn(),ept)),98))){a=!1,u=!1;n:for(w=new Wb(i.j);w.a<w.c.c.length;)for(b=BB(n0(w),11),d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(b),new Gw(b)])));dAn(d);)if(!qy(TD(mMn(BB(U5(d),11).i,Tdt)))){if(b.j==(kUn(),sIt)){a=!0;break n}if(b.j==SIt){u=!0;break n}}l=u&&!a,f=a&&!u}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Wb(i.b);s.a<s.c.c.length;)h+=(o=BB(n0(s),70)).n.b+o.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=BB(mMn(i,(hWn(),Klt)),15))?l?c=g:(r=BB(mMn(i,Dft),15))?c=g.gc()<=r.gc()?g:r:(c=new Np,hon(i,Dft,c)):(c=new Np,hon(i,Klt,c)):(r=BB(mMn(i,(hWn(),Dft)),15))?f?c=r:(g=BB(mMn(i,Klt),15))?c=r.gc()<=g.gc()?r:g:(c=new Np,hon(i,Klt,c)):(c=new Np,hon(i,Dft,c)),c.Fc(n),hon(n,(hWn(),Kft),e),t.d==e?(MZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null),gsn(e)):(SZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null)),yQ(t.a)}function tXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I;for(v=new M2(n.b,0),d=0,s=BB((f=t.Kc()).Pb(),19).a,k=0,e=new Rv,E=new fA;v.b<v.d.gc();){for(Px(v.b<v.d.gc()),y=new Wb(BB(v.d.Xb(v.c=v.b++),29).a);y.a<y.c.c.length;){for(w=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(w);)l=BB(U5(w),17),E.a.zc(l,E);for(b=new oz(ZL(fbn(m).a.Kc(),new h));dAn(b);)l=BB(U5(b),17),E.a.Bc(l)}if(d+1==s){for(yR(v,r=new HX(n)),yR(v,c=new HX(n)),M=E.a.ec().Kc();M.Ob();)T=BB(M.Pb(),17),e.a._b(T)||(++k,e.a.zc(T,e)),hon(a=new $vn(n),(HXn(),ept),(QEn(),VCt)),PZ(a,r),Bl(a,(uSn(),Tut)),CZ(g=new CSn,a),qCn(g,(kUn(),CIt)),CZ(S=new CSn,a),qCn(S,oIt),hon(i=new $vn(n),ept,VCt),PZ(i,c),Bl(i,Tut),CZ(p=new CSn,i),qCn(p,CIt),CZ(P=new CSn,i),qCn(P,oIt),SZ(j=new wY,T.c),MZ(j,g),SZ(I=new wY,S),MZ(I,p),SZ(T,P),u=new v3(a,i,j,I,T),hon(a,(hWn(),Rft),u),hon(i,Rft,u),(C=j.c.i).k==Tut&&((o=BB(mMn(C,Rft),305)).d=u,u.g=o);if(!f.Ob())break;s=BB(f.Pb(),19).a}++d}return iln(k)}function eXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(f=0,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)qy(TD(ZAn(i=BB(kpn(r),33),(HXn(),Ggt))))||(GI(ZAn(t,Ldt))===GI((mon(),Nvt))&&GI(ZAn(t,Gdt))!==GI((Vvn(),Eht))&&GI(ZAn(t,Gdt))!==GI((Vvn(),kht))&&!qy(TD(ZAn(t,xdt)))&&GI(ZAn(t,Cdt))===GI((Bfn(),wut))||qy(TD(ZAn(i,$dt)))||(Ypn(i,(hWn(),wlt),iln(f)),++f),wzn(n,i,e));for(f=0,s=new AL((!t.b&&(t.b=new eU(_Ot,t,12,3)),t.b));s.e!=s.i.gc();)u=BB(kpn(s),79),(GI(ZAn(t,(HXn(),Ldt)))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&(Ypn(u,(hWn(),wlt),iln(f)),++f),w=PMn(u),d=OMn(u),h=qy(TD(ZAn(w,wgt))),b=!qy(TD(ZAn(u,Ggt))),l=h&&QIn(u)&&qy(TD(ZAn(u,dgt))),c=JJ(w)==t&&JJ(w)==JJ(d),a=(JJ(w)==t&&d==t)^(JJ(d)==t&&w==t),b&&!l&&(a||c)&&uWn(n,u,t,e);if(JJ(t))for(o=new AL(iQ(JJ(t)));o.e!=o.i.gc();)(w=PMn(u=BB(kpn(o),79)))==t&&QIn(u)&&(l=qy(TD(ZAn(w,(HXn(),wgt))))&&qy(TD(ZAn(u,dgt))))&&uWn(n,u,t,e)}function iXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(i,"MinWidth layering",1),w=t.b,T=t.a,A=BB(mMn(t,(HXn(),Egt)),19).a,o=BB(mMn(t,Tgt),19).a,n.b=Gy(MD(mMn(t,ypt))),n.d=RQn,k=new Wb(T);k.a<k.c.c.length;)(m=BB(n0(k),10)).k==(uSn(),Cut)&&(P=m.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),M=T.c.length,n.c=x8(ANt,hQn,25,M,15,1),n.f=x8(ANt,hQn,25,M,15,1),n.e=x8(xNt,qQn,25,M,15,1),h=0,n.a=0,j=new Wb(T);j.a<j.c.c.length;)(m=BB(n0(j),10)).p=h++,n.c[m.p]=whn(fbn(m)),n.f[m.p]=whn(lbn(m)),n.e[m.p]=m.o.b/n.d,n.a+=n.e[m.p];for(n.b/=n.d,n.a/=M,E=jOn(T),m$(T,QW(new Kd(n))),g=RQn,d=DWn,u=null,O=A,I=A,a=o,c=o,A<0&&(O=BB(Tmt.a.zd(),19).a,I=BB(Tmt.b.zd(),19).a),o<0&&(a=BB(Emt.a.zd(),19).a,c=BB(Emt.b.zd(),19).a),C=O;C<=I;C++)for(r=a;r<=c;r++)v=Gy(MD((S=LBn(n,C,r,T,E)).a)),p=(b=BB(S.b,15)).gc(),(v<g||v==g&&p<d)&&(g=v,d=p,u=b);for(l=u.Kc();l.Ob();){for(f=BB(l.Pb(),15),s=new HX(t),y=f.Kc();y.Ob();)PZ(m=BB(y.Pb(),10),s);w.c[w.c.length]=s}JPn(w),T.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function rXn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(n.b=t,n.a=BB(mMn(t,(HXn(),hgt)),19).a,n.c=BB(mMn(t,lgt),19).a,0==n.c&&(n.c=DWn),g=new M2(t.b,0);g.b<g.d.gc();){for(Px(g.b<g.d.gc()),d=BB(g.d.Xb(g.c=g.b++),29),o=new Np,l=-1,y=-1,m=new Wb(d.a);m.a<m.c.c.length;)v=BB(n0(m),10),F3((q_(),new oz(ZL(hbn(v).a.Kc(),new h))))>=n.a&&(r=yBn(n,v),l=e.Math.max(l,r.b),y=e.Math.max(y,r.d),WB(o,new rI(v,r)));for(E=new Np,f=0;f<l;++f)kG(E,0,(Px(g.b>0),g.a.Xb(g.c=--g.b),yR(g,T=new HX(n.b)),Px(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),T));for(u=new Wb(o);u.a<u.c.c.length;)if(c=BB(n0(u),46),w=BB(c.b,571).a)for(b=new Wb(w);b.a<b.c.c.length;)ukn(n,BB(n0(b),10),Uut,E);for(i=new Np,s=0;s<y;++s)WB(i,(yR(g,M=new HX(n.b)),M));for(a=new Wb(o);a.a<a.c.c.length;)if(c=BB(n0(a),46),j=BB(c.b,571).c)for(k=new Wb(j);k.a<k.c.c.length;)ukn(n,BB(n0(k),10),Xut,i)}for(p=new M2(t.b,0);p.b<p.d.gc();)Px(p.b<p.d.gc()),0==BB(p.d.Xb(p.c=p.b++),29).a.c.length&&fW(p)}function cXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(OTn(i,"Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void HSn(i);v=Gy(MD(mMn(t,(HXn(),Apt)))),o=Gy(MD(mMn(t,Tpt))),u=Gy(MD(mMn(t,kpt))),T=BB(mMn(t,rgt),336)==(Usn(),rmt),E=Gy(MD(mMn(t,cgt))),n.d=t,n.j.c=x8(Ant,HWn,1,0,5,1),n.a.c=x8(Ant,HWn,1,0,5,1),$U(n.k),f=VI((s=BB(xq(t.b,0),29)).a,(dxn(),jyt)),l=VI((d=BB(xq(t.b,t.b.c.length-1),29)).a,jyt),g=new Wb(t.b),p=null,C=0;do{for(RUn(n,p,m=g.a<g.c.c.length?BB(n0(g),29):null),MFn(n),P=0,y=C,b=!p||f&&p==s,w=!m||l&&m==d,(M=_k(rcn(NV(AV(new Rq(null,new w1(n.i,16)),new ya),new ma))))>0?(h=0,p&&(h+=o),h+=(M-1)*u,m&&(h+=o),T&&m&&(h=e.Math.max(h,nxn(m,u,v,E))),h<v&&!b&&!w&&(P=(v-h)/2,h=v),y+=h):!b&&!w&&(y+=v),m&&Tqn(m,y),j=new Wb(n.i);j.a<j.c.c.length;)(k=BB(n0(j),128)).a.c=C,k.a.b=y-C,k.F=P,k.p=!p;gun(n.a,n.i),C=y,m&&(C+=m.c.a),p=m,b=w}while(m);for(c=new Wb(n.j);c.a<c.c.c.length;)a=man(n,r=BB(n0(c),17)),hon(r,(hWn(),$lt),a),S=Dxn(n,r),hon(r,Nlt,S);t.f.a=C,n.d=null,HSn(i)}function aXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(d=0!=n.i,v=!1,g=null,mA(n.e)){if((h=t.gc())>0){for(l=h<100?null:new Fj(h),w=(s=new jcn(t)).g,g=x8(ANt,hQn,25,h,15,1),i=0,m=new gtn(h),r=0;r<n.i;++r){b=u=n.g[r];n:for(p=0;p<2;++p){for(o=h;--o>=0;)if(null!=b?Nfn(b,w[o]):GI(b)===GI(w[o])){g.length<=i&&aHn(g,0,g=x8(ANt,hQn,25,2*g.length,15,1),0,i),g[i++]=r,f9(m,w[o]);break n}if(GI(b)===GI(u))break}}if(s=m,w=m.g,h=i,i>g.length&&aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i),i>0){for(v=!0,c=0;c<i;++c)l=zK(n,BB(b=w[c],72),l);for(a=i;--a>=0;)Lyn(n,g[a]);if(i!=h){for(r=h;--r>=i;)Lyn(s,r);aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i)}t=s}}}else for(t=jyn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(Lyn(n,r),v=!0);if(v){if(null!=g){for(f=1==(e=t.gc())?yZ(n,4,t.Kc().Pb(),null,g[0],d):yZ(n,6,t,g,g[0],d),l=e<100?null:new Fj(e),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l?(l.Ei(f),l.Fi()):ban(n.e,f)}else{for(l=$K(t.gc()),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l&&l.Fi()}return!0}return!1}function uXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m;for((e=new hvn(t)).a||g_n(t),s=lRn(t),o=new pJ,g=new Qxn,d=new Wb(t.a);d.a<d.c.c.length;)for(r=new oz(ZL(lbn(BB(n0(d),10)).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c.i.k!=(uSn(),Mut)&&i.d.i.k!=Mut||JIn(o,upn((f=lzn(n,i,s,g)).d),f.a);for(a=new Np,m=BB(mMn(e.c,(hWn(),Xft)),21).Kc();m.Ob();){switch(v=BB(m.Pb(),61),w=g.c[v.g],b=g.b[v.g],u=g.a[v.g],c=null,p=null,v.g){case 4:c=new UV(n.d.a,w,s.b.a-n.d.a,b-w),p=new UV(n.d.a,w,u,b-w),zH(s,new xC(c.c+c.b,c.d)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 2:c=new UV(s.a.a,w,n.c.a-s.a.a,b-w),p=new UV(n.c.a-u,w,u,b-w),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c,c.d+c.a));break;case 1:c=new UV(w,n.d.b,b-w,s.b.b-n.d.b),p=new UV(w,n.d.b,b-w,u),zH(s,new xC(c.c,c.d+c.a)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 3:c=new UV(w,s.a.b,b-w,n.c.b-s.a.b),p=new UV(w,n.c.b-u,b-w,u),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c+c.b,c.d))}c&&((l=new nm).d=v,l.b=c,l.c=p,l.a=JQ(BB(h6(o,upn(v)),21)),a.c[a.c.length]=l)}return gun(e.b,a),e.d=Bhn(nGn(s)),e}function oXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(null==i.p[t.p]){o=!0,i.p[t.p]=0,u=t,d=i.o==(oZ(),ryt)?KQn:RQn;do{c=n.b.e[u.p],a=u.c.a.c.length,i.o==ryt&&c>0||i.o==cyt&&c<a-1?(s=null,h=null,s=i.o==cyt?BB(xq(u.c.a,c+1),10):BB(xq(u.c.a,c-1),10),oXn(n,h=i.g[s.p],i),d=n.e.bg(d,t,u),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=K$(n.d,u,s),i.o==cyt?(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d-w-u.d.a-u.o.b-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])+s.o.b+s.d.a+w+u.d.d-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=Gy(MD(mMn(n.a,(HXn(),Opt)))),b=krn(n,i.j[t.p]),f=krn(n,i.j[h.p]),i.o==cyt?U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])+u.o.b+u.d.a+w-(Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d)):U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])-u.d.d-Gy(i.p[h.p])-Gy(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.bg(d,t,u),u=i.a[u.p]}while(u!=t);Ov(n.e,t)}}function sXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(f=t,h=new pJ,l=new pJ,c=N2(f,x6n),GSn((i=new fQ(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new HL(h,h.c))).Kc();d.Ob();)for(w=BB(d.Pb(),202),u=BB(h6(h,w),21).Kc();u.Ob();){if(a=u.Pb(),!(b=BB(sen(n.d,a),202)))throw r=R2(f,q6n),Hp(new ek(V6n+a+Q6n+r+W6n));!w.e&&(w.e=new hK(FOt,w,10,9)),f9(w.e,b)}for(p=(l.i||(l.i=new HL(l,l.c))).Kc();p.Ob();)for(g=BB(p.Pb(),202),s=BB(h6(l,g),21).Kc();s.Ob();){if(o=s.Pb(),!(b=BB(sen(n.d,o),202)))throw r=R2(f,q6n),Hp(new ek(V6n+o+Q6n+r+W6n));!g.g&&(g.g=new hK(FOt,g,9,10)),f9(g.g,b)}!e.b&&(e.b=new hK(KOt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new hK(KOt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new hK(KOt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new hK(KOt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new eU(FOt,e,6,6)),e.a).i&&(Svn(v=BB(Wtn((!e.a&&(e.a=new eU(FOt,e,6,6)),e.a),0),202))||Pvn(v)||(Lin(v,BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),Nin(v,BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82))))}function hXn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,k=(m=n.a).length;y<k;++y){for(v=m[y],s=DWn,h=DWn,w=new Wb(v.e);w.a<w.c.c.length;)(a=(l=BB(n0(w),10)).c?E7(l.c.a,l,0):-1)>0?(f=BB(xq(l.c.a,a-1),10),T=K$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+T)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=BB(xq(l.c.a,a+1),10),T=K$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+T)):p=2*l.n.b,h=e.Math.min(p,h);for(o=DWn,c=!1,S=new Wb((r=BB(xq(v.e,0),10)).j);S.a<S.c.c.length;)for(M=BB(n0(S),11),d=r.n.b+M.n.b+M.a.b,i=new Wb(M.e);i.a<i.c.c.length;)t=(j=BB(n0(i),17).c).i.n.b+j.n.b+j.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);for(E=new Wb((u=BB(xq(v.e,v.e.c.length-1),10)).j);E.a<E.c.c.length;)for(j=BB(n0(E),11),d=u.n.b+j.n.b+j.a.b,i=new Wb(j.g);i.a<i.c.c.length;)t=(M=BB(n0(i),17).d).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);if(c&&0!=o)for(b=new Wb(v.e);b.a<b.c.c.length;)(l=BB(n0(b),10)).n.b+=o}}function fXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.e,t)){if(FT(BB(RX(n.e,t),53),e))return-1}else VW(n.e,t,new Rv);if(hU(n.e,e)){if(FT(BB(RX(n.a,e),53),t))return 1}else VW(n.e,e,new Rv);if(n.c==(mon(),xvt)||!Lx(t,(hWn(),wlt))||!Lx(e,(hWn(),wlt))){if(o=BB(EN(M4(Qon(AV(new Rq(null,new w1(t.j,16)),new sc)),new hc)),11),h=BB(EN(M4(Qon(AV(new Rq(null,new w1(e.j,16)),new fc)),new lc)),11),o&&h){if(u=o.i,s=h.i,u&&u==s){for(l=new Wb(u.j);l.a<l.c.c.length;){if((f=BB(n0(l),11))==o)return aKn(n,e,t),-1;if(f==h)return aKn(n,t,e),1}return E$(iEn(n,t),iEn(n,e))}for(d=0,g=(w=n.d).length;d<g;++d){if((b=w[d])==u)return aKn(n,e,t),-1;if(b==s)return aKn(n,t,e),1}}if(!Lx(t,(hWn(),wlt))||!Lx(e,wlt))return(r=iEn(n,t))>(a=iEn(n,e))?aKn(n,t,e):aKn(n,e,t),r<a?-1:r>a?1:0}return(i=BB(mMn(t,(hWn(),wlt)),19).a)>(c=BB(mMn(e,wlt),19).a)?aKn(n,t,e):aKn(n,e,t),i<c?-1:i>c?1:0}function lXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(qy(TD(ZAn(t,(sWn(),zSt)))))return SQ(),SQ(),set;if(o=0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,s=!(h=yIn(t)).dc(),o||s){if(!(r=BB(ZAn(t,mPt),149)))throw Hp(new rk("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(d=OC(r,(hAn(),nAt)),Ngn(t),!o&&s&&!d)return SQ(),SQ(),set;if(u=new Np,GI(ZAn(t,ESt))===GI((ufn(),pCt))&&(OC(r,YOt)||OC(r,QOt)))for(l=pRn(n,t),Frn(b=new YT,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=b.b;)Ngn(f=BB(0==b.b?null:(Px(0!=b.b),Atn(b,b.a.a)),33)),GI(ZAn(f,ESt))===GI(mCt)||P8(f,eSt)&&!j5(r,ZAn(f,mPt))?(gun(u,lXn(n,f,e,i)),Ypn(f,ESt,mCt),KKn(f)):Frn(b,(!f.a&&(f.a=new eU(UOt,f,10,11)),f.a));else for(l=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,a=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));a.e!=a.i.gc();)gun(u,lXn(n,c=BB(kpn(a),33),e,i)),KKn(c);for(w=new Wb(u);w.a<w.c.c.length;)Ypn(BB(n0(w),79),zSt,(hN(),!0));return Ugn(t,r,mcn(i,l)),w_n(u),s&&d?h:(SQ(),SQ(),set)}return SQ(),SQ(),set}function bXn(n,t,e,i,r,c,a,u,o){var s,h,f,l,b,w,d;switch(b=e,Bl(h=new $vn(o),(uSn(),Mut)),hon(h,(hWn(),Yft),a),hon(h,(HXn(),ept),(QEn(),XCt)),d=Gy(MD(n.We(tpt))),hon(h,tpt,d),CZ(f=new CSn,h),t!=QCt&&t!=YCt||(b=i>=0?hwn(u):Tln(hwn(u)),n.Ye(upt,b)),s=new Gj,l=!1,n.Xe(npt)?(Hx(s,BB(n.We(npt),8)),l=!0):yL(s,a.a/2,a.b/2),b.g){case 4:hon(h,kgt,(Tbn(),Flt)),hon(h,Gft,(Jun(),$ht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),oIt)),l||(s.a=a.a),s.a-=a.a;break;case 2:hon(h,kgt,(Tbn(),Hlt)),hon(h,Gft,(Jun(),Oht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),CIt)),l||(s.a=0);break;case 1:hon(h,ilt,(z7(),Cft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),SIt)),l||(s.b=a.b),s.b-=a.b;break;case 3:hon(h,ilt,(z7(),Sft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),sIt)),l||(s.b=0)}if(Hx(f.n,s),hon(h,npt,s),t==UCt||t==WCt||t==XCt){if(w=0,t==UCt&&n.Xe(ipt))switch(b.g){case 1:case 2:w=BB(n.We(ipt),19).a;break;case 3:case 4:w=-BB(n.We(ipt),19).a}else switch(b.g){case 4:case 2:w=c.b,t==WCt&&(w/=r.b);break;case 1:case 3:w=c.a,t==WCt&&(w/=r.a)}hon(h,Tlt,w)}return hon(h,Qft,b),h}function wXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E;if((e=Gy(MD(mMn(n.a.j,(HXn(),_dt)))))<-1||!n.a.i||LK(BB(mMn(n.a.o,ept),98))||abn(n.a.o,(kUn(),oIt)).gc()<2&&abn(n.a.o,CIt).gc()<2)return!0;if(n.a.c.Rf())return!1;for(y=0,m=0,v=new Np,o=0,s=(u=n.a.e).length;o<s;++o){for(b=0,d=(l=u[o]).length;b<d;++b)if((f=l[b]).k!=(uSn(),Iut)){for(i=n.b[f.c.p][f.p],f.k==Mut?(i.b=1,BB(mMn(f,(hWn(),dlt)),11).j==(kUn(),oIt)&&(m+=i.a)):(E=abn(f,(kUn(),CIt))).dc()||!tL(E,new Nc)?i.c=1:((r=abn(f,oIt)).dc()||!tL(r,new Lc))&&(y+=i.a),a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);for(j=new oz(new WL((g=Wen(Pun(Gk(xnt,1),HWn,20,0,[abn(f,(kUn(),sIt)),abn(f,SIt)]))).a.length,g.a));dAn(j);)k=BB(U5(j),11),(p=BB(mMn(k,(hWn(),Elt)),10))&&(y+=i.c,m+=i.b,X8(n,i,p))}else v.c[v.c.length]=f;for(w=new Wb(v);w.a<w.c.c.length;)for(f=BB(n0(w),10),i=n.b[f.c.p][f.p],a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);v.c=x8(Ant,HWn,1,0,5,1)}return(0==(t=y+m)?RQn:(y-m)/t)>=e}function dXn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=Swn((SQ(),new Hb(new Ob(lAt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=Swn((SQ(),new Hb(new Ob(lAt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=Swn((SQ(),new Hb(new Ob(lAt.d))));n.postMessage({id:e.id,data:c});break;case"register":lGn(e.algorithms),n.postMessage({id:e.id});break;case"layout":xBn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(aE(),typeof document===gYn&&typeof self!==gYn){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==gYn&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function gXn(n){n.N||(n.N=!0,n.b=kan(n,0),Rrn(n.b,0),Rrn(n.b,1),Rrn(n.b,2),n.bb=kan(n,1),Rrn(n.bb,0),Rrn(n.bb,1),n.fb=kan(n,2),Rrn(n.fb,3),Rrn(n.fb,4),Krn(n.fb,5),n.qb=kan(n,3),Rrn(n.qb,0),Krn(n.qb,1),Krn(n.qb,2),Rrn(n.qb,3),Rrn(n.qb,4),Krn(n.qb,5),Rrn(n.qb,6),n.a=jan(n,4),n.c=jan(n,5),n.d=jan(n,6),n.e=jan(n,7),n.f=jan(n,8),n.g=jan(n,9),n.i=jan(n,10),n.j=jan(n,11),n.k=jan(n,12),n.n=jan(n,13),n.o=jan(n,14),n.p=jan(n,15),n.q=jan(n,16),n.s=jan(n,17),n.r=jan(n,18),n.t=jan(n,19),n.u=jan(n,20),n.v=jan(n,21),n.w=jan(n,22),n.B=jan(n,23),n.A=jan(n,24),n.C=jan(n,25),n.D=jan(n,26),n.F=jan(n,27),n.G=jan(n,28),n.H=jan(n,29),n.J=jan(n,30),n.I=jan(n,31),n.K=jan(n,32),n.M=jan(n,33),n.L=jan(n,34),n.P=jan(n,35),n.Q=jan(n,36),n.R=jan(n,37),n.S=jan(n,38),n.T=jan(n,39),n.U=jan(n,40),n.V=jan(n,41),n.X=jan(n,42),n.W=jan(n,43),n.Y=jan(n,44),n.Z=jan(n,45),n.$=jan(n,46),n._=jan(n,47),n.ab=jan(n,48),n.cb=jan(n,49),n.db=jan(n,50),n.eb=jan(n,51),n.gb=jan(n,52),n.hb=jan(n,53),n.ib=jan(n,54),n.jb=jan(n,55),n.kb=jan(n,56),n.lb=jan(n,57),n.mb=jan(n,58),n.nb=jan(n,59),n.ob=jan(n,60),n.pb=jan(n,61))}function pXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.a)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.a+d.o.a+d.d.c);else m=t.f.a-t.c.a;for(m-=t.c.a,g=new Wb(n);g.a<g.c.c.length;){switch(Zp((d=BB(n0(g),10)).n,m-d.o.a),cH(d.f),Vmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Zp(BB(mMn(d,spt),8),m-d.o.a),BB(mMn(d,kdt),248).g){case 1:hon(d,kdt,(wvn(),$Mt));break;case 2:hon(d,kdt,(wvn(),AMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Zp((y=BB(n0(k),11)).n,v.a-y.o.a),Zp(y.a,y.o.a),qCn(y,Icn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a=m-i.a;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).a=m-o.a;for(b=new Wb(c.b);b.a<b.c.c.length;)Zp((f=BB(n0(b),70)).n,m-f.o.a)}for(w=new Wb(y.f);w.a<w.c.c.length;)Zp((f=BB(n0(w),70)).n,y.o.a-f.o.a)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Icn(BB(mMn(d,Qft),61))),YMn(d)),l=new Wb(d.b);l.a<l.c.c.length;)Vmn(f=BB(n0(l),70)),Zp(f.n,v.a-f.o.a)}}function vXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.b)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.b+d.o.b+d.d.a);else m=t.f.b-t.c.b;for(m-=t.c.b,g=new Wb(n);g.a<g.c.c.length;){switch(Jp((d=BB(n0(g),10)).n,m-d.o.b),aH(d.f),Qmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Jp(BB(mMn(d,spt),8),m-d.o.b),BB(mMn(d,kdt),248).g){case 3:hon(d,kdt,(wvn(),IMt));break;case 4:hon(d,kdt,(wvn(),LMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Jp((y=BB(n0(k),11)).n,v.b-y.o.b),Jp(y.a,y.o.b),qCn(y,Ocn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).b=m-i.b;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).b=m-o.b;for(b=new Wb(c.b);b.a<b.c.c.length;)Jp((f=BB(n0(b),70)).n,m-f.o.b)}for(w=new Wb(y.f);w.a<w.c.c.length;)Jp((f=BB(n0(w),70)).n,y.o.b-f.o.b)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ocn(BB(mMn(d,Qft),61))),gln(d)),l=new Wb(d.b);l.a<l.c.c.length;)Qmn(f=BB(n0(l),70)),Jp(f.n,v.b-f.o.b)}}function mXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(f=!1,s=n+1,l1(n,t.c.length),a=(h=BB(t.c[n],200)).a,u=null,c=0;c<h.a.c.length;c++)if(l1(c,a.c.length),!(r=BB(a.c[c],187)).c)if(0!=r.b.c.length){if(r.k||(u&&Gmn(u),Tvn(r,(u=new KJ(u?u.e+u.d+i:0,h.f,i)).e+u.d,h.f),WB(h.d,u),xcn(u,r),r.k=!0),o=null,b=null,c<h.a.c.length-1?b=BB(xq(h.a,c+1),187):s<t.c.length&&0!=(l1(s,t.c.length),BB(t.c[s],200)).a.c.length&&(b=BB(xq((l1(s,t.c.length),BB(t.c[s],200)).a,0),187)),l=!1,(o=b)&&(l=!Nfn(o.j,h)),o){if(0==o.b.c.length){Tkn(h,o);break}if(p9(r,e-r.s),Gmn(r.q),f|=nSn(h,r,o,e,i),0==o.b.c.length)for(Tkn((l1(s,t.c.length),BB(t.c[s],200)),o),o=null;t.c.length>s&&0==(l1(s,t.c.length),BB(t.c[s],200)).a.c.length;)y7(t,(l1(s,t.c.length),t.c[s]));if(!o){--c;continue}if(A_n(t,h,r,o,l,e,s,i)){f=!0;continue}if(l){if(JBn(t,h,r,o,e,s,i)){f=!0;continue}if(Ahn(h,r)){r.c=!0,f=!0;continue}}else if(Ahn(h,r)){r.c=!0,f=!0;continue}if(f)continue}Ahn(h,r)?(r.c=!0,f=!0,o&&(o.k=!1)):Gmn(r.q)}else $T(),Tkn(h,r),--c,f=!0;return f}function yXn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(g=0,P=0,h=new Wb(n.b);h.a<h.c.c.length;)(s=BB(n0(h),157)).c&&ozn(s.c),g=e.Math.max(g,iG(s)),P+=iG(s)*eG(s);for(p=P/n.b.c.length,S=hjn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*u))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,DH(M=new YT,iln(0)),E=new YT,f=new M2(n.b,0),d=null,o=new Np;f.b<f.d.gc();)Px(f.b<f.d.gc()),I=iG(s=BB(f.d.Xb(f.c=f.b++),157)),b=eG(s),O+I>g&&(a&&(fO(E,w),fO(M,iln(f.b-1)),WB(n.d,d),o.c=x8(Ant,HWn,1,0,5,1)),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),o.c[o.c.length]=s,Mpn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(gun(n.a,o),WB(n.d,BB(xq(o,o.c.length-1),157)),l=e.Math.max(l,r),(C=A+w+i.a)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new M2(n.b,0),fO(M,iln(n.b.c.length)),m=BB(b3(T=spn(M,0)),19).a,fO(E,w),j=spn(E,0),k=0;f.b<f.d.gc();)f.b==m&&(O=i.b,k=Gy(MD(b3(j))),m=BB(b3(T),19).a),Px(f.b<f.d.gc()),Udn(s=BB(f.d.Xb(f.c=f.b++),157),k),f.b==m&&(v=l-O-i.c,y=iG(s),zdn(s,v),Fln(s,(v-y)/2,0)),O+=iG(s)+t;return new xC(l,C)}function kXn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Vl();case 13:return n.Wl();case 23:return n.Nl();case 22:return n.Sl();case 18:return n.Pl();case 8:QXn(n),wWn(),r=oNt;break;case 9:return n.vl(!0);case 19:return n.wl();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.ul(n.a),QXn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.tl())<BQn?(wWn(),wWn(),r=new oG(0,t)):r=pz(Xln(t));break;case 99:return n.Fl();case 67:return n.Al();case 105:return n.Il();case 73:return n.Bl();case 103:return n.Gl();case 88:return n.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.xl();case 80:case 112:if(!(r=DIn(n,n.a)))throw Hp(new ak(kWn((u$(),O8n))));break;default:r=QH(n.a)}QXn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw Hp(new ak(kWn((u$(),I8n))));r=QH(n.a),e=n.a,QXn(n),(64512&e)==HQn&&0==n.c&&56320==(64512&n.a)&&((i=x8(ONt,WVn,25,2,15,1))[0]=e&QVn,i[1]=n.a&QVn,r=oU(pz(Bdn(i,0,i.length)),0),QXn(n));break;default:throw Hp(new ak(kWn((u$(),I8n))))}return r}function jXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(r=new Np,c=DWn,a=DWn,u=DWn,i)for(c=n.f.a,d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).g);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((f=BB(gx(o.a),8)).a<c&&(a=c-f.a,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=f.a),f.a<=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,1),8).b-f.b)))));else for(d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).e);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((b=BB(px(o.a),8)).a>c&&(a=b.a-c,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=b.a),b.a>=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,o.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&u>t.o.b/2){for(CZ(w=new CSn,t),qCn(w,(kUn(),sIt)),w.n.a=t.o.a/2,CZ(g=new CSn,t),qCn(g,SIt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Wb(r);s.a<s.c.c.length;)o=BB(n0(s),17),i?(h=BB(dH(o.a),8),(0==o.a.b?g1(o.d):BB(gx(o.a),8)).b>=h.b?SZ(o,g):SZ(o,w)):(h=BB(gH(o.a),8),(0==o.a.b?g1(o.c):BB(px(o.a),8)).b>=h.b?MZ(o,g):MZ(o,w)),(l=BB(mMn(o,(HXn(),vgt)),74))&&ywn(l,h,!0);t.n.a=c-t.o.a/2}}function EXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),h=BB(sen(n.g,kIn(zJ(s,T6n))),33),i=null,(a=zJ(s,"sourcePort"))&&(i=kIn(a)),f=BB(sen(n.j,i),118),!h)throw Hp(new ek("An edge must have a source node (edge id: '"+Qdn(s)+W6n));if(f&&!wW(WJ(f),h))throw Hp(new ek("The source port of an edge must be a port of the edge's source node (edge id: '"+R2(s,q6n)+W6n));if(!o.b&&(o.b=new hK(KOt,o,4,7)),f9(o.b,f||h),l=BB(sen(n.g,kIn(zJ(s,Y6n))),33),r=null,(u=zJ(s,"targetPort"))&&(r=kIn(u)),b=BB(sen(n.j,r),118),!l)throw Hp(new ek("An edge must have a target node (edge id: '"+Qdn(s)+W6n));if(b&&!wW(WJ(b),l))throw Hp(new ek("The target port of an edge must be a port of the edge's target node (edge id: '"+R2(s,q6n)+W6n));if(!o.c&&(o.c=new hK(KOt,o,5,8)),f9(o.c,b||l),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),s$n(s,o),xon(n,s,o)}function TXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;return f=CFn(HN(n,(kUn(),wIt)),t),w=ayn(HN(n,dIt),t),y=ayn(HN(n,EIt),t),T=uyn(HN(n,MIt),t),l=uyn(HN(n,hIt),t),v=ayn(HN(n,jIt),t),d=ayn(HN(n,gIt),t),j=ayn(HN(n,TIt),t),k=ayn(HN(n,fIt),t),M=uyn(HN(n,bIt),t),p=ayn(HN(n,yIt),t),m=ayn(HN(n,mIt),t),E=ayn(HN(n,lIt),t),S=uyn(HN(n,kIt),t),b=uyn(HN(n,pIt),t),g=ayn(HN(n,vIt),t),e=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.a,T.a,j.a,S.a])),i=Lon(Pun(Gk(xNt,1),qQn,25,15,[w.a,f.a,y.a,g.a])),r=p.a,c=Lon(Pun(Gk(xNt,1),qQn,25,15,[d.a,l.a,k.a,b.a])),s=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.b,w.b,d.b,m.b])),o=Lon(Pun(Gk(xNt,1),qQn,25,15,[T.b,f.b,l.b,g.b])),h=M.b,u=Lon(Pun(Gk(xNt,1),qQn,25,15,[j.b,y.b,k.b,E.b])),w9(HN(n,wIt),e+r,s+h),w9(HN(n,vIt),e+r,s+h),w9(HN(n,dIt),e+r,0),w9(HN(n,EIt),e+r,s+h+o),w9(HN(n,MIt),0,s+h),w9(HN(n,hIt),e+r+i,s+h),w9(HN(n,gIt),e+r+i,0),w9(HN(n,TIt),0,s+h+o),w9(HN(n,fIt),e+r+i,s+h+o),w9(HN(n,bIt),0,s),w9(HN(n,yIt),e,0),w9(HN(n,lIt),0,s+h+o),w9(HN(n,pIt),e+r+i,0),(a=new Gj).a=Lon(Pun(Gk(xNt,1),qQn,25,15,[e+i+r+c,M.a,m.a,E.a])),a.b=Lon(Pun(Gk(xNt,1),qQn,25,15,[s+o+h+u,p.b,S.b,b.b])),a}function MXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g;for(d=new Np,l=new Wb(n.d.b);l.a<l.c.c.length;)for(w=new Wb(BB(n0(l),29).a);w.a<w.c.c.length;){for(b=BB(n0(w),10),r=BB(RX(n.f,b),57),o=new oz(ZL(lbn(b).a.Kc(),new h));dAn(o);)if(s=!0,f=null,(i=spn((a=BB(U5(o),17)).a,0)).b!=i.d.c){for(t=BB(b3(i),8),e=null,a.c.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,d.c[d.c.length]=g),a.c.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,d.c[d.c.length]=g);i.b!=i.d.c;)e=BB(b3(i),8),aen(t.b,e.b)||(f=new PBn(t,e,null,a),d.c[d.c.length]=f,s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=BB(RX(n.f,a.d.i),57),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(u=new oz(ZL(fbn(b).a.Kc(),new h));dAn(u);)0!=(a=BB(U5(u),17)).a.b&&(t=BB(px(a.a),8),a.d.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,d.c[d.c.length]=g),a.d.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,d.c[d.c.length]=g))}return d}function SXn(n,t,e){var i,r,c,a,u,o,s;if(OTn(e,"Network simplex node placement",1),n.e=t,n.n=BB(mMn(t,(hWn(),Alt)),304),oqn(n),REn(n),JT(wnn(new Rq(null,new w1(n.e.b,16)),new Hc),new cg(n)),JT(AV(wnn(AV(wnn(new Rq(null,new w1(n.e.b,16)),new ta),new ea),new ia),new ra),new rg(n)),qy(TD(mMn(n.e,(HXn(),xgt))))&&(OTn(c=mcn(e,1),"Straight Edges Pre-Processing",1),jzn(n),HSn(c)),Mvn(n.f),r=BB(mMn(t,xpt),19).a*n.f.a.c.length,WKn(Qk(Yk(B_(n.f),r),!1),mcn(e,1)),0!=n.d.a.gc()){for(OTn(c=mcn(e,1),"Flexible Where Space Processing",1),a=BB($N(Oz($V(new Rq(null,new w1(n.f.a,16)),new qc),new Dc)),19).a,u=BB($N(Iz($V(new Rq(null,new w1(n.f.a,16)),new Gc),new Rc)),19).a-a,o=AN(new qv,n.f),s=AN(new qv,n.f),UNn(aM(cM(rM(uM(new Hv,2e4),u),o),s)),JT(AV(AV(LU(n.i),new zc),new Uc),new zV(a,o,u,s)),i=n.d.a.ec().Kc();i.Ob();)BB(i.Pb(),213).g=1;WKn(Qk(Yk(B_(n.f),r),!1),mcn(c,1)),HSn(c)}qy(TD(mMn(t,xgt)))&&(OTn(c=mcn(e,1),"Straight Edges Post-Processing",1),SPn(n),HSn(c)),QGn(n),n.e=null,n.f=null,n.i=null,n.c=null,$U(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),HSn(e)}function PXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(u=new Wb(n.a.b);u.a<u.c.c.length;)for(m=new Wb(BB(n0(u),29).a);m.a<m.c.c.length;)v=BB(n0(m),10),t.g[v.p]=v,t.a[v.p]=v,t.d[v.p]=0;for(o=n.a.b,t.c==(gJ(),nyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),a=o.Kc();a.Ob();)for(b=-1,l=BB(a.Pb(),29).a,t.o==(oZ(),cyt)&&(b=DWn,l=cL(l,152)?o6(BB(l,152)):cL(l,131)?BB(l,131).a:cL(l,54)?new fy(l):new CT(l)),k=l.Kc();k.Ob();)if(y=BB(k.Pb(),10),f=null,(f=t.c==nyt?BB(xq(n.b.f,y.p),15):BB(xq(n.b.b,y.p),15)).gc()>0)if(r=f.gc(),s=CJ(e.Math.floor((r+1)/2))-1,c=CJ(e.Math.ceil((r+1)/2))-1,t.o==cyt)for(h=c;h>=s;h--)t.a[y.p]==y&&(d=BB(f.Xb(h),46),w=BB(d.a,10),!FT(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=y,t.g[y.p]=t.g[w.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[y.p]==y&&(p=BB(f.Xb(h),46),g=BB(p.a,10),!FT(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=y,t.g[y.p]=t.g[g.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[g.p]))}function CXn(){CXn=O,eE(),POt=gOt.a,BB(Wtn(QQ(gOt.a),0),18),kOt=gOt.f,BB(Wtn(QQ(gOt.f),0),18),BB(Wtn(QQ(gOt.f),1),34),SOt=gOt.n,BB(Wtn(QQ(gOt.n),0),34),BB(Wtn(QQ(gOt.n),1),34),BB(Wtn(QQ(gOt.n),2),34),BB(Wtn(QQ(gOt.n),3),34),jOt=gOt.g,BB(Wtn(QQ(gOt.g),0),18),BB(Wtn(QQ(gOt.g),1),34),vOt=gOt.c,BB(Wtn(QQ(gOt.c),0),18),BB(Wtn(QQ(gOt.c),1),18),EOt=gOt.i,BB(Wtn(QQ(gOt.i),0),18),BB(Wtn(QQ(gOt.i),1),18),BB(Wtn(QQ(gOt.i),2),18),BB(Wtn(QQ(gOt.i),3),18),BB(Wtn(QQ(gOt.i),4),34),TOt=gOt.j,BB(Wtn(QQ(gOt.j),0),18),mOt=gOt.d,BB(Wtn(QQ(gOt.d),0),18),BB(Wtn(QQ(gOt.d),1),18),BB(Wtn(QQ(gOt.d),2),18),BB(Wtn(QQ(gOt.d),3),18),BB(Wtn(QQ(gOt.d),4),34),BB(Wtn(QQ(gOt.d),5),34),BB(Wtn(QQ(gOt.d),6),34),BB(Wtn(QQ(gOt.d),7),34),pOt=gOt.b,BB(Wtn(QQ(gOt.b),0),34),BB(Wtn(QQ(gOt.b),1),34),yOt=gOt.e,BB(Wtn(QQ(gOt.e),0),34),BB(Wtn(QQ(gOt.e),1),34),BB(Wtn(QQ(gOt.e),2),34),BB(Wtn(QQ(gOt.e),3),34),BB(Wtn(QQ(gOt.e),4),18),BB(Wtn(QQ(gOt.e),5),18),BB(Wtn(QQ(gOt.e),6),18),BB(Wtn(QQ(gOt.e),7),18),BB(Wtn(QQ(gOt.e),8),18),BB(Wtn(QQ(gOt.e),9),18),BB(Wtn(QQ(gOt.e),10),34),MOt=gOt.k,BB(Wtn(QQ(gOt.k),0),34),BB(Wtn(QQ(gOt.k),1),34)}function IXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(M=new YT,j=new YT,g=-1,o=new Wb(n);o.a<o.c.c.length;){for((a=BB(n0(o),128)).s=g--,h=0,m=0,c=new Wb(a.t);c.a<c.c.c.length;)m+=(i=BB(n0(c),268)).c;for(r=new Wb(a.i);r.a<r.c.c.length;)h+=(i=BB(n0(r),268)).c;a.n=h,a.u=m,0==m?r5(j,a,j.c.b,j.c):0==h&&r5(M,a,M.c.b,M.c)}for(P=S4(n),d=(f=n.c.length)+1,p=f-1,b=new Np;0!=P.a.gc();){for(;0!=j.b;)Px(0!=j.b),k=BB(Atn(j,j.a.a),128),P.a.Bc(k),k.s=p--,cLn(k,M,j);for(;0!=M.b;)Px(0!=M.b),E=BB(Atn(M,M.a.a),128),P.a.Bc(E),E.s=d++,cLn(E,M,j);for(w=_Vn,s=P.a.ec().Kc();s.Ob();)(v=(a=BB(s.Pb(),128)).u-a.n)>=w&&(v>w&&(b.c=x8(Ant,HWn,1,0,5,1),w=v),b.c[b.c.length]=a);0!=b.c.length&&(l=BB(xq(b,pvn(t,b.c.length)),128),P.a.Bc(l),l.s=d++,cLn(l,M,j),b.c=x8(Ant,HWn,1,0,5,1))}for(y=n.c.length+1,u=new Wb(n);u.a<u.c.c.length;)(a=BB(n0(u),128)).s<f&&(a.s+=y);for(T=new Wb(n);T.a<T.c.c.length;)for(e=new M2((E=BB(n0(T),128)).t,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),S=(i=BB(e.d.Xb(e.c=e.b++),268)).b,E.s>S.s&&(fW(e),y7(S.i,i),i.c>0&&(i.a=S,WB(S.t,i),i.b=E,WB(E.i,i)))}function OXn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.Ml();case 12:return n.Ol();case 14:return n.Ql();case 15:return n.Tl();case 16:return n.Rl();case 17:return n.Ul();case 21:return QXn(n),wWn(),wWn(),sNt;case 10:switch(n.a){case 65:return n.yl();case 90:return n.Dl();case 122:return n.Kl();case 98:return n.El();case 66:return n.zl();case 60:return n.Jl();case 62:return n.Hl()}}switch(c=kXn(n),t=n.c){case 3:return n.Zl(c);case 4:return n.Xl(c);case 5:return n.Yl(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=fV(n.i,r++))>=48&&t<=57))throw Hp(new ak(kWn((u$(),X8n))));for(i=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(e=i,44==t){if(r>=n.j)throw Hp(new ak(kWn((u$(),V8n))));if((t=fV(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(i>e)throw Hp(new ak(kWn((u$(),Q8n))))}else e=-1}if(125!=t)throw Hp(new ak(kWn((u$(),W8n))));n.sl(r)?(wWn(),wWn(),c=new h4(9,c),n.d=r+1):(wWn(),wWn(),c=new h4(3,c),n.d=r),c.dm(i),c.cm(e),QXn(n)}}return c}function AXn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(w=new J6(t.b),v=new J6(t.b),l=new J6(t.b),j=new J6(t.b),d=new J6(t.b),k=spn(t,0);k.b!=k.d.c;)for(u=new Wb((m=BB(b3(k),11)).g);u.a<u.c.c.length;)if((c=BB(n0(u),17)).c.i==c.d.i){if(m.j==c.d.j){j.c[j.c.length]=c;continue}if(m.j==(kUn(),sIt)&&c.d.j==SIt){d.c[d.c.length]=c;continue}}for(o=new Wb(d);o.a<o.c.c.length;)__n(n,c=BB(n0(o),17),e,i,(kUn(),oIt));for(a=new Wb(j);a.a<a.c.c.length;)c=BB(n0(a),17),Bl(E=new $vn(n),(uSn(),Iut)),hon(E,(HXn(),ept),(QEn(),XCt)),hon(E,(hWn(),dlt),c),hon(T=new CSn,dlt,c.d),qCn(T,(kUn(),CIt)),CZ(T,E),hon(M=new CSn,dlt,c.c),qCn(M,oIt),CZ(M,E),hon(c.c,Elt,E),hon(c.d,Elt,E),SZ(c,null),MZ(c,null),e.c[e.c.length]=E,hon(E,Bft,iln(2));for(y=spn(t,0);y.b!=y.d.c;)s=(m=BB(b3(y),11)).e.c.length>0,g=m.g.c.length>0,s&&g?l.c[l.c.length]=m:s?w.c[w.c.length]=m:g&&(v.c[v.c.length]=m);for(b=new Wb(w);b.a<b.c.c.length;)WB(r,HBn(n,BB(n0(b),11),null,e));for(p=new Wb(v);p.a<p.c.c.length;)WB(r,HBn(n,null,BB(n0(p),11),e));for(f=new Wb(l);f.a<f.c.c.length;)WB(r,HBn(n,h=BB(n0(f),11),h,e))}function $Xn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(d=new xC(RQn,RQn),t=new xC(KQn,KQn),k=new Wb(n);k.a<k.c.c.length;)y=BB(n0(k),8),d.a=e.Math.min(d.a,y.a),d.b=e.Math.min(d.b,y.b),t.a=e.Math.max(t.a,y.a),t.b=e.Math.max(t.b,y.b);for(s=new xC(t.a-d.a,t.b-d.b),h=new ZFn(new xC(d.a-50,d.b-s.a-50),new xC(d.a-50,t.b+s.a+50),new xC(t.a+s.b/2+50,d.b+s.b/2)),m=new Rv,c=new Np,i=new Np,m.a.zc(h,m),E=new Wb(n);E.a<E.c.c.length;){for(j=BB(n0(E),8),c.c=x8(Ant,HWn,1,0,5,1),v=m.a.ec().Kc();v.Ob();)W8((g=BB(v.Pb(),308)).d,g.a),Ibn(W8(g.d,j),W8(g.d,g.a))<0&&(c.c[c.c.length]=g);for(i.c=x8(Ant,HWn,1,0,5,1),p=new Wb(c);p.a<p.c.c.length;)for(b=new Wb((g=BB(n0(p),308)).e);b.a<b.c.c.length;){for(f=BB(n0(b),168),a=!0,o=new Wb(c);o.a<o.c.c.length;)(u=BB(n0(o),308))!=g&&(cV(f,xq(u.e,0))||cV(f,xq(u.e,1))||cV(f,xq(u.e,2)))&&(a=!1);a&&(i.c[i.c.length]=f)}for(oMn(m,c),e5(m,new bn),l=new Wb(i);l.a<l.c.c.length;)TU(m,new ZFn(j,(f=BB(n0(l),168)).a,f.b))}for(e5(m,new jw(w=new Rv)),r=w.a.ec().Kc();r.Ob();)(K7(h,(f=BB(r.Pb(),168)).a)||K7(h,f.b))&&r.Qb();return e5(w,new wn),w}function LXn(n){var t,e,i;switch(e=BB(mMn(n,(hWn(),Zft)),21),t=kA(Nat),BB(mMn(n,(HXn(),sgt)),334)==(ufn(),pCt)&&Jcn(t,xat),qy(TD(mMn(n,ugt)))?dq(t,(yMn(),Rat),(lWn(),Hot)):dq(t,(yMn(),_at),(lWn(),Hot)),null!=mMn(n,(C6(),TMt))&&Jcn(t,Dat),(qy(TD(mMn(n,ggt)))||qy(TD(mMn(n,ogt))))&&WG(t,(yMn(),Bat),(lWn(),eot)),BB(mMn(n,Udt),103).g){case 2:case 3:case 4:WG(dq(t,(yMn(),Rat),(lWn(),rot)),Bat,iot)}switch(e.Hc((bDn(),hft))&&WG(dq(dq(t,(yMn(),Rat),(lWn(),tot)),Fat,Zut),Bat,not),GI(mMn(n,Sgt))!==GI((sNn(),Ivt))&&dq(t,(yMn(),_at),(lWn(),Not)),e.Hc(pft)&&(dq(t,(yMn(),Rat),(lWn(),Fot)),dq(t,Kat,Kot),dq(t,_at,_ot)),GI(mMn(n,Pdt))!==GI((JMn(),cft))&&GI(mMn(n,Zdt))!==GI((Mbn(),YPt))&&WG(t,(yMn(),Bat),(lWn(),pot)),qy(TD(mMn(n,fgt)))&&dq(t,(yMn(),_at),(lWn(),got)),qy(TD(mMn(n,Hdt)))&&dq(t,(yMn(),_at),(lWn(),Wot)),KLn(n)&&(i=(GI(mMn(n,sgt))===GI(pCt)?BB(mMn(n,Rdt),292):BB(mMn(n,Kdt),292))==(Kan(),jft)?(lWn(),Rot):(lWn(),Yot),dq(t,(yMn(),Fat),i)),BB(mMn(n,zpt),377).g){case 1:dq(t,(yMn(),Fat),(lWn(),Vot));break;case 2:WG(dq(dq(t,(yMn(),_at),(lWn(),Vut)),Fat,Qut),Bat,Yut)}return GI(mMn(n,Ldt))!==GI((mon(),Nvt))&&dq(t,(yMn(),_at),(lWn(),Qot)),t}function NXn(n){NM(n,new MTn(vj(wj(pj(gj(new du,$4n),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new Za))),u2(n,$4n,VJn,1.3),u2(n,$4n,A4n,mpn(gEt)),u2(n,$4n,QJn,IEt),u2(n,$4n,vZn,15),u2(n,$4n,u3n,mpn(bEt)),u2(n,$4n,PZn,mpn(jEt)),u2(n,$4n,BZn,mpn(EEt)),u2(n,$4n,SZn,mpn(TEt)),u2(n,$4n,CZn,mpn(kEt)),u2(n,$4n,MZn,mpn(MEt)),u2(n,$4n,IZn,mpn(OEt)),u2(n,$4n,E4n,mpn(PEt)),u2(n,$4n,T4n,mpn(yEt)),u2(n,$4n,P4n,mpn(SEt)),u2(n,$4n,C4n,mpn(AEt)),u2(n,$4n,I4n,mpn(pEt)),u2(n,$4n,jZn,mpn(vEt)),u2(n,$4n,m3n,mpn(mEt)),u2(n,$4n,S4n,mpn(dEt)),u2(n,$4n,M4n,mpn(wEt)),u2(n,$4n,O4n,mpn(LEt))}function xXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(cL(t,457)){if(!(d=SDn(BB(t,671),e)))throw Hp(new _y(p6n+e+"' is not a valid enumerator of '"+t.ne()+"'"));return d}switch(Cfn((IPn(),Z$t),t).cl()){case 2:e=FBn(e,!1);break;case 3:e=FBn(e,!0)}if(i=Cfn(Z$t,t).$k())return i.Aj().Nh().Kh(i,e);if(f=Cfn(Z$t,t).al()){for(d=new Np,s=0,h=(o=ysn(e)).length;s<h;++s)u=o[s],WB(d,f.Aj().Nh().Kh(f,u));return d}if(!(w=Cfn(Z$t,t).bl()).dc()){for(b=w.Kc();b.Ob();){l=BB(b.Pb(),148);try{if(null!=(d=l.Aj().Nh().Kh(l,e)))return d}catch(g){if(!cL(g=lun(g),60))throw Hp(g)}}throw Hp(new _y(p6n+e+"' does not match any member types of the union datatype '"+t.ne()+"'"))}if(BB(t,834).Fj(),!(r=xfn(t.Bj())))return null;if(r==Stt){c=0;try{c=l_n(e,_Vn,DWn)&QVn}catch(g){if(!cL(g=lun(g),127))throw Hp(g);c=V7(e)[0]}return fun(c)}if(r==mtt){for(a=0;a<IOt.length;++a)try{return BM(IOt[a],e)}catch(g){if(!cL(g=lun(g),32))throw Hp(g)}throw Hp(new _y(p6n+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Hp(new _y(p6n+e+"' is invalid. "))}function DXn(n,t){var e,i,r,c,a,u,o,s;if(e=0,a=0,c=t.length,u=null,s=new Ik,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(b1(a,t.length),43==t.charCodeAt(a)||(b1(a,t.length),45==t.charCodeAt(a)))))throw Hp(new Mk(DQn+t+'"'));for(;a<c&&(b1(a,t.length),46!=t.charCodeAt(a))&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+fx(null==t?zWn:(kW(t),t),e,a),a<c&&(b1(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+fx(null==t?zWn:(kW(t),t),e,a)}else n.e=0;if(a<c&&(b1(a,t.length),101==t.charCodeAt(a)||(b1(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&++a<c&&(b1(a,t.length),45!=t.charCodeAt(a))&&++e,u=t.substr(e,c-e),n.e=n.e-l_n(u,_Vn,DWn),n.e!=CJ(n.e)))throw Hp(new Mk("Scale out of range."));if((o=s.a).length<16){if(n.f=(null==Vtt&&(Vtt=new RegExp("^[+-]?\\d*$","i")),Vtt.test(o)?parseInt(o,10):NaN),isNaN(n.f))throw Hp(new Mk(DQn+t+'"'));n.a=aIn(n.f)}else fdn(n,new $A(o));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=fV(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function RXn(){RXn=O,JIn(fut=new pJ,(kUn(),wIt),vIt),JIn(fut,MIt,vIt),JIn(fut,MIt,kIt),JIn(fut,hIt,pIt),JIn(fut,hIt,vIt),JIn(fut,dIt,vIt),JIn(fut,dIt,mIt),JIn(fut,EIt,lIt),JIn(fut,EIt,vIt),JIn(fut,yIt,bIt),JIn(fut,yIt,vIt),JIn(fut,yIt,mIt),JIn(fut,yIt,lIt),JIn(fut,bIt,yIt),JIn(fut,bIt,kIt),JIn(fut,bIt,pIt),JIn(fut,bIt,vIt),JIn(fut,jIt,jIt),JIn(fut,jIt,mIt),JIn(fut,jIt,kIt),JIn(fut,gIt,gIt),JIn(fut,gIt,mIt),JIn(fut,gIt,pIt),JIn(fut,TIt,TIt),JIn(fut,TIt,lIt),JIn(fut,TIt,kIt),JIn(fut,fIt,fIt),JIn(fut,fIt,lIt),JIn(fut,fIt,pIt),JIn(fut,mIt,dIt),JIn(fut,mIt,yIt),JIn(fut,mIt,jIt),JIn(fut,mIt,gIt),JIn(fut,mIt,vIt),JIn(fut,mIt,mIt),JIn(fut,mIt,kIt),JIn(fut,mIt,pIt),JIn(fut,lIt,EIt),JIn(fut,lIt,yIt),JIn(fut,lIt,TIt),JIn(fut,lIt,fIt),JIn(fut,lIt,lIt),JIn(fut,lIt,kIt),JIn(fut,lIt,pIt),JIn(fut,lIt,vIt),JIn(fut,kIt,MIt),JIn(fut,kIt,bIt),JIn(fut,kIt,jIt),JIn(fut,kIt,TIt),JIn(fut,kIt,mIt),JIn(fut,kIt,lIt),JIn(fut,kIt,kIt),JIn(fut,kIt,vIt),JIn(fut,pIt,hIt),JIn(fut,pIt,bIt),JIn(fut,pIt,gIt),JIn(fut,pIt,fIt),JIn(fut,pIt,mIt),JIn(fut,pIt,lIt),JIn(fut,pIt,pIt),JIn(fut,pIt,vIt),JIn(fut,vIt,wIt),JIn(fut,vIt,MIt),JIn(fut,vIt,hIt),JIn(fut,vIt,dIt),JIn(fut,vIt,EIt),JIn(fut,vIt,yIt),JIn(fut,vIt,bIt),JIn(fut,vIt,mIt),JIn(fut,vIt,lIt),JIn(fut,vIt,kIt),JIn(fut,vIt,pIt),JIn(fut,vIt,vIt)}function KXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(n.d=new xC(RQn,RQn),n.c=new xC(KQn,KQn),l=t.Kc();l.Ob();)for(m=new Wb(BB(l.Pb(),37).a);m.a<m.c.c.length;)v=BB(n0(m),10),n.d.a=e.Math.min(n.d.a,v.n.a-v.d.b),n.d.b=e.Math.min(n.d.b,v.n.b-v.d.d),n.c.a=e.Math.max(n.c.a,v.n.a+v.o.a+v.d.c),n.c.b=e.Math.max(n.c.b,v.n.b+v.o.b+v.d.a);for(o=new Yv,f=t.Kc();f.Ob();)r=uXn(n,BB(f.Pb(),37)),WB(o.a,r),r.a=r.a|!BB(mMn(r.c,(hWn(),Xft)),21).dc();for(n.b=(Shn(),(T=new kt).f=new vin(i),T.b=oGn(T.f,o),T),jGn((w=n.b,new Xm,w)),n.e=new Gj,n.a=n.b.f.e,u=new Wb(o.a);u.a<u.c.c.length;)for(c=BB(n0(u),841),y=AJ(n.b,c),nKn(c.c,y.a,y.b),g=new Wb(c.c.a);g.a<g.c.c.length;)(d=BB(n0(g),10)).k==(uSn(),Mut)&&(p=lLn(n,d.n,BB(mMn(d,(hWn(),Qft)),61)),UR(kO(d.n),p));for(a=new Wb(o.a);a.a<a.c.c.length;)for(h=new Wb(wln(c=BB(n0(a),841)));h.a<h.c.c.length;)for(Kx(E=new Kj((s=BB(n0(h),17)).a),0,g1(s.c)),DH(E,g1(s.d)),b=null,j=spn(E,0);j.b!=j.d.c;)k=BB(b3(j),8),b?(uen(b.a,k.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):uen(b.b,k.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=k):b=k;qx(n.e),UR(n.a,n.e)}function _Xn(n){V$n(n.b,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentTransient"])),V$n(n.a,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedSourceURI"])),V$n(n.o,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),V$n(n.p,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),V$n(n.v,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),V$n(n.R,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedName"])),V$n(n.T,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),V$n(n.U,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),V$n(n.W,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),V$n(n.bb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidDefaultValueLiteral"])),V$n(n.eb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),V$n(n.H,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentType ConsistentBounds ConsistentArguments"]))}function FXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(!t.dc()){if(r=new km,f=(a=e||BB(t.Xb(0),17)).c,gxn(),(s=f.i.k)!=(uSn(),Cut)&&s!=Iut&&s!=Mut&&s!=Tut)throw Hp(new _y("The target node of the edge must be a normal node or a northSouthPort."));for(fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))),(kUn(),yIt).Hc(f.j)&&(b=Gy(MD(mMn(f,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),o=null,i=!1,u=t.Kc();u.Ob();)0!=(c=BB(u.Pb(),17).a).b&&(i?(r5(r,kL(UR(o,(Px(0!=c.b),BB(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,o=B$((Px(0!=c.b),BB(c.c.b.c,8))),Frn(r,c),yQ(c));l=a.d,yIt.Hc(l.j)&&(b=Gy(MD(mMn(l,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a]))),n.d==(Usn(),emt)&&(Px(0!=r.b),w=BB(r.a.a.c,8),d=BB(Dpn(r,1),8),(g=new XZ(hsn(f.j))).a*=5,g.b*=5,p=XR(new xC(d.a,d.b),w),UR(v=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),w),nX(spn(r,1),v),Px(0!=r.b),m=BB(r.c.b.c,8),y=BB(Dpn(r,r.b-2),8),(g=new XZ(hsn(l.j))).a*=5,g.b*=5,p=XR(new xC(y.a,y.b),m),UR(k=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),m),Kx(r,r.b-1,k)),h=new oBn(r),Frn(a.a,Fvn(h))}}function BXn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x;if(y=(v=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),k=v.Eg(),m=v.Cg()/2,w=v.Bg()/2,cL(v,186)&&(y+=WJ(p=BB(v,118)).i,y+=WJ(p).i),y+=m,k+=w,C=(S=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),I=S.Eg(),P=S.Cg()/2,j=S.Bg()/2,cL(S,186)&&(C+=WJ(M=BB(S,118)).i,C+=WJ(M).i),C+=P,I+=j,0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),o=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),o);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(b=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));b.e!=b.i.gc();)Qjn(b);for(d=C,C>y+m?d=y+m:C<y-m&&(d=y-m),g=I,I>k+w?g=k+w:I<k-w&&(g=k-w),d>y-m&&d<y+m&&g>k-w&&g<k+w&&(d=y+m),Ien(u=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),d),Aen(u,g),E=y,y>C+P?E=C+P:y<C-P&&(E=C-P),T=k,k>I+j?T=I+j:k<I-j&&(T=I-j),E>C-P&&E<C+P&&T>I-j&&T<I+j&&(T=I+j),Ten(u,E),Oen(u,T),sqn((!u.a&&(u.a=new $L(xOt,u,5)),u.a)),a=pvn(t,5),v==S&&++a,A=E-d,N=T-g,h=.20000000298023224*e.Math.sqrt(A*A+N*N),$=A/(a+1),x=N/(a+1),O=d,L=g,s=0;s<a;s++)L+=x,(f=(O+=$)+H$n(t,24)*uYn*h-h/2)<0?f=1:f>i&&(f=i-1),(l=L+H$n(t,24)*uYn*h-h/2)<0?l=1:l>r&&(l=r-1),tE(),jen(c=new ro,f),Een(c,l),f9((!u.a&&(u.a=new $L(xOt,u,5)),u.a),c)}function HXn(){HXn=O,sWn(),ppt=jPt,vpt=EPt,mpt=TPt,ypt=MPt,jpt=SPt,Ept=PPt,Spt=IPt,Cpt=APt,Ipt=$Pt,Ppt=OPt,Opt=LPt,$pt=NPt,Npt=RPt,Mpt=CPt,fWn(),gpt=_wt,kpt=Fwt,Tpt=Bwt,Apt=Hwt,hpt=new XA(pPt,iln(0)),fpt=Dwt,lpt=Rwt,bpt=Kwt,zpt=ldt,Rpt=zwt,Kpt=Wwt,Bpt=edt,_pt=Ywt,Fpt=Zwt,Xpt=pdt,Upt=wdt,qpt=odt,Hpt=adt,Gpt=hdt,Rgt=Pwt,Kgt=Cwt,rgt=Kbt,cgt=Bbt,Ugt=new WA(12),zgt=new XA(XSt,Ugt),Mbn(),Zdt=new XA(vSt,ngt=QPt),tpt=new XA(aPt,0),wpt=new XA(vPt,iln(1)),Edt=new XA(cSt,dZn),Ggt=zSt,ept=uPt,upt=wPt,zdt=lSt,kdt=iSt,sgt=ESt,dpt=new XA(kPt,(hN(),!0)),wgt=SSt,dgt=PSt,Fgt=KSt,qgt=qSt,Bgt=FSt,Ffn(),Udt=new XA(bSt,Wdt=BPt),$gt=DSt,Agt=NSt,cpt=fPt,rpt=hPt,apt=bPt,cpn(),new XA(ZSt,Vgt=qCt),Ygt=ePt,Jgt=iPt,Zgt=rPt,Qgt=tPt,Dpt=Gwt,Pgt=lwt,Sgt=hwt,xpt=qwt,kgt=ewt,Gdt=Tbt,qdt=jbt,xdt=ubt,Ddt=obt,Kdt=bbt,Rdt=sbt,Hdt=ybt,Igt=wwt,Ogt=dwt,pgt=Vbt,_gt=$wt,Ngt=mwt,ugt=Gbt,Dgt=Mwt,egt=Nbt,igt=Dbt,Ndt=hSt,Lgt=gwt,Pdt=Qlt,Sdt=Wlt,Mdt=Xlt,fgt=Xbt,hgt=Ubt,lgt=Wbt,Hgt=BSt,vgt=OSt,agt=ySt,Ydt=gSt,Qdt=dSt,_dt=gbt,ipt=sPt,Tdt=sSt,bgt=MSt,npt=cPt,Xgt=VSt,Wgt=YSt,Egt=cwt,Tgt=uwt,spt=gPt,jdt=Ult,Mgt=swt,Jdt=Obt,Vdt=Cbt,Cgt=$St,mgt=Zbt,xgt=jwt,Lpt=xPt,Xdt=Sbt,opt=Nwt,tgt=$bt,ygt=twt,Fdt=vbt,ggt=ISt,jgt=rwt,Bdt=mbt,Ldt=cbt,Adt=ebt,Idt=nbt,Odt=tbt,$dt=rbt,Cdt=Jlt,ogt=zbt}function qXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(uHn(),T=n.e,w=n.d,r=n.a,0==T)switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(j=new Ck).a+=t<0?"0E+":"0E",j.a+=-t,j.a}if(y=x8(ONt,WVn,25,1+(m=10*w+1+7),15,1),e=m,1==w)if((u=r[0])<0){C=e0(u,UQn);do{d=C,C=Ojn(C,10),y[--e]=48+dG(ibn(d,cbn(C,10)))&QVn}while(0!=Vhn(C,0))}else{C=u;do{d=C,C=C/10|0,y[--e]=d-10*C+48&QVn}while(0!=C)}else{aHn(r,0,S=x8(ANt,hQn,25,w,15,1),0,P=w);n:for(;;){for(E=0,s=P-1;s>=0;s--)p=fTn(rbn(yz(E,32),e0(S[s],UQn))),S[s]=dG(p),E=dG(kz(p,32));v=dG(E),g=e;do{y[--e]=48+v%10&QVn}while(0!=(v=v/10|0)&&0!=e);for(i=9-g+e,o=0;o<i&&e>0;o++)y[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==y[e];)++e}if(b=T<0,a=m-e-t-1,0==t)return b&&(y[--e]=45),Bdn(y,e,m-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=m-1;l>=h;l--)y[l+1]=y[l];return y[++h]=46,b&&(y[--e]=45),Bdn(y,e,m-e+1)}for(f=2;f<1-a;f++)y[--e]=48;return y[--e]=46,y[--e]=48,b&&(y[--e]=45),Bdn(y,e,m-e)}return M=e+1,c=m,k=new Ik,b&&(k.a+="-"),c-M>=1?(xX(k,y[e]),k.a+=".",k.a+=Bdn(y,e+1,m-e-1)):k.a+=Bdn(y,e,m-e),k.a+="E",a>0&&(k.a+="+"),k.a+=""+a,k.a}function GXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(n.c=t,n.g=new xp,GM(),twn(new Pw(new Dy(n.c))),v=SD(ZAn(n.c,(MMn(),dTt))),u=BB(ZAn(n.c,pTt),316),y=BB(ZAn(n.c,vTt),429),c=BB(ZAn(n.c,hTt),482),m=BB(ZAn(n.c,gTt),430),n.j=Gy(MD(ZAn(n.c,mTt))),a=n.a,u.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw Hp(new _y(N4n+(null!=u.f?u.f:""+u.g)))}if(n.d=new DJ(a,y,c),hon(n.d,(Xcn(),Qrt),TD(ZAn(n.c,lTt))),n.d.c=qy(TD(ZAn(n.c,fTt))),0==YQ(n.c).i)return n.d;for(h=new AL(YQ(n.c));h.e!=h.i.gc();){for(l=(s=BB(kpn(h),33)).g/2,f=s.f/2,k=new xC(s.i+l,s.j+f);hU(n.g,k);)_x(k,(e.Math.random()-.5)*lZn,(e.Math.random()-.5)*lZn);w=BB(ZAn(s,(sWn(),$St)),142),d=new AZ(k,new UV(k.a-l-n.j/2-w.b,k.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),WB(n.d.i,d),VW(n.g,k,new rI(d,s))}switch(m.g){case 0:if(null==v)n.d.d=BB(xq(n.d.i,0),65);else for(p=new Wb(n.d.i);p.a<p.c.c.length;)d=BB(n0(p),65),null!=(b=BB(BB(RX(n.g,d.a),46).b,33).zg())&&mK(b,v)&&(n.d.d=d);break;case 1:for((i=new xC(n.c.g,n.c.f)).a*=.5,i.b*=.5,_x(i,n.c.i,n.c.j),r=RQn,g=new Wb(n.d.i);g.a<g.c.c.length;)(o=W8((d=BB(n0(g),65)).a,i))<r&&(r=o,n.d.d=d);break;default:throw Hp(new _y(N4n+(null!=m.f?m.f:""+m.g)))}return n.d}function zXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(j=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),f=new km,k=new xp,E=tFn(j),jCn(k.f,j,E),b=new xp,r=new YT,d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!t.d&&(t.d=new hK(_Ot,t,8,5)),t.d),(!t.e&&(t.e=new hK(_Ot,t,7,4)),t.e)])));dAn(d);){if(w=BB(U5(d),79),1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));w!=n&&(r5(r,p=BB(Wtn((!w.a&&(w.a=new eU(FOt,w,6,6)),w.a),0),202),r.c.b,r.c),(g=BB(qI(AY(k.f,p)),12))||(g=tFn(p),jCn(k.f,p,g)),l=i?XR(new wA(BB(xq(E,E.c.length-1),8)),BB(xq(g,g.c.length-1),8)):XR(new wA((l1(0,E.c.length),BB(E.c[0],8))),(l1(0,g.c.length),BB(g.c[0],8))),jCn(b.f,p,l))}if(0!=r.b)for(v=BB(xq(E,i?E.c.length-1:0),8),h=1;h<E.c.length;h++){for(m=BB(xq(E,i?E.c.length-1-h:h),8),c=spn(r,0);c.b!=c.d.c;)p=BB(b3(c),202),(g=BB(qI(AY(k.f,p)),12)).c.length<=h?mtn(c):(y=UR(new wA(BB(xq(g,i?g.c.length-1-h:h),8)),BB(qI(AY(b.f,p)),8)),m.a==y.a&&m.b==y.b||(a=m.a-v.a,o=m.b-v.b,(u=y.a-v.a)*o==(s=y.b-v.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==u||isNaN(u)?u:u<0?-1:1)&&(0==o||isNaN(o)?o:o<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(u)||e.Math.abs(o)<e.Math.abs(s))&&r5(f,m,f.c.b,f.c):h>1&&r5(f,v,f.c.b,f.c),mtn(c)));v=m}return f}function UXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(e,"Greedy cycle removal",1),A=(m=t.a).c.length,n.a=x8(ANt,hQn,25,A,15,1),n.c=x8(ANt,hQn,25,A,15,1),n.b=x8(ANt,hQn,25,A,15,1),s=0,p=new Wb(m);p.a<p.c.c.length;){for((d=BB(n0(p),10)).p=s,T=new Wb(d.j);T.a<T.c.c.length;){for(u=new Wb((k=BB(n0(T),11)).e);u.a<u.c.c.length;)(i=BB(n0(u),17)).c.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.a[s]+=S>0?S+1:1);for(a=new Wb(k.g);a.a<a.c.c.length;)(i=BB(n0(a),17)).d.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?DH(n.e,d):0==n.a[s]&&DH(n.f,d),++s}for(w=-1,b=1,f=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230);A>0;){for(;0!=n.e.b;)C=BB(dH(n.e),10),n.b[C.p]=w--,QKn(n,C),--A;for(;0!=n.f.b;)I=BB(dH(n.f),10),n.b[I.p]=b++,QKn(n,I),--A;if(A>0){for(l=_Vn,v=new Wb(m);v.a<v.c.c.length;)d=BB(n0(v),10),0==n.b[d.p]&&(y=n.c[d.p]-n.a[d.p])>=l&&(y>l&&(f.c=x8(Ant,HWn,1,0,5,1),l=y),f.c[f.c.length]=d);h=n.Zf(f),n.b[h.p]=b++,QKn(n,h),--A}}for(P=m.c.length+1,s=0;s<m.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Wb(m);g.a<g.c.c.length;)for(E=0,M=(j=I2((d=BB(n0(g),10)).j)).length;E<M;++E)for(c=0,o=(r=Z0((k=j[E]).g)).length;c<o;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(tBn(i,!0),hon(t,qft,(hN(),!0)));n.a=null,n.c=null,n.b=null,yQ(n.f),yQ(n.e),HSn(e)}function XXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(i=new Np,u=new Np,g=t/2,b=n.gc(),r=BB(n.Xb(0),8),p=BB(n.Xb(1),8),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=BB(n.Xb(s),8),WB(i,(l1(1,(w=QAn(r.a,r.b,d.a,d.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8)));for(WB(i,(l1(1,(w=QAn(p.a,p.b,r.a,r.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),e=new km,a=new Np,DH(e,(l1(0,i.c.length),BB(i.c[0],8))),h=1;h<i.c.length-2;h+=2)l1(h,i.c.length),c=BB(i.c[h],8),l=qPn((l1(h-1,i.c.length),BB(i.c[h-1],8)),c,(l1(h+1,i.c.length),BB(i.c[h+1],8)),(l1(h+2,i.c.length),BB(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?r5(e,l,e.c.b,e.c):r5(e,c,e.c.b,e.c);for(DH(e,BB(xq(i,i.c.length-1),8)),WB(a,(l1(0,u.c.length),BB(u.c[0],8))),f=1;f<u.c.length-2;f+=2)l1(f,u.c.length),c=BB(u.c[f],8),l=qPn((l1(f-1,u.c.length),BB(u.c[f-1],8)),c,(l1(f+1,u.c.length),BB(u.c[f+1],8)),(l1(f+2,u.c.length),BB(u.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?a.c[a.c.length]=l:a.c[a.c.length]=c;for(WB(a,BB(xq(u,u.c.length-1),8)),o=a.c.length-1;o>=0;o--)DH(e,(l1(o,a.c.length),BB(a.c[o],8)));return e}function WXn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=kAt,s=null,c=null,(o=Vgn(n,u=0,AAt,$At))<n.length&&(b1(o,n.length),58==n.charCodeAt(o))&&(f=n.substr(u,o-u),u=o+1),e=null!=f&&xT(jAt,f.toLowerCase())){if(-1==(o=n.lastIndexOf("!/")))throw Hp(new _y("no archive separator"));a=!0,i=fx(n,u,++o),u=o}else u>=0&&mK(n.substr(u,2),"//")?(o=Vgn(n,u+=2,LAt,NAt),i=n.substr(u,o-u),u=o):null==f||u!=n.length&&(b1(u,n.length),47==n.charCodeAt(u))||(a=!1,-1==(o=yN(n,YTn(35),u))&&(o=n.length),i=n.substr(u,o-u),u=o);if(!e&&u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(o=Vgn(n,u+1,LAt,NAt),(h=n.substr(u+1,o-(u+1))).length>0&&58==fV(h,h.length-1)&&(r=h,u=o)),u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(++u,t=!0),u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u))){for(l=new Np;u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u));)o=Vgn(n,u,LAt,NAt),WB(l,n.substr(u,o-u)),(u=o)<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(Qhn(n,++u)||(l.c[l.c.length]=""));Qgn(l,b=x8(Qtt,sVn,2,l.c.length,6,1))}return u<n.length&&(b1(u,n.length),63==n.charCodeAt(u))&&(-1==(o=lx(n,35,++u))&&(o=n.length),s=n.substr(u,o-u),u=o),u<n.length&&(c=nO(n,++u)),wGn(a,f,i,r,b,s),new rRn(a,f,i,r,t,b,s,c)}function VXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$;for(O=new Np,w=new Wb(t.b);w.a<w.c.c.length;)for(k=new Wb(BB(n0(w),29).a);k.a<k.c.c.length;){for((y=BB(n0(k),10)).p=-1,l=_Vn,T=_Vn,S=new Wb(y.j);S.a<S.c.c.length;){for(c=new Wb((M=BB(n0(S),11)).e);c.a<c.c.c.length;)i=BB(n0(c),17),P=BB(mMn(i,(HXn(),bpt)),19).a,l=e.Math.max(l,P);for(r=new Wb(M.g);r.a<r.c.c.length;)i=BB(n0(r),17),P=BB(mMn(i,(HXn(),bpt)),19).a,T=e.Math.max(T,P)}hon(y,Xmt,iln(l)),hon(y,Wmt,iln(T))}for(p=0,b=new Wb(t.b);b.a<b.c.c.length;)for(k=new Wb(BB(n0(b),29).a);k.a<k.c.c.length;)(y=BB(n0(k),10)).p<0&&((I=new rm).b=p++,jRn(n,y,I),O.c[O.c.length]=I);for(E=sx(O.c.length),f=sx(O.c.length),u=0;u<O.c.length;u++)WB(E,new Np),WB(f,iln(0));for(vzn(t,O,E,f),A=BB(Qgn(O,x8(Ymt,O3n,257,O.c.length,0,1)),840),j=BB(Qgn(E,x8(Rnt,nZn,15,E.c.length,0,1)),192),h=x8(ANt,hQn,25,f.c.length,15,1),o=0;o<h.length;o++)h[o]=(l1(o,f.c.length),BB(f.c[o],19)).a;for(v=0,m=new Np,s=0;s<A.length;s++)0==h[s]&&WB(m,A[s]);for(g=x8(ANt,hQn,25,A.length,15,1);0!=m.c.length;)for(g[(I=BB(s6(m,0),257)).b]=v++;!j[I.b].dc();)--h[($=BB(j[I.b].$c(0),257)).b],0==h[$.b]&&(m.c[m.c.length]=$);for(n.a=x8(Ymt,O3n,257,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,k=new Wb(d.e);k.a<k.c.c.length;)(y=BB(n0(k),10)).p=C;return n.a}function QXn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=fV(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=fV(n.i,n.d))break;if(++n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));switch(t=fV(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));if(61==(t=fV(n.i,n.d++)))i=16;else{if(33!=t)throw Hp(new ak(kWn((u$(),v8n))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=fV(n.i,n.d++)););if(41!=t)throw Hp(new ak(kWn((u$(),m8n))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw Hp(new ak(kWn((u$(),p8n))))}break;case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==fV(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==fV(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==HQn&&n.d<n.j&&56320==(64512&(e=fV(n.i,n.d)))&&(n.a=BQn+(t-HQn<<10)+e-56320,++n.d),i=0}n.c=i}}function YXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;if((j=BB(mMn(n,(HXn(),ept)),98))!=(QEn(),QCt)&&j!=YCt){for(s=new J6((lin((b=(w=n.b).c.length)+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),d=new J6((lin(b+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),WB(s,new xp),WB(s,new xp),WB(d,new Np),WB(d,new Np),k=new Np,t=0;t<b;t++)for(l1(t,w.c.length),e=BB(w.c[t],29),l1(t,s.c.length),E=BB(s.c[t],83),g=new xp,s.c[s.c.length]=g,l1(t,d.c.length),M=BB(d.c[t],15),v=new Np,d.c[d.c.length]=v,r=new Wb(e.a);r.a<r.c.c.length;)if(cln(i=BB(n0(r),10)))k.c[k.c.length]=i;else{for(o=new oz(ZL(fbn(i).a.Kc(),new h));dAn(o);)cln(S=(a=BB(U5(o),17)).c.i)&&((T=BB(E.xc(mMn(S,(hWn(),dlt))),10))||(T=oIn(n,S),E.zc(mMn(S,dlt),T),M.Fc(T)),SZ(a,BB(xq(T.j,1),11)));for(u=new oz(ZL(lbn(i).a.Kc(),new h));dAn(u);)cln(P=(a=BB(U5(u),17)).d.i)&&((p=BB(RX(g,mMn(P,(hWn(),dlt))),10))||(p=oIn(n,P),VW(g,mMn(P,dlt),p),v.c[v.c.length]=p),MZ(a,BB(xq(p.j,0),11)))}for(f=0;f<d.c.length;f++)if(l1(f,d.c.length),!(m=BB(d.c[f],15)).dc())for(l=null,0==f?(l=new HX(n),LZ(0,w.c.length),MS(w.c,0,l)):f==s.c.length-1?(l=new HX(n),w.c[w.c.length]=l):(l1(f-1,w.c.length),l=BB(w.c[f-1],29)),c=m.Kc();c.Ob();)PZ(BB(c.Pb(),10),l);for(y=new Wb(k);y.a<y.c.c.length;)PZ(BB(n0(y),10),null);hon(n,(hWn(),Wft),k)}}function JXn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;if(OTn(e,"Coffman-Graham Layering",1),0!=t.a.c.length){for(j=BB(mMn(t,(HXn(),mgt)),19).a,o=0,a=0,b=new Wb(t.a);b.a<b.c.c.length;)for((l=BB(n0(b),10)).p=o++,c=new oz(ZL(lbn(l).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).p=a++;for(n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,a,16,1),n.b=x8(ANt,hQn,25,o,15,1),n.e=x8(ANt,hQn,25,o,15,1),n.f=x8(ANt,hQn,25,o,15,1),win(n.c),rEn(n,t),d=new Xz(new Dd(n)),k=new Wb(t.a);k.a<k.c.c.length;){for(c=new oz(ZL(fbn(m=BB(n0(k),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.b[m.p];0==n.b[m.p]&&F8(eMn(d,m))}for(u=0;0!=d.b.c.length;)for(m=BB(mnn(d),10),n.f[m.p]=u++,c=new oz(ZL(lbn(m).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(p=r.d.i,--n.b[p.p],JIn(n.c,p,iln(n.f[m.p])),0==n.b[p.p]&&F8(eMn(d,p)));for(w=new Xz(new Rd(n)),y=new Wb(t.a);y.a<y.c.c.length;){for(c=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.e[m.p];0==n.e[m.p]&&F8(eMn(w,m))}for(i=r1(t,f=new Np);0!=w.b.c.length;)for(v=BB(mnn(w),10),(i.a.c.length>=j||!Ndn(v,i))&&(i=r1(t,f)),PZ(v,i),c=new oz(ZL(fbn(v).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&F8(eMn(w,g)));for(s=f.c.length-1;s>=0;--s)WB(t.b,(l1(s,f.c.length),BB(f.c[s],29)));t.a.c=x8(Ant,HWn,1,0,5,1),HSn(e)}else HSn(e)}function ZXn(n){var t,e,i,r,c,a,u,o;for(n.b=1,QXn(n),t=null,0==n.c&&94==n.a?(QXn(n),wWn(),wWn(),Yxn(t=new M0(4),0,unt),a=new M0(4)):(wWn(),wWn(),a=new M0(4)),r=!0;1!=(o=n.c);){if(0==o&&93==n.a&&!r){t&&(WGn(t,a),a=t);break}if(e=n.a,i=!1,10==o)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(a,d_n(e)),i=!0;break;case 105:case 73:case 99:case 67:sHn(a,d_n(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(u=DIn(n,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(a,u),i=!0;break;default:e=qDn(n)}else if(24==o&&!r){if(t&&(WGn(t,a),a=t),WGn(a,ZXn(n)),0!=n.c||93!=n.a)throw Hp(new ak(kWn((u$(),N8n))));break}if(QXn(n),!i){if(0==o){if(91==e)throw Hp(new ak(kWn((u$(),x8n))));if(93==e)throw Hp(new ak(kWn((u$(),D8n))));if(45==e&&!r&&93!=n.a)throw Hp(new ak(kWn((u$(),R8n))))}if(0!=n.c||45!=n.a||45==e&&r)Yxn(a,e,e);else{if(QXn(n),1==(o=n.c))throw Hp(new ak(kWn((u$(),$8n))));if(0==o&&93==n.a)Yxn(a,e,e),Yxn(a,45,45);else{if(0==o&&93==n.a||24==o)throw Hp(new ak(kWn((u$(),R8n))));if(c=n.a,0==o){if(91==c)throw Hp(new ak(kWn((u$(),x8n))));if(93==c)throw Hp(new ak(kWn((u$(),D8n))));if(45==c)throw Hp(new ak(kWn((u$(),R8n))))}else 10==o&&(c=qDn(n));if(QXn(n),e>c)throw Hp(new ak(kWn((u$(),F8n))));Yxn(a,e,c)}}}r=!1}if(1==n.c)throw Hp(new ak(kWn((u$(),$8n))));return T$n(a),qHn(a),n.b=0,QXn(n),a}function nWn(n){V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#decimal"])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#integer"])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#boolean"])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EBoolean",t8n,"EBoolean:Object"])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#byte"])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#hexBinary"])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EByte",t8n,"EByte:Object"])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EChar",t8n,"EChar:Object"])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#double"])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EDouble",t8n,"EDouble:Object"])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#float"])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EFloat",t8n,"EFloat:Object"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#int"])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EInt",t8n,"EInt:Object"])),V$n(n.N,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#long"])),V$n(n.O,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"ELong",t8n,"ELong:Object"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#short"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EShort",t8n,"EShort:Object"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#string"]))}function tWn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(1==n.c.length)return l1(0,n.c.length),BB(n.c[0],135);if(n.c.length<=0)return new P6;for(s=new Wb(n);s.a<s.c.c.length;){for(u=BB(n0(s),135),m=0,d=DWn,g=DWn,b=_Vn,w=_Vn,v=spn(u.b,0);v.b!=v.d.c;)p=BB(b3(v),86),m+=BB(mMn(p,(CAn(),$kt)),19).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);hon(u,(CAn(),$kt),iln(m)),hon(u,(qqn(),nkt),new xC(d,g)),hon(u,Zyt,new xC(b,w))}for(SQ(),m$(n,new ga),qan(k=new P6,(l1(0,n.c.length),BB(n.c[0],94))),l=0,S=0,h=new Wb(n);h.a<h.c.c.length;)u=BB(n0(h),135),j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8)),l=e.Math.max(l,j.a),S+=j.a*j.b;for(l=e.Math.max(l,e.Math.sqrt(S)*Gy(MD(mMn(k,(CAn(),jkt))))),P=0,C=0,f=0,t=E=Gy(MD(mMn(k,xkt))),o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),135),P+(j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8))).a>l&&(P=0,C+=f+E,f=0),ELn(k,u,P,C),t=e.Math.max(t,P+j.a),f=e.Math.max(f,j.b),P+=j.a+E;for(y=new xp,i=new xp,M=new Wb(n);M.a<M.c.c.length;)for(r=qy(TD(mMn(T=BB(n0(M),135),(sWn(),lSt)))),a=(T.q?T.q:het).vc().Kc();a.Ob();)hU(y,(c=BB(a.Pb(),42)).cd())?GI(BB(c.cd(),146).wg())!==GI(c.dd())&&(r&&hU(i,c.cd())?($T(),BB(c.cd(),146).tg()):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()),r&&VW(i,BB(c.cd(),146),c.dd()))):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()));return k}function eWn(){eWn=O,RXn(),JIn(put=new pJ,(kUn(),dIt),wIt),JIn(put,MIt,wIt),JIn(put,gIt,wIt),JIn(put,jIt,wIt),JIn(put,kIt,wIt),JIn(put,mIt,wIt),JIn(put,jIt,dIt),JIn(put,wIt,hIt),JIn(put,dIt,hIt),JIn(put,MIt,hIt),JIn(put,gIt,hIt),JIn(put,yIt,hIt),JIn(put,jIt,hIt),JIn(put,kIt,hIt),JIn(put,mIt,hIt),JIn(put,bIt,hIt),JIn(put,wIt,EIt),JIn(put,dIt,EIt),JIn(put,hIt,EIt),JIn(put,MIt,EIt),JIn(put,gIt,EIt),JIn(put,yIt,EIt),JIn(put,jIt,EIt),JIn(put,bIt,EIt),JIn(put,TIt,EIt),JIn(put,kIt,EIt),JIn(put,pIt,EIt),JIn(put,mIt,EIt),JIn(put,dIt,MIt),JIn(put,gIt,MIt),JIn(put,jIt,MIt),JIn(put,mIt,MIt),JIn(put,dIt,gIt),JIn(put,MIt,gIt),JIn(put,jIt,gIt),JIn(put,gIt,gIt),JIn(put,kIt,gIt),JIn(put,wIt,fIt),JIn(put,dIt,fIt),JIn(put,hIt,fIt),JIn(put,EIt,fIt),JIn(put,MIt,fIt),JIn(put,gIt,fIt),JIn(put,yIt,fIt),JIn(put,jIt,fIt),JIn(put,TIt,fIt),JIn(put,bIt,fIt),JIn(put,mIt,fIt),JIn(put,kIt,fIt),JIn(put,vIt,fIt),JIn(put,wIt,TIt),JIn(put,dIt,TIt),JIn(put,hIt,TIt),JIn(put,MIt,TIt),JIn(put,gIt,TIt),JIn(put,yIt,TIt),JIn(put,jIt,TIt),JIn(put,bIt,TIt),JIn(put,mIt,TIt),JIn(put,pIt,TIt),JIn(put,vIt,TIt),JIn(put,dIt,bIt),JIn(put,MIt,bIt),JIn(put,gIt,bIt),JIn(put,jIt,bIt),JIn(put,TIt,bIt),JIn(put,mIt,bIt),JIn(put,kIt,bIt),JIn(put,wIt,lIt),JIn(put,dIt,lIt),JIn(put,hIt,lIt),JIn(put,MIt,lIt),JIn(put,gIt,lIt),JIn(put,yIt,lIt),JIn(put,jIt,lIt),JIn(put,bIt,lIt),JIn(put,mIt,lIt),JIn(put,dIt,kIt),JIn(put,hIt,kIt),JIn(put,EIt,kIt),JIn(put,gIt,kIt),JIn(put,wIt,pIt),JIn(put,dIt,pIt),JIn(put,EIt,pIt),JIn(put,MIt,pIt),JIn(put,gIt,pIt),JIn(put,yIt,pIt),JIn(put,jIt,pIt),JIn(put,jIt,vIt),JIn(put,gIt,vIt),JIn(put,bIt,wIt),JIn(put,bIt,MIt),JIn(put,bIt,hIt),JIn(put,yIt,wIt),JIn(put,yIt,dIt),JIn(put,yIt,EIt)}function iWn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zQ(n.b,n.a,t,n.c);case 1:return new LL(n.a,t,Awn(t.Tg(),n.c));case 43:return new xL(n.a,t,Awn(t.Tg(),n.c));case 3:return new $L(n.a,t,Awn(t.Tg(),n.c));case 45:return new NL(n.a,t,Awn(t.Tg(),n.c));case 41:return new y9(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 50:return new yin(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 5:return new iK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 47:return new rK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 7:return new eU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 49:return new eK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 9:return new FL(n.a,t,Awn(t.Tg(),n.c));case 11:return new _L(n.a,t,Awn(t.Tg(),n.c));case 13:return new KL(n.a,t,Awn(t.Tg(),n.c));case 15:return new MH(n.a,t,Awn(t.Tg(),n.c));case 17:return new BL(n.a,t,Awn(t.Tg(),n.c));case 19:return new RL(n.a,t,Awn(t.Tg(),n.c));case 21:return new DL(n.a,t,Awn(t.Tg(),n.c));case 23:return new yH(n.a,t,Awn(t.Tg(),n.c));case 25:return new fK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 27:return new hK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 29:return new oK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 31:return new cK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 33:return new sK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 35:return new uK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 37:return new aK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 39:return new iU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 40:return new Ecn(t,Awn(t.Tg(),n.c));default:throw Hp(new dy("Unknown feature style: "+n.e))}}function rWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(OTn(e,"Brandes & Koepf node placement",1),n.a=t,n.c=FFn(t),i=BB(mMn(t,(HXn(),Ngt)),274),b=qy(TD(mMn(t,xgt))),n.d=i==(Bjn(),Qht)&&!b||i==Xht,Jqn(n,t),y=null,k=null,g=null,p=null,lin(4,AVn),d=new J6(4),BB(mMn(t,Ngt),274).g){case 3:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),d.c[d.c.length]=g;break;case 1:p=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),nyt)),d.c[d.c.length]=p;break;case 4:y=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),tyt)),d.c[d.c.length]=y;break;case 2:k=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),tyt)),d.c[d.c.length]=k;break;default:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),p=new qKn(t,n.c.d,cyt,nyt),y=new qKn(t,n.c.d,ryt,tyt),k=new qKn(t,n.c.d,cyt,tyt),d.c[d.c.length]=y,d.c[d.c.length]=k,d.c[d.c.length]=g,d.c[d.c.length]=p}for(r=new iC(t,n.c),u=new Wb(d);u.a<u.c.c.length;)PXn(r,c=BB(n0(u),180),n.b),WBn(c);for(l=new Jyn(t,n.c),o=new Wb(d);o.a<o.c.c.length;)Hzn(l,c=BB(n0(o),180));if(e.n)for(s=new Wb(d);s.a<s.c.c.length;)OH(e,(c=BB(n0(s),180))+" size is "+v$n(c));if(f=null,n.d&&IBn(t,h=FUn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Wb(d);s.a<s.c.c.length;)IBn(t,c=BB(n0(s),180),e)&&(!f||v$n(f)>v$n(c))&&(f=c);for(!f&&(l1(0,d.c.length),f=BB(d.c[0],180)),w=new Wb(t.b);w.a<w.c.c.length;)for(m=new Wb(BB(n0(w),29).a);m.a<m.c.c.length;)(v=BB(n0(m),10)).n.b=Gy(f.p[v.p])+Gy(f.d[v.p]);for(e.n&&(OH(e,"Chosen node placement: "+f),OH(e,"Blocks: "+xOn(f)),OH(e,"Classes: "+UAn(f,e)),OH(e,"Marked edges: "+n.b)),a=new Wb(d);a.a<a.c.c.length;)(c=BB(n0(a),180)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;zrn(n.c),n.b.a.$b(),HSn(e)}function cWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(a=new YT,v=BB(mMn(e,(HXn(),Udt)),103),w=0,Frn(a,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=a.b;)s=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&!qy(TD(ZAn(s,$dt)))&&Ypn(s,(hWn(),wlt),iln(w++)),!qy(TD(ZAn(s,Ggt)))&&(f=0!=(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a).i,b=kTn(s),l=GI(ZAn(s,sgt))===GI((ufn(),pCt)),g=null,(T=!P8(s,(sWn(),eSt))||mK(SD(ZAn(s,eSt)),w1n))&&l&&(f||b)&&(hon(g=kFn(s),Udt,v),Lx(g,gpt)&&My(new uwn(Gy(MD(mMn(g,gpt)))),g),0!=BB(ZAn(s,Fgt),174).gc()&&(h=g,JT(new Rq(null,(!s.c&&(s.c=new eU(XOt,s,9,9)),new w1(s.c,16))),new Xw(h)),mDn(s,g))),m=e,(y=BB(RX(n.a,JJ(s)),10))&&(m=y.e),d=wzn(n,s,m),g&&(d.e=g,g.e=d,Frn(a,(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a))));for(w=0,r5(a,t,a.c.b,a.c);0!=a.b;){for(o=new AL((!(c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33)).b&&(c.b=new eU(_Ot,c,12,3)),c.b));o.e!=o.i.gc();)tKn(u=BB(kpn(o),79)),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&Ypn(u,(hWn(),wlt),iln(w++)),j=PTn(BB(Wtn((!u.b&&(u.b=new hK(KOt,u,4,7)),u.b),0),82)),E=PTn(BB(Wtn((!u.c&&(u.c=new hK(KOt,u,5,8)),u.c),0),82)),qy(TD(ZAn(u,Ggt)))||qy(TD(ZAn(j,Ggt)))||qy(TD(ZAn(E,Ggt)))||(p=c,QIn(u)&&qy(TD(ZAn(j,wgt)))&&qy(TD(ZAn(u,dgt)))||Ctn(E,j)?p=j:Ctn(j,E)&&(p=E),m=e,(y=BB(RX(n.a,p),10))&&(m=y.e),hon(uWn(n,u,p,m),(hWn(),Fft),Lxn(n,u,t,e)));if(l=GI(ZAn(c,sgt))===GI((ufn(),pCt)))for(r=new AL((!c.a&&(c.a=new eU(UOt,c,10,11)),c.a));r.e!=r.i.gc();)T=!P8(i=BB(kpn(r),33),(sWn(),eSt))||mK(SD(ZAn(i,eSt)),w1n),k=GI(ZAn(i,sgt))===GI(pCt),T&&k&&r5(a,i,a.c.b,a.c)}}function aWn(n,t,e,i,r,c){var a,u,o,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-sQn>=-1900?1:0,oO(n,e>=4?Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn])[a]:Pun(Gk(Qtt,1),sVn,2,6,["BC","AD"])[a]);break;case 121:opn(n,e,i);break;case 77:XKn(n,e,i);break;case 107:Enn(n,0==(u=r.q.getHours())?24:u,e);break;case 83:RLn(n,e,r);break;case 69:o=i.q.getDay(),oO(n,5==e?Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[o]:4==e?Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[o]:Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[o]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[1]):oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[0]);break;case 104:Enn(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Enn(n,r.q.getHours()%12,e);break;case 72:Enn(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[h]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Enn(n,h,1);break;case 76:f=i.q.getMonth(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[f]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Enn(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,oO(n,e<4?Pun(Gk(Qtt,1),sVn,2,6,["Q1","Q2","Q3","Q4"])[l]:Pun(Gk(Qtt,1),sVn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Enn(n,i.q.getDate(),e);break;case 109:Enn(n,r.q.getMinutes(),e);break;case 115:Enn(n,r.q.getSeconds(),e);break;case 122:oO(n,e<4?c.c[0]:c.c[1]);break;case 118:oO(n,c.b);break;case 90:oO(n,e<3?nIn(c):3==e?wIn(c):dIn(c.a));break;default:return!1}return!0}function uWn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(tKn(t),o=BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82),h=BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82),u=PTn(o),s=PTn(h),a=0==(!t.a&&(t.a=new eU(FOt,t,6,6)),t.a).i?null:BB(Wtn((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),0),202),j=BB(RX(n.a,u),10),S=BB(RX(n.a,s),10),E=null,P=null,cL(o,186)&&(cL(k=BB(RX(n.a,o),299),11)?E=BB(k,11):cL(k,10)&&(j=BB(k,10),E=BB(xq(j.j,0),11))),cL(h,186)&&(cL(M=BB(RX(n.a,h),299),11)?P=BB(M,11):cL(M,10)&&(S=BB(M,10),P=BB(xq(S.j,0),11))),!j||!S)throw Hp(new ck("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(qan(d=new wY,t),hon(d,(hWn(),dlt),t),hon(d,(HXn(),vgt),null),b=BB(mMn(i,Zft),21),j==S&&b.Fc((bDn(),vft)),E||(ain(),y=qvt,T=null,a&&vA(BB(mMn(j,ept),98))&&(Y3(T=new xC(a.j,a.k),XJ(t)),t5(T,e),Ctn(s,u)&&(y=Hvt,UR(T,j.n))),E=dHn(j,T,y,i)),P||(ain(),y=Hvt,C=null,a&&vA(BB(mMn(S,ept),98))&&(Y3(C=new xC(a.b,a.c),XJ(t)),t5(C,e)),P=dHn(S,C,y,vW(S))),SZ(d,E),MZ(d,P),(E.e.c.length>1||E.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((bDn(),bft)),l=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));l.e!=l.i.gc();)if(!qy(TD(ZAn(f=BB(kpn(l),137),Ggt)))&&f.a)switch(g=Hhn(f),WB(d.b,g),BB(mMn(g,Ydt),272).g){case 1:case 2:b.Fc((bDn(),fft));break;case 0:b.Fc((bDn(),sft)),hon(g,Ydt,(Rtn(),zPt))}if(c=BB(mMn(i,qdt),314),p=BB(mMn(i,_gt),315),r=c==(Oin(),sht)||p==(Nvn(),pvt),a&&0!=(!a.a&&(a.a=new $L(xOt,a,5)),a.a).i&&r){for(v=qSn(a),w=new km,m=spn(v,0);m.b!=m.d.c;)DH(w,new wA(BB(b3(m),8)));hon(d,glt,w)}return d}function oWn(n){n.gb||(n.gb=!0,n.b=kan(n,0),Rrn(n.b,18),Krn(n.b,19),n.a=kan(n,1),Rrn(n.a,1),Krn(n.a,2),Krn(n.a,3),Krn(n.a,4),Krn(n.a,5),n.o=kan(n,2),Rrn(n.o,8),Rrn(n.o,9),Krn(n.o,10),Krn(n.o,11),Krn(n.o,12),Krn(n.o,13),Krn(n.o,14),Krn(n.o,15),Krn(n.o,16),Krn(n.o,17),Krn(n.o,18),Krn(n.o,19),Krn(n.o,20),Krn(n.o,21),Krn(n.o,22),Krn(n.o,23),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),n.p=kan(n,3),Rrn(n.p,2),Rrn(n.p,3),Rrn(n.p,4),Rrn(n.p,5),Krn(n.p,6),Krn(n.p,7),otn(n.p),otn(n.p),n.q=kan(n,4),Rrn(n.q,8),n.v=kan(n,5),Krn(n.v,9),otn(n.v),otn(n.v),otn(n.v),n.w=kan(n,6),Rrn(n.w,2),Rrn(n.w,3),Rrn(n.w,4),Krn(n.w,5),n.B=kan(n,7),Krn(n.B,1),otn(n.B),otn(n.B),otn(n.B),n.Q=kan(n,8),Krn(n.Q,0),otn(n.Q),n.R=kan(n,9),Rrn(n.R,1),n.S=kan(n,10),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),n.T=kan(n,11),Krn(n.T,10),Krn(n.T,11),Krn(n.T,12),Krn(n.T,13),Krn(n.T,14),otn(n.T),otn(n.T),n.U=kan(n,12),Rrn(n.U,2),Rrn(n.U,3),Krn(n.U,4),Krn(n.U,5),Krn(n.U,6),Krn(n.U,7),otn(n.U),n.V=kan(n,13),Krn(n.V,10),n.W=kan(n,14),Rrn(n.W,18),Rrn(n.W,19),Rrn(n.W,20),Krn(n.W,21),Krn(n.W,22),Krn(n.W,23),n.bb=kan(n,15),Rrn(n.bb,10),Rrn(n.bb,11),Rrn(n.bb,12),Rrn(n.bb,13),Rrn(n.bb,14),Rrn(n.bb,15),Rrn(n.bb,16),Krn(n.bb,17),otn(n.bb),otn(n.bb),n.eb=kan(n,16),Rrn(n.eb,2),Rrn(n.eb,3),Rrn(n.eb,4),Rrn(n.eb,5),Rrn(n.eb,6),Rrn(n.eb,7),Krn(n.eb,8),Krn(n.eb,9),n.ab=kan(n,17),Rrn(n.ab,0),Rrn(n.ab,1),n.H=kan(n,18),Krn(n.H,0),Krn(n.H,1),Krn(n.H,2),Krn(n.H,3),Krn(n.H,4),Krn(n.H,5),otn(n.H),n.db=kan(n,19),Krn(n.db,2),n.c=jan(n,20),n.d=jan(n,21),n.e=jan(n,22),n.f=jan(n,23),n.i=jan(n,24),n.g=jan(n,25),n.j=jan(n,26),n.k=jan(n,27),n.n=jan(n,28),n.r=jan(n,29),n.s=jan(n,30),n.t=jan(n,31),n.u=jan(n,32),n.fb=jan(n,33),n.A=jan(n,34),n.C=jan(n,35),n.D=jan(n,36),n.F=jan(n,37),n.G=jan(n,38),n.I=jan(n,39),n.J=jan(n,40),n.L=jan(n,41),n.M=jan(n,42),n.N=jan(n,43),n.O=jan(n,44),n.P=jan(n,45),n.X=jan(n,46),n.Y=jan(n,47),n.Z=jan(n,48),n.$=jan(n,49),n._=jan(n,50),n.cb=jan(n,51),n.K=jan(n,52))}function sWn(){var n,t;sWn=O,eSt=new up(w5n),mPt=new up(d5n),wvn(),iSt=new $O(W2n,rSt=CMt),new $p,cSt=new $O(VJn,null),aSt=new up(g5n),wEn(),fSt=EG(ZMt,Pun(Gk(qPt,1),$Vn,291,0,[VMt])),hSt=new $O(u3n,fSt),lSt=new $O(X2n,(hN(),!1)),Ffn(),bSt=new $O(J2n,wSt=BPt),Mbn(),vSt=new $O(y2n,mSt=ZPt),jSt=new $O(A4n,!1),ufn(),ESt=new $O(d2n,TSt=vCt),WSt=new WA(12),XSt=new $O(QJn,WSt),CSt=new $O(jZn,!1),ISt=new $O(m3n,!1),USt=new $O(MZn,!1),QEn(),uPt=new $O(EZn,oPt=YCt),gPt=new up(g3n),pPt=new up(pZn),vPt=new up(yZn),kPt=new up(kZn),ASt=new km,OSt=new $O(o3n,ASt),sSt=new $O(f3n,!1),MSt=new $O(l3n,!1),new up(p5n),LSt=new lm,$St=new $O(p3n,LSt),zSt=new $O(z2n,!1),new $p,yPt=new $O(v5n,1),new $O(m5n,!0),iln(0),new $O(y5n,iln(100)),new $O(k5n,!1),iln(0),new $O(j5n,iln(4e3)),iln(0),new $O(E5n,iln(400)),new $O(T5n,!1),new $O(M5n,!1),new $O(S5n,!0),new $O(P5n,!1),Fwn(),uSt=new $O(b5n,oSt=eOt),jPt=new $O(L2n,10),EPt=new $O(N2n,10),TPt=new $O(XJn,20),MPt=new $O(x2n,10),SPt=new $O(mZn,2),PPt=new $O(D2n,10),IPt=new $O(R2n,0),OPt=new $O(F2n,5),APt=new $O(K2n,1),$Pt=new $O(_2n,1),LPt=new $O(vZn,20),NPt=new $O(B2n,10),RPt=new $O(H2n,10),CPt=new up(q2n),DPt=new lA,xPt=new $O(v3n,DPt),YSt=new up(d3n),VSt=new $O(w3n,QSt=!1),xSt=new WA(5),NSt=new $O(Z2n,xSt),n$n(),t=BB(Vj(GCt),9),RSt=new YK(t,BB(SR(t,t.length),9),0),DSt=new $O(CZn,RSt),cpn(),ZSt=new $O(e3n,nPt=BCt),ePt=new up(i3n),iPt=new up(r3n),rPt=new up(c3n),tPt=new up(a3n),n=BB(Vj(YIt),9),_St=new YK(n,BB(SR(n,n.length),9),0),KSt=new $O(PZn,_St),GSt=nbn((n_n(),GIt)),qSt=new $O(SZn,GSt),HSt=new xC(0,0),BSt=new $O(BZn,HSt),FSt=new $O(Y2n,!1),Rtn(),gSt=new $O(s3n,pSt=zPt),dSt=new $O(TZn,!1),new up(C5n),iln(1),new $O(I5n,null),cPt=new up(b3n),sPt=new up(h3n),kUn(),wPt=new $O(U2n,dPt=PIt),aPt=new up(G2n),lIn(),lPt=nbn(rIt),fPt=new $O(IZn,lPt),hPt=new $O(n3n,!1),bPt=new $O(t3n,!0),SSt=new $O(V2n,!1),PSt=new $O(Q2n,!1),ySt=new $O(WJn,1),nMn(),new $O(O5n,kSt=aCt),JSt=!0}function hWn(){var n,t;hWn=O,dlt=new up(OZn),Fft=new up("coordinateOrigin"),Mlt=new up("processors"),_ft=new iR("compoundNode",(hN(),!1)),elt=new iR("insideConnections",!1),glt=new up("originalBendpoints"),plt=new up("originalDummyNodePosition"),vlt=new up("originalLabelEdge"),Plt=new up("representedLabels"),zft=new up("endLabels"),Uft=new up("endLabel.origin"),ult=new iR("labelSide",(Xyn(),MCt)),blt=new iR("maxEdgeThickness",0),Clt=new iR("reversed",!1),Slt=new up(AZn),hlt=new iR("longEdgeSource",null),flt=new iR("longEdgeTarget",null),slt=new iR("longEdgeHasLabelDummies",!1),olt=new iR("longEdgeBeforeLabelDummy",!1),Gft=new iR("edgeConstraint",(Jun(),Aht)),rlt=new up("inLayerLayoutUnit"),ilt=new iR("inLayerConstraint",(z7(),Pft)),clt=new iR("inLayerSuccessorConstraint",new Np),alt=new iR("inLayerSuccessorConstraintBetweenNonDummies",!1),Elt=new up("portDummy"),Bft=new iR("crossingHint",iln(0)),Zft=new iR("graphProperties",new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),Qft=new iR("externalPortSide",(kUn(),PIt)),Yft=new iR("externalPortSize",new Gj),Wft=new up("externalPortReplacedDummies"),Vft=new up("externalPortReplacedDummy"),Xft=new iR("externalPortConnections",new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),Tlt=new iR(dJn,0),xft=new up("barycenterAssociates"),Klt=new up("TopSideComments"),Dft=new up("BottomSideComments"),Kft=new up("CommentConnectionPort"),tlt=new iR("inputCollect",!1),klt=new iR("outputCollect",!1),qft=new iR("cyclic",!1),Hft=new up("crossHierarchyMap"),Rlt=new up("targetOffset"),new iR("splineLabelSize",new Gj),Alt=new up("spacings"),jlt=new iR("partitionConstraint",!1),Rft=new up("breakingPoint.info"),xlt=new up("splines.survivingEdge"),Nlt=new up("splines.route.start"),$lt=new up("splines.edgeChain"),ylt=new up("originalPortConstraints"),Olt=new up("selfLoopHolder"),Llt=new up("splines.nsPortY"),wlt=new up("modelOrder"),llt=new up("longEdgeTargetNode"),Jft=new iR(z1n,!1),Ilt=new iR(z1n,!1),nlt=new up("layerConstraints.hiddenNodes"),mlt=new up("layerConstraints.opposidePort"),Dlt=new up("targetNode.modelOrder")}function fWn(){fWn=O,_nn(),Sbt=new $O(U1n,Pbt=Sht),Gbt=new $O(X1n,(hN(),!1)),z2(),Vbt=new $O(W1n,Qbt=Aft),wwt=new $O(V1n,!1),dwt=new $O(Q1n,!0),Ult=new $O(Y1n,!1),U7(),Nwt=new $O(J1n,xwt=Kvt),iln(1),qwt=new $O(Z1n,iln(7)),Gwt=new $O(n0n,!1),zbt=new $O(t0n,!1),Vvn(),Tbt=new $O(e0n,Mbt=yht),TTn(),lwt=new $O(i0n,bwt=tvt),Tbn(),ewt=new $O(r0n,iwt=qlt),iln(-1),twt=new $O(c0n,iln(-1)),iln(-1),rwt=new $O(a0n,iln(-1)),iln(-1),cwt=new $O(u0n,iln(4)),iln(-1),uwt=new $O(o0n,iln(2)),sNn(),hwt=new $O(s0n,fwt=Ivt),iln(0),swt=new $O(h0n,iln(0)),Zbt=new $O(f0n,iln(DWn)),Oin(),jbt=new $O(l0n,Ebt=hht),ubt=new $O(b0n,!1),gbt=new $O(w0n,.1),ybt=new $O(d0n,!1),iln(-1),vbt=new $O(g0n,iln(-1)),iln(-1),mbt=new $O(p0n,iln(-1)),iln(0),obt=new $O(v0n,iln(40)),Kan(),bbt=new $O(m0n,wbt=Eft),sbt=new $O(y0n,hbt=kft),Nvn(),$wt=new $O(k0n,Lwt=gvt),jwt=new up(j0n),g7(),gwt=new $O(E0n,pwt=qht),Bjn(),mwt=new $O(T0n,ywt=Qht),new $p,Mwt=new $O(M0n,.3),Pwt=new up(S0n),bvn(),Cwt=new $O(P0n,Iwt=lvt),Hcn(),Nbt=new $O(C0n,xbt=Wvt),A6(),Dbt=new $O(I0n,Rbt=Zvt),Usn(),Kbt=new $O(O0n,_bt=rmt),Bbt=new $O(A0n,.2),$bt=new $O($0n,2),_wt=new $O(L0n,null),Bwt=new $O(N0n,10),Fwt=new $O(x0n,10),Hwt=new $O(D0n,20),iln(0),Dwt=new $O(R0n,iln(0)),iln(0),Rwt=new $O(K0n,iln(0)),iln(0),Kwt=new $O(_0n,iln(0)),Xlt=new $O(F0n,!1),JMn(),Qlt=new $O(B0n,Ylt=cft),V8(),Wlt=new $O(H0n,Vlt=aht),Xbt=new $O(q0n,!1),iln(0),Ubt=new $O(G0n,iln(16)),iln(0),Wbt=new $O(z0n,iln(5)),$un(),ldt=new $O(U0n,bdt=bmt),zwt=new $O(X0n,10),Wwt=new $O(W0n,1),uin(),edt=new $O(V0n,idt=ght),Ywt=new up(Q0n),ndt=iln(1),iln(0),Zwt=new $O(Y0n,ndt),dcn(),pdt=new $O(J0n,vdt=umt),wdt=new up(Z0n),odt=new $O(n2n,!0),adt=new $O(t2n,2),hdt=new $O(e2n,!0),gSn(),Obt=new $O(i2n,Abt=_ht),$Pn(),Cbt=new $O(r2n,Ibt=Zst),mon(),cbt=new $O(c2n,abt=Nvt),rbt=new $O(a2n,!1),Bfn(),Jlt=new $O(u2n,Zlt=wut),Mhn(),ebt=new $O(o2n,ibt=cvt),nbt=new $O(s2n,0),tbt=new $O(h2n,0),Jbt=jht,Ybt=sht,awt=nvt,owt=nvt,nwt=Ypt,ufn(),pbt=pCt,kbt=hht,dbt=hht,fbt=hht,lbt=pCt,Ewt=mvt,Twt=gvt,vwt=gvt,kwt=gvt,Swt=vvt,Awt=mvt,Owt=mvt,Mbn(),Fbt=JPt,Hbt=JPt,qbt=rmt,Lbt=YPt,Uwt=wmt,Xwt=lmt,Vwt=wmt,Qwt=lmt,rdt=wmt,cdt=lmt,Jwt=dht,tdt=ght,mdt=wmt,ydt=lmt,ddt=wmt,gdt=lmt,sdt=lmt,udt=lmt,fdt=lmt}function lWn(){lWn=O,rot=new nP("DIRECTION_PREPROCESSOR",0),tot=new nP("COMMENT_PREPROCESSOR",1),cot=new nP("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),kot=new nP("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Fot=new nP("PARTITION_PREPROCESSOR",4),Mot=new nP("LABEL_DUMMY_INSERTER",5),Uot=new nP("SELF_LOOP_PREPROCESSOR",6),Oot=new nP("LAYER_CONSTRAINT_PREPROCESSOR",7),Kot=new nP("PARTITION_MIDPROCESSOR",8),got=new nP("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),Not=new nP("NODE_PROMOTION",10),Iot=new nP("LAYER_CONSTRAINT_POSTPROCESSOR",11),_ot=new nP("PARTITION_POSTPROCESSOR",12),lot=new nP("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Wot=new nP("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),Vut=new nP("BREAKING_POINT_INSERTER",15),Lot=new nP("LONG_EDGE_SPLITTER",16),Hot=new nP("PORT_SIDE_PROCESSOR",17),jot=new nP("INVERTED_PORT_PROCESSOR",18),Bot=new nP("PORT_LIST_SORTER",19),Qot=new nP("SORT_BY_INPUT_ORDER_OF_MODEL",20),Dot=new nP("NORTH_SOUTH_PORT_PREPROCESSOR",21),Qut=new nP("BREAKING_POINT_PROCESSOR",22),Rot=new nP(E1n,23),Yot=new nP(T1n,24),Got=new nP("SELF_LOOP_PORT_RESTORER",25),Vot=new nP("SINGLE_EDGE_GRAPH_WRAPPER",26),Eot=new nP("IN_LAYER_CONSTRAINT_PROCESSOR",27),sot=new nP("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),Tot=new nP("LABEL_AND_NODE_SIZE_PROCESSOR",29),yot=new nP("INNERMOST_NODE_MARGIN_CALCULATOR",30),Xot=new nP("SELF_LOOP_ROUTER",31),Zut=new nP("COMMENT_NODE_MARGIN_CALCULATOR",32),uot=new nP("END_LABEL_PREPROCESSOR",33),Pot=new nP("LABEL_DUMMY_SWITCHER",34),Jut=new nP("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),Cot=new nP("LABEL_SIDE_SELECTOR",36),vot=new nP("HYPEREDGE_DUMMY_MERGER",37),bot=new nP("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),Aot=new nP("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),dot=new nP("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),eot=new nP("CONSTRAINTS_POSTPROCESSOR",41),not=new nP("COMMENT_POSTPROCESSOR",42),mot=new nP("HYPERNODE_PROCESSOR",43),wot=new nP("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),$ot=new nP("LONG_EDGE_JOINER",45),zot=new nP("SELF_LOOP_POSTPROCESSOR",46),Yut=new nP("BREAKING_POINT_REMOVER",47),xot=new nP("NORTH_SOUTH_PORT_POSTPROCESSOR",48),pot=new nP("HORIZONTAL_COMPACTOR",49),Sot=new nP("LABEL_DUMMY_REMOVER",50),hot=new nP("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),oot=new nP("END_LABEL_SORTER",52),qot=new nP("REVERSED_EDGE_RESTORER",53),aot=new nP("END_LABEL_POSTPROCESSOR",54),fot=new nP("HIERARCHICAL_NODE_RESIZER",55),iot=new nP("DIRECTION_POSTPROCESSOR",56)}function bWn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x,D,R,K,_,F,B,H,q,G,z,U,X,W,V,Q,Y,J,Z,nn,tn,en,rn,cn,an,un,on;for(J=0,L=0,D=(O=t).length;L<D;++L)for(G=new Wb((C=O[L]).j);G.a<G.c.c.length;){for(U=0,o=new Wb((q=BB(n0(G),11)).g);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.d.i.c&&++U;U>0&&(n.a[q.p]=J++)}for(rn=0,N=0,R=(A=i).length;N<R;++N){for(K=0,G=new Wb((C=A[N]).j);G.a<G.c.c.length&&(q=BB(n0(G),11)).j==(kUn(),sIt);)for(o=new Wb(q.e);o.a<o.c.c.length;)if(u=BB(n0(o),17),C.c!=u.c.i.c){++K;break}for(F=0,X=new M2(C.j,C.j.c.length);X.b>0;){for(Px(X.b>0),U=0,o=new Wb((q=BB(X.a.Xb(X.c=--X.b),11)).e);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.c.i.c&&++U;U>0&&(q.j==(kUn(),sIt)?(n.a[q.p]=rn,++rn):(n.a[q.p]=rn+K+F,++F))}rn+=F}for(z=new xp,d=new fA,$=0,x=(I=t).length;$<x;++$)for(tn=new Wb((C=I[$]).j);tn.a<tn.c.c.length;)for(o=new Wb((nn=BB(n0(tn),11)).g);o.a<o.c.c.length;)if(an=(u=BB(n0(o),17)).d,C.c!=an.i.c)if(Z=BB(qI(AY(z.f,nn)),467),cn=BB(qI(AY(z.f,an)),467),Z||cn)if(Z)if(cn)if(Z==cn)WB(Z.a,u);else{for(WB(Z.a,u),H=new Wb(cn.d);H.a<H.c.c.length;)B=BB(n0(H),11),jCn(z.f,B,Z);gun(Z.a,cn.a),gun(Z.d,cn.d),d.a.Bc(cn)}else WB(Z.a,u),WB(Z.d,an),jCn(z.f,an,Z);else WB(cn.a,u),WB(cn.d,nn),jCn(z.f,nn,cn);else w=new DR,d.a.zc(w,d),WB(w.a,u),WB(w.d,nn),jCn(z.f,nn,w),WB(w.d,an),jCn(z.f,an,w);for(g=BB(Emn(d,x8(Fmt,{3:1,4:1,5:1,1946:1},467,d.a.gc(),0,1)),1946),P=t[0].c,Y=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=J,h.f=rn,G=new Wb(h.d);G.a<G.c.c.length;)q=BB(n0(G),11),W=n.a[q.p],q.i.c==P?(W<h.e&&(h.e=W),W>h.b&&(h.b=W)):q.i.c==Y&&(W<h.f&&(h.f=W),W>h.c&&(h.c=W));for(z9(g,0,g.length,null),en=x8(ANt,hQn,25,g.length,15,1),r=x8(ANt,hQn,25,rn+1,15,1),v=0;v<g.length;v++)en[v]=g[v].f,r[en[v]]=1;for(a=0,m=0;m<r.length;m++)1==r[m]?r[m]=a:--a;for(V=0,y=0;y<en.length;y++)en[y]+=r[en[y]],V=e.Math.max(V,en[y]+1);for(s=1;s<V;)s*=2;for(on=2*s-1,s-=1,un=x8(ANt,hQn,25,on,15,1),c=0,M=0;M<en.length;M++)for(++un[T=en[M]+s];T>0;)T%2>0&&(c+=un[T+1]),++un[T=(T-1)/2|0];for(S=x8(qmt,HWn,362,2*g.length,0,1),k=0;k<g.length;k++)S[2*k]=new qV(g[k],g[k].e,g[k].b,(Q4(),Hmt)),S[2*k+1]=new qV(g[k],g[k].b,g[k].e,Bmt);for(z9(S,0,S.length,null),_=0,j=0;j<S.length;j++)switch(S[j].d.g){case 0:++_;break;case 1:c+=--_}for(Q=x8(qmt,HWn,362,2*g.length,0,1),E=0;E<g.length;E++)Q[2*E]=new qV(g[E],g[E].f,g[E].c,(Q4(),Hmt)),Q[2*E+1]=new qV(g[E],g[E].c,g[E].f,Bmt);for(z9(Q,0,Q.length,null),_=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++_;break;case 1:c+=--_}return c}function wWn(){wWn=O,sNt=new Ap(7),hNt=new oG(8,94),new oG(8,64),fNt=new oG(8,36),pNt=new oG(8,65),vNt=new oG(8,122),mNt=new oG(8,90),jNt=new oG(8,98),dNt=new oG(8,66),yNt=new oG(8,60),ENt=new oG(8,62),oNt=new Ap(11),Yxn(uNt=new M0(4),48,57),Yxn(kNt=new M0(4),48,57),Yxn(kNt,65,90),Yxn(kNt,95,95),Yxn(kNt,97,122),Yxn(gNt=new M0(4),9,9),Yxn(gNt,10,10),Yxn(gNt,12,12),Yxn(gNt,13,13),Yxn(gNt,32,32),lNt=$Fn(uNt),wNt=$Fn(kNt),bNt=$Fn(gNt),iNt=new xp,rNt=new xp,cNt=Pun(Gk(Qtt,1),sVn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),eNt=Pun(Gk(Qtt,1),sVn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",gnt,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),aNt=Pun(Gk(ANt,1),hQn,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function dWn(){dWn=O,Prt=new ocn("OUT_T_L",0,(J9(),Yit),(G7(),irt),(Dtn(),Git),Git,Pun(Gk(Dnt,1),HWn,21,0,[EG((n$n(),LCt),Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt]))])),Srt=new ocn("OUT_T_C",1,Qit,irt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),Crt=new ocn("OUT_T_R",2,Jit,irt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt]))])),vrt=new ocn("OUT_B_L",3,Yit,crt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt]))])),prt=new ocn("OUT_B_C",4,Qit,crt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),mrt=new ocn("OUT_B_R",5,Jit,crt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt]))])),jrt=new ocn("OUT_L_T",6,Jit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,DCt,OCt]))])),krt=new ocn("OUT_L_C",7,Jit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt,OCt]))])),yrt=new ocn("OUT_L_B",8,Jit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,NCt,OCt]))])),Mrt=new ocn("OUT_R_T",9,Yit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,DCt,OCt]))])),Trt=new ocn("OUT_R_C",10,Yit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt,OCt]))])),Ert=new ocn("OUT_R_B",11,Yit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,NCt,OCt]))])),drt=new ocn("IN_T_L",12,Yit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt,OCt]))])),wrt=new ocn("IN_T_C",13,Qit,crt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),grt=new ocn("IN_T_R",14,Jit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt,OCt]))])),lrt=new ocn("IN_C_L",15,Yit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt,OCt]))])),frt=new ocn("IN_C_C",16,Qit,rrt,zit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt,OCt]))])),brt=new ocn("IN_C_R",17,Jit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt,OCt]))])),srt=new ocn("IN_B_L",18,Yit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt,OCt]))])),ort=new ocn("IN_B_C",19,Qit,irt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),hrt=new ocn("IN_B_R",20,Jit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt,OCt]))])),Irt=new ocn(hJn,21,null,null,null,null,Pun(Gk(Dnt,1),HWn,21,0,[]))}function gWn(){gWn=O,i$t=(QX(),t$t).b,BB(Wtn(QQ(t$t.b),0),34),BB(Wtn(QQ(t$t.b),1),18),e$t=t$t.a,BB(Wtn(QQ(t$t.a),0),34),BB(Wtn(QQ(t$t.a),1),18),BB(Wtn(QQ(t$t.a),2),18),BB(Wtn(QQ(t$t.a),3),18),BB(Wtn(QQ(t$t.a),4),18),r$t=t$t.o,BB(Wtn(QQ(t$t.o),0),34),BB(Wtn(QQ(t$t.o),1),34),a$t=BB(Wtn(QQ(t$t.o),2),18),BB(Wtn(QQ(t$t.o),3),18),BB(Wtn(QQ(t$t.o),4),18),BB(Wtn(QQ(t$t.o),5),18),BB(Wtn(QQ(t$t.o),6),18),BB(Wtn(QQ(t$t.o),7),18),BB(Wtn(QQ(t$t.o),8),18),BB(Wtn(QQ(t$t.o),9),18),BB(Wtn(QQ(t$t.o),10),18),BB(Wtn(QQ(t$t.o),11),18),BB(Wtn(QQ(t$t.o),12),18),BB(Wtn(QQ(t$t.o),13),18),BB(Wtn(QQ(t$t.o),14),18),BB(Wtn(QQ(t$t.o),15),18),BB(Wtn(VQ(t$t.o),0),59),BB(Wtn(VQ(t$t.o),1),59),BB(Wtn(VQ(t$t.o),2),59),BB(Wtn(VQ(t$t.o),3),59),BB(Wtn(VQ(t$t.o),4),59),BB(Wtn(VQ(t$t.o),5),59),BB(Wtn(VQ(t$t.o),6),59),BB(Wtn(VQ(t$t.o),7),59),BB(Wtn(VQ(t$t.o),8),59),BB(Wtn(VQ(t$t.o),9),59),c$t=t$t.p,BB(Wtn(QQ(t$t.p),0),34),BB(Wtn(QQ(t$t.p),1),34),BB(Wtn(QQ(t$t.p),2),34),BB(Wtn(QQ(t$t.p),3),34),BB(Wtn(QQ(t$t.p),4),18),BB(Wtn(QQ(t$t.p),5),18),BB(Wtn(VQ(t$t.p),0),59),BB(Wtn(VQ(t$t.p),1),59),u$t=t$t.q,BB(Wtn(QQ(t$t.q),0),34),o$t=t$t.v,BB(Wtn(QQ(t$t.v),0),18),BB(Wtn(VQ(t$t.v),0),59),BB(Wtn(VQ(t$t.v),1),59),BB(Wtn(VQ(t$t.v),2),59),s$t=t$t.w,BB(Wtn(QQ(t$t.w),0),34),BB(Wtn(QQ(t$t.w),1),34),BB(Wtn(QQ(t$t.w),2),34),BB(Wtn(QQ(t$t.w),3),18),h$t=t$t.B,BB(Wtn(QQ(t$t.B),0),18),BB(Wtn(VQ(t$t.B),0),59),BB(Wtn(VQ(t$t.B),1),59),BB(Wtn(VQ(t$t.B),2),59),b$t=t$t.Q,BB(Wtn(QQ(t$t.Q),0),18),BB(Wtn(VQ(t$t.Q),0),59),w$t=t$t.R,BB(Wtn(QQ(t$t.R),0),34),d$t=t$t.S,BB(Wtn(VQ(t$t.S),0),59),BB(Wtn(VQ(t$t.S),1),59),BB(Wtn(VQ(t$t.S),2),59),BB(Wtn(VQ(t$t.S),3),59),BB(Wtn(VQ(t$t.S),4),59),BB(Wtn(VQ(t$t.S),5),59),BB(Wtn(VQ(t$t.S),6),59),BB(Wtn(VQ(t$t.S),7),59),BB(Wtn(VQ(t$t.S),8),59),BB(Wtn(VQ(t$t.S),9),59),BB(Wtn(VQ(t$t.S),10),59),BB(Wtn(VQ(t$t.S),11),59),BB(Wtn(VQ(t$t.S),12),59),BB(Wtn(VQ(t$t.S),13),59),BB(Wtn(VQ(t$t.S),14),59),g$t=t$t.T,BB(Wtn(QQ(t$t.T),0),18),BB(Wtn(QQ(t$t.T),2),18),p$t=BB(Wtn(QQ(t$t.T),3),18),BB(Wtn(QQ(t$t.T),4),18),BB(Wtn(VQ(t$t.T),0),59),BB(Wtn(VQ(t$t.T),1),59),BB(Wtn(QQ(t$t.T),1),18),v$t=t$t.U,BB(Wtn(QQ(t$t.U),0),34),BB(Wtn(QQ(t$t.U),1),34),BB(Wtn(QQ(t$t.U),2),18),BB(Wtn(QQ(t$t.U),3),18),BB(Wtn(QQ(t$t.U),4),18),BB(Wtn(QQ(t$t.U),5),18),BB(Wtn(VQ(t$t.U),0),59),m$t=t$t.V,BB(Wtn(QQ(t$t.V),0),18),y$t=t$t.W,BB(Wtn(QQ(t$t.W),0),34),BB(Wtn(QQ(t$t.W),1),34),BB(Wtn(QQ(t$t.W),2),34),BB(Wtn(QQ(t$t.W),3),18),BB(Wtn(QQ(t$t.W),4),18),BB(Wtn(QQ(t$t.W),5),18),j$t=t$t.bb,BB(Wtn(QQ(t$t.bb),0),34),BB(Wtn(QQ(t$t.bb),1),34),BB(Wtn(QQ(t$t.bb),2),34),BB(Wtn(QQ(t$t.bb),3),34),BB(Wtn(QQ(t$t.bb),4),34),BB(Wtn(QQ(t$t.bb),5),34),BB(Wtn(QQ(t$t.bb),6),34),BB(Wtn(QQ(t$t.bb),7),18),BB(Wtn(VQ(t$t.bb),0),59),BB(Wtn(VQ(t$t.bb),1),59),E$t=t$t.eb,BB(Wtn(QQ(t$t.eb),0),34),BB(Wtn(QQ(t$t.eb),1),34),BB(Wtn(QQ(t$t.eb),2),34),BB(Wtn(QQ(t$t.eb),3),34),BB(Wtn(QQ(t$t.eb),4),34),BB(Wtn(QQ(t$t.eb),5),34),BB(Wtn(QQ(t$t.eb),6),18),BB(Wtn(QQ(t$t.eb),7),18),k$t=t$t.ab,BB(Wtn(QQ(t$t.ab),0),34),BB(Wtn(QQ(t$t.ab),1),34),f$t=t$t.H,BB(Wtn(QQ(t$t.H),0),18),BB(Wtn(QQ(t$t.H),1),18),BB(Wtn(QQ(t$t.H),2),18),BB(Wtn(QQ(t$t.H),3),18),BB(Wtn(QQ(t$t.H),4),18),BB(Wtn(QQ(t$t.H),5),18),BB(Wtn(VQ(t$t.H),0),59),T$t=t$t.db,BB(Wtn(QQ(t$t.db),0),18),l$t=t$t.M}function pWn(n){var t;n.O||(n.O=!0,Nrn(n,"type"),xrn(n,"ecore.xml.type"),Drn(n,S7n),t=BB($$n((WM(),zAt),S7n),1945),f9(kY(n.fb),n.b),z0(n.b,wLt,"AnyType",!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.D,K9n,null,0,-1,wLt,!1,!1,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.D,"any",null,0,-1,wLt,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),2),34),n.wb.D,"anyAttribute",null,0,-1,wLt,!1,!1,!0,!1,!1,!1),z0(n.bb,zLt,A7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.gb,"data",null,0,1,zLt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.gb,Y6n,null,1,1,zLt,!1,!1,!0,!1,!0,!1),z0(n.fb,ULt,$7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.fb),0),34),t.gb,"rawValue",null,0,1,ULt,!0,!0,!0,!1,!0,!0),ucn(BB(Wtn(QQ(n.fb),1),34),t.a,E6n,null,0,1,ULt,!0,!0,!0,!1,!0,!0),Myn(BB(Wtn(QQ(n.fb),2),18),n.wb.q,null,"instanceType",1,1,ULt,!1,!1,!0,!1,!1,!1,!1),z0(n.qb,XLt,L7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),0),34),n.wb.D,K9n,null,0,-1,null,!1,!1,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),1),18),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),2),18),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.qb),3),34),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),4),34),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Myn(BB(Wtn(QQ(n.qb),5),18),n.bb,null,cnt,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),6),34),n.gb,O6n,null,0,-2,null,!0,!0,!0,!1,!1,!0),dV(n.a,Ant,"AnySimpleType",!0),dV(n.c,Qtt,"AnyURI",!0),dV(n.d,Gk(NNt,1),"Base64Binary",!0),dV(n.e,$Nt,"Boolean",!0),dV(n.f,ktt,"BooleanObject",!0),dV(n.g,NNt,"Byte",!0),dV(n.i,Ttt,"ByteObject",!0),dV(n.j,Qtt,"Date",!0),dV(n.k,Qtt,"DateTime",!0),dV(n.n,iet,"Decimal",!0),dV(n.o,xNt,"Double",!0),dV(n.p,Ptt,"DoubleObject",!0),dV(n.q,Qtt,"Duration",!0),dV(n.s,Rnt,"ENTITIES",!0),dV(n.r,Rnt,"ENTITIESBase",!0),dV(n.t,Qtt,_7n,!0),dV(n.u,DNt,"Float",!0),dV(n.v,Ctt,"FloatObject",!0),dV(n.w,Qtt,"GDay",!0),dV(n.B,Qtt,"GMonth",!0),dV(n.A,Qtt,"GMonthDay",!0),dV(n.C,Qtt,"GYear",!0),dV(n.D,Qtt,"GYearMonth",!0),dV(n.F,Gk(NNt,1),"HexBinary",!0),dV(n.G,Qtt,"ID",!0),dV(n.H,Qtt,"IDREF",!0),dV(n.J,Rnt,"IDREFS",!0),dV(n.I,Rnt,"IDREFSBase",!0),dV(n.K,ANt,"Int",!0),dV(n.M,oet,"Integer",!0),dV(n.L,Att,"IntObject",!0),dV(n.P,Qtt,"Language",!0),dV(n.Q,LNt,"Long",!0),dV(n.R,Rtt,"LongObject",!0),dV(n.S,Qtt,"Name",!0),dV(n.T,Qtt,F7n,!0),dV(n.U,oet,"NegativeInteger",!0),dV(n.V,Qtt,Q7n,!0),dV(n.X,Rnt,"NMTOKENS",!0),dV(n.W,Rnt,"NMTOKENSBase",!0),dV(n.Y,oet,"NonNegativeInteger",!0),dV(n.Z,oet,"NonPositiveInteger",!0),dV(n.$,Qtt,"NormalizedString",!0),dV(n._,Qtt,"NOTATION",!0),dV(n.ab,Qtt,"PositiveInteger",!0),dV(n.cb,Qtt,"QName",!0),dV(n.db,RNt,"Short",!0),dV(n.eb,_tt,"ShortObject",!0),dV(n.gb,Qtt,qVn,!0),dV(n.hb,Qtt,"Time",!0),dV(n.ib,Qtt,"Token",!0),dV(n.jb,RNt,"UnsignedByte",!0),dV(n.kb,_tt,"UnsignedByteObject",!0),dV(n.lb,LNt,"UnsignedInt",!0),dV(n.mb,Rtt,"UnsignedIntObject",!0),dV(n.nb,oet,"UnsignedLong",!0),dV(n.ob,ANt,"UnsignedShort",!0),dV(n.pb,Att,"UnsignedShortObject",!0),Lhn(n,S7n),yWn(n))}function vWn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,w1n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Cc),w1n),EG((hAn(),iAt),Pun(Gk(aAt,1),$Vn,237,0,[nAt,tAt,ZOt,eAt,YOt,QOt]))))),u2(n,w1n,L2n,mpn(ppt)),u2(n,w1n,N2n,mpn(vpt)),u2(n,w1n,XJn,mpn(mpt)),u2(n,w1n,x2n,mpn(ypt)),u2(n,w1n,mZn,mpn(jpt)),u2(n,w1n,D2n,mpn(Ept)),u2(n,w1n,R2n,mpn(Spt)),u2(n,w1n,K2n,mpn(Cpt)),u2(n,w1n,_2n,mpn(Ipt)),u2(n,w1n,F2n,mpn(Ppt)),u2(n,w1n,vZn,mpn(Opt)),u2(n,w1n,B2n,mpn($pt)),u2(n,w1n,H2n,mpn(Npt)),u2(n,w1n,q2n,mpn(Mpt)),u2(n,w1n,L0n,mpn(gpt)),u2(n,w1n,x0n,mpn(kpt)),u2(n,w1n,N0n,mpn(Tpt)),u2(n,w1n,D0n,mpn(Apt)),u2(n,w1n,pZn,iln(0)),u2(n,w1n,R0n,mpn(fpt)),u2(n,w1n,K0n,mpn(lpt)),u2(n,w1n,_0n,mpn(bpt)),u2(n,w1n,U0n,mpn(zpt)),u2(n,w1n,X0n,mpn(Rpt)),u2(n,w1n,W0n,mpn(Kpt)),u2(n,w1n,V0n,mpn(Bpt)),u2(n,w1n,Q0n,mpn(_pt)),u2(n,w1n,Y0n,mpn(Fpt)),u2(n,w1n,J0n,mpn(Xpt)),u2(n,w1n,Z0n,mpn(Upt)),u2(n,w1n,n2n,mpn(qpt)),u2(n,w1n,t2n,mpn(Hpt)),u2(n,w1n,e2n,mpn(Gpt)),u2(n,w1n,S0n,mpn(Rgt)),u2(n,w1n,P0n,mpn(Kgt)),u2(n,w1n,O0n,mpn(rgt)),u2(n,w1n,A0n,mpn(cgt)),u2(n,w1n,QJn,Ugt),u2(n,w1n,y2n,ngt),u2(n,w1n,G2n,0),u2(n,w1n,yZn,iln(1)),u2(n,w1n,VJn,dZn),u2(n,w1n,z2n,mpn(Ggt)),u2(n,w1n,EZn,mpn(ept)),u2(n,w1n,U2n,mpn(upt)),u2(n,w1n,X2n,mpn(zdt)),u2(n,w1n,W2n,mpn(kdt)),u2(n,w1n,d2n,mpn(sgt)),u2(n,w1n,kZn,(hN(),!0)),u2(n,w1n,V2n,mpn(wgt)),u2(n,w1n,Q2n,mpn(dgt)),u2(n,w1n,PZn,mpn(Fgt)),u2(n,w1n,SZn,mpn(qgt)),u2(n,w1n,Y2n,mpn(Bgt)),u2(n,w1n,J2n,Wdt),u2(n,w1n,CZn,mpn($gt)),u2(n,w1n,Z2n,mpn(Agt)),u2(n,w1n,IZn,mpn(cpt)),u2(n,w1n,n3n,mpn(rpt)),u2(n,w1n,t3n,mpn(apt)),u2(n,w1n,e3n,Vgt),u2(n,w1n,i3n,mpn(Ygt)),u2(n,w1n,r3n,mpn(Jgt)),u2(n,w1n,c3n,mpn(Zgt)),u2(n,w1n,a3n,mpn(Qgt)),u2(n,w1n,n0n,mpn(Dpt)),u2(n,w1n,i0n,mpn(Pgt)),u2(n,w1n,s0n,mpn(Sgt)),u2(n,w1n,Z1n,mpn(xpt)),u2(n,w1n,r0n,mpn(kgt)),u2(n,w1n,e0n,mpn(Gdt)),u2(n,w1n,l0n,mpn(qdt)),u2(n,w1n,b0n,mpn(xdt)),u2(n,w1n,v0n,mpn(Ddt)),u2(n,w1n,m0n,mpn(Kdt)),u2(n,w1n,y0n,mpn(Rdt)),u2(n,w1n,d0n,mpn(Hdt)),u2(n,w1n,V1n,mpn(Igt)),u2(n,w1n,Q1n,mpn(Ogt)),u2(n,w1n,W1n,mpn(pgt)),u2(n,w1n,k0n,mpn(_gt)),u2(n,w1n,T0n,mpn(Ngt)),u2(n,w1n,X1n,mpn(ugt)),u2(n,w1n,M0n,mpn(Dgt)),u2(n,w1n,C0n,mpn(egt)),u2(n,w1n,I0n,mpn(igt)),u2(n,w1n,u3n,mpn(Ndt)),u2(n,w1n,E0n,mpn(Lgt)),u2(n,w1n,B0n,mpn(Pdt)),u2(n,w1n,H0n,mpn(Sdt)),u2(n,w1n,F0n,mpn(Mdt)),u2(n,w1n,q0n,mpn(fgt)),u2(n,w1n,G0n,mpn(hgt)),u2(n,w1n,z0n,mpn(lgt)),u2(n,w1n,BZn,mpn(Hgt)),u2(n,w1n,o3n,mpn(vgt)),u2(n,w1n,WJn,mpn(agt)),u2(n,w1n,s3n,mpn(Ydt)),u2(n,w1n,TZn,mpn(Qdt)),u2(n,w1n,w0n,mpn(_dt)),u2(n,w1n,h3n,mpn(ipt)),u2(n,w1n,f3n,mpn(Tdt)),u2(n,w1n,l3n,mpn(bgt)),u2(n,w1n,b3n,mpn(npt)),u2(n,w1n,w3n,mpn(Xgt)),u2(n,w1n,d3n,mpn(Wgt)),u2(n,w1n,u0n,mpn(Egt)),u2(n,w1n,o0n,mpn(Tgt)),u2(n,w1n,g3n,mpn(spt)),u2(n,w1n,Y1n,mpn(jdt)),u2(n,w1n,h0n,mpn(Mgt)),u2(n,w1n,i2n,mpn(Jdt)),u2(n,w1n,r2n,mpn(Vdt)),u2(n,w1n,p3n,mpn(Cgt)),u2(n,w1n,f0n,mpn(mgt)),u2(n,w1n,j0n,mpn(xgt)),u2(n,w1n,v3n,mpn(Lpt)),u2(n,w1n,U1n,mpn(Xdt)),u2(n,w1n,J1n,mpn(opt)),u2(n,w1n,$0n,mpn(tgt)),u2(n,w1n,c0n,mpn(ygt)),u2(n,w1n,g0n,mpn(Fdt)),u2(n,w1n,m3n,mpn(ggt)),u2(n,w1n,a0n,mpn(jgt)),u2(n,w1n,p0n,mpn(Bdt)),u2(n,w1n,c2n,mpn(Ldt)),u2(n,w1n,o2n,mpn(Adt)),u2(n,w1n,s2n,mpn(Idt)),u2(n,w1n,h2n,mpn(Odt)),u2(n,w1n,a2n,mpn($dt)),u2(n,w1n,u2n,mpn(Cdt)),u2(n,w1n,t0n,mpn(ogt))}function mWn(n,t){var e;return nNt||(nNt=new xp,tNt=new xp,wWn(),wWn(),ydn(e=new M0(4),"\t\n\r\r "),mZ(nNt,fnt,e),mZ(tNt,fnt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),dnt),sHn(e,BB(SJ(nNt,snt),117)),mZ(nNt,hnt,e),mZ(tNt,hnt,$Fn(e)),ydn(e=new M0(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),mZ(nNt,lnt,e),mZ(tNt,lnt,$Fn(e)),ydn(e=new M0(4),dnt),Yxn(e,95,95),Yxn(e,58,58),mZ(nNt,bnt,e),mZ(tNt,bnt,$Fn(e))),BB(SJ(t?nNt:tNt,n),136)}function yWn(n){V$n(n.a,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anySimpleType"])),V$n(n.b,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyType",F9n,K9n])),V$n(BB(Wtn(QQ(n.b),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.b),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,M7n,P7n,t8n,":1",D7n,"lax"])),V$n(BB(Wtn(QQ(n.b),2),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,p7n,M7n,P7n,t8n,":2",D7n,"lax"])),V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyURI",T7n,y7n])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"base64Binary",T7n,y7n])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$Wn,T7n,y7n])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"boolean:Object",J9n,$Wn])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,S9n])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"byte:Object",J9n,S9n])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"date",T7n,y7n])),V$n(n.k,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"dateTime",T7n,y7n])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"decimal",T7n,y7n])),V$n(n.o,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,C9n,T7n,y7n])),V$n(n.p,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"double:Object",J9n,C9n])),V$n(n.q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"duration",T7n,y7n])),V$n(n.s,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ENTITIES",J9n,R7n,K7n,"1"])),V$n(n.r,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,R7n,k7n,_7n])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,_7n,J9n,F7n])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,I9n,T7n,y7n])),V$n(n.v,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"float:Object",J9n,I9n])),V$n(n.w,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gDay",T7n,y7n])),V$n(n.B,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonth",T7n,y7n])),V$n(n.A,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonthDay",T7n,y7n])),V$n(n.C,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYear",T7n,y7n])),V$n(n.D,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYearMonth",T7n,y7n])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"hexBinary",T7n,y7n])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ID",J9n,F7n])),V$n(n.H,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREF",J9n,F7n])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREFS",J9n,B7n,K7n,"1"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,B7n,k7n,"IDREF"])),V$n(n.K,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,O9n])),V$n(n.M,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,H7n])),V$n(n.L,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"int:Object",J9n,O9n])),V$n(n.P,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"language",J9n,q7n,G7n,z7n])),V$n(n.Q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,A9n])),V$n(n.R,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"long:Object",J9n,A9n])),V$n(n.S,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"Name",J9n,q7n,G7n,U7n])),V$n(n.T,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,F7n,J9n,"Name",G7n,X7n])),V$n(n.U,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"negativeInteger",J9n,W7n,V7n,"-1"])),V$n(n.V,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Q7n,J9n,q7n,G7n,"\\c+"])),V$n(n.X,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NMTOKENS",J9n,Y7n,K7n,"1"])),V$n(n.W,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Y7n,k7n,Q7n])),V$n(n.Y,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,J7n,J9n,H7n,Z7n,"0"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,W7n,J9n,H7n,V7n,"0"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,nnt,J9n,NWn,T7n,"replace"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NOTATION",T7n,y7n])),V$n(n.ab,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"positiveInteger",J9n,J7n,Z7n,"1"])),V$n(n.bb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"processingInstruction_._type",F9n,"empty"])),V$n(BB(Wtn(QQ(n.bb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"data"])),V$n(BB(Wtn(QQ(n.bb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,Y6n])),V$n(n.cb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"QName",T7n,y7n])),V$n(n.db,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$9n])),V$n(n.eb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"short:Object",J9n,$9n])),V$n(n.fb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"simpleAnyType",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":3",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":4",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":5",F9n,d7n])),V$n(n.gb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,NWn,T7n,"preserve"])),V$n(n.hb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"time",T7n,y7n])),V$n(n.ib,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,q7n,J9n,nnt,T7n,y7n])),V$n(n.jb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,tnt,V7n,"255",Z7n,"0"])),V$n(n.kb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedByte:Object",J9n,tnt])),V$n(n.lb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,ent,V7n,"4294967295",Z7n,"0"])),V$n(n.mb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedInt:Object",J9n,ent])),V$n(n.nb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedLong",J9n,J7n,V7n,int,Z7n,"0"])),V$n(n.ob,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,rnt,V7n,"65535",Z7n,"0"])),V$n(n.pb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedShort:Object",J9n,rnt])),V$n(n.qb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"",F9n,K9n])),V$n(BB(Wtn(QQ(n.qb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.qb),1),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xmlns:prefix"])),V$n(BB(Wtn(QQ(n.qb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xsi:schemaLocation"])),V$n(BB(Wtn(QQ(n.qb),3),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"cDATA",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),4),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"comment",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),5),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,cnt,j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),6),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,O6n,j7n,E7n]))}function kWn(n){return mK("_UI_EMFDiagnostic_marker",n)?"EMF Problem":mK("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":mK(w8n,n)?"Wrong character.":mK(d8n,n)?"Invalid reference number.":mK(g8n,n)?"A character is required after \\.":mK(p8n,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":mK(v8n,n)?"'(?<' or '(?<!' is expected.":mK(m8n,n)?"A comment is not terminated.":mK(y8n,n)?"')' is expected.":mK(k8n,n)?"Unexpected end of the pattern in a modifier group.":mK(j8n,n)?"':' is expected.":mK(E8n,n)?"Unexpected end of the pattern in a conditional group.":mK(T8n,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":mK(M8n,n)?"There are more than three choices in a conditional group.":mK(S8n,n)?"A character in U+0040-U+005f must follow \\c.":mK(P8n,n)?"A '{' is required before a character category.":mK(C8n,n)?"A property name is not closed by '}'.":mK(I8n,n)?"Unexpected meta character.":mK(O8n,n)?"Unknown property.":mK(A8n,n)?"A POSIX character class must be closed by ':]'.":mK($8n,n)?"Unexpected end of the pattern in a character class.":mK(L8n,n)?"Unknown name for a POSIX character class.":mK("parser.cc.4",n)?"'-' is invalid here.":mK(N8n,n)?"']' is expected.":mK(x8n,n)?"'[' is invalid in a character class. Write '\\['.":mK(D8n,n)?"']' is invalid in a character class. Write '\\]'.":mK(R8n,n)?"'-' is an invalid character range. Write '\\-'.":mK(K8n,n)?"'[' is expected.":mK(_8n,n)?"')' or '-[' or '+[' or '&[' is expected.":mK(F8n,n)?"The range end code point is less than the start code point.":mK(B8n,n)?"Invalid Unicode hex notation.":mK(H8n,n)?"Overflow in a hex notation.":mK(q8n,n)?"'\\x{' must be closed by '}'.":mK(G8n,n)?"Invalid Unicode code point.":mK(z8n,n)?"An anchor must not be here.":mK(U8n,n)?"This expression is not supported in the current option setting.":mK(X8n,n)?"Invalid quantifier. A digit is expected.":mK(W8n,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":mK(V8n,n)?"Invalid quantifier. A digit or '}' is expected.":mK(Q8n,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":mK(Y8n,n)?"Invalid quantifier. A quantity value overflow.":mK("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":mK("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":mK("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":mK("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":mK("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":mK("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":mK("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":mK("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":mK("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":mK("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":mK("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":mK("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":mK("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":mK("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":mK("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":mK("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":mK("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":mK("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":mK("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":mK("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":mK("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":mK("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":mK("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":mK("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":mK("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":mK("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":mK("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":mK("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":mK("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":mK("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":mK("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function jWn(n){var t,e,i,r,c,a,u;n.r||(n.r=!0,Nrn(n,"graph"),xrn(n,"graph"),Drn(n,y6n),cun(n.o,"T"),f9(kY(n.a),n.p),f9(kY(n.f),n.a),f9(kY(n.n),n.f),f9(kY(n.g),n.n),f9(kY(n.c),n.n),f9(kY(n.i),n.c),f9(kY(n.j),n.c),f9(kY(n.d),n.f),f9(kY(n.e),n.a),z0(n.p,Xrt,OJn,!0,!0,!1),u=Tun(a=msn(n.p,n.p,"setProperty")),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),kEn(e,i=nQ(u)),Ujn(a,t,j6n),Ujn(a,t=nQ(u),E6n),u=Tun(a=msn(n.p,null,"getProperty")),t=ZV(n.o),e=nQ(u),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),(c=HTn(a,t=nQ(u),null))&&c.Fi(),a=msn(n.p,n.wb.e,"hasProperty"),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),$yn(a=msn(n.p,n.p,"copyProperties"),n.p,T6n),a=msn(n.p,null,"getAllProperties"),t=ZV(n.wb.P),e=ZV(n.o),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),i=new Kp,f9((!e.d&&(e.d=new $L(VAt,e,1)),e.d),i),e=ZV(n.wb.M),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(a,t,null))&&r.Fi(),z0(n.a,NOt,z5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.a),0),18),n.k,null,M6n,0,-1,NOt,!1,!1,!0,!0,!1,!1,!1),z0(n.f,DOt,X5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.f),0),18),n.g,BB(Wtn(QQ(n.g),0),18),"labels",0,-1,DOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.f),1),34),n.wb._,S6n,null,0,1,DOt,!1,!1,!0,!1,!0,!1),z0(n.n,ROt,"ElkShape",!0,!1,!0),ucn(BB(Wtn(QQ(n.n),0),34),n.wb.t,P6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),1),34),n.wb.t,C6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),2),34),n.wb.t,"x",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),3),34),n.wb.t,"y",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.n,null,"setDimensions"),n.wb.t,C6n),$yn(a,n.wb.t,P6n),$yn(a=msn(n.n,null,"setLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.g,zOt,Z5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.g),0),18),n.f,BB(Wtn(QQ(n.f),0),18),I6n,0,1,zOt,!1,!1,!0,!1,!1,!1,!1),ucn(BB(Wtn(QQ(n.g),1),34),n.wb._,O6n,"",0,1,zOt,!1,!1,!0,!1,!0,!1),z0(n.c,KOt,W5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.c),0),18),n.d,BB(Wtn(QQ(n.d),1),18),"outgoingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.c),1),18),n.d,BB(Wtn(QQ(n.d),2),18),"incomingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),z0(n.i,UOt,n6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.i),0),18),n.j,BB(Wtn(QQ(n.j),0),18),"ports",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),1),18),n.i,BB(Wtn(QQ(n.i),2),18),A6n,0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),2),18),n.i,BB(Wtn(QQ(n.i),1),18),I6n,0,1,UOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),3),18),n.d,BB(Wtn(QQ(n.d),0),18),"containedEdges",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.i),4),34),n.wb.e,$6n,null,0,1,UOt,!0,!0,!1,!1,!0,!0),z0(n.j,XOt,t6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.j),0),18),n.i,BB(Wtn(QQ(n.i),0),18),I6n,0,1,XOt,!1,!1,!0,!1,!1,!1,!1),z0(n.d,_Ot,V5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.d),0),18),n.i,BB(Wtn(QQ(n.i),3),18),"containingNode",0,1,_Ot,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.d),1),18),n.c,BB(Wtn(QQ(n.c),0),18),L6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),2),18),n.c,BB(Wtn(QQ(n.c),1),18),N6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),3),18),n.e,BB(Wtn(QQ(n.e),5),18),x6n,0,-1,_Ot,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.d),4),34),n.wb.e,"hyperedge",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),5),34),n.wb.e,$6n,null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),6),34),n.wb.e,"selfloop",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),7),34),n.wb.e,"connected",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),z0(n.b,xOt,U5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.t,"x",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.t,"y",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.b,null,"set"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.e,FOt,Q5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.e),0),34),n.wb.t,"startX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),1),34),n.wb.t,"startY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),2),34),n.wb.t,"endX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),3),34),n.wb.t,"endY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.e),4),18),n.b,null,D6n,0,-1,FOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),5),18),n.d,BB(Wtn(QQ(n.d),3),18),I6n,0,1,FOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),6),18),n.c,null,R6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),7),18),n.c,null,K6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),8),18),n.e,BB(Wtn(QQ(n.e),9),18),_6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),9),18),n.e,BB(Wtn(QQ(n.e),8),18),F6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),ucn(BB(Wtn(QQ(n.e),10),34),n.wb._,S6n,null,0,1,FOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.e,null,"setStartLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),$yn(a=msn(n.e,null,"setEndLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.k,Hnt,"ElkPropertyToValueMapEntry",!1,!1,!1),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.k),0),34),t,"key",Hnt,!1,!1,!0,!1),ucn(BB(Wtn(QQ(n.k),1),34),n.s,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),dV(n.o,lMt,"IProperty",!0),dV(n.s,Ant,"PropertyValue",!0),Lhn(n,y6n))}function EWn(){EWn=O,(JLt=x8(NNt,v6n,25,BQn,15,1))[9]=35,JLt[10]=19,JLt[13]=19,JLt[32]=51,JLt[33]=49,JLt[34]=33,yU(JLt,35,38,49),JLt[38]=1,yU(JLt,39,45,49),yU(JLt,45,47,-71),JLt[47]=49,yU(JLt,48,58,-71),JLt[58]=61,JLt[59]=49,JLt[60]=1,JLt[61]=49,JLt[62]=33,yU(JLt,63,65,49),yU(JLt,65,91,-3),yU(JLt,91,93,33),JLt[93]=1,JLt[94]=33,JLt[95]=-3,JLt[96]=33,yU(JLt,97,123,-3),yU(JLt,123,183,33),JLt[183]=-87,yU(JLt,184,192,33),yU(JLt,192,215,-19),JLt[215]=33,yU(JLt,216,247,-19),JLt[247]=33,yU(JLt,248,306,-19),yU(JLt,306,308,33),yU(JLt,308,319,-19),yU(JLt,319,321,33),yU(JLt,321,329,-19),JLt[329]=33,yU(JLt,330,383,-19),JLt[383]=33,yU(JLt,384,452,-19),yU(JLt,452,461,33),yU(JLt,461,497,-19),yU(JLt,497,500,33),yU(JLt,500,502,-19),yU(JLt,502,506,33),yU(JLt,506,536,-19),yU(JLt,536,592,33),yU(JLt,592,681,-19),yU(JLt,681,699,33),yU(JLt,699,706,-19),yU(JLt,706,720,33),yU(JLt,720,722,-87),yU(JLt,722,768,33),yU(JLt,768,838,-87),yU(JLt,838,864,33),yU(JLt,864,866,-87),yU(JLt,866,902,33),JLt[902]=-19,JLt[903]=-87,yU(JLt,904,907,-19),JLt[907]=33,JLt[908]=-19,JLt[909]=33,yU(JLt,910,930,-19),JLt[930]=33,yU(JLt,931,975,-19),JLt[975]=33,yU(JLt,976,983,-19),yU(JLt,983,986,33),JLt[986]=-19,JLt[987]=33,JLt[988]=-19,JLt[989]=33,JLt[990]=-19,JLt[991]=33,JLt[992]=-19,JLt[993]=33,yU(JLt,994,1012,-19),yU(JLt,1012,1025,33),yU(JLt,1025,1037,-19),JLt[1037]=33,yU(JLt,1038,1104,-19),JLt[1104]=33,yU(JLt,1105,1117,-19),JLt[1117]=33,yU(JLt,1118,1154,-19),JLt[1154]=33,yU(JLt,1155,1159,-87),yU(JLt,1159,1168,33),yU(JLt,1168,1221,-19),yU(JLt,1221,1223,33),yU(JLt,1223,1225,-19),yU(JLt,1225,1227,33),yU(JLt,1227,1229,-19),yU(JLt,1229,1232,33),yU(JLt,1232,1260,-19),yU(JLt,1260,1262,33),yU(JLt,1262,1270,-19),yU(JLt,1270,1272,33),yU(JLt,1272,1274,-19),yU(JLt,1274,1329,33),yU(JLt,1329,1367,-19),yU(JLt,1367,1369,33),JLt[1369]=-19,yU(JLt,1370,1377,33),yU(JLt,1377,1415,-19),yU(JLt,1415,1425,33),yU(JLt,1425,1442,-87),JLt[1442]=33,yU(JLt,1443,1466,-87),JLt[1466]=33,yU(JLt,1467,1470,-87),JLt[1470]=33,JLt[1471]=-87,JLt[1472]=33,yU(JLt,1473,1475,-87),JLt[1475]=33,JLt[1476]=-87,yU(JLt,1477,1488,33),yU(JLt,1488,1515,-19),yU(JLt,1515,1520,33),yU(JLt,1520,1523,-19),yU(JLt,1523,1569,33),yU(JLt,1569,1595,-19),yU(JLt,1595,1600,33),JLt[1600]=-87,yU(JLt,1601,1611,-19),yU(JLt,1611,1619,-87),yU(JLt,1619,1632,33),yU(JLt,1632,1642,-87),yU(JLt,1642,1648,33),JLt[1648]=-87,yU(JLt,1649,1720,-19),yU(JLt,1720,1722,33),yU(JLt,1722,1727,-19),JLt[1727]=33,yU(JLt,1728,1743,-19),JLt[1743]=33,yU(JLt,1744,1748,-19),JLt[1748]=33,JLt[1749]=-19,yU(JLt,1750,1765,-87),yU(JLt,1765,1767,-19),yU(JLt,1767,1769,-87),JLt[1769]=33,yU(JLt,1770,1774,-87),yU(JLt,1774,1776,33),yU(JLt,1776,1786,-87),yU(JLt,1786,2305,33),yU(JLt,2305,2308,-87),JLt[2308]=33,yU(JLt,2309,2362,-19),yU(JLt,2362,2364,33),JLt[2364]=-87,JLt[2365]=-19,yU(JLt,2366,2382,-87),yU(JLt,2382,2385,33),yU(JLt,2385,2389,-87),yU(JLt,2389,2392,33),yU(JLt,2392,2402,-19),yU(JLt,2402,2404,-87),yU(JLt,2404,2406,33),yU(JLt,2406,2416,-87),yU(JLt,2416,2433,33),yU(JLt,2433,2436,-87),JLt[2436]=33,yU(JLt,2437,2445,-19),yU(JLt,2445,2447,33),yU(JLt,2447,2449,-19),yU(JLt,2449,2451,33),yU(JLt,2451,2473,-19),JLt[2473]=33,yU(JLt,2474,2481,-19),JLt[2481]=33,JLt[2482]=-19,yU(JLt,2483,2486,33),yU(JLt,2486,2490,-19),yU(JLt,2490,2492,33),JLt[2492]=-87,JLt[2493]=33,yU(JLt,2494,2501,-87),yU(JLt,2501,2503,33),yU(JLt,2503,2505,-87),yU(JLt,2505,2507,33),yU(JLt,2507,2510,-87),yU(JLt,2510,2519,33),JLt[2519]=-87,yU(JLt,2520,2524,33),yU(JLt,2524,2526,-19),JLt[2526]=33,yU(JLt,2527,2530,-19),yU(JLt,2530,2532,-87),yU(JLt,2532,2534,33),yU(JLt,2534,2544,-87),yU(JLt,2544,2546,-19),yU(JLt,2546,2562,33),JLt[2562]=-87,yU(JLt,2563,2565,33),yU(JLt,2565,2571,-19),yU(JLt,2571,2575,33),yU(JLt,2575,2577,-19),yU(JLt,2577,2579,33),yU(JLt,2579,2601,-19),JLt[2601]=33,yU(JLt,2602,2609,-19),JLt[2609]=33,yU(JLt,2610,2612,-19),JLt[2612]=33,yU(JLt,2613,2615,-19),JLt[2615]=33,yU(JLt,2616,2618,-19),yU(JLt,2618,2620,33),JLt[2620]=-87,JLt[2621]=33,yU(JLt,2622,2627,-87),yU(JLt,2627,2631,33),yU(JLt,2631,2633,-87),yU(JLt,2633,2635,33),yU(JLt,2635,2638,-87),yU(JLt,2638,2649,33),yU(JLt,2649,2653,-19),JLt[2653]=33,JLt[2654]=-19,yU(JLt,2655,2662,33),yU(JLt,2662,2674,-87),yU(JLt,2674,2677,-19),yU(JLt,2677,2689,33),yU(JLt,2689,2692,-87),JLt[2692]=33,yU(JLt,2693,2700,-19),JLt[2700]=33,JLt[2701]=-19,JLt[2702]=33,yU(JLt,2703,2706,-19),JLt[2706]=33,yU(JLt,2707,2729,-19),JLt[2729]=33,yU(JLt,2730,2737,-19),JLt[2737]=33,yU(JLt,2738,2740,-19),JLt[2740]=33,yU(JLt,2741,2746,-19),yU(JLt,2746,2748,33),JLt[2748]=-87,JLt[2749]=-19,yU(JLt,2750,2758,-87),JLt[2758]=33,yU(JLt,2759,2762,-87),JLt[2762]=33,yU(JLt,2763,2766,-87),yU(JLt,2766,2784,33),JLt[2784]=-19,yU(JLt,2785,2790,33),yU(JLt,2790,2800,-87),yU(JLt,2800,2817,33),yU(JLt,2817,2820,-87),JLt[2820]=33,yU(JLt,2821,2829,-19),yU(JLt,2829,2831,33),yU(JLt,2831,2833,-19),yU(JLt,2833,2835,33),yU(JLt,2835,2857,-19),JLt[2857]=33,yU(JLt,2858,2865,-19),JLt[2865]=33,yU(JLt,2866,2868,-19),yU(JLt,2868,2870,33),yU(JLt,2870,2874,-19),yU(JLt,2874,2876,33),JLt[2876]=-87,JLt[2877]=-19,yU(JLt,2878,2884,-87),yU(JLt,2884,2887,33),yU(JLt,2887,2889,-87),yU(JLt,2889,2891,33),yU(JLt,2891,2894,-87),yU(JLt,2894,2902,33),yU(JLt,2902,2904,-87),yU(JLt,2904,2908,33),yU(JLt,2908,2910,-19),JLt[2910]=33,yU(JLt,2911,2914,-19),yU(JLt,2914,2918,33),yU(JLt,2918,2928,-87),yU(JLt,2928,2946,33),yU(JLt,2946,2948,-87),JLt[2948]=33,yU(JLt,2949,2955,-19),yU(JLt,2955,2958,33),yU(JLt,2958,2961,-19),JLt[2961]=33,yU(JLt,2962,2966,-19),yU(JLt,2966,2969,33),yU(JLt,2969,2971,-19),JLt[2971]=33,JLt[2972]=-19,JLt[2973]=33,yU(JLt,2974,2976,-19),yU(JLt,2976,2979,33),yU(JLt,2979,2981,-19),yU(JLt,2981,2984,33),yU(JLt,2984,2987,-19),yU(JLt,2987,2990,33),yU(JLt,2990,2998,-19),JLt[2998]=33,yU(JLt,2999,3002,-19),yU(JLt,3002,3006,33),yU(JLt,3006,3011,-87),yU(JLt,3011,3014,33),yU(JLt,3014,3017,-87),JLt[3017]=33,yU(JLt,3018,3022,-87),yU(JLt,3022,3031,33),JLt[3031]=-87,yU(JLt,3032,3047,33),yU(JLt,3047,3056,-87),yU(JLt,3056,3073,33),yU(JLt,3073,3076,-87),JLt[3076]=33,yU(JLt,3077,3085,-19),JLt[3085]=33,yU(JLt,3086,3089,-19),JLt[3089]=33,yU(JLt,3090,3113,-19),JLt[3113]=33,yU(JLt,3114,3124,-19),JLt[3124]=33,yU(JLt,3125,3130,-19),yU(JLt,3130,3134,33),yU(JLt,3134,3141,-87),JLt[3141]=33,yU(JLt,3142,3145,-87),JLt[3145]=33,yU(JLt,3146,3150,-87),yU(JLt,3150,3157,33),yU(JLt,3157,3159,-87),yU(JLt,3159,3168,33),yU(JLt,3168,3170,-19),yU(JLt,3170,3174,33),yU(JLt,3174,3184,-87),yU(JLt,3184,3202,33),yU(JLt,3202,3204,-87),JLt[3204]=33,yU(JLt,3205,3213,-19),JLt[3213]=33,yU(JLt,3214,3217,-19),JLt[3217]=33,yU(JLt,3218,3241,-19),JLt[3241]=33,yU(JLt,3242,3252,-19),JLt[3252]=33,yU(JLt,3253,3258,-19),yU(JLt,3258,3262,33),yU(JLt,3262,3269,-87),JLt[3269]=33,yU(JLt,3270,3273,-87),JLt[3273]=33,yU(JLt,3274,3278,-87),yU(JLt,3278,3285,33),yU(JLt,3285,3287,-87),yU(JLt,3287,3294,33),JLt[3294]=-19,JLt[3295]=33,yU(JLt,3296,3298,-19),yU(JLt,3298,3302,33),yU(JLt,3302,3312,-87),yU(JLt,3312,3330,33),yU(JLt,3330,3332,-87),JLt[3332]=33,yU(JLt,3333,3341,-19),JLt[3341]=33,yU(JLt,3342,3345,-19),JLt[3345]=33,yU(JLt,3346,3369,-19),JLt[3369]=33,yU(JLt,3370,3386,-19),yU(JLt,3386,3390,33),yU(JLt,3390,3396,-87),yU(JLt,3396,3398,33),yU(JLt,3398,3401,-87),JLt[3401]=33,yU(JLt,3402,3406,-87),yU(JLt,3406,3415,33),JLt[3415]=-87,yU(JLt,3416,3424,33),yU(JLt,3424,3426,-19),yU(JLt,3426,3430,33),yU(JLt,3430,3440,-87),yU(JLt,3440,3585,33),yU(JLt,3585,3631,-19),JLt[3631]=33,JLt[3632]=-19,JLt[3633]=-87,yU(JLt,3634,3636,-19),yU(JLt,3636,3643,-87),yU(JLt,3643,3648,33),yU(JLt,3648,3654,-19),yU(JLt,3654,3663,-87),JLt[3663]=33,yU(JLt,3664,3674,-87),yU(JLt,3674,3713,33),yU(JLt,3713,3715,-19),JLt[3715]=33,JLt[3716]=-19,yU(JLt,3717,3719,33),yU(JLt,3719,3721,-19),JLt[3721]=33,JLt[3722]=-19,yU(JLt,3723,3725,33),JLt[3725]=-19,yU(JLt,3726,3732,33),yU(JLt,3732,3736,-19),JLt[3736]=33,yU(JLt,3737,3744,-19),JLt[3744]=33,yU(JLt,3745,3748,-19),JLt[3748]=33,JLt[3749]=-19,JLt[3750]=33,JLt[3751]=-19,yU(JLt,3752,3754,33),yU(JLt,3754,3756,-19),JLt[3756]=33,yU(JLt,3757,3759,-19),JLt[3759]=33,JLt[3760]=-19,JLt[3761]=-87,yU(JLt,3762,3764,-19),yU(JLt,3764,3770,-87),JLt[3770]=33,yU(JLt,3771,3773,-87),JLt[3773]=-19,yU(JLt,3774,3776,33),yU(JLt,3776,3781,-19),JLt[3781]=33,JLt[3782]=-87,JLt[3783]=33,yU(JLt,3784,3790,-87),yU(JLt,3790,3792,33),yU(JLt,3792,3802,-87),yU(JLt,3802,3864,33),yU(JLt,3864,3866,-87),yU(JLt,3866,3872,33),yU(JLt,3872,3882,-87),yU(JLt,3882,3893,33),JLt[3893]=-87,JLt[3894]=33,JLt[3895]=-87,JLt[3896]=33,JLt[3897]=-87,yU(JLt,3898,3902,33),yU(JLt,3902,3904,-87),yU(JLt,3904,3912,-19),JLt[3912]=33,yU(JLt,3913,3946,-19),yU(JLt,3946,3953,33),yU(JLt,3953,3973,-87),JLt[3973]=33,yU(JLt,3974,3980,-87),yU(JLt,3980,3984,33),yU(JLt,3984,3990,-87),JLt[3990]=33,JLt[3991]=-87,JLt[3992]=33,yU(JLt,3993,4014,-87),yU(JLt,4014,4017,33),yU(JLt,4017,4024,-87),JLt[4024]=33,JLt[4025]=-87,yU(JLt,4026,4256,33),yU(JLt,4256,4294,-19),yU(JLt,4294,4304,33),yU(JLt,4304,4343,-19),yU(JLt,4343,4352,33),JLt[4352]=-19,JLt[4353]=33,yU(JLt,4354,4356,-19),JLt[4356]=33,yU(JLt,4357,4360,-19),JLt[4360]=33,JLt[4361]=-19,JLt[4362]=33,yU(JLt,4363,4365,-19),JLt[4365]=33,yU(JLt,4366,4371,-19),yU(JLt,4371,4412,33),JLt[4412]=-19,JLt[4413]=33,JLt[4414]=-19,JLt[4415]=33,JLt[4416]=-19,yU(JLt,4417,4428,33),JLt[4428]=-19,JLt[4429]=33,JLt[4430]=-19,JLt[4431]=33,JLt[4432]=-19,yU(JLt,4433,4436,33),yU(JLt,4436,4438,-19),yU(JLt,4438,4441,33),JLt[4441]=-19,yU(JLt,4442,4447,33),yU(JLt,4447,4450,-19),JLt[4450]=33,JLt[4451]=-19,JLt[4452]=33,JLt[4453]=-19,JLt[4454]=33,JLt[4455]=-19,JLt[4456]=33,JLt[4457]=-19,yU(JLt,4458,4461,33),yU(JLt,4461,4463,-19),yU(JLt,4463,4466,33),yU(JLt,4466,4468,-19),JLt[4468]=33,JLt[4469]=-19,yU(JLt,4470,4510,33),JLt[4510]=-19,yU(JLt,4511,4520,33),JLt[4520]=-19,yU(JLt,4521,4523,33),JLt[4523]=-19,yU(JLt,4524,4526,33),yU(JLt,4526,4528,-19),yU(JLt,4528,4535,33),yU(JLt,4535,4537,-19),JLt[4537]=33,JLt[4538]=-19,JLt[4539]=33,yU(JLt,4540,4547,-19),yU(JLt,4547,4587,33),JLt[4587]=-19,yU(JLt,4588,4592,33),JLt[4592]=-19,yU(JLt,4593,4601,33),JLt[4601]=-19,yU(JLt,4602,7680,33),yU(JLt,7680,7836,-19),yU(JLt,7836,7840,33),yU(JLt,7840,7930,-19),yU(JLt,7930,7936,33),yU(JLt,7936,7958,-19),yU(JLt,7958,7960,33),yU(JLt,7960,7966,-19),yU(JLt,7966,7968,33),yU(JLt,7968,8006,-19),yU(JLt,8006,8008,33),yU(JLt,8008,8014,-19),yU(JLt,8014,8016,33),yU(JLt,8016,8024,-19),JLt[8024]=33,JLt[8025]=-19,JLt[8026]=33,JLt[8027]=-19,JLt[8028]=33,JLt[8029]=-19,JLt[8030]=33,yU(JLt,8031,8062,-19),yU(JLt,8062,8064,33),yU(JLt,8064,8117,-19),JLt[8117]=33,yU(JLt,8118,8125,-19),JLt[8125]=33,JLt[8126]=-19,yU(JLt,8127,8130,33),yU(JLt,8130,8133,-19),JLt[8133]=33,yU(JLt,8134,8141,-19),yU(JLt,8141,8144,33),yU(JLt,8144,8148,-19),yU(JLt,8148,8150,33),yU(JLt,8150,8156,-19),yU(JLt,8156,8160,33),yU(JLt,8160,8173,-19),yU(JLt,8173,8178,33),yU(JLt,8178,8181,-19),JLt[8181]=33,yU(JLt,8182,8189,-19),yU(JLt,8189,8400,33),yU(JLt,8400,8413,-87),yU(JLt,8413,8417,33),JLt[8417]=-87,yU(JLt,8418,8486,33),JLt[8486]=-19,yU(JLt,8487,8490,33),yU(JLt,8490,8492,-19),yU(JLt,8492,8494,33),JLt[8494]=-19,yU(JLt,8495,8576,33),yU(JLt,8576,8579,-19),yU(JLt,8579,12293,33),JLt[12293]=-87,JLt[12294]=33,JLt[12295]=-19,yU(JLt,12296,12321,33),yU(JLt,12321,12330,-19),yU(JLt,12330,12336,-87),JLt[12336]=33,yU(JLt,12337,12342,-87),yU(JLt,12342,12353,33),yU(JLt,12353,12437,-19),yU(JLt,12437,12441,33),yU(JLt,12441,12443,-87),yU(JLt,12443,12445,33),yU(JLt,12445,12447,-87),yU(JLt,12447,12449,33),yU(JLt,12449,12539,-19),JLt[12539]=33,yU(JLt,12540,12543,-87),yU(JLt,12543,12549,33),yU(JLt,12549,12589,-19),yU(JLt,12589,19968,33),yU(JLt,19968,40870,-19),yU(JLt,40870,44032,33),yU(JLt,44032,55204,-19),yU(JLt,55204,HQn,33),yU(JLt,57344,65534,33)}function TWn(n){var t,e,i,r,c,a,u;n.hb||(n.hb=!0,Nrn(n,"ecore"),xrn(n,"ecore"),Drn(n,V9n),cun(n.fb,"E"),cun(n.L,"T"),cun(n.P,"K"),cun(n.P,"V"),cun(n.cb,"E"),f9(kY(n.b),n.bb),f9(kY(n.a),n.Q),f9(kY(n.o),n.p),f9(kY(n.p),n.R),f9(kY(n.q),n.p),f9(kY(n.v),n.q),f9(kY(n.w),n.R),f9(kY(n.B),n.Q),f9(kY(n.R),n.Q),f9(kY(n.T),n.eb),f9(kY(n.U),n.R),f9(kY(n.V),n.eb),f9(kY(n.W),n.bb),f9(kY(n.bb),n.eb),f9(kY(n.eb),n.R),f9(kY(n.db),n.R),z0(n.b,BAt,l9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.e,"iD",null,0,1,BAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.b),1),18),n.q,null,"eAttributeType",1,1,BAt,!0,!0,!1,!1,!0,!1,!0),z0(n.a,KAt,s9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.a),0),34),n._,T6n,null,0,1,KAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.a),1),18),n.ab,null,"details",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),2),18),n.Q,BB(Wtn(QQ(n.Q),0),18),"eModelElement",0,1,KAt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),3),18),n.S,null,"contents",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),4),18),n.S,null,"references",0,-1,KAt,!1,!1,!0,!1,!0,!1,!1),z0(n.o,qAt,"EClass",!1,!1,!0),ucn(BB(Wtn(QQ(n.o),0),34),n.e,"abstract",null,0,1,qAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.o),1),34),n.e,"interface",null,0,1,qAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),2),18),n.o,null,"eSuperTypes",0,-1,qAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.o),3),18),n.T,BB(Wtn(QQ(n.T),0),18),"eOperations",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),4),18),n.b,null,"eAllAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),5),18),n.W,null,"eAllReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),6),18),n.W,null,"eReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),7),18),n.b,null,"eAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),8),18),n.W,null,"eAllContainments",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),9),18),n.T,null,"eAllOperations",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),10),18),n.bb,null,"eAllStructuralFeatures",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),11),18),n.o,null,"eAllSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),12),18),n.b,null,"eIDAttribute",0,1,qAt,!0,!0,!1,!1,!1,!1,!0),Myn(BB(Wtn(QQ(n.o),13),18),n.bb,BB(Wtn(QQ(n.bb),7),18),"eStructuralFeatures",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),14),18),n.H,null,"eGenericSuperTypes",0,-1,qAt,!1,!1,!0,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),15),18),n.H,null,"eAllGenericSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),$yn(u=fin(BB(Wtn(VQ(n.o),0),59),n.e,"isSuperTypeOf"),n.o,"someClass"),fin(BB(Wtn(VQ(n.o),1),59),n.I,"getFeatureCount"),$yn(u=fin(BB(Wtn(VQ(n.o),2),59),n.bb,Z9n),n.I,"featureID"),$yn(u=fin(BB(Wtn(VQ(n.o),3),59),n.I,n7n),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.o),4),59),n.bb,Z9n),n._,"featureName"),fin(BB(Wtn(VQ(n.o),5),59),n.I,"getOperationCount"),$yn(u=fin(BB(Wtn(VQ(n.o),6),59),n.T,"getEOperation"),n.I,"operationID"),$yn(u=fin(BB(Wtn(VQ(n.o),7),59),n.I,e7n),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),8),59),n.T,"getOverride"),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),9),59),n.H,"getFeatureType"),n.bb,t7n),z0(n.p,HAt,b9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),0),34),n._,"instanceClassName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.p),1),34),t,"instanceClass",HAt,!0,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),2),34),n.M,r7n,null,0,1,HAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.p),3),34),n._,"instanceTypeName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),Myn(BB(Wtn(QQ(n.p),4),18),n.U,BB(Wtn(QQ(n.U),3),18),"ePackage",0,1,HAt,!0,!1,!1,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.p),5),18),n.db,null,c7n,0,-1,HAt,!1,!1,!0,!0,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.p),0),59),n.e,a7n),n.M,AWn),fin(BB(Wtn(VQ(n.p),1),59),n.I,"getClassifierID"),z0(n.q,GAt,"EDataType",!1,!1,!0),ucn(BB(Wtn(QQ(n.q),0),34),n.e,"serializable",a5n,0,1,GAt,!1,!1,!0,!1,!0,!1),z0(n.v,XAt,"EEnum",!1,!1,!0),Myn(BB(Wtn(QQ(n.v),0),18),n.w,BB(Wtn(QQ(n.w),3),18),"eLiterals",0,-1,XAt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.v),0),59),n.w,u7n),n._,t8n),$yn(u=fin(BB(Wtn(VQ(n.v),1),59),n.w,u7n),n.I,E6n),$yn(u=fin(BB(Wtn(VQ(n.v),2),59),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),z0(n.w,WAt,w9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.w),0),34),n.I,E6n,null,0,1,WAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),1),34),n.A,"instance",null,0,1,WAt,!0,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),2),34),n._,"literal",null,0,1,WAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.w),3),18),n.v,BB(Wtn(QQ(n.v),0),18),"eEnum",0,1,WAt,!0,!1,!1,!1,!1,!1,!1),z0(n.B,HOt,"EFactory",!1,!1,!0),Myn(BB(Wtn(QQ(n.B),0),18),n.U,BB(Wtn(QQ(n.U),2),18),"ePackage",1,1,HOt,!0,!1,!0,!1,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.B),0),59),n.S,"create"),n.o,"eClass"),$yn(u=fin(BB(Wtn(VQ(n.B),1),59),n.M,"createFromString"),n.q,"eDataType"),$yn(u,n._,"literalValue"),$yn(u=fin(BB(Wtn(VQ(n.B),2),59),n._,"convertToString"),n.q,"eDataType"),$yn(u,n.M,"instanceValue"),z0(n.Q,BOt,Y5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.Q),0),18),n.a,BB(Wtn(QQ(n.a),2),18),"eAnnotations",0,-1,BOt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.Q),0),59),n.a,"getEAnnotation"),n._,T6n),z0(n.R,qOt,J5n,!0,!1,!0),ucn(BB(Wtn(QQ(n.R),0),34),n._,t8n,null,0,1,qOt,!1,!1,!0,!1,!0,!1),z0(n.S,LOt,"EObject",!1,!1,!0),fin(BB(Wtn(VQ(n.S),0),59),n.o,"eClass"),fin(BB(Wtn(VQ(n.S),1),59),n.e,"eIsProxy"),fin(BB(Wtn(VQ(n.S),2),59),n.X,"eResource"),fin(BB(Wtn(VQ(n.S),3),59),n.S,"eContainer"),fin(BB(Wtn(VQ(n.S),4),59),n.bb,"eContainingFeature"),fin(BB(Wtn(VQ(n.S),5),59),n.W,"eContainmentFeature"),u=fin(BB(Wtn(VQ(n.S),6),59),null,"eContents"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(u,t,null))&&r.Fi(),u=fin(BB(Wtn(VQ(n.S),7),59),null,"eAllContents"),t=ZV(n.cb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(c=HTn(u,t,null))&&c.Fi(),u=fin(BB(Wtn(VQ(n.S),8),59),null,"eCrossReferences"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(a=HTn(u,t,null))&&a.Fi(),$yn(u=fin(BB(Wtn(VQ(n.S),9),59),n.M,"eGet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),10),59),n.M,"eGet"),n.bb,t7n),$yn(u,n.e,"resolve"),$yn(u=fin(BB(Wtn(VQ(n.S),11),59),null,"eSet"),n.bb,t7n),$yn(u,n.M,"newValue"),$yn(u=fin(BB(Wtn(VQ(n.S),12),59),n.e,"eIsSet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),13),59),null,"eUnset"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),14),59),n.M,"eInvoke"),n.T,i7n),t=ZV(n.fb),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(u,t,"arguments"),_W(u,n.K),z0(n.T,QAt,g9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.T),0),18),n.o,BB(Wtn(QQ(n.o),3),18),o7n,0,1,QAt,!0,!1,!1,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),1),18),n.db,null,c7n,0,-1,QAt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.T),2),18),n.V,BB(Wtn(QQ(n.V),0),18),"eParameters",0,-1,QAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),3),18),n.p,null,"eExceptions",0,-1,QAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.T),4),18),n.H,null,"eGenericExceptions",0,-1,QAt,!1,!1,!0,!0,!1,!0,!1),fin(BB(Wtn(VQ(n.T),0),59),n.I,e7n),$yn(u=fin(BB(Wtn(VQ(n.T),1),59),n.e,"isOverrideOf"),n.T,"someOperation"),z0(n.U,GOt,"EPackage",!1,!1,!0),ucn(BB(Wtn(QQ(n.U),0),34),n._,"nsURI",null,0,1,GOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.U),1),34),n._,"nsPrefix",null,0,1,GOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.U),2),18),n.B,BB(Wtn(QQ(n.B),0),18),"eFactoryInstance",1,1,GOt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.U),3),18),n.p,BB(Wtn(QQ(n.p),4),18),"eClassifiers",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),4),18),n.U,BB(Wtn(QQ(n.U),5),18),"eSubpackages",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),5),18),n.U,BB(Wtn(QQ(n.U),4),18),"eSuperPackage",0,1,GOt,!0,!1,!1,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.U),0),59),n.p,"getEClassifier"),n._,t8n),z0(n.V,YAt,p9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.V),0),18),n.T,BB(Wtn(QQ(n.T),2),18),"eOperation",0,1,YAt,!0,!1,!1,!1,!1,!1,!1),z0(n.W,JAt,v9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.W),0),34),n.e,"containment",null,0,1,JAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.W),1),34),n.e,"container",null,0,1,JAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.W),2),34),n.e,"resolveProxies",a5n,0,1,JAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.W),3),18),n.W,null,"eOpposite",0,1,JAt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.W),4),18),n.o,null,"eReferenceType",1,1,JAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.W),5),18),n.b,null,"eKeys",0,-1,JAt,!1,!1,!0,!1,!0,!1,!1),z0(n.bb,FAt,f9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.e,"changeable",a5n,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.e,"volatile",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),2),34),n.e,"transient",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),3),34),n._,"defaultValueLiteral",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),4),34),n.M,r7n,null,0,1,FAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.bb),5),34),n.e,"unsettable",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),6),34),n.e,"derived",null,0,1,FAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.bb),7),18),n.o,BB(Wtn(QQ(n.o),13),18),o7n,0,1,FAt,!0,!1,!1,!1,!1,!1,!1),fin(BB(Wtn(VQ(n.bb),0),59),n.I,n7n),u=fin(BB(Wtn(VQ(n.bb),1),59),null,"getContainerClass"),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(i=HTn(u,t,null))&&i.Fi(),z0(n.eb,_At,h9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.eb),0),34),n.e,"ordered",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),1),34),n.e,"unique",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),2),34),n.I,"lowerBound",null,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),3),34),n.I,"upperBound","1",0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),4),34),n.e,"many",null,0,1,_At,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.eb),5),34),n.e,"required",null,0,1,_At,!0,!0,!1,!1,!0,!0),Myn(BB(Wtn(QQ(n.eb),6),18),n.p,null,"eType",0,1,_At,!1,!0,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.eb),7),18),n.H,null,"eGenericType",0,1,_At,!1,!0,!0,!0,!1,!0,!1),z0(n.ab,Hnt,"EStringToStringMapEntry",!1,!1,!1),ucn(BB(Wtn(QQ(n.ab),0),34),n._,"key",null,0,1,Hnt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.ab),1),34),n._,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),z0(n.H,VAt,d9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.H),0),18),n.H,null,"eUpperBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),1),18),n.H,null,"eTypeArguments",0,-1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),2),18),n.p,null,"eRawType",1,1,VAt,!0,!1,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.H),3),18),n.H,null,"eLowerBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),4),18),n.db,null,"eTypeParameter",0,1,VAt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),5),18),n.p,null,"eClassifier",0,1,VAt,!1,!1,!0,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.H),0),59),n.e,a7n),n.M,AWn),z0(n.db,O$t,m9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.db),0),18),n.H,null,"eBounds",0,-1,O$t,!1,!1,!0,!0,!1,!1,!1),dV(n.c,iet,"EBigDecimal",!0),dV(n.d,oet,"EBigInteger",!0),dV(n.e,$Nt,"EBoolean",!0),dV(n.f,ktt,"EBooleanObject",!0),dV(n.i,NNt,"EByte",!0),dV(n.g,Gk(NNt,1),"EByteArray",!0),dV(n.j,Ttt,"EByteObject",!0),dV(n.k,ONt,"EChar",!0),dV(n.n,Stt,"ECharacterObject",!0),dV(n.r,mtt,"EDate",!0),dV(n.s,_Nt,"EDiagnosticChain",!1),dV(n.t,xNt,"EDouble",!0),dV(n.u,Ptt,"EDoubleObject",!0),dV(n.fb,uAt,"EEList",!1),dV(n.A,yAt,"EEnumerator",!1),dV(n.C,oLt,"EFeatureMap",!1),dV(n.D,$$t,"EFeatureMapEntry",!1),dV(n.F,DNt,"EFloat",!0),dV(n.G,Ctt,"EFloatObject",!0),dV(n.I,ANt,"EInt",!0),dV(n.J,Att,"EIntegerObject",!0),dV(n.L,$nt,"EJavaClass",!0),dV(n.M,Ant,"EJavaObject",!0),dV(n.N,LNt,"ELong",!0),dV(n.O,Rtt,"ELongObject",!0),dV(n.P,Nnt,"EMap",!1),dV(n.X,iLt,"EResource",!1),dV(n.Y,FNt,"EResourceSet",!1),dV(n.Z,RNt,"EShort",!0),dV(n.$,_tt,"EShortObject",!0),dV(n._,Qtt,"EString",!0),dV(n.cb,sAt,"ETreeIterator",!1),dV(n.K,BNt,"EInvocationTargetException",!1),Lhn(n,V9n))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var MWn,SWn,PWn,CWn,IWn,OWn,AWn="object",$Wn="boolean",LWn="number",NWn="string",xWn="function",DWn=2147483647,RWn="java.lang",KWn={3:1},_Wn="com.google.common.base",FWn=", ",BWn="%s (%s) must not be negative",HWn={3:1,4:1,5:1},qWn="negative size: ",GWn="Optional.of(",zWn="null",UWn={198:1,47:1},XWn="com.google.common.collect",WWn={198:1,47:1,125:1},VWn={224:1,3:1},QWn={47:1},YWn="java.util",JWn={83:1},ZWn={20:1,28:1,14:1},nVn=1965,tVn={20:1,28:1,14:1,21:1},eVn={83:1,171:1,161:1},iVn={20:1,28:1,14:1,21:1,84:1},rVn={20:1,28:1,14:1,271:1,21:1,84:1},cVn={47:1,125:1},aVn={345:1,42:1},uVn="AbstractMapEntry",oVn="expectedValuesPerKey",sVn={3:1,6:1,4:1,5:1},hVn=16384,fVn={164:1},lVn={38:1},bVn={l:4194303,m:4194303,h:524287},wVn={196:1},dVn={245:1,3:1,35:1},gVn="range unbounded on this side",pVn={20:1},vVn={20:1,14:1},mVn={3:1,20:1,28:1,14:1},yVn={152:1,3:1,20:1,28:1,14:1,15:1,54:1},kVn={3:1,4:1,5:1,165:1},jVn={3:1,83:1},EVn={20:1,14:1,21:1},TVn={3:1,20:1,28:1,14:1,21:1},MVn={20:1,14:1,21:1,84:1},SVn=461845907,PVn=-862048943,CVn={3:1,6:1,4:1,5:1,165:1},IVn="expectedSize",OVn=1073741824,AVn="initialArraySize",$Vn={3:1,6:1,4:1,9:1,5:1},LVn={20:1,28:1,52:1,14:1,15:1},NVn="arraySize",xVn={20:1,28:1,52:1,14:1,15:1,54:1},DVn={45:1},RVn={365:1},KVn=1e-4,_Vn=-2147483648,FVn="__noinit__",BVn={3:1,102:1,60:1,78:1},HVn="com.google.gwt.core.client.impl",qVn="String",GVn="com.google.gwt.core.client",zVn="anonymous",UVn="fnStack",XVn="Unknown",WVn={195:1,3:1,4:1},VVn=1e3,QVn=65535,YVn="January",JVn="February",ZVn="March",nQn="April",tQn="May",eQn="June",iQn="July",rQn="August",cQn="September",aQn="October",uQn="November",oQn="December",sQn=1900,hQn={48:1,3:1,4:1},fQn="Before Christ",lQn="Anno Domini",bQn="Sunday",wQn="Monday",dQn="Tuesday",gQn="Wednesday",pQn="Thursday",vQn="Friday",mQn="Saturday",yQn="com.google.gwt.i18n.shared",kQn="DateTimeFormat",jQn="com.google.gwt.i18n.client",EQn="DefaultDateTimeFormatInfo",TQn={3:1,4:1,35:1,199:1},MQn="com.google.gwt.json.client",SQn=4194303,PQn=1048575,CQn=524288,IQn=4194304,OQn=17592186044416,AQn=1e9,$Qn=-17592186044416,LQn="java.io",NQn={3:1,102:1,73:1,60:1,78:1},xQn={3:1,289:1,78:1},DQn='For input string: "',RQn=1/0,KQn=-1/0,_Qn=4096,FQn={3:1,4:1,364:1},BQn=65536,HQn=55296,qQn={104:1,3:1,4:1},GQn=1e5,zQn=.3010299956639812,UQn=4294967295,XQn=4294967296,WQn="0.0",VQn={42:1},QQn={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},YQn={3:1,20:1,28:1,52:1,14:1,15:1,54:1},JQn={20:1,14:1,15:1},ZQn={3:1,62:1},nYn={182:1},tYn={3:1,4:1,83:1},eYn={3:1,4:1,20:1,28:1,14:1,53:1,21:1},iYn="delete",rYn=1.4901161193847656e-8,cYn=11102230246251565e-32,aYn=15525485,uYn=5.960464477539063e-8,oYn=16777216,sYn=16777215,hYn=", length: ",fYn={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},lYn={3:1,35:1,22:1,297:1},bYn="java.util.function",wYn="java.util.logging",dYn={3:1,4:1,5:1,842:1},gYn="undefined",pYn="java.util.stream",vYn={525:1,670:1},mYn="fromIndex: ",yYn=" > toIndex: ",kYn=", toIndex: ",jYn="Index: ",EYn=", Size: ",TYn="org.eclipse.elk.alg.common",MYn={62:1},SYn="org.eclipse.elk.alg.common.compaction",PYn="Scanline/EventHandler",CYn="org.eclipse.elk.alg.common.compaction.oned",IYn="CNode belongs to another CGroup.",OYn="ISpacingsHandler/1",AYn="The ",$Yn=" instance has been finished already.",LYn="The direction ",NYn=" is not supported by the CGraph instance.",xYn="OneDimensionalCompactor",DYn="OneDimensionalCompactor/lambda$0$Type",RYn="Quadruplet",KYn="ScanlineConstraintCalculator",_Yn="ScanlineConstraintCalculator/ConstraintsScanlineHandler",FYn="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",BYn="ScanlineConstraintCalculator/Timestamp",HYn="ScanlineConstraintCalculator/lambda$0$Type",qYn={169:1,45:1},GYn="org.eclipse.elk.alg.common.compaction.options",zYn="org.eclipse.elk.core.data",UYn="org.eclipse.elk.polyomino.traversalStrategy",XYn="org.eclipse.elk.polyomino.lowLevelSort",WYn="org.eclipse.elk.polyomino.highLevelSort",VYn="org.eclipse.elk.polyomino.fill",QYn={130:1},YYn="polyomino",JYn="org.eclipse.elk.alg.common.networksimplex",ZYn={177:1,3:1,4:1},nJn="org.eclipse.elk.alg.common.nodespacing",tJn="org.eclipse.elk.alg.common.nodespacing.cellsystem",eJn="CENTER",iJn={212:1,326:1},rJn={3:1,4:1,5:1,595:1},cJn="LEFT",aJn="RIGHT",uJn="Vertical alignment cannot be null",oJn="BOTTOM",sJn="org.eclipse.elk.alg.common.nodespacing.internal",hJn="UNDEFINED",fJn=.01,lJn="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",bJn="LabelPlacer/lambda$0$Type",wJn="LabelPlacer/lambda$1$Type",dJn="portRatioOrPosition",gJn="org.eclipse.elk.alg.common.overlaps",pJn="DOWN",vJn="org.eclipse.elk.alg.common.polyomino",mJn="NORTH",yJn="EAST",kJn="SOUTH",jJn="WEST",EJn="org.eclipse.elk.alg.common.polyomino.structures",TJn="Direction",MJn="Grid is only of size ",SJn=". Requested point (",PJn=") is out of bounds.",CJn=" Given center based coordinates were (",IJn="org.eclipse.elk.graph.properties",OJn="IPropertyHolder",AJn={3:1,94:1,134:1},$Jn="org.eclipse.elk.alg.common.spore",LJn="org.eclipse.elk.alg.common.utils",NJn={209:1},xJn="org.eclipse.elk.core",DJn="Connected Components Compaction",RJn="org.eclipse.elk.alg.disco",KJn="org.eclipse.elk.alg.disco.graph",_Jn="org.eclipse.elk.alg.disco.options",FJn="CompactionStrategy",BJn="org.eclipse.elk.disco.componentCompaction.strategy",HJn="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",qJn="org.eclipse.elk.disco.debug.discoGraph",GJn="org.eclipse.elk.disco.debug.discoPolys",zJn="componentCompaction",UJn="org.eclipse.elk.disco",XJn="org.eclipse.elk.spacing.componentComponent",WJn="org.eclipse.elk.edge.thickness",VJn="org.eclipse.elk.aspectRatio",QJn="org.eclipse.elk.padding",YJn="org.eclipse.elk.alg.disco.transform",JJn=1.5707963267948966,ZJn=17976931348623157e292,nZn={3:1,4:1,5:1,192:1},tZn={3:1,6:1,4:1,5:1,106:1,120:1},eZn="org.eclipse.elk.alg.force",iZn="ComponentsProcessor",rZn="ComponentsProcessor/1",cZn="org.eclipse.elk.alg.force.graph",aZn="Component Layout",uZn="org.eclipse.elk.alg.force.model",oZn="org.eclipse.elk.force.model",sZn="org.eclipse.elk.force.iterations",hZn="org.eclipse.elk.force.repulsivePower",fZn="org.eclipse.elk.force.temperature",lZn=.001,bZn="org.eclipse.elk.force.repulsion",wZn="org.eclipse.elk.alg.force.options",dZn=1.600000023841858,gZn="org.eclipse.elk.force",pZn="org.eclipse.elk.priority",vZn="org.eclipse.elk.spacing.nodeNode",mZn="org.eclipse.elk.spacing.edgeLabel",yZn="org.eclipse.elk.randomSeed",kZn="org.eclipse.elk.separateConnectedComponents",jZn="org.eclipse.elk.interactive",EZn="org.eclipse.elk.portConstraints",TZn="org.eclipse.elk.edgeLabels.inline",MZn="org.eclipse.elk.omitNodeMicroLayout",SZn="org.eclipse.elk.nodeSize.options",PZn="org.eclipse.elk.nodeSize.constraints",CZn="org.eclipse.elk.nodeLabels.placement",IZn="org.eclipse.elk.portLabels.placement",OZn="origin",AZn="random",$Zn="boundingBox.upLeft",LZn="boundingBox.lowRight",NZn="org.eclipse.elk.stress.fixed",xZn="org.eclipse.elk.stress.desiredEdgeLength",DZn="org.eclipse.elk.stress.dimension",RZn="org.eclipse.elk.stress.epsilon",KZn="org.eclipse.elk.stress.iterationLimit",_Zn="org.eclipse.elk.stress",FZn="ELK Stress",BZn="org.eclipse.elk.nodeSize.minimum",HZn="org.eclipse.elk.alg.force.stress",qZn="Layered layout",GZn="org.eclipse.elk.alg.layered",zZn="org.eclipse.elk.alg.layered.compaction.components",UZn="org.eclipse.elk.alg.layered.compaction.oned",XZn="org.eclipse.elk.alg.layered.compaction.oned.algs",WZn="org.eclipse.elk.alg.layered.compaction.recthull",VZn="org.eclipse.elk.alg.layered.components",QZn="NONE",YZn={3:1,6:1,4:1,9:1,5:1,122:1},JZn={3:1,6:1,4:1,5:1,141:1,106:1,120:1},ZZn="org.eclipse.elk.alg.layered.compound",n1n={51:1},t1n="org.eclipse.elk.alg.layered.graph",e1n=" -> ",i1n="Not supported by LGraph",r1n="Port side is undefined",c1n={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},a1n={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},u1n={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},o1n="([{\"' \t\r\n",s1n=")]}\"' \t\r\n",h1n="The given string contains parts that cannot be parsed as numbers.",f1n="org.eclipse.elk.core.math",l1n={3:1,4:1,142:1,207:1,414:1},b1n={3:1,4:1,116:1,207:1,414:1},w1n="org.eclipse.elk.layered",d1n="org.eclipse.elk.alg.layered.graph.transform",g1n="ElkGraphImporter",p1n="ElkGraphImporter/lambda$0$Type",v1n="ElkGraphImporter/lambda$1$Type",m1n="ElkGraphImporter/lambda$2$Type",y1n="ElkGraphImporter/lambda$4$Type",k1n="Node margin calculation",j1n="org.eclipse.elk.alg.layered.intermediate",E1n="ONE_SIDED_GREEDY_SWITCH",T1n="TWO_SIDED_GREEDY_SWITCH",M1n="No implementation is available for the layout processor ",S1n="IntermediateProcessorStrategy",P1n="Node '",C1n="FIRST_SEPARATE",I1n="LAST_SEPARATE",O1n="Odd port side processing",A1n="org.eclipse.elk.alg.layered.intermediate.compaction",$1n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",L1n="org.eclipse.elk.alg.layered.p3order.counting",N1n={225:1},x1n="org.eclipse.elk.alg.layered.intermediate.loops",D1n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",R1n="org.eclipse.elk.alg.layered.intermediate.loops.routing",K1n="org.eclipse.elk.alg.layered.intermediate.preserveorder",_1n="org.eclipse.elk.alg.layered.intermediate.wrapping",F1n="org.eclipse.elk.alg.layered.options",B1n="INTERACTIVE",H1n="DEPTH_FIRST",q1n="EDGE_LENGTH",G1n="SELF_LOOPS",z1n="firstTryWithInitialOrder",U1n="org.eclipse.elk.layered.directionCongruency",X1n="org.eclipse.elk.layered.feedbackEdges",W1n="org.eclipse.elk.layered.interactiveReferencePoint",V1n="org.eclipse.elk.layered.mergeEdges",Q1n="org.eclipse.elk.layered.mergeHierarchyEdges",Y1n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",J1n="org.eclipse.elk.layered.portSortingStrategy",Z1n="org.eclipse.elk.layered.thoroughness",n0n="org.eclipse.elk.layered.unnecessaryBendpoints",t0n="org.eclipse.elk.layered.generatePositionAndLayerIds",e0n="org.eclipse.elk.layered.cycleBreaking.strategy",i0n="org.eclipse.elk.layered.layering.strategy",r0n="org.eclipse.elk.layered.layering.layerConstraint",c0n="org.eclipse.elk.layered.layering.layerChoiceConstraint",a0n="org.eclipse.elk.layered.layering.layerId",u0n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",o0n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",s0n="org.eclipse.elk.layered.layering.nodePromotion.strategy",h0n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",f0n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",l0n="org.eclipse.elk.layered.crossingMinimization.strategy",b0n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",w0n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",d0n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",g0n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",p0n="org.eclipse.elk.layered.crossingMinimization.positionId",v0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",m0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",y0n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k0n="org.eclipse.elk.layered.nodePlacement.strategy",j0n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",E0n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",T0n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M0n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",S0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",P0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",C0n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",I0n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",O0n="org.eclipse.elk.layered.edgeRouting.splines.mode",A0n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",$0n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",L0n="org.eclipse.elk.layered.spacing.baseValue",N0n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",x0n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",D0n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",R0n="org.eclipse.elk.layered.priority.direction",K0n="org.eclipse.elk.layered.priority.shortness",_0n="org.eclipse.elk.layered.priority.straightness",F0n="org.eclipse.elk.layered.compaction.connectedComponents",B0n="org.eclipse.elk.layered.compaction.postCompaction.strategy",H0n="org.eclipse.elk.layered.compaction.postCompaction.constraints",q0n="org.eclipse.elk.layered.highDegreeNodes.treatment",G0n="org.eclipse.elk.layered.highDegreeNodes.threshold",z0n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U0n="org.eclipse.elk.layered.wrapping.strategy",X0n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",W0n="org.eclipse.elk.layered.wrapping.correctionFactor",V0n="org.eclipse.elk.layered.wrapping.cutting.strategy",Q0n="org.eclipse.elk.layered.wrapping.cutting.cuts",Y0n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",J0n="org.eclipse.elk.layered.wrapping.validify.strategy",Z0n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",n2n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",t2n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",e2n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",i2n="org.eclipse.elk.layered.edgeLabels.sideSelection",r2n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",c2n="org.eclipse.elk.layered.considerModelOrder.strategy",a2n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",u2n="org.eclipse.elk.layered.considerModelOrder.components",o2n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",s2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",h2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",f2n="layering",l2n="layering.minWidth",b2n="layering.nodePromotion",w2n="crossingMinimization",d2n="org.eclipse.elk.hierarchyHandling",g2n="crossingMinimization.greedySwitch",p2n="nodePlacement",v2n="nodePlacement.bk",m2n="edgeRouting",y2n="org.eclipse.elk.edgeRouting",k2n="spacing",j2n="priority",E2n="compaction",T2n="compaction.postCompaction",M2n="Specifies whether and how post-process compaction is applied.",S2n="highDegreeNodes",P2n="wrapping",C2n="wrapping.cutting",I2n="wrapping.validify",O2n="wrapping.multiEdge",A2n="edgeLabels",$2n="considerModelOrder",L2n="org.eclipse.elk.spacing.commentComment",N2n="org.eclipse.elk.spacing.commentNode",x2n="org.eclipse.elk.spacing.edgeEdge",D2n="org.eclipse.elk.spacing.edgeNode",R2n="org.eclipse.elk.spacing.labelLabel",K2n="org.eclipse.elk.spacing.labelPortHorizontal",_2n="org.eclipse.elk.spacing.labelPortVertical",F2n="org.eclipse.elk.spacing.labelNode",B2n="org.eclipse.elk.spacing.nodeSelfLoop",H2n="org.eclipse.elk.spacing.portPort",q2n="org.eclipse.elk.spacing.individual",G2n="org.eclipse.elk.port.borderOffset",z2n="org.eclipse.elk.noLayout",U2n="org.eclipse.elk.port.side",X2n="org.eclipse.elk.debugMode",W2n="org.eclipse.elk.alignment",V2n="org.eclipse.elk.insideSelfLoops.activate",Q2n="org.eclipse.elk.insideSelfLoops.yo",Y2n="org.eclipse.elk.nodeSize.fixedGraphSize",J2n="org.eclipse.elk.direction",Z2n="org.eclipse.elk.nodeLabels.padding",n3n="org.eclipse.elk.portLabels.nextToPortIfPossible",t3n="org.eclipse.elk.portLabels.treatAsGroup",e3n="org.eclipse.elk.portAlignment.default",i3n="org.eclipse.elk.portAlignment.north",r3n="org.eclipse.elk.portAlignment.south",c3n="org.eclipse.elk.portAlignment.west",a3n="org.eclipse.elk.portAlignment.east",u3n="org.eclipse.elk.contentAlignment",o3n="org.eclipse.elk.junctionPoints",s3n="org.eclipse.elk.edgeLabels.placement",h3n="org.eclipse.elk.port.index",f3n="org.eclipse.elk.commentBox",l3n="org.eclipse.elk.hypernode",b3n="org.eclipse.elk.port.anchor",w3n="org.eclipse.elk.partitioning.activate",d3n="org.eclipse.elk.partitioning.partition",g3n="org.eclipse.elk.position",p3n="org.eclipse.elk.margins",v3n="org.eclipse.elk.spacing.portsSurrounding",m3n="org.eclipse.elk.interactiveLayout",y3n="org.eclipse.elk.core.util",k3n={3:1,4:1,5:1,593:1},j3n="NETWORK_SIMPLEX",E3n={123:1,51:1},T3n="org.eclipse.elk.alg.layered.p1cycles",M3n="org.eclipse.elk.alg.layered.p2layers",S3n={402:1,225:1},P3n={832:1,3:1,4:1},C3n="org.eclipse.elk.alg.layered.p3order",I3n="org.eclipse.elk.alg.layered.p4nodes",O3n={3:1,4:1,5:1,840:1},A3n=1e-5,$3n="org.eclipse.elk.alg.layered.p4nodes.bk",L3n="org.eclipse.elk.alg.layered.p5edges",N3n="org.eclipse.elk.alg.layered.p5edges.orthogonal",x3n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",D3n=1e-6,R3n="org.eclipse.elk.alg.layered.p5edges.splines",K3n=.09999999999999998,_3n=1e-8,F3n=4.71238898038469,B3n=3.141592653589793,H3n="org.eclipse.elk.alg.mrtree",q3n="org.eclipse.elk.alg.mrtree.graph",G3n="org.eclipse.elk.alg.mrtree.intermediate",z3n="Set neighbors in level",U3n="DESCENDANTS",X3n="org.eclipse.elk.mrtree.weighting",W3n="org.eclipse.elk.mrtree.searchOrder",V3n="org.eclipse.elk.alg.mrtree.options",Q3n="org.eclipse.elk.mrtree",Y3n="org.eclipse.elk.tree",J3n="org.eclipse.elk.alg.radial",Z3n=6.283185307179586,n4n=5e-324,t4n="org.eclipse.elk.alg.radial.intermediate",e4n="org.eclipse.elk.alg.radial.intermediate.compaction",i4n={3:1,4:1,5:1,106:1},r4n="org.eclipse.elk.alg.radial.intermediate.optimization",c4n="No implementation is available for the layout option ",a4n="org.eclipse.elk.alg.radial.options",u4n="org.eclipse.elk.radial.orderId",o4n="org.eclipse.elk.radial.radius",s4n="org.eclipse.elk.radial.compactor",h4n="org.eclipse.elk.radial.compactionStepSize",f4n="org.eclipse.elk.radial.sorter",l4n="org.eclipse.elk.radial.wedgeCriteria",b4n="org.eclipse.elk.radial.optimizationCriteria",w4n="org.eclipse.elk.radial",d4n="org.eclipse.elk.alg.radial.p1position.wedge",g4n="org.eclipse.elk.alg.radial.sorting",p4n=5.497787143782138,v4n=3.9269908169872414,m4n=2.356194490192345,y4n="org.eclipse.elk.alg.rectpacking",k4n="org.eclipse.elk.alg.rectpacking.firstiteration",j4n="org.eclipse.elk.alg.rectpacking.options",E4n="org.eclipse.elk.rectpacking.optimizationGoal",T4n="org.eclipse.elk.rectpacking.lastPlaceShift",M4n="org.eclipse.elk.rectpacking.currentPosition",S4n="org.eclipse.elk.rectpacking.desiredPosition",P4n="org.eclipse.elk.rectpacking.onlyFirstIteration",C4n="org.eclipse.elk.rectpacking.rowCompaction",I4n="org.eclipse.elk.rectpacking.expandToAspectRatio",O4n="org.eclipse.elk.rectpacking.targetWidth",A4n="org.eclipse.elk.expandNodes",$4n="org.eclipse.elk.rectpacking",L4n="org.eclipse.elk.alg.rectpacking.util",N4n="No implementation available for ",x4n="org.eclipse.elk.alg.spore",D4n="org.eclipse.elk.alg.spore.options",R4n="org.eclipse.elk.sporeCompaction",K4n="org.eclipse.elk.underlyingLayoutAlgorithm",_4n="org.eclipse.elk.processingOrder.treeConstruction",F4n="org.eclipse.elk.processingOrder.spanningTreeCostFunction",B4n="org.eclipse.elk.processingOrder.preferredRoot",H4n="org.eclipse.elk.processingOrder.rootSelection",q4n="org.eclipse.elk.structure.structureExtractionStrategy",G4n="org.eclipse.elk.compaction.compactionStrategy",z4n="org.eclipse.elk.compaction.orthogonal",U4n="org.eclipse.elk.overlapRemoval.maxIterations",X4n="org.eclipse.elk.overlapRemoval.runScanline",W4n="processingOrder",V4n="overlapRemoval",Q4n="org.eclipse.elk.sporeOverlap",Y4n="org.eclipse.elk.alg.spore.p1structure",J4n="org.eclipse.elk.alg.spore.p2processingorder",Z4n="org.eclipse.elk.alg.spore.p3execution",n5n="Invalid index: ",t5n="org.eclipse.elk.core.alg",e5n={331:1},i5n={288:1},r5n="Make sure its type is registered with the ",c5n=" utility class.",a5n="true",u5n="false",o5n="Couldn't clone property '",s5n=.05,h5n="org.eclipse.elk.core.options",f5n=1.2999999523162842,l5n="org.eclipse.elk.box",b5n="org.eclipse.elk.box.packingMode",w5n="org.eclipse.elk.algorithm",d5n="org.eclipse.elk.resolvedAlgorithm",g5n="org.eclipse.elk.bendPoints",p5n="org.eclipse.elk.labelManager",v5n="org.eclipse.elk.scaleFactor",m5n="org.eclipse.elk.animate",y5n="org.eclipse.elk.animTimeFactor",k5n="org.eclipse.elk.layoutAncestors",j5n="org.eclipse.elk.maxAnimTime",E5n="org.eclipse.elk.minAnimTime",T5n="org.eclipse.elk.progressBar",M5n="org.eclipse.elk.validateGraph",S5n="org.eclipse.elk.validateOptions",P5n="org.eclipse.elk.zoomToFit",C5n="org.eclipse.elk.font.name",I5n="org.eclipse.elk.font.size",O5n="org.eclipse.elk.edge.type",A5n="partitioning",$5n="nodeLabels",L5n="portAlignment",N5n="nodeSize",x5n="port",D5n="portLabels",R5n="insideSelfLoops",K5n="org.eclipse.elk.fixed",_5n="org.eclipse.elk.random",F5n="port must have a parent node to calculate the port side",B5n="The edge needs to have exactly one edge section. Found: ",H5n="org.eclipse.elk.core.util.adapters",q5n="org.eclipse.emf.ecore",G5n="org.eclipse.elk.graph",z5n="EMapPropertyHolder",U5n="ElkBendPoint",X5n="ElkGraphElement",W5n="ElkConnectableShape",V5n="ElkEdge",Q5n="ElkEdgeSection",Y5n="EModelElement",J5n="ENamedElement",Z5n="ElkLabel",n6n="ElkNode",t6n="ElkPort",e6n={92:1,90:1},i6n="org.eclipse.emf.common.notify.impl",r6n="The feature '",c6n="' is not a valid changeable feature",a6n="Expecting null",u6n="' is not a valid feature",o6n="The feature ID",s6n=" is not a valid feature ID",h6n=32768,f6n={105:1,92:1,90:1,56:1,49:1,97:1},l6n="org.eclipse.emf.ecore.impl",b6n="org.eclipse.elk.graph.impl",w6n="Recursive containment not allowed for ",d6n="The datatype '",g6n="' is not a valid classifier",p6n="The value '",v6n={190:1,3:1,4:1},m6n="The class '",y6n="http://www.eclipse.org/elk/ElkGraph",k6n=1024,j6n="property",E6n="value",T6n="source",M6n="properties",S6n="identifier",P6n="height",C6n="width",I6n="parent",O6n="text",A6n="children",$6n="hierarchical",L6n="sources",N6n="targets",x6n="sections",D6n="bendPoints",R6n="outgoingShape",K6n="incomingShape",_6n="outgoingSections",F6n="incomingSections",B6n="org.eclipse.emf.common.util",H6n="Severe implementation error in the Json to ElkGraph importer.",q6n="id",G6n="org.eclipse.elk.graph.json",z6n="Unhandled parameter types: ",U6n="startPoint",X6n="An edge must have at least one source and one target (edge id: '",W6n="').",V6n="Referenced edge section does not exist: ",Q6n=" (edge id: '",Y6n="target",J6n="sourcePoint",Z6n="targetPoint",n8n="group",t8n="name",e8n="connectableShape cannot be null",i8n="edge cannot be null",r8n="Passed edge is not 'simple'.",c8n="org.eclipse.elk.graph.util",a8n="The 'no duplicates' constraint is violated",u8n="targetIndex=",o8n=", size=",s8n="sourceIndex=",h8n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},f8n={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},l8n="logging",b8n="measureExecutionTime",w8n="parser.parse.1",d8n="parser.parse.2",g8n="parser.next.1",p8n="parser.next.2",v8n="parser.next.3",m8n="parser.next.4",y8n="parser.factor.1",k8n="parser.factor.2",j8n="parser.factor.3",E8n="parser.factor.4",T8n="parser.factor.5",M8n="parser.factor.6",S8n="parser.atom.1",P8n="parser.atom.2",C8n="parser.atom.3",I8n="parser.atom.4",O8n="parser.atom.5",A8n="parser.cc.1",$8n="parser.cc.2",L8n="parser.cc.3",N8n="parser.cc.5",x8n="parser.cc.6",D8n="parser.cc.7",R8n="parser.cc.8",K8n="parser.ope.1",_8n="parser.ope.2",F8n="parser.ope.3",B8n="parser.descape.1",H8n="parser.descape.2",q8n="parser.descape.3",G8n="parser.descape.4",z8n="parser.descape.5",U8n="parser.process.1",X8n="parser.quantifier.1",W8n="parser.quantifier.2",V8n="parser.quantifier.3",Q8n="parser.quantifier.4",Y8n="parser.quantifier.5",J8n="org.eclipse.emf.common.notify",Z8n={415:1,672:1},n9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},t9n={366:1,143:1},e9n="index=",i9n={3:1,4:1,5:1,126:1},r9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},c9n={3:1,6:1,4:1,5:1,192:1},a9n={3:1,4:1,5:1,165:1,367:1},u9n=";/?:@&=+$,",o9n="invalid authority: ",s9n="EAnnotation",h9n="ETypedElement",f9n="EStructuralFeature",l9n="EAttribute",b9n="EClassifier",w9n="EEnumLiteral",d9n="EGenericType",g9n="EOperation",p9n="EParameter",v9n="EReference",m9n="ETypeParameter",y9n="org.eclipse.emf.ecore.util",k9n={76:1},j9n={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},E9n="org.eclipse.emf.ecore.util.FeatureMap$Entry",T9n=8192,M9n=2048,S9n="byte",P9n="char",C9n="double",I9n="float",O9n="int",A9n="long",$9n="short",L9n="java.lang.Object",N9n={3:1,4:1,5:1,247:1},x9n={3:1,4:1,5:1,673:1},D9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},R9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},K9n="mixed",_9n="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",F9n="kind",B9n={3:1,4:1,5:1,674:1},H9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},q9n={20:1,28:1,52:1,14:1,15:1,58:1,69:1},G9n={47:1,125:1,279:1},z9n={72:1,332:1},U9n="The value of type '",X9n="' must be of type '",W9n=1316,V9n="http://www.eclipse.org/emf/2002/Ecore",Q9n=-32768,Y9n="constraints",J9n="baseType",Z9n="getEStructuralFeature",n7n="getFeatureID",t7n="feature",e7n="getOperationID",i7n="operation",r7n="defaultValue",c7n="eTypeParameters",a7n="isInstance",u7n="getEEnumLiteral",o7n="eContainingClass",s7n={55:1},h7n={3:1,4:1,5:1,119:1},f7n="org.eclipse.emf.ecore.resource",l7n={92:1,90:1,591:1,1935:1},b7n="org.eclipse.emf.ecore.resource.impl",w7n="unspecified",d7n="simple",g7n="attribute",p7n="attributeWildcard",v7n="element",m7n="elementWildcard",y7n="collapse",k7n="itemType",j7n="namespace",E7n="##targetNamespace",T7n="whiteSpace",M7n="wildcards",S7n="http://www.eclipse.org/emf/2003/XMLType",P7n="##any",C7n="uninitialized",I7n="The multiplicity constraint is violated",O7n="org.eclipse.emf.ecore.xml.type",A7n="ProcessingInstruction",$7n="SimpleAnyType",L7n="XMLTypeDocumentRoot",N7n="org.eclipse.emf.ecore.xml.type.impl",x7n="INF",D7n="processing",R7n="ENTITIES_._base",K7n="minLength",_7n="ENTITY",F7n="NCName",B7n="IDREFS_._base",H7n="integer",q7n="token",G7n="pattern",z7n="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",U7n="\\i\\c*",X7n="[\\i-[:]][\\c-[:]]*",W7n="nonPositiveInteger",V7n="maxInclusive",Q7n="NMTOKEN",Y7n="NMTOKENS_._base",J7n="nonNegativeInteger",Z7n="minInclusive",nnt="normalizedString",tnt="unsignedByte",ent="unsignedInt",int="18446744073709551615",rnt="unsignedShort",cnt="processingInstruction",ant="org.eclipse.emf.ecore.xml.type.internal",unt=1114111,ont="Internal Error: shorthands: \\u",snt="xml:isDigit",hnt="xml:isWord",fnt="xml:isSpace",lnt="xml:isNameChar",bnt="xml:isInitialNameChar",wnt="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",dnt="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",gnt="Private Use",pnt="ASSIGNED",vnt="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",mnt="UNASSIGNED",ynt={3:1,117:1},knt="org.eclipse.emf.ecore.xml.type.util",jnt={3:1,4:1,5:1,368:1},Ent="org.eclipse.xtext.xbase.lib",Tnt="Cannot add elements to a Range",Mnt="Cannot set elements in a Range",Snt="Cannot remove elements from a Range",Pnt="locale",Cnt="default",Int="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,WMn(),wAn(1,null,{},r),MWn.Fb=function(n){return FO(this,n)},MWn.Gb=function(){return this.gm},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return nE(tsn(this))+"@"+(nsn(this)>>>0).toString(16)},MWn.equals=function(n){return this.Fb(n)},MWn.hashCode=function(){return this.Hb()},MWn.toString=function(){return this.Ib()},wAn(290,1,{290:1,2026:1},pon),MWn.le=function(n){var t;return(t=new pon).i=4,t.c=n>1?gZ(this,n-1):this,t},MWn.me=function(){return ED(this),this.b},MWn.ne=function(){return nE(this)},MWn.oe=function(){return ED(this),this.k},MWn.pe=function(){return 0!=(4&this.i)},MWn.qe=function(){return 0!=(1&this.i)},MWn.Ib=function(){return utn(this)},MWn.i=0;var Ont,Ant=vX(RWn,"Object",1),$nt=vX(RWn,"Class",290);wAn(1998,1,KWn),vX(_Wn,"Optional",1998),wAn(1170,1998,KWn,c),MWn.Fb=function(n){return n===this},MWn.Hb=function(){return 2040732332},MWn.Ib=function(){return"Optional.absent()"},MWn.Jb=function(n){return yX(n),iy(),Ont},vX(_Wn,"Absent",1170),wAn(628,1,{},mk),vX(_Wn,"Joiner",628);var Lnt=bq(_Wn,"Predicate");wAn(582,1,{169:1,582:1,3:1,45:1},Hf),MWn.Mb=function(n){return Kon(this,n)},MWn.Lb=function(n){return Kon(this,n)},MWn.Fb=function(n){var t;return!!cL(n,582)&&(t=BB(n,582),NAn(this.a,t.a))},MWn.Hb=function(){return Fon(this.a)+306654252},MWn.Ib=function(){return wPn(this.a)},vX(_Wn,"Predicates/AndPredicate",582),wAn(408,1998,{408:1,3:1},qf),MWn.Fb=function(n){var t;return!!cL(n,408)&&(t=BB(n,408),Nfn(this.a,t.a))},MWn.Hb=function(){return 1502476572+nsn(this.a)},MWn.Ib=function(){return GWn+this.a+")"},MWn.Jb=function(n){return new qf(WQ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},vX(_Wn,"Present",408),wAn(198,1,UWn),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){bk()},vX(XWn,"UnmodifiableIterator",198),wAn(1978,198,WWn),MWn.Qb=function(){bk()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(XWn,"UnmodifiableListIterator",1978),wAn(386,1978,WWn),MWn.Ob=function(){return this.c<this.d},MWn.Sb=function(){return this.c>0},MWn.Pb=function(){if(this.c>=this.d)throw Hp(new yv);return this.Xb(this.c++)},MWn.Tb=function(){return this.c},MWn.Ub=function(){if(this.c<=0)throw Hp(new yv);return this.Xb(--this.c)},MWn.Vb=function(){return this.c-1},MWn.c=0,MWn.d=0,vX(XWn,"AbstractIndexedListIterator",386),wAn(699,198,UWn),MWn.Ob=function(){return Zin(this)},MWn.Pb=function(){return P7(this)},MWn.e=1,vX(XWn,"AbstractIterator",699),wAn(1986,1,{224:1}),MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.Fb=function(n){return jsn(this,n)},MWn.Hb=function(){return nsn(this.Zb())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return gz(this)},MWn.Ib=function(){return Bbn(this.Zb())},vX(XWn,"AbstractMultimap",1986),wAn(726,1986,VWn),MWn.$b=function(){win(this)},MWn._b=function(n){return Wj(this,n)},MWn.ac=function(){return new pT(this,this.c)},MWn.ic=function(n){return this.hc()},MWn.bc=function(){return new HL(this,this.c)},MWn.jc=function(){return this.mc(this.hc())},MWn.kc=function(){return new Hm(this)},MWn.lc=function(){return qTn(this.c.vc().Nc(),new u,64,this.d)},MWn.cc=function(n){return h6(this,n)},MWn.fc=function(n){return Nhn(this,n)},MWn.gc=function(){return this.d},MWn.mc=function(n){return SQ(),new Hb(n)},MWn.nc=function(){return new Bm(this)},MWn.oc=function(){return qTn(this.c.Cc().Nc(),new a,64,this.d)},MWn.pc=function(n,t){return new W6(this,n,t,null)},MWn.d=0,vX(XWn,"AbstractMapBasedMultimap",726),wAn(1631,726,VWn),MWn.hc=function(){return new J6(this.a)},MWn.jc=function(){return SQ(),SQ(),set},MWn.cc=function(n){return BB(h6(this,n),15)},MWn.fc=function(n){return BB(Nhn(this,n),15)},MWn.Zb=function(){return OQ(this)},MWn.Fb=function(n){return jsn(this,n)},MWn.qc=function(n){return BB(h6(this,n),15)},MWn.rc=function(n){return BB(Nhn(this,n),15)},MWn.mc=function(n){return rY(BB(n,15))},MWn.pc=function(n,t){return i3(this,n,BB(t,15),null)},vX(XWn,"AbstractListMultimap",1631),wAn(732,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()||this.e.Ob()},MWn.Pb=function(){var n;return this.e.Ob()||(n=BB(this.c.Pb(),42),this.b=n.cd(),this.a=BB(n.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},MWn.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},vX(XWn,"AbstractMapBasedMultimap/Itr",732),wAn(1099,732,QWn,Bm),MWn.sc=function(n,t){return t},vX(XWn,"AbstractMapBasedMultimap/1",1099),wAn(1100,1,{},a),MWn.Kb=function(n){return BB(n,14).Nc()},vX(XWn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),wAn(1101,732,QWn,Hm),MWn.sc=function(n,t){return new vT(n,t)},vX(XWn,"AbstractMapBasedMultimap/2",1101);var Nnt=bq(YWn,"Map");wAn(1967,1,JWn),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.vc().$b()},MWn.tc=function(n){return Mmn(this,n)},MWn._b=function(n){return!!FEn(this,n,!1)},MWn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=BB(t.Pb(),42).dd(),GI(n)===GI(e)||null!=n&&Nfn(n,e))return!0;return!1},MWn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!cL(n,83))return!1;if(i=BB(n,83),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=BB(e.Pb(),42),!this.tc(t))return!1;return!0},MWn.xc=function(n){return qI(FEn(this,n,!1))},MWn.Hb=function(){return Hun(this.vc())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return new Cb(this)},MWn.zc=function(n,t){throw Hp(new tk("Put not supported on this map"))},MWn.Ac=function(n){Tcn(this,n)},MWn.Bc=function(n){return qI(FEn(this,n,!0))},MWn.gc=function(){return this.vc().gc()},MWn.Ib=function(){return nTn(this)},MWn.Cc=function(){return new Ob(this)},vX(YWn,"AbstractMap",1967),wAn(1987,1967,JWn),MWn.bc=function(){return new ST(this)},MWn.vc=function(){return dz(this)},MWn.ec=function(){return this.g||(this.g=this.bc())},MWn.Cc=function(){return this.i||(this.i=new PT(this))},vX(XWn,"Maps/ViewCachingAbstractMap",1987),wAn(389,1987,JWn,pT),MWn.xc=function(n){return ktn(this,n)},MWn.Bc=function(n){return Zsn(this,n)},MWn.$b=function(){this.d==this.e.c?this.e.$b():Cq(new Oq(this))},MWn._b=function(n){return gfn(this.d,n)},MWn.Ec=function(){return new Xf(this)},MWn.Dc=function(){return this.Ec()},MWn.Fb=function(n){return this===n||Nfn(this.d,n)},MWn.Hb=function(){return nsn(this.d)},MWn.ec=function(){return this.e.ec()},MWn.gc=function(){return this.d.gc()},MWn.Ib=function(){return Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/AsMap",389);var xnt=bq(RWn,"Iterable");wAn(28,1,ZWn),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){throw Hp(new tk("Add not supported on this collection"))},MWn.Gc=function(n){return Frn(this,n)},MWn.$b=function(){TV(this)},MWn.Hc=function(n){return ywn(this,n,!1)},MWn.Ic=function(n){return oun(this,n)},MWn.dc=function(){return 0==this.gc()},MWn.Mc=function(n){return ywn(this,n,!0)},MWn.Pc=function(){return cz(this)},MWn.Qc=function(n){return Emn(this,n)},MWn.Ib=function(){return LMn(this)},vX(YWn,"AbstractCollection",28);var Dnt=bq(YWn,"Set");wAn(nVn,28,tVn),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return ign(this,n)},MWn.Hb=function(){return Hun(this)},vX(YWn,"AbstractSet",nVn),wAn(1970,nVn,tVn),vX(XWn,"Sets/ImprovedAbstractSet",1970),wAn(1971,1970,tVn),MWn.$b=function(){this.Rc().$b()},MWn.Hc=function(n){return idn(this,n)},MWn.dc=function(){return this.Rc().dc()},MWn.Mc=function(n){var t;return!!this.Hc(n)&&(t=BB(n,42),this.Rc().ec().Mc(t.cd()))},MWn.gc=function(){return this.Rc().gc()},vX(XWn,"Maps/EntrySet",1971),wAn(1097,1971,tVn,Xf),MWn.Hc=function(n){return wfn(this.a.d.vc(),n)},MWn.Kc=function(){return new Oq(this.a)},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!wfn(this.a.d.vc(),n)&&(t=BB(n,42),H5(this.a.e,t.cd()),!0)},MWn.Nc=function(){return RB(this.a.d.vc().Nc(),new Wf(this.a))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),wAn(1098,1,{},Wf),MWn.Kb=function(n){return i5(this.a,BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),wAn(730,1,QWn,Oq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){var n;return n=BB(this.b.Pb(),42),this.a=BB(n.dd(),14),i5(this.c,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Qb=function(){han(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),wAn(532,1970,tVn,ST),MWn.$b=function(){this.b.$b()},MWn.Hc=function(n){return this.b._b(n)},MWn.Jc=function(n){yX(n),this.b.wc(new vl(n))},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new ly(this.b.vc().Kc())},MWn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},MWn.gc=function(){return this.b.gc()},vX(XWn,"Maps/KeySet",532),wAn(318,532,tVn,HL),MWn.$b=function(){Cq(new eT(this,this.b.vc().Kc()))},MWn.Ic=function(n){return this.b.ec().Ic(n)},MWn.Fb=function(n){return this===n||Nfn(this.b.ec(),n)},MWn.Hb=function(){return nsn(this.b.ec())},MWn.Kc=function(){return new eT(this,this.b.vc().Kc())},MWn.Mc=function(n){var t,e;return e=0,(t=BB(this.b.Bc(n),14))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/KeySet",318),wAn(731,1,QWn,eT),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()},MWn.Pb=function(){return this.a=BB(this.c.Pb(),42),this.a.cd()},MWn.Qb=function(){var n;han(!!this.a),n=BB(this.a.dd(),14),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/KeySet/1",731),wAn(491,389,{83:1,161:1},CD),MWn.bc=function(){return this.Sc()},MWn.ec=function(){return this.Tc()},MWn.Sc=function(){return new nT(this.c,this.Uc())},MWn.Tc=function(){return this.b||(this.b=this.Sc())},MWn.Uc=function(){return BB(this.d,161)},vX(XWn,"AbstractMapBasedMultimap/SortedAsMap",491),wAn(542,491,eVn,ID),MWn.bc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.Sc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.ec=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Tc=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Uc=function(){return BB(BB(this.d,161),171)},vX(XWn,"AbstractMapBasedMultimap/NavigableAsMap",542),wAn(490,318,iVn,nT),MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/SortedKeySet",490),wAn(388,490,rVn,tT),vX(XWn,"AbstractMapBasedMultimap/NavigableKeySet",388),wAn(541,28,ZWn,W6),MWn.Fc=function(n){var t,e;return zbn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&jR(this)),t},MWn.Gc=function(n){var t,e,i;return!n.dc()&&(zbn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&jR(this)),t)},MWn.$b=function(){var n;zbn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,$G(this))},MWn.Hc=function(n){return zbn(this),this.d.Hc(n)},MWn.Ic=function(n){return zbn(this),this.d.Ic(n)},MWn.Fb=function(n){return n===this||(zbn(this),Nfn(this.d,n))},MWn.Hb=function(){return zbn(this),nsn(this.d)},MWn.Kc=function(){return zbn(this),new QB(this)},MWn.Mc=function(n){var t;return zbn(this),(t=this.d.Mc(n))&&(--this.f.d,$G(this)),t},MWn.gc=function(){return tO(this)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Ib=function(){return zbn(this),Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection",541);var Rnt=bq(YWn,"List");wAn(728,541,{20:1,28:1,14:1,15:1},sz),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Vc=function(n,t){var e;zbn(this),e=this.d.dc(),BB(this.d,15).Vc(n,t),++this.a.d,e&&jR(this)},MWn.Wc=function(n,t){var e,i,r;return!t.dc()&&(zbn(this),r=this.d.gc(),(e=BB(this.d,15).Wc(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&jR(this)),e)},MWn.Xb=function(n){return zbn(this),BB(this.d,15).Xb(n)},MWn.Xc=function(n){return zbn(this),BB(this.d,15).Xc(n)},MWn.Yc=function(){return zbn(this),new g$(this)},MWn.Zc=function(n){return zbn(this),new gQ(this,n)},MWn.$c=function(n){var t;return zbn(this),t=BB(this.d,15).$c(n),--this.a.d,$G(this),t},MWn._c=function(n,t){return zbn(this),BB(this.d,15)._c(n,t)},MWn.bd=function(n,t){return zbn(this),i3(this.a,this.e,BB(this.d,15).bd(n,t),this.b?this.b:this)},vX(XWn,"AbstractMapBasedMultimap/WrappedList",728),wAn(1096,728,{20:1,28:1,14:1,15:1,54:1},Ox),vX(XWn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),wAn(620,1,QWn,QB),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return MV(this),this.b.Ob()},MWn.Pb=function(){return MV(this),this.b.Pb()},MWn.Qb=function(){eN(this)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),wAn(729,620,cVn,g$,gQ),MWn.Qb=function(){eN(this)},MWn.Rb=function(n){var t;t=0==tO(this.a),(MV(this),BB(this.b,125)).Rb(n),++this.a.a.d,t&&jR(this.a)},MWn.Sb=function(){return(MV(this),BB(this.b,125)).Sb()},MWn.Tb=function(){return(MV(this),BB(this.b,125)).Tb()},MWn.Ub=function(){return(MV(this),BB(this.b,125)).Ub()},MWn.Vb=function(){return(MV(this),BB(this.b,125)).Vb()},MWn.Wb=function(n){(MV(this),BB(this.b,125)).Wb(n)},vX(XWn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),wAn(727,541,iVn,ND),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSortedSet",727),wAn(1095,727,rVn,AA),vX(XWn,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),wAn(1094,541,tVn,xD),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSet",1094),wAn(1103,1,{},u),MWn.Kb=function(n){return F6(BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/lambda$1$Type",1103),wAn(1102,1,{},Vf),MWn.Kb=function(n){return new vT(this.a,n)},vX(XWn,"AbstractMapBasedMultimap/lambda$2$Type",1102);var Knt,_nt,Fnt,Bnt,Hnt=bq(YWn,"Map/Entry");wAn(345,1,aVn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),wW(this.cd(),t.cd())&&wW(this.dd(),t.dd()))},MWn.Hb=function(){var n,t;return n=this.cd(),t=this.dd(),(null==n?0:nsn(n))^(null==t?0:nsn(t))},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(XWn,uVn,345),wAn(1988,28,ZWn),MWn.$b=function(){this.fd().$b()},MWn.Hc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),H0(this.fd(),t.cd(),t.dd()))},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),q0(this.fd(),t.cd(),t.dd()))},MWn.gc=function(){return this.fd().d},vX(XWn,"Multimaps/Entries",1988),wAn(733,1988,ZWn,Qf),MWn.Kc=function(){return this.a.kc()},MWn.fd=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"AbstractMultimap/Entries",733),wAn(734,733,tVn,qm),MWn.Nc=function(){return this.a.lc()},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"AbstractMultimap/EntrySet",734),wAn(735,28,ZWn,Yf),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return Isn(this.a,n)},MWn.Kc=function(){return this.a.nc()},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return this.a.oc()},vX(XWn,"AbstractMultimap/Values",735),wAn(1989,28,{835:1,20:1,28:1,14:1}),MWn.Jc=function(n){yX(n),EV(this).Jc(new pl(n))},MWn.Nc=function(){var n;return qTn(n=EV(this).Nc(),new y,64|1296&n.qd(),this.a.d)},MWn.Fc=function(n){return wk(),!0},MWn.Gc=function(n){return yX(this),yX(n),cL(n,543)?l2(BB(n,835)):!n.dc()&&fnn(this,n.Kc())},MWn.Hc=function(n){var t;return((t=BB(lfn(OQ(this.a),n),14))?t.gc():0)>0},MWn.Fb=function(n){return h$n(this,n)},MWn.Hb=function(){return nsn(EV(this))},MWn.dc=function(){return EV(this).dc()},MWn.Mc=function(n){return EIn(this,n,1)>0},MWn.Ib=function(){return Bbn(EV(this))},vX(XWn,"AbstractMultiset",1989),wAn(1991,1970,tVn),MWn.$b=function(){win(this.a.a)},MWn.Hc=function(n){var t;return!(!cL(n,492)||(t=BB(n,416),BB(t.a.dd(),14).gc()<=0||c1(this.a,t.a.cd())!=BB(t.a.dd(),14).gc()))},MWn.Mc=function(n){var t,e,i;return!(!cL(n,492)||(t=(e=BB(n,416)).a.cd(),0==(i=BB(e.a.dd(),14).gc())))&&TIn(this.a,t,i)},vX(XWn,"Multisets/EntrySet",1991),wAn(1109,1991,tVn,Jf),MWn.Kc=function(){return new wy(dz(OQ(this.a.a)).Kc())},MWn.gc=function(){return OQ(this.a.a).gc()},vX(XWn,"AbstractMultiset/EntrySet",1109),wAn(619,726,VWn),MWn.hc=function(){return this.gd()},MWn.jc=function(){return this.hd()},MWn.cc=function(n){return this.jd(n)},MWn.fc=function(n){return this.kd(n)},MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.hd=function(){return SQ(),SQ(),fet},MWn.Fb=function(n){return jsn(this,n)},MWn.jd=function(n){return BB(h6(this,n),21)},MWn.kd=function(n){return BB(Nhn(this,n),21)},MWn.mc=function(n){return SQ(),new Ak(BB(n,21))},MWn.pc=function(n,t){return new xD(this,n,BB(t,21))},vX(XWn,"AbstractSetMultimap",619),wAn(1657,619,VWn),MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.jc=function(){return IX(new dE(this.b))},MWn.hd=function(){return IX(new dE(this.b))},MWn.cc=function(n){return BB(BB(h6(this,n),21),84)},MWn.jd=function(n){return BB(BB(h6(this,n),21),84)},MWn.fc=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.kd=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.mc=function(n){return cL(n,271)?IX(BB(n,271)):(SQ(),new dN(BB(n,84)))},MWn.Zb=function(){return this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c))},MWn.pc=function(n,t){return cL(t,271)?new AA(this,n,BB(t,271)):new ND(this,n,BB(t,84))},vX(XWn,"AbstractSortedSetMultimap",1657),wAn(1658,1657,VWn),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.bc=function(){return cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)},vX(XWn,"AbstractSortedKeySortedSetMultimap",1658),wAn(2010,1,{1947:1}),MWn.Fb=function(n){return Cjn(this,n)},MWn.Hb=function(){return Hun(this.g||(this.g=new Zf(this)))},MWn.Ib=function(){return nTn(this.f||(this.f=new UL(this)))},vX(XWn,"AbstractTable",2010),wAn(665,nVn,tVn,Zf),MWn.$b=function(){dk()},MWn.Hc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&wfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.Kc=function(){return ZQ(this.a)},MWn.Mc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&dfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return P2(this.a)},vX(XWn,"AbstractTable/CellSet",665),wAn(1928,28,ZWn,nl),MWn.$b=function(){dk()},MWn.Hc=function(n){return hTn(this.a,n)},MWn.Kc=function(){return nY(this.a)},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return Y0(this.a)},vX(XWn,"AbstractTable/Values",1928),wAn(1632,1631,VWn),vX(XWn,"ArrayListMultimapGwtSerializationDependencies",1632),wAn(513,1632,VWn,ok,o1),MWn.hc=function(){return new J6(this.a)},MWn.a=0,vX(XWn,"ArrayListMultimap",513),wAn(664,2010,{664:1,1947:1,3:1},vOn),vX(XWn,"ArrayTable",664),wAn(1924,386,WWn,qL),MWn.Xb=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1",1924),wAn(1925,1,{},Gf),MWn.ld=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1methodref$getCell$Type",1925),wAn(2011,1,{682:1}),MWn.Fb=function(n){var t;return n===this||!!cL(n,468)&&(t=BB(n,682),wW(WI(this.c.e,this.b),WI(t.c.e,t.b))&&wW(WI(this.c.c,this.a),WI(t.c.c,t.a))&&wW(U6(this.c,this.b,this.a),U6(t.c,t.b,t.a)))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[WI(this.c.e,this.b),WI(this.c.c,this.a),U6(this.c,this.b,this.a)]))},MWn.Ib=function(){return"("+WI(this.c.e,this.b)+","+WI(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},vX(XWn,"Tables/AbstractCell",2011),wAn(468,2011,{468:1,682:1},gon),MWn.a=0,MWn.b=0,MWn.d=0,vX(XWn,"ArrayTable/2",468),wAn(1927,1,{},zf),MWn.ld=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/2methodref$getValue$Type",1927),wAn(1926,386,WWn,GL),MWn.Xb=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/3",1926),wAn(1979,1967,JWn),MWn.$b=function(){Cq(this.kc())},MWn.vc=function(){return new ml(this)},MWn.lc=function(){return new CV(this.kc(),this.gc())},vX(XWn,"Maps/IteratorBasedAbstractMap",1979),wAn(828,1979,JWn),MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return Yj(this.c,n)},MWn.kc=function(){return new zL(this,this.c.b.c.gc())},MWn.lc=function(){return yq(this.c.b.c.gc(),16,new Uf(this))},MWn.xc=function(n){var t;return(t=BB(UK(this.c,n),19))?this.nd(t.a):null},MWn.dc=function(){return this.c.b.c.dc()},MWn.ec=function(){return bz(this.c)},MWn.zc=function(n,t){var e;if(!(e=BB(UK(this.c,n),19)))throw Hp(new _y(this.md()+" "+n+" not in "+bz(this.c)));return this.od(e.a,t)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.b.c.gc()},vX(XWn,"ArrayTable/ArrayMap",828),wAn(1923,1,{},Uf),MWn.ld=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),wAn(1921,345,aVn,sT),MWn.cd=function(){return YL(this.a,this.b)},MWn.dd=function(){return this.a.nd(this.b)},MWn.ed=function(n){return this.a.od(this.b,n)},MWn.b=0,vX(XWn,"ArrayTable/ArrayMap/1",1921),wAn(1922,386,WWn,zL),MWn.Xb=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/2",1922),wAn(1920,828,JWn,cU),MWn.md=function(){return"Column"},MWn.nd=function(n){return U6(this.b,this.a,n)},MWn.od=function(n,t){return Sun(this.b,this.a,n,t)},MWn.a=0,vX(XWn,"ArrayTable/Row",1920),wAn(829,828,JWn,UL),MWn.nd=function(n){return new cU(this.a,n)},MWn.zc=function(n,t){return BB(t,83),gk()},MWn.od=function(n,t){return BB(t,83),pk()},MWn.md=function(){return"Row"},vX(XWn,"ArrayTable/RowMap",829),wAn(1120,1,fVn,hT),MWn.qd=function(){return-262&this.a.qd()},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.Nb(new cT(n,this.b))},MWn.sd=function(n){return this.a.sd(new rT(n,this.b))},vX(XWn,"CollectSpliterators/1",1120),wAn(1121,1,lVn,rT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$0$Type",1121),wAn(1122,1,lVn,cT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$1$Type",1122),wAn(1123,1,fVn,q2),MWn.qd=function(){return this.a},MWn.rd=function(){return this.d&&(this.b=T$(this.b,this.d.rd())),T$(this.b,0)},MWn.Nb=function(n){this.d&&(this.d.Nb(n),this.d=null),this.c.Nb(new iT(this.e,n)),this.b=0},MWn.sd=function(n){for(;;){if(this.d&&this.d.sd(n))return JI(this.b,bVn)&&(this.b=ibn(this.b,1)),!0;if(this.d=null,!this.c.sd(new aT(this,this.e)))return!1}},MWn.a=0,MWn.b=0,vX(XWn,"CollectSpliterators/1FlatMapSpliterator",1123),wAn(1124,1,lVn,aT),MWn.td=function(n){dK(this.a,this.b,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),wAn(1125,1,lVn,iT),MWn.td=function(n){oL(this.b,this.a,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),wAn(1117,1,fVn,wK),MWn.qd=function(){return 16464|this.b},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.xe(new oT(n,this.c))},MWn.sd=function(n){return this.a.ye(new uT(n,this.c))},MWn.b=0,vX(XWn,"CollectSpliterators/1WithCharacteristics",1117),wAn(1118,1,wVn,uT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),wAn(1119,1,wVn,oT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),wAn(245,1,dVn),MWn.wd=function(n){return this.vd(BB(n,245))},MWn.vd=function(n){var t;return n==(ty(),_nt)?1:n==(ey(),Knt)?-1:(nq(),0!=(t=Ncn(this.a,n.a))?t:cL(this,519)==cL(n,519)?0:cL(this,519)?1:-1)},MWn.zd=function(){return this.a},MWn.Fb=function(n){return xdn(this,n)},vX(XWn,"Cut",245),wAn(1761,245,dVn,Nk),MWn.vd=function(n){return n==this?0:1},MWn.xd=function(n){throw Hp(new hv)},MWn.yd=function(n){n.a+="+\u221e)"},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!1},MWn.Ib=function(){return"+\u221e"},vX(XWn,"Cut/AboveAll",1761),wAn(519,245,{245:1,519:1,3:1,35:1},iN),MWn.xd=function(n){uO((n.a+="(",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),93)},MWn.Hb=function(){return~nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<0},MWn.Ib=function(){return"/"+this.a+"\\"},vX(XWn,"Cut/AboveValue",519),wAn(1760,245,dVn,xk),MWn.vd=function(n){return n==this?0:-1},MWn.xd=function(n){n.a+="(-\u221e"},MWn.yd=function(n){throw Hp(new hv)},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!0},MWn.Ib=function(){return"-\u221e"},vX(XWn,"Cut/BelowAll",1760),wAn(1762,245,dVn,rN),MWn.xd=function(n){uO((n.a+="[",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),41)},MWn.Hb=function(){return nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<=0},MWn.Ib=function(){return"\\"+this.a+"/"},vX(XWn,"Cut/BelowValue",1762),wAn(537,1,pVn),MWn.Jc=function(n){e5(this,n)},MWn.Ib=function(){return Hln(BB(WQ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},vX(XWn,"FluentIterable",537),wAn(433,537,pVn,OO),MWn.Kc=function(){return new oz(ZL(this.a.Kc(),new h))},vX(XWn,"FluentIterable/2",433),wAn(1046,537,pVn,AO),MWn.Kc=function(){return NU(this)},vX(XWn,"FluentIterable/3",1046),wAn(708,386,WWn,WL),MWn.Xb=function(n){return this.a[n].Kc()},vX(XWn,"FluentIterable/3/1",708),wAn(1972,1,{}),MWn.Ib=function(){return Bbn(this.Bd().b)},vX(XWn,"ForwardingObject",1972),wAn(1973,1972,vVn),MWn.Bd=function(){return this.Cd()},MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return this.Cd(),oE()},MWn.Gc=function(n){return this.Cd(),sE()},MWn.$b=function(){this.Cd(),hE()},MWn.Hc=function(n){return this.Cd().Hc(n)},MWn.Ic=function(n){return this.Cd().Ic(n)},MWn.dc=function(){return this.Cd().b.dc()},MWn.Kc=function(){return this.Cd().Kc()},MWn.Mc=function(n){return this.Cd(),fE()},MWn.gc=function(){return this.Cd().b.gc()},MWn.Pc=function(){return this.Cd().Pc()},MWn.Qc=function(n){return this.Cd().Qc(n)},vX(XWn,"ForwardingCollection",1973),wAn(1980,28,mVn),MWn.Kc=function(){return this.Ed()},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Hc=function(n){return null!=n&&ywn(this,n,!1)},MWn.Dd=function(){switch(this.gc()){case 0:return WX(),WX(),Fnt;case 1:return WX(),new Pq(yX(this.Ed().Pb()));default:return new aU(this,this.Pc())}},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"ImmutableCollection",1980),wAn(712,1980,mVn,rv),MWn.Kc=function(){return L9(this.a.Kc())},MWn.Hc=function(n){return null!=n&&this.a.Hc(n)},MWn.Ic=function(n){return this.a.Ic(n)},MWn.dc=function(){return this.a.dc()},MWn.Ed=function(){return L9(this.a.Kc())},MWn.gc=function(){return this.a.gc()},MWn.Pc=function(){return this.a.Pc()},MWn.Qc=function(n){return this.a.Qc(n)},MWn.Ib=function(){return Bbn(this.a)},vX(XWn,"ForwardingImmutableCollection",712),wAn(152,1980,yVn),MWn.Kc=function(){return this.Ed()},MWn.Yc=function(){return this.Fd(0)},MWn.Zc=function(n){return this.Fd(n)},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.bd=function(n,t){return this.Gd(n,t)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return qAn(this,n)},MWn.Hb=function(){return Ian(this)},MWn.Xc=function(n){return null==n?-1:Tmn(this,n)},MWn.Ed=function(){return this.Fd(0)},MWn.Fd=function(n){return ix(this,n)},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.Gd=function(n,t){return sfn(new s1(new IT(this),n,t))},vX(XWn,"ImmutableList",152),wAn(2006,152,yVn),MWn.Kc=function(){return L9(this.Hd().Kc())},MWn.bd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Hc=function(n){return null!=n&&this.Hd().Hc(n)},MWn.Ic=function(n){return this.Hd().Ic(n)},MWn.Fb=function(n){return Nfn(this.Hd(),n)},MWn.Xb=function(n){return WI(this,n)},MWn.Hb=function(){return nsn(this.Hd())},MWn.Xc=function(n){return this.Hd().Xc(n)},MWn.dc=function(){return this.Hd().dc()},MWn.Ed=function(){return L9(this.Hd().Kc())},MWn.gc=function(){return this.Hd().gc()},MWn.Gd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Pc=function(){return this.Hd().Qc(x8(Ant,HWn,1,this.Hd().gc(),5,1))},MWn.Qc=function(n){return this.Hd().Qc(n)},MWn.Ib=function(){return Bbn(this.Hd())},vX(XWn,"ForwardingImmutableList",2006),wAn(714,1,jVn),MWn.vc=function(){return lz(this)},MWn.wc=function(n){nan(this,n)},MWn.ec=function(){return bz(this)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.Cc=function(){return this.Ld()},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return null!=this.xc(n)},MWn.uc=function(n){return this.Ld().Hc(n)},MWn.Jd=function(){return new cv(this)},MWn.Kd=function(){return new av(this)},MWn.Fb=function(n){return $sn(this,n)},MWn.Hb=function(){return lz(this).Hb()},MWn.dc=function(){return 0==this.gc()},MWn.zc=function(n,t){return vk()},MWn.Bc=function(n){throw Hp(new pv)},MWn.Ib=function(){return fSn(this)},MWn.Ld=function(){return this.e?this.e:this.e=this.Kd()},MWn.c=null,MWn.d=null,MWn.e=null,vX(XWn,"ImmutableMap",714),wAn(715,714,jVn),MWn._b=function(n){return Yj(this,n)},MWn.uc=function(n){return _T(this.b,n)},MWn.Id=function(){return hfn(new el(this))},MWn.Jd=function(){return hfn(iV(this.b))},MWn.Kd=function(){return s_(),new rv(tV(this.b))},MWn.Fb=function(n){return BT(this.b,n)},MWn.xc=function(n){return UK(this,n)},MWn.Hb=function(){return nsn(this.b.c)},MWn.dc=function(){return this.b.c.dc()},MWn.gc=function(){return this.b.c.gc()},MWn.Ib=function(){return Bbn(this.b.c)},vX(XWn,"ForwardingImmutableMap",715),wAn(1974,1973,EVn),MWn.Bd=function(){return this.Md()},MWn.Cd=function(){return this.Md()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return n===this||this.Md().Fb(n)},MWn.Hb=function(){return this.Md().Hb()},vX(XWn,"ForwardingSet",1974),wAn(1069,1974,EVn,el),MWn.Bd=function(){return eV(this.a.b)},MWn.Cd=function(){return eV(this.a.b)},MWn.Hc=function(n){if(cL(n,42)&&null==BB(n,42).cd())return!1;try{return KT(eV(this.a.b),n)}catch(t){if(cL(t=lun(t),205))return!1;throw Hp(t)}},MWn.Md=function(){return eV(this.a.b)},MWn.Qc=function(n){var t;return t=IY(eV(this.a.b),n),eV(this.a.b).b.gc()<t.length&&$X(t,eV(this.a.b).b.gc(),null),t},vX(XWn,"ForwardingImmutableMap/1",1069),wAn(1981,1980,TVn),MWn.Kc=function(){return this.Ed()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"ImmutableSet",1981),wAn(703,1981,TVn),MWn.Kc=function(){return L9(new qb(this.a.b.Kc()))},MWn.Hc=function(n){return null!=n&&xT(this.a,n)},MWn.Ic=function(n){return DT(this.a,n)},MWn.Hb=function(){return nsn(this.a.b)},MWn.dc=function(){return this.a.b.dc()},MWn.Ed=function(){return L9(new qb(this.a.b.Kc()))},MWn.gc=function(){return this.a.b.gc()},MWn.Pc=function(){return this.a.b.Pc()},MWn.Qc=function(n){return RT(this.a,n)},MWn.Ib=function(){return Bbn(this.a.b)},vX(XWn,"ForwardingImmutableSet",703),wAn(1975,1974,MVn),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Nc=function(){return new wS(this)},vX(XWn,"ForwardingSortedSet",1975),wAn(533,1979,jVn,Avn),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new p$(this.d||(this.d=new il(this)))},MWn.$b=function(){d5(this)},MWn._b=function(n){return!!Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))},MWn.uc=function(n){return Ltn(this,n)},MWn.kc=function(){return new VL(this,this)},MWn.wc=function(n){BJ(this,n)},MWn.xc=function(n){return sen(this,n)},MWn.ec=function(){return new v$(this)},MWn.zc=function(n,t){return wKn(this,n,t)},MWn.Bc=function(n){var t;return(t=Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this,t),t.e=null,t.c=null,t.i):null},MWn.gc=function(){return this.i},MWn.pd=function(){return new p$(this.d||(this.d=new il(this)))},MWn.f=0,MWn.g=0,MWn.i=0,vX(XWn,"HashBiMap",533),wAn(534,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return l3(this)},MWn.Pb=function(){var n;if(!l3(this))throw Hp(new yv);return n=this.c,this.c=n.c,this.f=n,--this.d,this.Nd(n)},MWn.Qb=function(){if(this.e.g!=this.b)throw Hp(new vv);han(!!this.f),LLn(this.e,this.f),this.b=this.e.g,this.f=null},MWn.b=0,MWn.d=0,MWn.f=null,vX(XWn,"HashBiMap/Itr",534),wAn(1011,534,QWn,VL),MWn.Nd=function(n){return new bT(this,n)},vX(XWn,"HashBiMap/1",1011),wAn(1012,345,aVn,bT),MWn.cd=function(){return this.a.g},MWn.dd=function(){return this.a.i},MWn.ed=function(n){var t,e,i;return e=this.a.i,(i=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.f&&(GI(n)===GI(e)||null!=n&&Nfn(n,e))?n:(yun(!Zrn(this.b.a,n,i),n),LLn(this.b.a,this.a),t=new qW(this.a.g,this.a.a,n,i),YCn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},vX(XWn,"HashBiMap/1/MapEntry",1012),wAn(238,345,{345:1,238:1,3:1,42:1},vT),MWn.cd=function(){return this.g},MWn.dd=function(){return this.i},MWn.ed=function(n){throw Hp(new pv)},vX(XWn,"ImmutableEntry",238),wAn(317,238,{345:1,317:1,238:1,3:1,42:1},qW),MWn.a=0,MWn.f=0;var qnt,Gnt=vX(XWn,"HashBiMap/BiEntry",317);wAn(610,1979,jVn,il),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new v$(this.a)},MWn.$b=function(){d5(this.a)},MWn._b=function(n){return Ltn(this.a,n)},MWn.kc=function(){return new QL(this,this.a)},MWn.wc=function(n){yX(n),BJ(this.a,new rl(n))},MWn.xc=function(n){return Uin(this,n)},MWn.ec=function(){return new p$(this)},MWn.zc=function(n,t){return C_n(this.a,n,t,!1)},MWn.Bc=function(n){var t;return(t=Zrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this.a,t),t.e=null,t.c=null,t.g):null},MWn.gc=function(){return this.a.i},MWn.pd=function(){return new v$(this.a)},vX(XWn,"HashBiMap/Inverse",610),wAn(1008,534,QWn,QL),MWn.Nd=function(n){return new wT(this,n)},vX(XWn,"HashBiMap/Inverse/1",1008),wAn(1009,345,aVn,wT),MWn.cd=function(){return this.a.i},MWn.dd=function(){return this.a.g},MWn.ed=function(n){var t,e,i;return i=this.a.g,(t=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.a&&(GI(n)===GI(i)||null!=n&&Nfn(n,i))?n:(yun(!Jrn(this.b.a.a,n,t),n),LLn(this.b.a.a,this.a),e=new qW(n,t,this.a.i,this.a.f),this.a=e,YCn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},vX(XWn,"HashBiMap/Inverse/1/InverseEntry",1009),wAn(611,532,tVn,p$),MWn.Kc=function(){return new uy(this.a.a)},MWn.Mc=function(n){var t;return!!(t=Zrn(this.a.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a.a,t),!0)},vX(XWn,"HashBiMap/Inverse/InverseKeySet",611),wAn(1007,534,QWn,uy),MWn.Nd=function(n){return n.i},vX(XWn,"HashBiMap/Inverse/InverseKeySet/1",1007),wAn(1010,1,{},rl),MWn.Od=function(n,t){ev(this.a,n,t)},vX(XWn,"HashBiMap/Inverse/lambda$0$Type",1010),wAn(609,532,tVn,v$),MWn.Kc=function(){return new oy(this.a)},MWn.Mc=function(n){var t;return!!(t=Jrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a,t),t.e=null,t.c=null,!0)},vX(XWn,"HashBiMap/KeySet",609),wAn(1006,534,QWn,oy),MWn.Nd=function(n){return n.g},vX(XWn,"HashBiMap/KeySet/1",1006),wAn(1093,619,VWn),vX(XWn,"HashMultimapGwtSerializationDependencies",1093),wAn(265,1093,VWn,pJ),MWn.hc=function(){return new bE(etn(this.a))},MWn.gd=function(){return new bE(etn(this.a))},MWn.a=2,vX(XWn,"HashMultimap",265),wAn(1999,152,yVn),MWn.Hc=function(n){return this.Pd().Hc(n)},MWn.dc=function(){return this.Pd().dc()},MWn.gc=function(){return this.Pd().gc()},vX(XWn,"ImmutableAsList",1999),wAn(1931,715,jVn),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"ImmutableBiMap",1931),wAn(1977,1,{}),vX(XWn,"ImmutableCollection/Builder",1977),wAn(1022,703,TVn,sy),vX(XWn,"ImmutableEnumSet",1022),wAn(969,386,WWn,bK),MWn.Xb=function(n){return this.a.Xb(n)},vX(XWn,"ImmutableList/1",969),wAn(968,1977,{},sR),vX(XWn,"ImmutableList/Builder",968),wAn(614,198,UWn,cl),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},vX(XWn,"ImmutableMap/1",614),wAn(1041,1,{},o),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"ImmutableMap/2methodref$getKey$Type",1041),wAn(1040,1,{},hR),vX(XWn,"ImmutableMap/Builder",1040),wAn(2e3,1981,TVn),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Dd=function(){return new uv(this)},MWn.Jc=function(n){var t,e;for(yX(n),e=this.gc(),t=0;t<e;t++)n.td(BB(wz(lz(this.a)).Xb(t),42).cd())},MWn.Ed=function(){var n;return(n=this.c,n||(this.c=new uv(this))).Ed()},MWn.Nc=function(){return yq(this.gc(),1296,new ul(this))},vX(XWn,"IndexedImmutableSet",2e3),wAn(1180,2e3,TVn,cv),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Hc=function(n){return this.a._b(n)},MWn.Jc=function(n){yX(n),nan(this.a,new al(n))},MWn.Ed=function(){return new cl(lz(this.a).Ed())},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new o)},vX(XWn,"ImmutableMapKeySet",1180),wAn(1181,1,{},al),MWn.Od=function(n,t){s_(),this.a.td(n)},vX(XWn,"ImmutableMapKeySet/lambda$0$Type",1181),wAn(1178,1980,mVn,av),MWn.Kc=function(){return new KH(this)},MWn.Hc=function(n){return null!=n&&Pjn(new KH(this),n)},MWn.Ed=function(){return new KH(this)},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new s)},vX(XWn,"ImmutableMapValues",1178),wAn(1179,1,{},s),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"ImmutableMapValues/0methodref$getValue$Type",1179),wAn(626,198,UWn,KH),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},vX(XWn,"ImmutableMapValues/1",626),wAn(1182,1,{},ul),MWn.ld=function(n){return HU(this.a,n)},vX(XWn,"IndexedImmutableSet/0methodref$get$Type",1182),wAn(752,1999,yVn,uv),MWn.Pd=function(){return this.a},MWn.Xb=function(n){return HU(this.a,n)},MWn.gc=function(){return this.a.a.gc()},vX(XWn,"IndexedImmutableSet/1",752),wAn(44,1,{},h),MWn.Kb=function(n){return BB(n,20).Kc()},MWn.Fb=function(n){return this===n},vX(XWn,"Iterables/10",44),wAn(1042,537,pVn,_H),MWn.Jc=function(n){yX(n),this.b.Jc(new dT(this.a,n))},MWn.Kc=function(){return qA(this)},vX(XWn,"Iterables/4",1042),wAn(1043,1,lVn,dT),MWn.td=function(n){TS(this.b,this.a,n)},vX(XWn,"Iterables/4/lambda$0$Type",1043),wAn(1044,537,pVn,FH),MWn.Jc=function(n){yX(n),e5(this.a,new fT(n,this.b))},MWn.Kc=function(){return ZL(new AL(this.a),this.b)},vX(XWn,"Iterables/5",1044),wAn(1045,1,lVn,fT),MWn.td=function(n){this.a.td(yA(n))},vX(XWn,"Iterables/5/lambda$0$Type",1045),wAn(1071,198,UWn,ol),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return this.a.Pb()},vX(XWn,"Iterators/1",1071),wAn(1072,699,UWn,lT),MWn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},vX(XWn,"Iterators/5",1072),wAn(487,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.Qd(this.b.Pb())},MWn.Qb=function(){this.b.Qb()},vX(XWn,"TransformedIterator",487),wAn(1073,487,QWn,nN),MWn.Qd=function(n){return this.a.Kb(n)},vX(XWn,"Iterators/6",1073),wAn(717,198,UWn,sl),MWn.Ob=function(){return!this.a},MWn.Pb=function(){if(this.a)throw Hp(new yv);return this.a=!0,this.b},MWn.a=!1,vX(XWn,"Iterators/9",717),wAn(1070,386,WWn,fG),MWn.Xb=function(n){return this.a[this.b+n]},MWn.b=0,vX(XWn,"Iterators/ArrayItr",1070),wAn(39,1,{39:1,47:1},oz),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return dAn(this)},MWn.Pb=function(){return U5(this)},MWn.Qb=function(){han(!!this.c),this.c.Qb(),this.c=null},vX(XWn,"Iterators/ConcatenatedIterator",39),wAn(22,1,{3:1,35:1,22:1}),MWn.wd=function(n){return Py(this,BB(n,22))},MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return dx(this)},MWn.g=0;var znt,Unt=vX(RWn,"Enum",22);wAn(538,22,{538:1,3:1,35:1,22:1,47:1},cN),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Qb=function(){han(!1)};var Xnt,Wnt=Ben(XWn,"Iterators/EmptyModifiableIterator",538,Unt,oX,rx);wAn(1834,619,VWn),vX(XWn,"LinkedHashMultimapGwtSerializationDependencies",1834),wAn(1835,1834,VWn,Thn),MWn.hc=function(){return new LN(etn(this.b))},MWn.$b=function(){win(this),iv(this.a,this.a)},MWn.gd=function(){return new LN(etn(this.b))},MWn.ic=function(n){return new Tsn(this,n,this.b)},MWn.kc=function(){return new tN(this)},MWn.lc=function(){return new w1(BB(this.g||(this.g=new qm(this)),21),17)},MWn.ec=function(){return this.i||(this.i=new HL(this,this.c))},MWn.nc=function(){return new by(new tN(this))},MWn.oc=function(){return RB(new w1(BB(this.g||(this.g=new qm(this)),21),17),new f)},MWn.b=2,vX(XWn,"LinkedHashMultimap",1835),wAn(1838,1,{},f),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"LinkedHashMultimap/0methodref$getValue$Type",1838),wAn(824,1,QWn,tN),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return vtn(this)},MWn.Ob=function(){return this.a!=this.b.a},MWn.Qb=function(){han(!!this.c),q0(this.b,this.c.g,this.c.i),this.c=null},vX(XWn,"LinkedHashMultimap/1",824),wAn(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},HW),MWn.Rd=function(){return this.f},MWn.Sd=function(n){this.c=n},MWn.Td=function(n){this.f=n},MWn.d=0;var Vnt,Qnt=vX(XWn,"LinkedHashMultimap/ValueEntry",330);wAn(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Tsn),MWn.Fc=function(n){var t,e,i,r,c;for(t=(c=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&wW(e.i,n))return!1;return i=new HW(this.c,n,c,r),kk(this.d,i),i.f=this,this.d=i,iv(this.g.a.b,i),iv(i,this.g.a),this.b[t]=i,++this.f,++this.e,yjn(this),!0},MWn.$b=function(){var n,t;for(yS(this.b,null),this.f=0,n=this.a;n!=this;n=n.Rd())iv((t=BB(n,330)).b,t.e);this.a=this,this.d=this,++this.e},MWn.Hc=function(n){var t,e;for(e=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&wW(t.i,n))return!0;return!1},MWn.Jc=function(n){var t;for(yX(n),t=this.a;t!=this;t=t.Rd())n.td(BB(t,330).i)},MWn.Rd=function(){return this.a},MWn.Kc=function(){return new sW(this)},MWn.Mc=function(n){return kAn(this,n)},MWn.Sd=function(n){this.d=n},MWn.Td=function(n){this.a=n},MWn.gc=function(){return this.f},MWn.e=0,MWn.f=0,vX(XWn,"LinkedHashMultimap/ValueSet",1836),wAn(1837,1,QWn,sW),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return wG(this),this.b!=this.c},MWn.Pb=function(){var n,t;if(wG(this),this.b==this.c)throw Hp(new yv);return t=(n=BB(this.b,330)).i,this.d=n,this.b=n.f,t},MWn.Qb=function(){wG(this),han(!!this.d),kAn(this.c,this.d.i),this.a=this.c.e,this.d=null},MWn.a=0,vX(XWn,"LinkedHashMultimap/ValueSet/1",1837),wAn(766,1986,VWn,PO),MWn.Zb=function(){return this.f||(this.f=new rS(this))},MWn.Fb=function(n){return jsn(this,n)},MWn.cc=function(n){return new mT(this,n)},MWn.fc=function(n){return J3(this,n)},MWn.$b=function(){cX(this)},MWn._b=function(n){return HT(this,n)},MWn.ac=function(){return new rS(this)},MWn.bc=function(){return new yl(this)},MWn.qc=function(n){return new mT(this,n)},MWn.dc=function(){return!this.a},MWn.rc=function(n){return J3(this,n)},MWn.gc=function(){return this.d},MWn.c=0,MWn.d=0,vX(XWn,"LinkedListMultimap",766),wAn(52,28,LVn),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new tk("Add not supported on this list"))},MWn.Fc=function(n){return this.Vc(this.gc(),n),!0},MWn.Wc=function(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.Vc(n++,i),e=!0;return e},MWn.$b=function(){this.Ud(0,this.gc())},MWn.Fb=function(n){return NAn(this,n)},MWn.Hb=function(){return Fon(this)},MWn.Xc=function(n){return bin(this,n)},MWn.Kc=function(){return new Sb(this)},MWn.Yc=function(){return this.Zc(0)},MWn.Zc=function(n){return new M2(this,n)},MWn.$c=function(n){throw Hp(new tk("Remove not supported on this list"))},MWn.Ud=function(n,t){var e,i;for(i=this.Zc(n),e=n;e<t;++e)i.Pb(),i.Qb()},MWn._c=function(n,t){throw Hp(new tk("Set not supported on this list"))},MWn.bd=function(n,t){return new s1(this,n,t)},MWn.j=0,vX(YWn,"AbstractList",52),wAn(1964,52,LVn),MWn.Vc=function(n,t){Kx(this,n,t)},MWn.Wc=function(n,t){return Asn(this,n,t)},MWn.Xb=function(n){return Dpn(this,n)},MWn.Kc=function(){return this.Zc(0)},MWn.$c=function(n){return tkn(this,n)},MWn._c=function(n,t){var e,i;e=this.Zc(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't set element "+n)):Hp(r)}},vX(YWn,"AbstractSequentialList",1964),wAn(636,1964,LVn,mT),MWn.Zc=function(n){return vN(this,n)},MWn.gc=function(){var n;return(n=BB(RX(this.a.b,this.b),283))?n.a:0},vX(XWn,"LinkedListMultimap/1",636),wAn(1297,1970,tVn,yl),MWn.Hc=function(n){return HT(this.a,n)},MWn.Kc=function(){return new vrn(this.a)},MWn.Mc=function(n){return!J3(this.a,n).a.dc()},MWn.gc=function(){return NT(this.a.b)},vX(XWn,"LinkedListMultimap/1KeySetImpl",1297),wAn(1296,1,QWn,vrn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return bG(this),!!this.c},MWn.Pb=function(){bG(this),oN(this.c),this.a=this.c,TU(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!TU(this.d,this.c.a));return this.a.a},MWn.Qb=function(){bG(this),han(!!this.a),Cq(new C7(this.e,this.a.a)),this.a=null,this.b=this.e.c},MWn.b=0,vX(XWn,"LinkedListMultimap/DistinctKeyIterator",1296),wAn(283,1,{283:1},sY),MWn.a=0,vX(XWn,"LinkedListMultimap/KeyList",283),wAn(1295,345,aVn,yT),MWn.cd=function(){return this.a},MWn.dd=function(){return this.f},MWn.ed=function(n){var t;return t=this.f,this.f=n,t},vX(XWn,"LinkedListMultimap/Node",1295),wAn(560,1,cVn,C7,KPn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.e=yKn(this.f,this.b,n,this.c),++this.d,this.a=null},MWn.Ob=function(){return!!this.c},MWn.Sb=function(){return!!this.e},MWn.Pb=function(){return EZ(this)},MWn.Tb=function(){return this.d},MWn.Ub=function(){return TZ(this)},MWn.Vb=function(){return this.d-1},MWn.Qb=function(){han(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,ZCn(this.f,this.a),this.a=null},MWn.Wb=function(n){uN(!!this.a),this.a.f=n},MWn.d=0,vX(XWn,"LinkedListMultimap/ValueForKeyIterator",560),wAn(1018,52,LVn),MWn.Vc=function(n,t){this.a.Vc(n,t)},MWn.Wc=function(n,t){return this.a.Wc(n,t)},MWn.Hc=function(n){return this.a.Hc(n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.$c=function(n){return this.a.$c(n)},MWn._c=function(n,t){return this.a._c(n,t)},MWn.gc=function(){return this.a.gc()},vX(XWn,"Lists/AbstractListWrapper",1018),wAn(1019,1018,xVn),vX(XWn,"Lists/RandomAccessListWrapper",1019),wAn(1021,1019,xVn,IT),MWn.Zc=function(n){return this.a.Zc(n)},vX(XWn,"Lists/1",1021),wAn(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},CT),MWn.Vc=function(n,t){this.a.Vc(pU(this,n),t)},MWn.$b=function(){this.a.$b()},MWn.Xb=function(n){return this.a.Xb(LX(this,n))},MWn.Kc=function(){return W1(this,0)},MWn.Zc=function(n){return W1(this,n)},MWn.$c=function(n){return this.a.$c(LX(this,n))},MWn.Ud=function(n,t){(d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))).$b()},MWn._c=function(n,t){return this.a._c(LX(this,n),t)},MWn.gc=function(){return this.a.gc()},MWn.bd=function(n,t){return d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))},vX(XWn,"Lists/ReverseList",131),wAn(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},fy),vX(XWn,"Lists/RandomAccessReverseList",280),wAn(1020,1,cVn,kT),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},MWn.Ob=function(){return this.c.Sb()},MWn.Sb=function(){return this.c.Ob()},MWn.Pb=function(){return w5(this)},MWn.Tb=function(){return pU(this.b,this.c.Tb())},MWn.Ub=function(){if(!this.c.Ob())throw Hp(new yv);return this.a=!0,this.c.Pb()},MWn.Vb=function(){return pU(this.b,this.c.Tb())-1},MWn.Qb=function(){han(this.a),this.c.Qb(),this.a=!1},MWn.Wb=function(n){uN(this.a),this.c.Wb(n)},MWn.a=!1,vX(XWn,"Lists/ReverseList/1",1020),wAn(432,487,QWn,ly),MWn.Qd=function(n){return cS(n)},vX(XWn,"Maps/1",432),wAn(698,487,QWn,by),MWn.Qd=function(n){return BB(n,42).dd()},vX(XWn,"Maps/2",698),wAn(962,487,QWn,pN),MWn.Qd=function(n){return new vT(n,_O(this.a,n))},vX(XWn,"Maps/3",962),wAn(959,1971,tVn,ml),MWn.Jc=function(n){xv(this.a,n)},MWn.Kc=function(){return this.a.kc()},MWn.Rc=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"Maps/IteratorBasedAbstractMap/1",959),wAn(960,1,{},vl),MWn.Od=function(n,t){this.a.td(n)},vX(XWn,"Maps/KeySet/lambda$0$Type",960),wAn(958,28,ZWn,PT),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Jc=function(n){yX(n),this.a.wc(new ll(n))},MWn.dc=function(){return this.a.dc()},MWn.Kc=function(){return new by(this.a.vc().Kc())},MWn.Mc=function(n){var t,e;try{return ywn(this,n,!0)}catch(i){if(cL(i=lun(i),41)){for(e=this.a.vc().Kc();e.Ob();)if(wW(n,(t=BB(e.Pb(),42)).dd()))return this.a.Bc(t.cd()),!0;return!1}throw Hp(i)}},MWn.gc=function(){return this.a.gc()},vX(XWn,"Maps/Values",958),wAn(961,1,{},ll),MWn.Od=function(n,t){this.a.td(t)},vX(XWn,"Maps/Values/lambda$0$Type",961),wAn(736,1987,JWn,rS),MWn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},MWn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},MWn.$b=function(){this.a.$b()},MWn._b=function(n){return this.a._b(n)},MWn.Ec=function(){return new fl(this)},MWn.Dc=function(){return this.Ec()},MWn.dc=function(){return this.a.dc()},MWn.ec=function(){return this.a.ec()},MWn.gc=function(){return this.a.ec().gc()},vX(XWn,"Multimaps/AsMap",736),wAn(1104,1971,tVn,fl),MWn.Kc=function(){return nL(this.a.a.ec(),new bl(this))},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!idn(this,n)&&(t=BB(n,42),jk(this.a,t.cd()),!0)},vX(XWn,"Multimaps/AsMap/EntrySet",1104),wAn(1108,1,{},bl),MWn.Kb=function(n){return _O(this,n)},MWn.Fb=function(n){return this===n},vX(XWn,"Multimaps/AsMap/EntrySet/1",1108),wAn(543,1989,{543:1,835:1,20:1,28:1,14:1},wl),MWn.$b=function(){win(this.a)},MWn.Hc=function(n){return Wj(this.a,n)},MWn.Jc=function(n){yX(n),e5(MX(this.a),new gl(n))},MWn.Kc=function(){return new ly(MX(this.a).a.kc())},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return RB(MX(this.a).Nc(),new l)},vX(XWn,"Multimaps/Keys",543),wAn(1106,1,{},l),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"Multimaps/Keys/0methodref$getKey$Type",1106),wAn(1105,487,QWn,wy),MWn.Qd=function(n){return new dl(BB(n,42))},vX(XWn,"Multimaps/Keys/1",1105),wAn(1990,1,{416:1}),MWn.Fb=function(n){var t;return!!cL(n,492)&&(t=BB(n,416),BB(this.a.dd(),14).gc()==BB(t.a.dd(),14).gc()&&wW(this.a.cd(),t.a.cd()))},MWn.Hb=function(){var n;return(null==(n=this.a.cd())?0:nsn(n))^BB(this.a.dd(),14).gc()},MWn.Ib=function(){var n,t;return t=kN(this.a.cd()),1==(n=BB(this.a.dd(),14).gc())?t:t+" x "+n},vX(XWn,"Multisets/AbstractEntry",1990),wAn(492,1990,{492:1,416:1},dl),vX(XWn,"Multimaps/Keys/1/1",492),wAn(1107,1,lVn,gl),MWn.td=function(n){this.a.td(BB(n,42).cd())},vX(XWn,"Multimaps/Keys/lambda$1$Type",1107),wAn(1110,1,lVn,b),MWn.td=function(n){Iq(BB(n,416))},vX(XWn,"Multiset/lambda$0$Type",1110),wAn(737,1,lVn,pl),MWn.td=function(n){Itn(this.a,BB(n,416))},vX(XWn,"Multiset/lambda$1$Type",737),wAn(1111,1,{},m),vX(XWn,"Multisets/0methodref$add$Type",1111),wAn(738,1,{},y),MWn.Kb=function(n){return s3(BB(n,416))},vX(XWn,"Multisets/lambda$3$Type",738),wAn(2008,1,KWn),vX(XWn,"RangeGwtSerializationDependencies",2008),wAn(514,2008,{169:1,514:1,3:1,45:1},svn),MWn.Lb=function(n){return Mz(this,BB(n,35))},MWn.Mb=function(n){return Mz(this,BB(n,35))},MWn.Fb=function(n){var t;return!!cL(n,514)&&(t=BB(n,514),xdn(this.a,t.a)&&xdn(this.b,t.b))},MWn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},MWn.Ib=function(){return B3(this.a,this.b)},vX(XWn,"Range",514),wAn(778,1999,yVn,aU),MWn.Zc=function(n){return ix(this.b,n)},MWn.Pd=function(){return this.a},MWn.Xb=function(n){return WI(this.b,n)},MWn.Fd=function(n){return ix(this.b,n)},vX(XWn,"RegularImmutableAsList",778),wAn(646,2006,yVn,SY),MWn.Hd=function(){return this.a},vX(XWn,"RegularImmutableList",646),wAn(616,715,jVn,hy),vX(XWn,"RegularImmutableMap",616),wAn(716,703,TVn,vS),vX(XWn,"RegularImmutableSet",716),wAn(1976,nVn,tVn),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"Sets/SetView",1976),wAn(963,1976,tVn,ET),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Hc=function(n){return CG(this.a,n)&&this.b.Hc(n)},MWn.Ic=function(n){return oun(this.a,n)&&this.b.Ic(n)},MWn.dc=function(){return Kpn(this.b,this.a)},MWn.Lc=function(){return AV(new Rq(null,new w1(this.a,1)),new jl(this.b))},MWn.gc=function(){return Can(this)},MWn.Oc=function(){return AV(new Rq(null,new w1(this.a,1)),new kl(this.b))},vX(XWn,"Sets/2",963),wAn(700,699,UWn,SV),MWn.Yb=function(){for(var n;k$(this.a);)if(n=u4(this.a),this.c.Hc(n))return n;return this.e=2,null},vX(XWn,"Sets/2/1",700),wAn(964,1,DVn,kl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/4methodref$contains$Type",964),wAn(965,1,DVn,jl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/5methodref$contains$Type",965),wAn(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},bJ),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Jc=function(n){this.a.Jc(n)},MWn.Lc=function(){return this.a.Lc()},MWn.Oc=function(){return this.a.Oc()},vX(XWn,"Sets/UnmodifiableNavigableSet",607),wAn(1932,1931,jVn,GW),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"SingletonImmutableBiMap",1932),wAn(647,2006,yVn,Pq),MWn.Hd=function(){return this.a},vX(XWn,"SingletonImmutableList",647),wAn(350,1981,TVn,yk),MWn.Kc=function(){return new sl(this.a)},MWn.Hc=function(n){return Nfn(this.a,n)},MWn.Ed=function(){return new sl(this.a)},MWn.gc=function(){return 1},vX(XWn,"SingletonImmutableSet",350),wAn(1115,1,{},k),MWn.Kb=function(n){return BB(n,164)},vX(XWn,"Streams/lambda$0$Type",1115),wAn(1116,1,RVn,El),MWn.Vd=function(){B5(this.a)},vX(XWn,"Streams/lambda$1$Type",1116),wAn(1659,1658,VWn,pY),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.ac=function(){return cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)},MWn.ic=function(n){return null==n&&this.a.ue(n,n),new dE(this.b)},vX(XWn,"TreeMultimap",1659),wAn(78,1,{3:1,78:1}),MWn.Wd=function(n){return new Error(n)},MWn.Xd=function(){return this.e},MWn.Yd=function(){return _wn($V(LU((null==this.k&&(this.k=x8(Jnt,sVn,78,0,0,1)),this.k)),new x),new on)},MWn.Zd=function(){return this.f},MWn.$d=function(){return this.g},MWn._d=function(){yy(this,b2(this.Wd(CY(this,this.g)))),ov(this)},MWn.Ib=function(){return CY(this,this.$d())},MWn.e=FVn,MWn.i=!1,MWn.n=!0;var Ynt,Jnt=vX(RWn,"Throwable",78);wAn(102,78,{3:1,102:1,78:1}),vX(RWn,"Exception",102),wAn(60,102,BVn,sv,dy),vX(RWn,"RuntimeException",60),wAn(598,60,BVn),vX(RWn,"JsException",598),wAn(863,598,BVn),vX(HVn,"JavaScriptExceptionBase",863),wAn(477,863,{477:1,3:1,102:1,60:1,78:1},jhn),MWn.$d=function(){return pEn(this),this.c},MWn.ae=function(){return GI(this.b)===GI(Ynt)?null:this.b},vX(GVn,"JavaScriptException",477);var Znt,ntt=vX(GVn,"JavaScriptObject$",0);wAn(1948,1,{}),vX(GVn,"Scheduler",1948);var ttt,ett,itt,rtt,ctt=0,att=0,utt=-1;wAn(890,1948,{},j),vX(HVn,"SchedulerImpl",890),wAn(1960,1,{}),vX(HVn,"StackTraceCreator/Collector",1960),wAn(864,1960,{},E),MWn.be=function(n){var t={},e=[];n[UVn]=e;for(var i=arguments.callee.caller;i;){var r=(PY(),i.name||(i.name=Ven(i.toString())));e.push(r);var c,a,u=":"+r,o=t[u];if(o)for(c=0,a=o.length;c<a;c++)if(o[c]===i)return;(o||(t[u]=[])).push(i),i=i.caller}},MWn.ce=function(n){var t,e,i,r;for(PY(),e=(i=n&&n[UVn]?n[UVn]:[]).length,r=x8(Ftt,sVn,310,e,0,1),t=0;t<e;t++)r[t]=new PV(i[t],null,-1);return r},vX(HVn,"StackTraceCreator/CollectorLegacy",864),wAn(1961,1960,{}),MWn.be=function(n){},MWn.de=function(n,t,e,i){return new PV(t,n+"@"+i,e<0?-1:e)},MWn.ce=function(n){var t,e,i,r,c,a;if(r=lyn(n),c=x8(Ftt,sVn,310,0,0,1),t=0,0==(i=r.length))return c;for(mK((a=Oqn(this,r[0])).d,zVn)||(c[t++]=a),e=1;e<i;e++)c[t++]=Oqn(this,r[e]);return c},vX(HVn,"StackTraceCreator/CollectorModern",1961),wAn(865,1961,{},d),MWn.de=function(n,t,e,i){return new PV(t,n,-1)},vX(HVn,"StackTraceCreator/CollectorModernNoSourceMap",865),wAn(1050,1,{}),vX(yQn,kQn,1050),wAn(615,1050,{615:1},zX),vX(jQn,kQn,615),wAn(2001,1,{}),vX(yQn,EQn,2001),wAn(2002,2001,{}),vX(jQn,EQn,2002),wAn(1090,1,{},g),vX(jQn,"LocaleInfo",1090),wAn(1918,1,{},p),MWn.a=0,vX(jQn,"TimeZone",1918),wAn(1258,2002,{},w),vX("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),wAn(434,1,{434:1},VB),MWn.a=!1,MWn.b=0,vX(yQn,"DateTimeFormat/PatternPart",434),wAn(199,1,TQn,AT,von,PD),MWn.wd=function(n){return J0(this,BB(n,199))},MWn.Fb=function(n){return cL(n,199)&&QI(fan(this.q.getTime()),fan(BB(n,199).q.getTime()))},MWn.Hb=function(){var n;return dG(r0(n=fan(this.q.getTime()),jz(n,32)))},MWn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=UO(e.Math.abs(i)%60),(pMn(),pet)[this.q.getDay()]+" "+vet[this.q.getMonth()]+" "+UO(this.q.getDate())+" "+UO(this.q.getHours())+":"+UO(this.q.getMinutes())+":"+UO(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var ott,stt,htt,ftt,ltt,btt,wtt,dtt,gtt,ptt,vtt,mtt=vX(YWn,"Date",199);wAn(1915,199,TQn,Ykn),MWn.a=!1,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=!1,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,MWn.o=0,MWn.p=0,vX("com.google.gwt.i18n.shared.impl","DateRecord",1915),wAn(1966,1,{}),MWn.fe=function(){return null},MWn.ge=function(){return null},MWn.he=function(){return null},MWn.ie=function(){return null},MWn.je=function(){return null},vX(MQn,"JSONValue",1966),wAn(216,1966,{216:1},Cl,Tl),MWn.Fb=function(n){return!!cL(n,216)&&v0(this.a,BB(n,216).a)},MWn.ee=function(){return qp},MWn.Hb=function(){return tY(this.a)},MWn.fe=function(){return this},MWn.Ib=function(){var n,t,e;for(e=new lN("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),uO(e,dnn(this,t));return e.a+="]",e.a},vX(MQn,"JSONArray",216),wAn(483,1966,{483:1},Ml),MWn.ee=function(){return Gp},MWn.ge=function(){return this},MWn.Ib=function(){return hN(),""+this.a},MWn.a=!1,vX(MQn,"JSONBoolean",483),wAn(985,60,BVn,gy),vX(MQn,"JSONException",985),wAn(1023,1966,{},v),MWn.ee=function(){return Vp},MWn.Ib=function(){return zWn},vX(MQn,"JSONNull",1023),wAn(258,1966,{258:1},Sl),MWn.Fb=function(n){return!!cL(n,258)&&this.a==BB(n,258).a},MWn.ee=function(){return zp},MWn.Hb=function(){return VO(this.a)},MWn.he=function(){return this},MWn.Ib=function(){return this.a+""},MWn.a=0,vX(MQn,"JSONNumber",258),wAn(183,1966,{183:1},py,Pl),MWn.Fb=function(n){return!!cL(n,183)&&v0(this.a,BB(n,183).a)},MWn.ee=function(){return Up},MWn.Hb=function(){return tY(this.a)},MWn.ie=function(){return this},MWn.Ib=function(){var n,t,e,i,r,c;for(c=new lN("{"),n=!0,i=0,r=(e=jrn(this,x8(Qtt,sVn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=FWn,oO(c,mOn(t)),c.a+=":",uO(c,zJ(this,t));return c.a+="}",c.a},vX(MQn,"JSONObject",183),wAn(596,nVn,tVn,TT),MWn.Hc=function(n){return XI(n)&&zk(this.a,SD(n))},MWn.Kc=function(){return new Sb(new Jy(this.b))},MWn.gc=function(){return this.b.length},vX(MQn,"JSONObject/1",596),wAn(204,1966,{204:1},GX),MWn.Fb=function(n){return!!cL(n,204)&&mK(this.a,BB(n,204).a)},MWn.ee=function(){return Xp},MWn.Hb=function(){return vvn(this.a)},MWn.je=function(){return this},MWn.Ib=function(){return mOn(this.a)},vX(MQn,"JSONString",204),wAn(1962,1,{525:1}),vX(LQn,"OutputStream",1962),wAn(1963,1962,{525:1}),vX(LQn,"FilterOutputStream",1963),wAn(866,1963,{525:1},A),vX(LQn,"PrintStream",866),wAn(418,1,{475:1}),MWn.Ib=function(){return this.a},vX(RWn,"AbstractStringBuilder",418),wAn(529,60,BVn,Oy),vX(RWn,"ArithmeticException",529),wAn(73,60,NQn,fv,Ay),vX(RWn,"IndexOutOfBoundsException",73),wAn(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},Sv,Tk),vX(RWn,"ArrayIndexOutOfBoundsException",320),wAn(528,60,BVn,lv,$y),vX(RWn,"ArrayStoreException",528),wAn(289,78,xQn,Ly),vX(RWn,"Error",289),wAn(194,289,xQn,hv,g5),vX(RWn,"AssertionError",194),CWn={3:1,476:1,35:1};var ytt,ktt=vX(RWn,"Boolean",476);wAn(236,1,{3:1,236:1}),vX(RWn,"Number",236),wAn(217,236,{3:1,217:1,35:1,236:1},$b),MWn.wd=function(n){return Fk(this,BB(n,217))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,217)&&BB(n,217).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var jtt,Ett,Ttt=vX(RWn,"Byte",217);wAn(172,1,{3:1,172:1,35:1},Lb),MWn.wd=function(n){return Bk(this,BB(n,172))},MWn.Fb=function(n){return cL(n,172)&&BB(n,172).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return String.fromCharCode(this.a)},MWn.a=0;var Mtt,Stt=vX(RWn,"Character",172);wAn(205,60,{3:1,205:1,102:1,60:1,78:1},bv,Ky),vX(RWn,"ClassCastException",205),IWn={3:1,35:1,333:1,236:1};var Ptt=vX(RWn,"Double",333);wAn(155,236,{3:1,35:1,155:1,236:1},Nb,Dv),MWn.wd=function(n){return BO(this,BB(n,155))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,155)&&vK(this.a,BB(n,155).a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ctt=vX(RWn,"Float",155);wAn(32,60,{3:1,102:1,32:1,60:1,78:1},wv,_y,Fsn),vX(RWn,"IllegalArgumentException",32),wAn(71,60,BVn,dv,Fy),vX(RWn,"IllegalStateException",71),wAn(19,236,{3:1,35:1,19:1,236:1},xb),MWn.wd=function(n){return HO(this,BB(n,19))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,19)&&BB(n,19).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Itt,Ott,Att=vX(RWn,"Integer",19);wAn(162,236,{3:1,35:1,162:1,236:1},Db),MWn.wd=function(n){return qO(this,BB(n,162))},MWn.ke=function(){return j2(this.a)},MWn.Fb=function(n){return cL(n,162)&&QI(BB(n,162).a,this.a)},MWn.Hb=function(){return dG(this.a)},MWn.Ib=function(){return""+vz(this.a)},MWn.a=0;var $tt,Ltt,Ntt,xtt,Dtt,Rtt=vX(RWn,"Long",162);wAn(2039,1,{}),wAn(1831,60,BVn,By),vX(RWn,"NegativeArraySizeException",1831),wAn(173,598,{3:1,102:1,173:1,60:1,78:1},gv,Hy),MWn.Wd=function(n){return new TypeError(n)},vX(RWn,"NullPointerException",173),wAn(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Mk),vX(RWn,"NumberFormatException",127),wAn(184,236,{3:1,35:1,236:1,184:1},Rb),MWn.wd=function(n){return Hk(this,BB(n,184))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,184)&&BB(n,184).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ktt,_tt=vX(RWn,"Short",184);wAn(310,1,{3:1,310:1},PV),MWn.Fb=function(n){var t;return!!cL(n,310)&&(t=BB(n,310),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[iln(this.c),this.a,this.d,this.b]))},MWn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},MWn.c=0;var Ftt=vX(RWn,"StackTraceElement",310);OWn={3:1,475:1,35:1,2:1};var Btt,Htt,qtt,Gtt,ztt,Utt,Xtt,Wtt,Vtt,Qtt=vX(RWn,qVn,2);wAn(107,418,{475:1},Sk,Pk,fN),vX(RWn,"StringBuffer",107),wAn(100,418,{475:1},Ck,Ik,lN),vX(RWn,"StringBuilder",100),wAn(687,73,NQn,Ok),vX(RWn,"StringIndexOutOfBoundsException",687),wAn(2043,1,{}),wAn(844,1,{},x),MWn.Kb=function(n){return BB(n,78).e},vX(RWn,"Throwable/lambda$0$Type",844),wAn(41,60,{3:1,102:1,60:1,78:1,41:1},pv,tk),vX(RWn,"UnsupportedOperationException",41),wAn(240,236,{3:1,35:1,236:1,240:1},knn,wE),MWn.wd=function(n){return J_n(this,BB(n,240))},MWn.ke=function(){return bSn(eqn(this))},MWn.Fb=function(n){var t;return this===n||!!cL(n,240)&&(t=BB(n,240),this.e==t.e&&0==J_n(this,t))},MWn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=fan(this.f),this.b=dG(e0(n,-1)),this.b=33*this.b+dG(e0(kz(n,32),-1)),this.b=17*this.b+CJ(this.e),this.b):(this.b=17*Khn(this.c)+CJ(this.e),this.b)},MWn.Ib=function(){return eqn(this)},MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0;var Ytt,Jtt,Ztt,net,tet,eet,iet=vX("java.math","BigDecimal",240);wAn(91,236,{3:1,35:1,236:1,91:1},Rpn,X6,lU,vEn,Cgn,$A),MWn.wd=function(n){return tgn(this,BB(n,91))},MWn.ke=function(){return bSn(qXn(this,0))},MWn.Fb=function(n){return swn(this,n)},MWn.Hb=function(){return Khn(this)},MWn.Ib=function(){return qXn(this,0)},MWn.b=-2,MWn.c=0,MWn.d=0,MWn.e=0;var ret,cet,aet,uet,oet=vX("java.math","BigInteger",91);wAn(488,1967,JWn),MWn.$b=function(){$U(this)},MWn._b=function(n){return hU(this,n)},MWn.uc=function(n){return Lsn(this,n,this.g)||Lsn(this,n,this.f)},MWn.vc=function(){return new Pb(this)},MWn.xc=function(n){return RX(this,n)},MWn.zc=function(n,t){return VW(this,n,t)},MWn.Bc=function(n){return v6(this,n)},MWn.gc=function(){return NT(this)},vX(YWn,"AbstractHashMap",488),wAn(261,nVn,tVn,Pb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return m2(this,n)},MWn.Kc=function(){return new usn(this.a)},MWn.Mc=function(n){var t;return!!m2(this,n)&&(t=BB(n,42).cd(),this.a.Bc(t),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractHashMap/EntrySet",261),wAn(262,1,QWn,usn),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return ten(this)},MWn.Ob=function(){return this.b},MWn.Qb=function(){o9(this)},MWn.b=!1,vX(YWn,"AbstractHashMap/EntrySetIterator",262),wAn(417,1,QWn,Sb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this)},MWn.Pb=function(){return mQ(this)},MWn.Qb=function(){fW(this)},MWn.b=0,MWn.c=-1,vX(YWn,"AbstractList/IteratorImpl",417),wAn(96,417,cVn,M2),MWn.Qb=function(){fW(this)},MWn.Rb=function(n){yR(this,n)},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Ub=function(){return Px(this.b>0),this.a.Xb(this.c=--this.b)},MWn.Vb=function(){return this.b-1},MWn.Wb=function(n){Mx(-1!=this.c),this.a._c(this.c,n)},vX(YWn,"AbstractList/ListIteratorImpl",96),wAn(219,52,LVn,s1),MWn.Vc=function(n,t){LZ(n,this.b),this.c.Vc(this.a+n,t),++this.b},MWn.Xb=function(n){return l1(n,this.b),this.c.Xb(this.a+n)},MWn.$c=function(n){var t;return l1(n,this.b),t=this.c.$c(this.a+n),--this.b,t},MWn._c=function(n,t){return l1(n,this.b),this.c._c(this.a+n,t)},MWn.gc=function(){return this.b},MWn.a=0,MWn.b=0,vX(YWn,"AbstractList/SubList",219),wAn(384,nVn,tVn,Cb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a._b(n)},MWn.Kc=function(){return new Ib(this.a.vc().Kc())},MWn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/1",384),wAn(691,1,QWn,Ib),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/1/1",691),wAn(226,28,ZWn,Ob),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Kc=function(){return new Kb(this.a.vc().Kc())},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/2",226),wAn(294,1,QWn,Kb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/2/1",294),wAn(484,1,{484:1,42:1}),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.d,t.cd())&&cV(this.e,t.dd()))},MWn.cd=function(){return this.d},MWn.dd=function(){return this.e},MWn.Hb=function(){return KA(this.d)^KA(this.e)},MWn.ed=function(n){return pR(this,n)},MWn.Ib=function(){return this.d+"="+this.e},vX(YWn,"AbstractMap/AbstractEntry",484),wAn(383,484,{484:1,383:1,42:1},PS),vX(YWn,"AbstractMap/SimpleEntry",383),wAn(1984,1,VQn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.cd(),t.cd())&&cV(this.dd(),t.dd()))},MWn.Hb=function(){return KA(this.cd())^KA(this.dd())},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(YWn,uVn,1984),wAn(1992,1967,eVn),MWn.tc=function(n){return q5(this,n)},MWn._b=function(n){return DK(this,n)},MWn.vc=function(){return new Bb(this)},MWn.xc=function(n){return qI(lsn(this,n))},MWn.ec=function(){return new _b(this)},vX(YWn,"AbstractNavigableMap",1992),wAn(739,nVn,tVn,Bb),MWn.Hc=function(n){return cL(n,42)&&q5(this.b,BB(n,42))},MWn.Kc=function(){return new BR(this.b)},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),z8(this.b,t))},MWn.gc=function(){return this.b.c},vX(YWn,"AbstractNavigableMap/EntrySet",739),wAn(493,nVn,rVn,_b),MWn.Nc=function(){return new wS(this)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(this.a).b))},MWn.Mc=function(n){return!!DK(this.a,n)&&($J(this.a,n),!0)},MWn.gc=function(){return this.a.c},vX(YWn,"AbstractNavigableMap/NavigableKeySet",493),wAn(494,1,QWn,Fb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this.a.a)},MWn.Pb=function(){return mx(this.a).cd()},MWn.Qb=function(){e_(this.a)},vX(YWn,"AbstractNavigableMap/NavigableKeySet/1",494),wAn(2004,28,ZWn),MWn.Fc=function(n){return F8(eMn(this,n)),!0},MWn.Gc=function(n){return kW(n),vH(n!=this,"Can't add a queue to itself"),Frn(this,n)},MWn.$b=function(){for(;null!=mnn(this););},vX(YWn,"AbstractQueue",2004),wAn(302,28,{4:1,20:1,28:1,14:1},Lp,d1),MWn.Fc=function(n){return w3(this,n),!0},MWn.$b=function(){o4(this)},MWn.Hc=function(n){return wun(new bV(this),n)},MWn.dc=function(){return Wy(this)},MWn.Kc=function(){return new bV(this)},MWn.Mc=function(n){return GJ(new bV(this),n)},MWn.gc=function(){return this.c-this.b&this.a.length-1},MWn.Nc=function(){return new w1(this,272)},MWn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=qk(new Array(t),n)),urn(this,n,t),n.length>t&&$X(n,t,null),n},MWn.b=0,MWn.c=0,vX(YWn,"ArrayDeque",302),wAn(446,1,QWn,bV),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a!=this.b},MWn.Pb=function(){return _hn(this)},MWn.Qb=function(){ein(this)},MWn.a=0,MWn.b=0,MWn.c=-1,vX(YWn,"ArrayDeque/IteratorImpl",446),wAn(12,52,QQn,Np,J6,t_),MWn.Vc=function(n,t){kG(this,n,t)},MWn.Fc=function(n){return WB(this,n)},MWn.Wc=function(n,t){return ohn(this,n,t)},MWn.Gc=function(n){return gun(this,n)},MWn.$b=function(){this.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this,n,0)},MWn.Jc=function(n){Otn(this,n)},MWn.Xb=function(n){return xq(this,n)},MWn.Xc=function(n){return E7(this,n,0)},MWn.dc=function(){return 0==this.c.length},MWn.Kc=function(){return new Wb(this)},MWn.$c=function(n){return s6(this,n)},MWn.Mc=function(n){return y7(this,n)},MWn.Ud=function(n,t){h1(this,n,t)},MWn._c=function(n,t){return c5(this,n,t)},MWn.gc=function(){return this.c.length},MWn.ad=function(n){m$(this,n)},MWn.Pc=function(){return bx(this)},MWn.Qc=function(n){return Qgn(this,n)};var set,het,fet,bet,wet,det,get,pet,vet,met=vX(YWn,"ArrayList",12);wAn(7,1,QWn,Wb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return y$(this)},MWn.Pb=function(){return n0(this)},MWn.Qb=function(){AU(this)},MWn.a=0,MWn.b=-1,vX(YWn,"ArrayList/1",7),wAn(2013,e.Function,{},T),MWn.te=function(n,t){return Pln(n,t)},wAn(154,52,YQn,Jy),MWn.Hc=function(n){return-1!=bin(this,n)},MWn.Jc=function(n){var t,e,i,r;for(kW(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.td(t)},MWn.Xb=function(n){return Dq(this,n)},MWn._c=function(n,t){var e;return l1(n,this.a.length),e=this.a[n],$X(this.a,n,t),e},MWn.gc=function(){return this.a.length},MWn.ad=function(n){yG(this.a,this.a.length,n)},MWn.Pc=function(){return Ygn(this,x8(Ant,HWn,1,this.a.length,5,1))},MWn.Qc=function(n){return Ygn(this,n)},vX(YWn,"Arrays/ArrayList",154),wAn(940,52,YQn,S),MWn.Hc=function(n){return!1},MWn.Xb=function(n){return yO(n)},MWn.Kc=function(){return SQ(),LT(),bet},MWn.Yc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptyList",940),wAn(941,1,cVn,P),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new dv)},MWn.Wb=function(n){throw Hp(new dv)},vX(YWn,"Collections/EmptyListIterator",941),wAn(943,1967,jVn,C),MWn._b=function(n){return!1},MWn.uc=function(n){return!1},MWn.vc=function(){return SQ(),fet},MWn.xc=function(n){return null},MWn.ec=function(){return SQ(),fet},MWn.gc=function(){return 0},MWn.Cc=function(){return SQ(),set},vX(YWn,"Collections/EmptyMap",943),wAn(942,nVn,TVn,M),MWn.Hc=function(n){return!1},MWn.Kc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptySet",942),wAn(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},Gb),MWn.Hc=function(n){return cV(this.a,n)},MWn.Xb=function(n){return l1(n,1),this.a},MWn.gc=function(){return 1},vX(YWn,"Collections/SingletonList",599),wAn(372,1,vVn,Hb),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,this.Nc())},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return oE()},MWn.Gc=function(n){return sE()},MWn.$b=function(){hE()},MWn.Hc=function(n){return xT(this,n)},MWn.Ic=function(n){return DT(this,n)},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new qb(this.b.Kc())},MWn.Mc=function(n){return fE()},MWn.gc=function(){return this.b.gc()},MWn.Pc=function(){return this.b.Pc()},MWn.Qc=function(n){return RT(this,n)},MWn.Ib=function(){return Bbn(this.b)},vX(YWn,"Collections/UnmodifiableCollection",372),wAn(371,1,QWn,qb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.b.Pb()},MWn.Qb=function(){lE()},vX(YWn,"Collections/UnmodifiableCollectionIterator",371),wAn(531,372,JQn,bN),MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.Hb=function(){return nsn(this.a)},MWn.Xc=function(n){return this.a.Xc(n)},MWn.dc=function(){return this.a.dc()},MWn.Yc=function(){return new wN(this.a.Zc(0))},MWn.Zc=function(n){return new wN(this.a.Zc(n))},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.ad=function(n){throw Hp(new pv)},MWn.bd=function(n,t){return new bN(this.a.bd(n,t))},vX(YWn,"Collections/UnmodifiableList",531),wAn(690,371,cVn,wN),MWn.Qb=function(){lE()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Sb=function(){return this.a.Sb()},MWn.Tb=function(){return this.a.Tb()},MWn.Ub=function(){return this.a.Ub()},MWn.Vb=function(){return this.a.Vb()},MWn.Wb=function(n){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableListIterator",690),wAn(600,1,JWn,Xb),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return this.c._b(n)},MWn.uc=function(n){return _T(this,n)},MWn.vc=function(){return eV(this)},MWn.Fb=function(n){return BT(this,n)},MWn.xc=function(n){return this.c.xc(n)},MWn.Hb=function(){return nsn(this.c)},MWn.dc=function(){return this.c.dc()},MWn.ec=function(){return iV(this)},MWn.zc=function(n,t){throw Hp(new pv)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.gc()},MWn.Ib=function(){return Bbn(this.c)},MWn.Cc=function(){return tV(this)},vX(YWn,"Collections/UnmodifiableMap",600),wAn(382,372,EVn,Ak),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return Nfn(this.b,n)},MWn.Hb=function(){return nsn(this.b)},vX(YWn,"Collections/UnmodifiableSet",382),wAn(944,382,EVn,Lk),MWn.Hc=function(n){return KT(this,n)},MWn.Ic=function(n){return this.b.Ic(n)},MWn.Kc=function(){return new zb(this.b.Kc())},MWn.Pc=function(){var n;return j4(n=this.b.Pc(),n.length),n},MWn.Qc=function(n){return IY(this,n)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),wAn(945,1,QWn,zb),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return new Ub(BB(this.a.Pb(),42))},MWn.Ob=function(){return this.a.Ob()},MWn.Qb=function(){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),wAn(688,1,VQn,Ub),MWn.Fb=function(n){return this.a.Fb(n)},MWn.cd=function(){return this.a.cd()},MWn.dd=function(){return this.a.dd()},MWn.Hb=function(){return this.a.Hb()},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return Bbn(this.a)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),wAn(601,531,{20:1,14:1,15:1,54:1},$k),vX(YWn,"Collections/UnmodifiableRandomAccessList",601),wAn(689,382,MVn,dN),MWn.Nc=function(){return new wS(this)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Hb=function(){return nsn(this.a)},vX(YWn,"Collections/UnmodifiableSortedSet",689),wAn(847,1,ZQn,D),MWn.ue=function(n,t){var e;return 0!=(e=T4(BB(n,11),BB(t,11)))?e:nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(YWn,"Comparator/lambda$0$Type",847),wAn(751,1,ZQn,R),MWn.ue=function(n,t){return _q(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),get},vX(YWn,"Comparators/NaturalOrderComparator",751),wAn(1177,1,ZQn,K),MWn.ue=function(n,t){return Fq(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),det},vX(YWn,"Comparators/ReverseNaturalOrderComparator",1177),wAn(64,1,ZQn,nw),MWn.Fb=function(n){return this===n},MWn.ue=function(n,t){return this.a.ue(t,n)},MWn.ve=function(){return this.a},vX(YWn,"Comparators/ReversedComparator",64),wAn(166,60,BVn,vv),vX(YWn,"ConcurrentModificationException",166),wAn(1904,1,nYn,_),MWn.we=function(n){hdn(this,n)},MWn.Ib=function(){return"DoubleSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?l6(this)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+l6(this)+"]"},MWn.a=0,MWn.b=KQn,MWn.c=RQn,MWn.d=0,MWn.e=0,MWn.f=0,vX(YWn,"DoubleSummaryStatistics",1904),wAn(1805,60,BVn,mv),vX(YWn,"EmptyStackException",1805),wAn(451,1967,JWn,Hbn),MWn.zc=function(n,t){return wR(this,n,t)},MWn.$b=function(){TW(this)},MWn._b=function(n){return uS(this,n)},MWn.uc=function(n){var t,e;for(e=new QT(this.a);e.a<e.c.a.length;)if(t=u4(e),cV(n,this.b[t.g]))return!0;return!1},MWn.vc=function(){return new tw(this)},MWn.xc=function(n){return oV(this,n)},MWn.Bc=function(n){return NZ(this,n)},MWn.gc=function(){return this.a.c},vX(YWn,"EnumMap",451),wAn(1352,nVn,tVn,tw),MWn.$b=function(){TW(this.a)},MWn.Hc=function(n){return v2(this,n)},MWn.Kc=function(){return new Aq(this.a)},MWn.Mc=function(n){var t;return!!v2(this,n)&&(t=BB(n,42).cd(),NZ(this.a,t),!0)},MWn.gc=function(){return this.a.a.c},vX(YWn,"EnumMap/EntrySet",1352),wAn(1353,1,QWn,Aq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.b=u4(this.a),new CS(this.c,this.b)},MWn.Ob=function(){return k$(this.a)},MWn.Qb=function(){Mx(!!this.b),NZ(this.c,this.b),this.b=null},vX(YWn,"EnumMap/EntrySetIterator",1353),wAn(1354,1984,VQn,CS),MWn.cd=function(){return this.a},MWn.dd=function(){return this.b.b[this.a.g]},MWn.ed=function(n){return EU(this.b,this.a.g,n)},vX(YWn,"EnumMap/MapEntry",1354),wAn(174,nVn,{20:1,28:1,14:1,174:1,21:1});var yet=vX(YWn,"EnumSet",174);wAn(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},YK),MWn.Fc=function(n){return orn(this,BB(n,22))},MWn.Hc=function(n){return CG(this,n)},MWn.Kc=function(){return new QT(this)},MWn.Mc=function(n){return IG(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"EnumSet/EnumSetImpl",156),wAn(343,1,QWn,QT),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return u4(this)},MWn.Ob=function(){return k$(this)},MWn.Qb=function(){Mx(-1!=this.b),$X(this.c.b,this.b,null),--this.c.c,this.b=-1},MWn.a=-1,MWn.b=-1,vX(YWn,"EnumSet/EnumSetImpl/IteratorImpl",343),wAn(43,488,tYn,xp,XT,mO),MWn.re=function(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)},MWn.se=function(n){return 0|nsn(n)},vX(YWn,"HashMap",43),wAn(53,nVn,eYn,Rv,bE,$q),MWn.Fc=function(n){return TU(this,n)},MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return FT(this,n)},MWn.dc=function(){return 0==this.a.gc()},MWn.Kc=function(){return this.a.ec().Kc()},MWn.Mc=function(n){return eL(this,n)},MWn.gc=function(){return this.a.gc()};var ket,jet=vX(YWn,"HashSet",53);wAn(1781,1,wVn,F),MWn.ud=function(n){ran(this,n)},MWn.Ib=function(){return"IntSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?j2(this.d)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+vz(this.d)+"]"},MWn.a=0,MWn.b=_Vn,MWn.c=DWn,MWn.d=0,vX(YWn,"IntSummaryStatistics",1781),wAn(1049,1,pVn,eA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new S2(this)},MWn.c=0,vX(YWn,"InternalHashCodeMap",1049),wAn(711,1,QWn,S2),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.d=this.a[this.c++],this.d},MWn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},MWn.Qb=function(){gAn(this.e,this.d.cd()),0!=this.c&&--this.c},MWn.c=0,MWn.d=null,vX(YWn,"InternalHashCodeMap/1",711),wAn(1047,1,pVn,iA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new p4(this)},MWn.c=0,MWn.d=0,vX(YWn,"InternalStringMap",1047),wAn(710,1,QWn,p4),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new JK(this.d,this.c,this.d.d)},MWn.Ob=function(){return!this.a.done},MWn.Qb=function(){Gan(this.d,this.c.value[0])},vX(YWn,"InternalStringMap/1",710),wAn(1048,1984,VQn,JK),MWn.cd=function(){return this.b.value[0]},MWn.dd=function(){return this.a.d!=this.c?hS(this.a,this.b.value[0]):this.b.value[1]},MWn.ed=function(n){return ubn(this.a,this.b.value[0],n)},MWn.c=0,vX(YWn,"InternalStringMap/2",1048),wAn(228,43,tYn,v4,q8),MWn.$b=function(){kR(this)},MWn._b=function(n){return lS(this,n)},MWn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(cV(t.e,n))return!0;t=t.a}return!1},MWn.vc=function(){return new iw(this)},MWn.xc=function(n){return lnn(this,n)},MWn.zc=function(n,t){return Jgn(this,n,t)},MWn.Bc=function(n){return k7(this,n)},MWn.gc=function(){return NT(this.e)},MWn.c=!1,vX(YWn,"LinkedHashMap",228),wAn(387,383,{484:1,383:1,387:1,42:1},Cx,nH),vX(YWn,"LinkedHashMap/ChainEntry",387),wAn(701,nVn,tVn,iw),MWn.$b=function(){kR(this.a)},MWn.Hc=function(n){return y2(this,n)},MWn.Kc=function(){return new hW(this)},MWn.Mc=function(n){var t;return!!y2(this,n)&&(t=BB(n,42).cd(),k7(this.a,t),!0)},MWn.gc=function(){return NT(this.a.e)},vX(YWn,"LinkedHashMap/EntrySet",701),wAn(702,1,QWn,hW),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return s9(this)},MWn.Ob=function(){return this.b!=this.c.a.d},MWn.Qb=function(){Mx(!!this.a),p2(this.c.a.e,this),RH(this.a),v6(this.c.a.e,this.a.d),bD(this.c.a.e,this),this.a=null},vX(YWn,"LinkedHashMap/EntrySet/EntryIterator",702),wAn(178,53,eYn,fA,LN,Lq);var Eet=vX(YWn,"LinkedHashSet",178);wAn(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},YT,n_),MWn.Fc=function(n){return DH(this,n)},MWn.$b=function(){yQ(this)},MWn.Zc=function(n){return spn(this,n)},MWn.gc=function(){return this.b},MWn.b=0;var Tet,Met,Set,Pet,Cet,Iet=vX(YWn,"LinkedList",68);wAn(970,1,cVn,ZK),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){nX(this,n)},MWn.Ob=function(){return EE(this)},MWn.Sb=function(){return this.b.b!=this.d.a},MWn.Pb=function(){return b3(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){return U0(this)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){mtn(this)},MWn.Wb=function(n){Mx(!!this.c),this.c.c=n},MWn.a=0,MWn.c=null,vX(YWn,"LinkedList/ListIteratorImpl",970),wAn(608,1,{},$),vX(YWn,"LinkedList/Node",608),wAn(1959,1,{}),vX(YWn,"Locale",1959),wAn(861,1959,{},L),MWn.Ib=function(){return""},vX(YWn,"Locale/1",861),wAn(862,1959,{},N),MWn.Ib=function(){return"unknown"},vX(YWn,"Locale/4",862),wAn(109,60,{3:1,102:1,60:1,78:1,109:1},yv,lV),vX(YWn,"NoSuchElementException",109),wAn(404,1,{404:1},vy),MWn.Fb=function(n){var t;return n===this||!!cL(n,404)&&(t=BB(n,404),cV(this.a,t.a))},MWn.Hb=function(){return KA(this.a)},MWn.Ib=function(){return null!=this.a?GWn+kN(this.a)+")":"Optional.empty()"},vX(YWn,"Optional",404),wAn(463,1,{463:1},CO,yx),MWn.Fb=function(n){var t;return n===this||!!cL(n,463)&&(t=BB(n,463),this.a==t.a&&0==Pln(this.b,t.b))},MWn.Hb=function(){return this.a?CJ(this.b):0},MWn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalDouble",463),wAn(517,1,{517:1},IO,kx),MWn.Fb=function(n){var t;return n===this||!!cL(n,517)&&(t=BB(n,517),this.a==t.a&&0==E$(this.b,t.b))},MWn.Hb=function(){return this.a?this.b:0},MWn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalInt",517),wAn(503,2004,ZWn,Xz),MWn.Gc=function(n){return ikn(this,n)},MWn.$b=function(){this.b.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=(null==n?-1:E7(this.b,n,0))},MWn.Kc=function(){return new Vb(this)},MWn.Mc=function(n){return srn(this,n)},MWn.gc=function(){return this.b.c.length},MWn.Nc=function(){return new w1(this,256)},MWn.Pc=function(){return bx(this.b)},MWn.Qc=function(n){return Qgn(this.b,n)},vX(YWn,"PriorityQueue",503),wAn(1277,1,QWn,Vb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a<this.c.b.c.length},MWn.Pb=function(){return Px(this.a<this.c.b.c.length),this.b=this.a++,xq(this.c.b,this.b)},MWn.Qb=function(){Mx(-1!=this.b),hrn(this.c,this.a=this.b),this.b=-1},MWn.a=0,MWn.b=-1,vX(YWn,"PriorityQueue/1",1277),wAn(230,1,{230:1},sbn,C4),MWn.a=0,MWn.b=0;var Oet,Aet,$et,Let=0;vX(YWn,"Random",230),wAn(27,1,fVn,w1,zU,CV),MWn.qd=function(){return this.a},MWn.rd=function(){return Dz(this),this.c},MWn.Nb=function(n){Dz(this),this.d.Nb(n)},MWn.sd=function(n){return ntn(this,n)},MWn.a=0,MWn.c=0,vX(YWn,"Spliterators/IteratorSpliterator",27),wAn(485,27,fVn,wS),vX(YWn,"SortedSet/1",485),wAn(602,1,nYn,Qb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/0methodref$accept$Type",602),wAn(603,1,nYn,Yb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/1methodref$accept$Type",603),wAn(604,1,wVn,Jb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/2methodref$accept$Type",604),wAn(605,1,wVn,Zb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/3methodref$accept$Type",605),wAn(617,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.d},MWn.rd=function(){return this.e},MWn.d=0,MWn.e=0,vX(YWn,"Spliterators/BaseSpliterator",617),wAn(721,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,182)?gE(this,BB(n,182)):gE(this,new Yb(n))},MWn.sd=function(n){return cL(n,182)?this.ye(BB(n,182)):this.ye(new Qb(n))},vX(YWn,"Spliterators/AbstractDoubleSpliterator",721),wAn(720,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,196)?gE(this,BB(n,196)):gE(this,new Zb(n))},MWn.sd=function(n){return cL(n,196)?this.ye(BB(n,196)):this.ye(new Jb(n))},vX(YWn,"Spliterators/AbstractIntSpliterator",720),wAn(540,617,fVn),vX(YWn,"Spliterators/AbstractSpliterator",540),wAn(692,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.b},MWn.rd=function(){return this.d-this.c},MWn.b=0,MWn.c=0,MWn.d=0,vX(YWn,"Spliterators/BaseArraySpliterator",692),wAn(947,692,fVn,BH),MWn.ze=function(n,t){cj(this,BB(n,38),t)},MWn.Nb=function(n){DX(this,n)},MWn.sd=function(n){return K6(this,n)},vX(YWn,"Spliterators/ArraySpliterator",947),wAn(693,692,fVn,_K),MWn.ze=function(n,t){aj(this,BB(n,182),t)},MWn.xe=function(n){DX(this,n)},MWn.Nb=function(n){cL(n,182)?DX(this,BB(n,182)):DX(this,new Yb(n))},MWn.ye=function(n){return K6(this,n)},MWn.sd=function(n){return cL(n,182)?K6(this,BB(n,182)):K6(this,new Qb(n))},vX(YWn,"Spliterators/DoubleArraySpliterator",693),wAn(1968,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return 16448},MWn.rd=function(){return 0},vX(YWn,"Spliterators/EmptySpliterator",1968),wAn(946,1968,fVn,z),MWn.xe=function(n){Bf(n)},MWn.Nb=function(n){cL(n,196)?Bf(BB(n,196)):Bf(new Zb(n))},MWn.ye=function(n){return bS(n)},MWn.sd=function(n){return cL(n,196)?bS(BB(n,196)):bS(new Jb(n))},vX(YWn,"Spliterators/EmptySpliterator/OfInt",946),wAn(580,52,fYn,_v),MWn.Vc=function(n,t){Kz(n,this.a.c.length+1),kG(this.a,n,t)},MWn.Fc=function(n){return WB(this.a,n)},MWn.Wc=function(n,t){return Kz(n,this.a.c.length+1),ohn(this.a,n,t)},MWn.Gc=function(n){return gun(this.a,n)},MWn.$b=function(){this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Jc=function(n){Otn(this.a,n)},MWn.Xb=function(n){return Kz(n,this.a.c.length),xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return new Wb(this.a)},MWn.$c=function(n){return Kz(n,this.a.c.length),s6(this.a,n)},MWn.Ud=function(n,t){h1(this.a,n,t)},MWn._c=function(n,t){return Kz(n,this.a.c.length),c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.ad=function(n){m$(this.a,n)},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.Ib=function(){return LMn(this.a)},vX(YWn,"Vector",580),wAn(809,580,fYn,om),vX(YWn,"Stack",809),wAn(206,1,{206:1},$an),MWn.Ib=function(){return W0(this)},vX(YWn,"StringJoiner",206),wAn(544,1992,{3:1,83:1,171:1,161:1},WT,Wz),MWn.$b=function(){my(this)},MWn.vc=function(){return new xN(this)},MWn.zc=function(n,t){return Mon(this,n,t)},MWn.Bc=function(n){return $J(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"TreeMap",544),wAn(390,1,QWn,BR),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return mx(this)},MWn.Ob=function(){return aS(this.a)},MWn.Qb=function(){e_(this)},vX(YWn,"TreeMap/EntryIterator",390),wAn(435,739,tVn,xN),MWn.$b=function(){my(this.a)},vX(YWn,"TreeMap/EntrySet",435),wAn(436,383,{484:1,383:1,42:1,436:1},H8),MWn.b=!1;var Net,xet,Det,Ret,Ket=vX(YWn,"TreeMap/Node",436);wAn(621,1,{},q),MWn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(YWn,"TreeMap/State",621),wAn(297,22,lYn,gS),MWn.Ae=function(){return!1},MWn.Be=function(){return!1};var _et,Fet=Ben(YWn,"TreeMap/SubMapType",297,Unt,J2,h_);wAn(1112,297,lYn,LA),MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/1",1112,Fet,null,null),wAn(1113,297,lYn,A$),MWn.Ae=function(){return!0},MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/2",1113,Fet,null,null),wAn(1114,297,lYn,NA),MWn.Ae=function(){return!0},Ben(YWn,"TreeMap/SubMapType/3",1114,Fet,null,null),wAn(208,nVn,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},zv,dE),MWn.Nc=function(){return new wS(this)},MWn.Fc=function(n){return ZU(this,n)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(new _b(this.a).a).b))},MWn.Mc=function(n){return MN(this,n)},MWn.gc=function(){return this.a.c};var Bet=vX(YWn,"TreeSet",208);wAn(966,1,{},rw),MWn.Ce=function(n,t){return DD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$0$Type",966),wAn(967,1,{},cw),MWn.Ce=function(n,t){return RD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$1$Type",967),wAn(846,1,{},G),MWn.Kb=function(n){return n},vX(bYn,"Function/lambda$0$Type",846),wAn(431,1,DVn,aw),MWn.Mb=function(n){return!this.a.Mb(n)},vX(bYn,"Predicate/lambda$2$Type",431),wAn(572,1,{572:1});var Het,qet,Get=vX(wYn,"Handler",572);wAn(2007,1,KWn),MWn.ne=function(){return"DUMMY"},MWn.Ib=function(){return this.ne()},vX(wYn,"Level",2007),wAn(1621,2007,KWn,U),MWn.ne=function(){return"INFO"},vX(wYn,"Level/LevelInfo",1621),wAn(1640,1,{},Kv),vX(wYn,"LogManager",1640),wAn(1780,1,KWn,i_),MWn.b=null,vX(wYn,"LogRecord",1780),wAn(512,1,{512:1},y5),MWn.e=!1;var zet,Uet,Xet,Wet=!1,Vet=!1,Qet=!1,Yet=!1,Jet=!1;vX(wYn,"Logger",512),wAn(819,572,{572:1},X),vX(wYn,"SimpleConsoleLogHandler",819),wAn(132,22,{3:1,35:1,22:1,132:1},pS);var Zet,nit=Ben(pYn,"Collector/Characteristics",132,Unt,p1,f_);wAn(744,1,{},jU),vX(pYn,"CollectorImpl",744),wAn(1060,1,{},W),MWn.Ce=function(n,t){return Ofn(BB(n,206),BB(t,206))},vX(pYn,"Collectors/10methodref$merge$Type",1060),wAn(1061,1,{},V),MWn.Kb=function(n){return W0(BB(n,206))},vX(pYn,"Collectors/11methodref$toString$Type",1061),wAn(1062,1,{},uw),MWn.Kb=function(n){return hN(),!!TO(n)},vX(pYn,"Collectors/12methodref$test$Type",1062),wAn(251,1,{},B),MWn.Od=function(n,t){BB(n,14).Fc(t)},vX(pYn,"Collectors/20methodref$add$Type",251),wAn(253,1,{},H),MWn.Ee=function(){return new Np},vX(pYn,"Collectors/21methodref$ctor$Type",253),wAn(346,1,{},Q),MWn.Ee=function(){return new Rv},vX(pYn,"Collectors/23methodref$ctor$Type",346),wAn(347,1,{},Y),MWn.Od=function(n,t){TU(BB(n,53),t)},vX(pYn,"Collectors/24methodref$add$Type",347),wAn(1055,1,{},J),MWn.Ce=function(n,t){return ZT(BB(n,15),BB(t,14))},vX(pYn,"Collectors/4methodref$addAll$Type",1055),wAn(1059,1,{},Z),MWn.Od=function(n,t){b6(BB(n,206),BB(t,475))},vX(pYn,"Collectors/9methodref$add$Type",1059),wAn(1058,1,{},YB),MWn.Ee=function(){return new $an(this.a,this.b,this.c)},vX(pYn,"Collectors/lambda$15$Type",1058),wAn(1063,1,{},nn),MWn.Ee=function(){var n;return Jgn(n=new v4,(hN(),!1),new Np),Jgn(n,!0,new Np),n},vX(pYn,"Collectors/lambda$22$Type",1063),wAn(1064,1,{},ow),MWn.Ee=function(){return Pun(Gk(Ant,1),HWn,1,5,[this.a])},vX(pYn,"Collectors/lambda$25$Type",1064),wAn(1065,1,{},sw),MWn.Od=function(n,t){Bq(this.a,een(n))},vX(pYn,"Collectors/lambda$26$Type",1065),wAn(1066,1,{},hw),MWn.Ce=function(n,t){return _z(this.a,een(n),een(t))},vX(pYn,"Collectors/lambda$27$Type",1066),wAn(1067,1,{},tn),MWn.Kb=function(n){return een(n)[0]},vX(pYn,"Collectors/lambda$28$Type",1067),wAn(713,1,{},en),MWn.Ce=function(n,t){return Hq(n,t)},vX(pYn,"Collectors/lambda$4$Type",713),wAn(252,1,{},rn),MWn.Ce=function(n,t){return GT(BB(n,14),BB(t,14))},vX(pYn,"Collectors/lambda$42$Type",252),wAn(348,1,{},cn),MWn.Ce=function(n,t){return zT(BB(n,53),BB(t,53))},vX(pYn,"Collectors/lambda$50$Type",348),wAn(349,1,{},an),MWn.Kb=function(n){return BB(n,53)},vX(pYn,"Collectors/lambda$51$Type",349),wAn(1054,1,{},fw),MWn.Od=function(n,t){bsn(this.a,BB(n,83),t)},vX(pYn,"Collectors/lambda$7$Type",1054),wAn(1056,1,{},un),MWn.Ce=function(n,t){return pun(BB(n,83),BB(t,83),new J)},vX(pYn,"Collectors/lambda$8$Type",1056),wAn(1057,1,{},lw),MWn.Kb=function(n){return mbn(this.a,BB(n,83))},vX(pYn,"Collectors/lambda$9$Type",1057),wAn(539,1,{}),MWn.He=function(){jW(this)},MWn.d=!1,vX(pYn,"TerminatableStream",539),wAn(812,539,vYn,AD),MWn.He=function(){jW(this)},vX(pYn,"DoubleStreamImpl",812),wAn(1784,721,fVn,ZB),MWn.ye=function(n){return pmn(this,BB(n,182))},MWn.a=null,vX(pYn,"DoubleStreamImpl/2",1784),wAn(1785,1,nYn,bw),MWn.we=function(n){HA(this.a,n)},vX(pYn,"DoubleStreamImpl/2/lambda$0$Type",1785),wAn(1782,1,nYn,ww),MWn.we=function(n){BA(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$0$Type",1782),wAn(1783,1,nYn,dw),MWn.we=function(n){hdn(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$2$Type",1783),wAn(1358,720,fVn,m5),MWn.ye=function(n){return k2(this,BB(n,196))},MWn.a=0,MWn.b=0,MWn.c=0,vX(pYn,"IntStream/5",1358),wAn(787,539,vYn,$D),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),this.a},vX(pYn,"IntStreamImpl",787),wAn(788,539,vYn,VT),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),IL(),$et},vX(pYn,"IntStreamImpl/Empty",788),wAn(1463,1,wVn,gw),MWn.ud=function(n){ran(this.a,n)},vX(pYn,"IntStreamImpl/lambda$4$Type",1463);var tit,eit=bq(pYn,"Stream");wAn(30,539,{525:1,670:1,833:1},Rq),MWn.He=function(){jW(this)},vX(pYn,"StreamImpl",30),wAn(845,1,{},on),MWn.ld=function(n){return lH(n)},vX(pYn,"StreamImpl/0methodref$lambda$2$Type",845),wAn(1084,540,fVn,KK),MWn.sd=function(n){for(;$9(this);){if(this.a.sd(n))return!0;jW(this.b),this.b=null,this.a=null}return!1},vX(pYn,"StreamImpl/1",1084),wAn(1085,1,lVn,pw),MWn.td=function(n){iH(this.a,BB(n,833))},vX(pYn,"StreamImpl/1/lambda$0$Type",1085),wAn(1086,1,DVn,vw),MWn.Mb=function(n){return TU(this.a,n)},vX(pYn,"StreamImpl/1methodref$add$Type",1086),wAn(1087,540,fVn,vQ),MWn.sd=function(n){var t;return this.a||(t=new Np,this.b.a.Nb(new mw(t)),SQ(),m$(t,this.c),this.a=new w1(t,16)),ntn(this.a,n)},MWn.a=null,vX(pYn,"StreamImpl/5",1087),wAn(1088,1,lVn,mw),MWn.td=function(n){WB(this.a,n)},vX(pYn,"StreamImpl/5/2methodref$add$Type",1088),wAn(722,540,fVn,Q9),MWn.sd=function(n){for(this.b=!1;!this.b&&this.c.sd(new AS(this,n)););return this.b},MWn.b=!1,vX(pYn,"StreamImpl/FilterSpliterator",722),wAn(1079,1,lVn,AS),MWn.td=function(n){Rz(this.a,this.b,n)},vX(pYn,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),wAn(1075,721,fVn,E6),MWn.ye=function(n){return jK(this,BB(n,182))},vX(pYn,"StreamImpl/MapToDoubleSpliterator",1075),wAn(1078,1,lVn,$S),MWn.td=function(n){jS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),wAn(1074,720,fVn,T6),MWn.ye=function(n){return EK(this,BB(n,196))},vX(pYn,"StreamImpl/MapToIntSpliterator",1074),wAn(1077,1,lVn,LS),MWn.td=function(n){kS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),wAn(719,540,fVn,M6),MWn.sd=function(n){return TK(this,n)},vX(pYn,"StreamImpl/MapToObjSpliterator",719),wAn(1076,1,lVn,NS),MWn.td=function(n){ES(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),wAn(618,1,lVn,sn),MWn.td=function(n){Il(this,n)},vX(pYn,"StreamImpl/ValueConsumer",618),wAn(1080,1,lVn,hn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$0$Type",1080),wAn(1081,1,lVn,fn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$1$Type",1081),wAn(1082,1,{},yw),MWn.Ce=function(n,t){return F_(this.a,n,t)},vX(pYn,"StreamImpl/lambda$4$Type",1082),wAn(1083,1,lVn,IS),MWn.td=function(n){ER(this.b,this.a,n)},vX(pYn,"StreamImpl/lambda$5$Type",1083),wAn(1089,1,lVn,kw),MWn.td=function(n){Hon(this.a,BB(n,365))},vX(pYn,"TerminatableStream/lambda$0$Type",1089),wAn(2041,1,{}),wAn(1914,1,{},ln),vX("javaemul.internal","ConsoleLogger",1914),wAn(2038,1,{});var iit,rit,cit=0,ait=0;wAn(1768,1,lVn,bn),MWn.td=function(n){BB(n,308)},vX(TYn,"BowyerWatsonTriangulation/lambda$0$Type",1768),wAn(1769,1,lVn,jw),MWn.td=function(n){Frn(this.a,BB(n,308).e)},vX(TYn,"BowyerWatsonTriangulation/lambda$1$Type",1769),wAn(1770,1,lVn,wn),MWn.td=function(n){BB(n,168)},vX(TYn,"BowyerWatsonTriangulation/lambda$2$Type",1770),wAn(1765,1,MYn,Ew),MWn.ue=function(n,t){return q3(this.a,BB(n,168),BB(t,168))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(TYn,"NaiveMinST/lambda$0$Type",1765),wAn(499,1,{},Tw),vX(TYn,"NodeMicroLayout",499),wAn(168,1,{168:1},xS),MWn.Fb=function(n){var t;return!!cL(n,168)&&(t=BB(n,168),cV(this.a,t.a)&&cV(this.b,t.b)||cV(this.a,t.b)&&cV(this.b,t.a))},MWn.Hb=function(){return KA(this.a)+KA(this.b)};var uit=vX(TYn,"TEdge",168);wAn(308,1,{308:1},ZFn),MWn.Fb=function(n){var t;return!!cL(n,308)&&K7(this,(t=BB(n,308)).a)&&K7(this,t.b)&&K7(this,t.c)},MWn.Hb=function(){return KA(this.a)+KA(this.b)+KA(this.c)},vX(TYn,"TTriangle",308),wAn(221,1,{221:1},C$),vX(TYn,"Tree",221),wAn(1254,1,{},IZ),vX(SYn,"Scanline",1254);var oit=bq(SYn,PYn);wAn(1692,1,{},ltn),vX(CYn,"CGraph",1692),wAn(307,1,{307:1},cZ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.g=0,MWn.i=0,MWn.k=KQn,vX(CYn,"CGroup",307),wAn(815,1,{},Xv),vX(CYn,"CGroup/CGroupBuilder",815),wAn(57,1,{57:1},AR),MWn.Ib=function(){return this.j?SD(this.j.Kb(this)):(ED(bit),bit.o+"@"+(PN(this)>>>0).toString(16))},MWn.f=0,MWn.i=KQn;var sit,hit,fit,lit,bit=vX(CYn,"CNode",57);wAn(814,1,{},Wv),vX(CYn,"CNode/CNodeBuilder",814),wAn(1525,1,{},dn),MWn.Oe=function(n,t){return 0},MWn.Pe=function(n,t){return 0},vX(CYn,OYn,1525),wAn(1790,1,{},gn),MWn.Le=function(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),57),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),307)).k=h,0==a.g&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),307)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),57),g=a.k+f.b.a,!Ghn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(Ffn(),FPt)||n.d==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),d=dA(n.d)?n.g.Oe(f,o):n.g.Pe(f,o),o.a.k=e.Math.max(o.a.k,f.i+f.d.b+d-o.b.a),cY(n,o,n.d)&&(o.a.k=e.Math.max(o.a.k,o.d.c-o.b.a)),--o.a.g,0==o.a.g&&DH(w,o.a)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),57)).d.c=t.i},vX(CYn,"LongestPathCompaction",1790),wAn(1690,1,{},yOn),MWn.e=!1;var wit,dit,git=vX(CYn,xYn,1690);wAn(1691,1,lVn,Mw),MWn.td=function(n){iun(this.a,BB(n,46))},vX(CYn,DYn,1691),wAn(1791,1,{},pn),MWn.Me=function(n){var t,e,i,r,c,a;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(e=BB(n0(i),57),c=new Wb(n.a.b);c.a<c.c.c.length;)e!=(r=BB(n0(c),57))&&(e.a&&e.a==r.a||(a=dA(n.d)?n.g.Pe(e,r):n.g.Oe(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&Rdn(r.d.d+r.d.a+a,e.d.d)&&Kdn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},vX(CYn,"QuadraticConstraintCalculation",1791),wAn(522,1,{522:1},Dp),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(CYn,RYn,522),wAn(803,1,{},RG),MWn.Me=function(n){this.c=n,pCn(this,new yn)},vX(CYn,KYn,803),wAn(1718,1,{679:1},fY),MWn.Ke=function(n){_Pn(this,BB(n,464))},vX(CYn,_Yn,1718),wAn(1719,1,MYn,vn),MWn.ue=function(n,t){return uQ(BB(n,57),BB(t,57))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,FYn,1719),wAn(464,1,{464:1},OS),MWn.a=!1,vX(CYn,BYn,464),wAn(1720,1,MYn,mn),MWn.ue=function(n,t){return Jkn(BB(n,464),BB(t,464))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,HYn,1720),wAn(1721,1,qYn,yn),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(CYn,"ScanlineConstraintCalculator/lambda$1$Type",1721),wAn(428,22,{3:1,35:1,22:1,428:1},FS);var pit,vit,mit,yit=Ben(GYn,"HighLevelSortingCriterion",428,Unt,rJ,l_);wAn(427,22,{3:1,35:1,22:1,427:1},BS);var kit,jit,Eit,Tit,Mit,Sit,Pit,Cit,Iit,Oit,Ait,$it,Lit,Nit,xit,Dit,Rit,Kit=Ben(GYn,"LowLevelSortingCriterion",427,Unt,cJ,b_),_it=bq(zYn,"ILayoutMetaDataProvider");wAn(853,1,QYn,Gh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,UYn),YYn),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),Cit),(PPn(),gMt)),Bit),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XYn),YYn),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),Sit),gMt),Kit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WYn),YYn),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),Tit),gMt),yit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,VYn),YYn),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(hN(),!0)),wMt),ktt),nbn(hMt))))},vX(GYn,"PolyominoOptions",853),wAn(250,22,{3:1,35:1,22:1,250:1},HS);var Fit,Bit=Ben(GYn,"TraversalStrategy",250,Unt,Tin,w_);wAn(213,1,{213:1},kn),MWn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},MWn.a=1,MWn.b=0,MWn.c=0,MWn.f=!1,MWn.g=0;var Hit=vX(JYn,"NEdge",213);wAn(176,1,{},Hv),vX(JYn,"NEdge/NEdgeBuilder",176),wAn(653,1,{},Fv),vX(JYn,"NGraph",653),wAn(121,1,{121:1},k6),MWn.c=-1,MWn.d=0,MWn.e=0,MWn.i=-1,MWn.j=!1;var qit=vX(JYn,"NNode",121);wAn(795,1,JQn,Bv),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Vc=function(n,t){++this.b,kG(this.a,n,t)},MWn.Fc=function(n){return RN(this,n)},MWn.Wc=function(n,t){return++this.b,ohn(this.a,n,t)},MWn.Gc=function(n){return++this.b,gun(this.a,n)},MWn.$b=function(){++this.b,this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Xb=function(n){return xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return L9(new Wb(this.a))},MWn.Yc=function(){throw Hp(new pv)},MWn.Zc=function(n){throw Hp(new pv)},MWn.$c=function(n){return++this.b,s6(this.a,n)},MWn.Mc=function(n){return KN(this,n)},MWn._c=function(n,t){return++this.b,c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.b=0,vX(JYn,"NNode/ChangeAwareArrayList",795),wAn(269,1,{},qv),vX(JYn,"NNode/NNodeBuilder",269),wAn(1630,1,{},jn),MWn.a=!1,MWn.f=DWn,MWn.j=0,vX(JYn,"NetworkSimplex",1630),wAn(1294,1,lVn,Sw),MWn.td=function(n){qzn(this.a,BB(n,680),!0,!1)},vX(nJn,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),wAn(558,1,{},Pw),MWn.b=!0,MWn.c=!0,MWn.d=!0,MWn.e=!0,vX(nJn,"NodeMarginCalculator",558),wAn(212,1,{212:1}),MWn.j=!1,MWn.k=!1;var Git,zit,Uit,Xit=vX(tJn,"Cell",212);wAn(124,212,{124:1,212:1},FR),MWn.Re=function(){return XH(this)},MWn.Se=function(){var n;return n=this.n,this.a.a+n.b+n.c},vX(tJn,"AtomicCell",124),wAn(232,22,{3:1,35:1,22:1,232:1},qS);var Wit,Vit=Ben(tJn,"ContainerArea",232,Unt,v1,d_);wAn(326,212,iJn),vX(tJn,"ContainerCell",326),wAn(1473,326,iJn,Hwn),MWn.Re=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].Re()):n=Ybn(this,Umn(this,!0)),n>0?n+this.n.d+this.n.a:0},MWn.Se=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].Se());else if(this.g)c=Ybn(this,Okn(this,null,!0));else for(Dtn(),i=0,r=(t=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)n=t[i],c=e.Math.max(c,Ybn(this,Okn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},MWn.Te=function(){var n,t,e,i,r;if(this.g)for(n=Okn(this,null,!1),Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n);else for(Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n=Okn(this,t,!1))},MWn.Ue=function(){var n,t,i,r;t=this.i,n=this.n,r=Umn(this,!1),Q5(this,(Dtn(),Git),t.d+n.d,r),Q5(this,Uit,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),Q5(this,zit,t.d+n.d+r[0]-(r[1]-i)/2,r)},MWn.b=null,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=!1;var Qit,Yit,Jit,Zit=0,nrt=0;vX(tJn,"GridContainerCell",1473),wAn(461,22,{3:1,35:1,22:1,461:1},GS);var trt,ert=Ben(tJn,"HorizontalLabelAlignment",461,Unt,m1,g_);wAn(306,212,{212:1,306:1},yJ,wtn,KY),MWn.Re=function(){return WH(this)},MWn.Se=function(){return VH(this)},MWn.a=0,MWn.c=!1;var irt,rrt,crt,art=vX(tJn,"LabelCell",306);wAn(244,326,{212:1,326:1,244:1},Ign),MWn.Re=function(){return MIn(this)},MWn.Se=function(){return SIn(this)},MWn.Te=function(){_Fn(this)},MWn.Ue=function(){GFn(this)},MWn.b=0,MWn.c=0,MWn.d=!1,vX(tJn,"StripContainerCell",244),wAn(1626,1,DVn,En),MWn.Mb=function(n){return Qy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$0$Type",1626),wAn(1627,1,{},Tn),MWn.Fe=function(n){return BB(n,212).Se()},vX(tJn,"StripContainerCell/lambda$1$Type",1627),wAn(1628,1,DVn,Mn),MWn.Mb=function(n){return Yy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$2$Type",1628),wAn(1629,1,{},Sn),MWn.Fe=function(n){return BB(n,212).Re()},vX(tJn,"StripContainerCell/lambda$3$Type",1629),wAn(462,22,{3:1,35:1,22:1,462:1},zS);var urt,ort,srt,hrt,frt,lrt,brt,wrt,drt,grt,prt,vrt,mrt,yrt,krt,jrt,Ert,Trt,Mrt,Srt,Prt,Crt,Irt,Ort=Ben(tJn,"VerticalLabelAlignment",462,Unt,y1,p_);wAn(789,1,{},eUn),MWn.c=0,MWn.d=0,MWn.k=0,MWn.s=0,MWn.t=0,MWn.v=!1,MWn.w=0,MWn.D=!1,vX(sJn,"NodeContext",789),wAn(1471,1,MYn,Pn),MWn.ue=function(n,t){return YO(BB(n,61),BB(t,61))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/0methodref$comparePortSides$Type",1471),wAn(1472,1,MYn,Cn),MWn.ue=function(n,t){return UTn(BB(n,111),BB(t,111))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/1methodref$comparePortContexts$Type",1472),wAn(159,22,{3:1,35:1,22:1,159:1},ocn);var Art,$rt,Lrt,Nrt,xrt,Drt,Rrt,Krt=Ben(sJn,"NodeLabelLocation",159,Unt,tpn,v_);wAn(111,1,{111:1},MOn),MWn.a=!1,vX(sJn,"PortContext",111),wAn(1476,1,lVn,In),MWn.td=function(n){CE(BB(n,306))},vX(lJn,bJn,1476),wAn(1477,1,DVn,On),MWn.Mb=function(n){return!!BB(n,111).c},vX(lJn,wJn,1477),wAn(1478,1,lVn,An),MWn.td=function(n){CE(BB(n,111).c)},vX(lJn,"LabelPlacer/lambda$2$Type",1478),wAn(1475,1,lVn,Ln),MWn.td=function(n){qD(),Yp(BB(n,111))},vX(lJn,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),wAn(790,1,lVn,$_),MWn.td=function(n){RM(this.b,this.c,this.a,BB(n,181))},MWn.a=!1,MWn.c=!1,vX(lJn,"NodeLabelCellCreator/lambda$0$Type",790),wAn(1474,1,lVn,Cw),MWn.td=function(n){Iv(this.a,BB(n,181))},vX(lJn,"PortContextCreator/lambda$0$Type",1474),wAn(1829,1,{},Nn),vX(gJn,"GreedyRectangleStripOverlapRemover",1829),wAn(1830,1,MYn,$n),MWn.ue=function(n,t){return FN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),wAn(1786,1,{},Zv),MWn.a=5,MWn.e=0,vX(gJn,"RectangleStripOverlapRemover",1786),wAn(1787,1,MYn,Dn),MWn.ue=function(n,t){return BN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),wAn(1789,1,MYn,Rn),MWn.ue=function(n,t){return JU(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),wAn(406,22,{3:1,35:1,22:1,406:1},US);var _rt,Frt,Brt,Hrt,qrt,Grt=Ben(gJn,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Unt,Y2,m_);wAn(222,1,{222:1},xG),vX(gJn,"RectangleStripOverlapRemover/RectangleNode",222),wAn(1788,1,lVn,Iw),MWn.td=function(n){Cmn(this.a,BB(n,222))},vX(gJn,"RectangleStripOverlapRemover/lambda$1$Type",1788),wAn(1304,1,MYn,Kn),MWn.ue=function(n,t){return zHn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),wAn(1307,1,{},_n),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),wAn(1308,1,DVn,Fn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),wAn(1309,1,DVn,Bn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),wAn(1302,1,MYn,Hn),MWn.ue=function(n,t){return WRn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),wAn(1305,1,{},xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),wAn(767,1,MYn,qn),MWn.ue=function(n,t){return Uan(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionsComparator",767),wAn(1300,1,MYn,Gn),MWn.ue=function(n,t){return Qin(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparator",1300),wAn(1301,1,MYn,zn),MWn.ue=function(n,t){return avn(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),wAn(1303,1,MYn,Un),MWn.ue=function(n,t){return BKn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),wAn(1306,1,{},Xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),wAn(777,1,{},DS),MWn.Ce=function(n,t){return O2(this,BB(n,46),BB(t,167))},vX(vJn,"SuccessorCombination",777),wAn(644,1,{},Wn),MWn.Ce=function(n,t){var e;return XIn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorJitter",644),wAn(643,1,{},Vn),MWn.Ce=function(n,t){var e;return bxn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorLineByLine",643),wAn(568,1,{},Qn),MWn.Ce=function(n,t){var e;return f$n((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorManhattan",568),wAn(1356,1,{},Yn),MWn.Ce=function(n,t){var e;return jNn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorMaxNormWindingInMathPosSense",1356),wAn(400,1,{},Ow),MWn.Ce=function(n,t){return BU(this,n,t)},MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=!1,vX(vJn,"SuccessorQuadrantsGeneric",400),wAn(1357,1,{},Jn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),wAn(323,22,{3:1,35:1,22:1,323:1},_S),MWn.a=!1;var zrt,Urt=Ben(EJn,TJn,323,Unt,n3,y_);wAn(1298,1,{}),MWn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=iln(0),r=0;r<this.o;r++)e+=""+n.a,n=iln(lR(n.a));for(e+="\n",n=iln(0),c=0;c<this.p;c++){for(e+=""+n.a,n=iln(lR(n.a)),i=0;i<this.o;i++)0==Vhn(t=trn(this,i,c),0)?e+="_":0==Vhn(t,1)?e+="X":e+="0";e+="\n"}return fx(e,0,e.length-1)},MWn.o=0,MWn.p=0,vX(EJn,"TwoBitGrid",1298),wAn(321,1298,{321:1},qwn),MWn.j=0,MWn.k=0,vX(EJn,"PlanarGrid",321),wAn(167,321,{321:1,167:1}),MWn.g=0,MWn.i=0,vX(EJn,"Polyomino",167);var Xrt=bq(IJn,OJn);wAn(134,1,AJn,Zn),MWn.Ye=function(n,t){return son(this,n,t)},MWn.Ve=function(){return Gq(this)},MWn.We=function(n){return mMn(this,n)},MWn.Xe=function(n){return Lx(this,n)},vX(IJn,"MapPropertyHolder",134),wAn(1299,134,AJn,yxn),vX(EJn,"Polyominoes",1299);var Wrt,Vrt,Qrt,Yrt,Jrt,Zrt,nct,tct,ect=!1;wAn(1766,1,lVn,nt),MWn.td=function(n){uqn(BB(n,221))},vX($Jn,"DepthFirstCompaction/0methodref$compactTree$Type",1766),wAn(810,1,lVn,Aw),MWn.td=function(n){KW(this.a,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$1$Type",810),wAn(1767,1,lVn,N_),MWn.td=function(n){dgn(this.a,this.b,this.c,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$2$Type",1767),wAn(65,1,{65:1},AZ),vX($Jn,"Node",65),wAn(1250,1,{},I$),vX($Jn,"ScanlineOverlapCheck",1250),wAn(1251,1,{679:1},hY),MWn.Ke=function(n){GD(this,BB(n,440))},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),wAn(1252,1,MYn,tt),MWn.ue=function(n,t){return xln(BB(n,65),BB(t,65))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),wAn(440,1,{440:1},RS),MWn.a=!1,vX($Jn,"ScanlineOverlapCheck/Timestamp",440),wAn(1253,1,MYn,et),MWn.ue=function(n,t){return Zkn(BB(n,440),BB(t,440))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/lambda$0$Type",1253),wAn(550,1,{},it),vX(LJn,"SVGImage",550),wAn(324,1,{324:1},x_),MWn.Ib=function(){return"("+this.a+FWn+this.b+FWn+this.c+")"},vX(LJn,"UniqueTriple",324),wAn(209,1,NJn),vX(xJn,"AbstractLayoutProvider",209),wAn(1132,209,NJn,rt),MWn.Ze=function(n,t){var e,i,r;OTn(t,DJn,1),this.a=Gy(MD(ZAn(n,(Epn(),Ect)))),P8(n,bct)&&(i=SD(ZAn(n,bct)),(e=XRn(cin(),i))&&BB(sJ(e.f),209).Ze(n,mcn(t,1))),r=new s4(this.a),this.b=Rzn(r,n),0===BB(ZAn(n,(Gsn(),oct)),481).g?(BOn(new ct,this.b),Ypn(n,gct,mMn(this.b,gct))):$T(),Uzn(r),Ypn(n,dct,this.b),HSn(t)},MWn.a=0,vX(RJn,"DisCoLayoutProvider",1132),wAn(1244,1,{},ct),MWn.c=!1,MWn.e=0,MWn.f=0,vX(RJn,"DisCoPolyominoCompactor",1244),wAn(561,1,{561:1},hG),MWn.b=!0,vX(KJn,"DCComponent",561),wAn(394,22,{3:1,35:1,22:1,394:1},KS),MWn.a=!1;var ict,rct,cct=Ben(KJn,"DCDirection",394,Unt,Z2,k_);wAn(266,134,{3:1,266:1,94:1,134:1},EAn),vX(KJn,"DCElement",266),wAn(395,1,{395:1},Imn),MWn.c=0,vX(KJn,"DCExtension",395),wAn(755,134,AJn,_j),vX(KJn,"DCGraph",755),wAn(481,22,{3:1,35:1,22:1,481:1},Ix);var act,uct,oct,sct,hct,fct,lct,bct,wct,dct,gct,pct,vct,mct,yct,kct,jct,Ect,Tct,Mct,Sct,Pct=Ben(_Jn,FJn,481,Unt,RV,j_);wAn(854,1,QYn,Hh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BJn),zJn),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),sct),(PPn(),gMt)),Pct),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,HJn),zJn),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),yMt),Qtt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,qJn),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),mMt),Ant),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,GJn),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),mMt),Ant),nbn(hMt)))),BBn((new qh,n))},vX(_Jn,"DisCoMetaDataProvider",854),wAn(998,1,QYn,qh),MWn.Qe=function(n){BBn(n)},vX(_Jn,"DisCoOptions",998),wAn(999,1,{},at),MWn.$e=function(){return new rt},MWn._e=function(n){},vX(_Jn,"DisCoOptions/DiscoFactory",999),wAn(562,167,{321:1,167:1,562:1},Q$n),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX("org.eclipse.elk.alg.disco.structures","DCPolyomino",562),wAn(1268,1,DVn,ut),MWn.Mb=function(n){return TO(n)},vX(YJn,"ElkGraphComponentsProcessor/lambda$0$Type",1268),wAn(1269,1,{},ot),MWn.Kb=function(n){return MQ(),PMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$1$Type",1269),wAn(1270,1,DVn,st),MWn.Mb=function(n){return qH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$2$Type",1270),wAn(1271,1,{},ht),MWn.Kb=function(n){return MQ(),OMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$3$Type",1271),wAn(1272,1,DVn,ft),MWn.Mb=function(n){return GH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$4$Type",1272),wAn(1273,1,DVn,$w),MWn.Mb=function(n){return MJ(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$5$Type",1273),wAn(1274,1,{},Lw),MWn.Kb=function(n){return KX(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$6$Type",1274),wAn(1241,1,{},s4),MWn.a=0,vX(YJn,"ElkGraphTransformer",1241),wAn(1242,1,{},lt),MWn.Od=function(n,t){tOn(this,BB(n,160),BB(t,266))},vX(YJn,"ElkGraphTransformer/OffsetApplier",1242),wAn(1243,1,lVn,Nw),MWn.td=function(n){TL(this,BB(n,8))},vX(YJn,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),wAn(753,1,{},bt),vX(eZn,iZn,753),wAn(1232,1,MYn,wt),MWn.ue=function(n,t){return CIn(BB(n,231),BB(t,231))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(eZn,rZn,1232),wAn(740,209,NJn,Gv),MWn.Ze=function(n,t){vLn(this,n,t)},vX(eZn,"ForceLayoutProvider",740),wAn(357,134,{3:1,357:1,94:1,134:1}),vX(cZn,"FParticle",357),wAn(559,357,{3:1,559:1,357:1,94:1,134:1},hX),MWn.Ib=function(){var n;return this.a?(n=E7(this.a.a,this,0))>=0?"b"+n+"["+u5(this.a)+"]":"b["+u5(this.a)+"]":"b_"+PN(this)},vX(cZn,"FBendpoint",559),wAn(282,134,{3:1,282:1,94:1,134:1},IR),MWn.Ib=function(){return u5(this)},vX(cZn,"FEdge",282),wAn(231,134,{3:1,231:1,94:1,134:1},y6);var Cct,Ict,Oct,Act,$ct,Lct,Nct,xct,Dct,Rct,Kct=vX(cZn,"FGraph",231);wAn(447,357,{3:1,447:1,357:1,94:1,134:1},m4),MWn.Ib=function(){return null==this.b||0==this.b.length?"l["+u5(this.a)+"]":"l_"+this.b},vX(cZn,"FLabel",447),wAn(144,357,{3:1,144:1,357:1,94:1,134:1},qX),MWn.Ib=function(){return p0(this)},MWn.b=0,vX(cZn,"FNode",144),wAn(2003,1,{}),MWn.bf=function(n){sFn(this,n)},MWn.cf=function(){qmn(this)},MWn.d=0,vX(uZn,"AbstractForceModel",2003),wAn(631,2003,{631:1},Lan),MWn.af=function(n,t){var i,r,c,a;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-lW(n.e)/2-lW(t.e)/2),kL(c,((i=qon(this.e,n,t))>0?-_U(r,this.c)*i:xx(r,this.b)*BB(mMn(n,(fRn(),Zct)),19).a)/a),c},MWn.bf=function(n){sFn(this,n),this.a=BB(mMn(n,(fRn(),qct)),19).a,this.c=Gy(MD(mMn(n,cat))),this.b=Gy(MD(mMn(n,tat)))},MWn.df=function(n){return n<this.a},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"EadesModel",631),wAn(632,2003,{632:1},fH),MWn.af=function(n,t){var i,r,c,a,u;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),u=e.Math.sqrt(c.a*c.a+c.b*c.b),a=Nx(r=e.Math.max(0,u-lW(n.e)/2-lW(t.e)/2),this.a)*BB(mMn(n,(fRn(),Zct)),19).a,(i=qon(this.e,n,t))>0&&(a-=Sy(r,this.a)*i),kL(c,a*this.b/u),c},MWn.bf=function(n){var t,i,r,c,a,u,o;for(sFn(this,n),this.b=Gy(MD(mMn(n,(fRn(),aat)))),this.c=this.b/BB(mMn(n,qct),19).a,r=n.e.c.length,a=0,c=0,o=new Wb(n.e);o.a<o.c.c.length;)a+=(u=BB(n0(o),144)).e.a,c+=u.e.b;t=a*c,i=Gy(MD(mMn(n,cat)))*fJn,this.a=e.Math.sqrt(t/(2*r))*i},MWn.cf=function(){qmn(this),this.b-=this.c},MWn.df=function(n){return this.b>0},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"FruchtermanReingoldModel",632),wAn(849,1,QYn,zh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,oZn),""),"Force Model"),"Determines the model for force calculation."),Oct),(PPn(),gMt)),$at),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,sZn),""),"Iterations"),"The number of iterations on the force model."),iln(300)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,hZn),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,fZn),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),lZn),dMt),Ptt),nbn(hMt)))),a2(n,fZn,oZn,xct),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,bZn),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dMt),Ptt),nbn(hMt)))),a2(n,bZn,oZn,$ct),pUn((new Uh,n))},vX(wZn,"ForceMetaDataProvider",849),wAn(424,22,{3:1,35:1,22:1,424:1},XS);var _ct,Fct,Bct,Hct,qct,Gct,zct,Uct,Xct,Wct,Vct,Qct,Yct,Jct,Zct,nat,tat,eat,iat,rat,cat,aat,uat,oat,sat,hat,fat,lat,bat,wat,dat,gat,pat,vat,mat,yat,kat,jat,Eat,Tat,Mat,Sat,Pat,Cat,Iat,Oat,Aat,$at=Ben(wZn,"ForceModelStrategy",424,Unt,aJ,E_);wAn(988,1,QYn,Uh),MWn.Qe=function(n){pUn(n)},vX(wZn,"ForceOptions",988),wAn(989,1,{},dt),MWn.$e=function(){return new Gv},MWn._e=function(n){},vX(wZn,"ForceOptions/ForceFactory",989),wAn(850,1,QYn,Xh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,NZn),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(hN(),!1)),(PPn(),wMt)),ktt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,xZn),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,DZn),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),bat),gMt),Hat),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,RZn),""),"Stress Epsilon"),"Termination criterion for the iterative process."),lZn),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,KZn),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),iln(DWn)),vMt),Att),nbn(hMt)))),UGn((new Wh,n))},vX(wZn,"StressMetaDataProvider",850),wAn(992,1,QYn,Wh),MWn.Qe=function(n){UGn(n)},vX(wZn,"StressOptions",992),wAn(993,1,{},gt),MWn.$e=function(){return new OR},MWn._e=function(n){},vX(wZn,"StressOptions/StressFactory",993),wAn(1128,209,NJn,OR),MWn.Ze=function(n,t){var e,i,r,c;for(OTn(t,FZn,1),qy(TD(ZAn(n,(rkn(),kat))))?qy(TD(ZAn(n,Pat)))||jJ(new Tw((GM(),new Dy(n)))):vLn(new Gv,n,mcn(t,1)),i=fon(n),c=(e=HFn(this.a,i)).Kc();c.Ob();)(r=BB(c.Pb(),231)).e.c.length<=1||(HHn(this.b,r),i$n(this.b),Otn(r.d,new pt));SUn(i=GUn(e)),HSn(t)},vX(HZn,"StressLayoutProvider",1128),wAn(1129,1,lVn,pt),MWn.td=function(n){_Bn(BB(n,447))},vX(HZn,"StressLayoutProvider/lambda$0$Type",1129),wAn(990,1,{},Tv),MWn.c=0,MWn.e=0,MWn.g=0,vX(HZn,"StressMajorization",990),wAn(379,22,{3:1,35:1,22:1,379:1},WS);var Lat,Nat,xat,Dat,Rat,Kat,_at,Fat,Bat,Hat=Ben(HZn,"StressMajorization/Dimension",379,Unt,j1,T_);wAn(991,1,MYn,xw),MWn.ue=function(n,t){return SK(this.a,BB(n,144),BB(t,144))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(HZn,"StressMajorization/lambda$0$Type",991),wAn(1229,1,{},D0),vX(GZn,"ElkLayered",1229),wAn(1230,1,lVn,vt),MWn.td=function(n){RIn(BB(n,37))},vX(GZn,"ElkLayered/lambda$0$Type",1230),wAn(1231,1,lVn,Dw),MWn.td=function(n){PK(this.a,BB(n,37))},vX(GZn,"ElkLayered/lambda$1$Type",1231),wAn(1263,1,{},$$),vX(GZn,"GraphConfigurator",1263),wAn(759,1,lVn,Rw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$0$Type",759),wAn(760,1,{},mt),MWn.Kb=function(n){return tjn(),new Rq(null,new w1(BB(n,29).a,16))},vX(GZn,"GraphConfigurator/lambda$1$Type",760),wAn(761,1,lVn,Kw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$2$Type",761),wAn(1127,209,NJn,Uv),MWn.Ze=function(n,t){var e;e=SBn(new tm,n),GI(ZAn(n,(HXn(),sgt)))===GI((ufn(),pCt))?rwn(this.a,e,t):wOn(this.a,e,t),gUn(new Qh,e)},vX(GZn,"LayeredLayoutProvider",1127),wAn(356,22,{3:1,35:1,22:1,356:1},VS);var qat,Gat,zat,Uat=Ben(GZn,"LayeredPhases",356,Unt,s5,M_);wAn(1651,1,{},vin),MWn.i=0,vX(zZn,"ComponentsToCGraphTransformer",1651),wAn(1652,1,{},yt),MWn.ef=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(zZn,"ComponentsToCGraphTransformer/1",1652),wAn(81,1,{81:1}),MWn.i=0,MWn.k=!0,MWn.o=KQn;var Xat,Wat,Vat,Qat=vX(UZn,"CNode",81);wAn(460,81,{460:1,81:1},NN,Sgn),MWn.Ib=function(){return""},vX(zZn,"ComponentsToCGraphTransformer/CRectNode",460),wAn(1623,1,{},kt),vX(zZn,"OneDimensionalComponentsCompaction",1623),wAn(1624,1,{},jt),MWn.Kb=function(n){return xZ(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),wAn(1625,1,{},Et),MWn.Kb=function(n){return Ewn(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),wAn(1654,1,{},BX),vX(UZn,"CGraph",1654),wAn(189,1,{189:1},Pgn),MWn.b=0,MWn.c=0,MWn.e=0,MWn.g=!0,MWn.i=KQn,vX(UZn,"CGroup",189),wAn(1653,1,{},Pt),MWn.ef=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(UZn,OYn,1653),wAn(1655,1,{},sOn),MWn.d=!1;var Yat=vX(UZn,xYn,1655);wAn(1656,1,{},Ct),MWn.Kb=function(n){return kM(),hN(),0!=BB(BB(n,46).a,81).d.e},MWn.Fb=function(n){return this===n},vX(UZn,DYn,1656),wAn(823,1,{},Sq),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(UZn,RYn,823),wAn(1825,1,{},DG),vX(XZn,KYn,1825);var Jat=bq(WZn,PYn);wAn(1826,1,{369:1},lY),MWn.Ke=function(n){Gxn(this,BB(n,466))},vX(XZn,_Yn,1826),wAn(1827,1,MYn,It),MWn.ue=function(n,t){return oQ(BB(n,81),BB(t,81))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,FYn,1827),wAn(466,1,{466:1},fP),MWn.a=!1,vX(XZn,BYn,466),wAn(1828,1,MYn,Ot),MWn.ue=function(n,t){return njn(BB(n,466),BB(t,466))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,HYn,1828),wAn(140,1,{140:1},dP,mH),MWn.Fb=function(n){var t;return null!=n&&iut==tsn(n)&&(t=BB(n,140),cV(this.c,t.c)&&cV(this.d,t.d))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d]))},MWn.Ib=function(){return"("+this.c+FWn+this.d+(this.a?"cx":"")+this.b+")"},MWn.a=!0,MWn.c=0,MWn.d=0;var Zat,nut,tut,eut,iut=vX(WZn,"Point",140);wAn(405,22,{3:1,35:1,22:1,405:1},QS);var rut,cut,aut,uut,out,sut,hut,fut,lut,but,wut,dut=Ben(WZn,"Point/Quadrant",405,Unt,t3,S_);wAn(1642,1,{},Vv),MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,MWn.f=null,vX(WZn,"RectilinearConvexHull",1642),wAn(574,1,{369:1},Tpn),MWn.Ke=function(n){_9(this,BB(n,140))},MWn.b=0,vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler",574),wAn(1644,1,MYn,Mt),MWn.ue=function(n,t){return DV(MD(n),MD(t))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),wAn(1643,1,{369:1},ftn),MWn.Ke=function(n){PNn(this,BB(n,140))},MWn.a=0,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(WZn,"RectilinearConvexHull/RectangleEventHandler",1643),wAn(1645,1,MYn,St),MWn.ue=function(n,t){return u0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$0$Type",1645),wAn(1646,1,MYn,Tt),MWn.ue=function(n,t){return o0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$1$Type",1646),wAn(1647,1,MYn,At),MWn.ue=function(n,t){return h0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$2$Type",1647),wAn(1648,1,MYn,$t),MWn.ue=function(n,t){return s0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$3$Type",1648),wAn(1649,1,MYn,Lt),MWn.ue=function(n,t){return jMn(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$4$Type",1649),wAn(1650,1,{},OZ),vX(WZn,"Scanline",1650),wAn(2005,1,{}),vX(VZn,"AbstractGraphPlacer",2005),wAn(325,1,{325:1},Xx),MWn.mf=function(n){return!!this.nf(n)&&(JIn(this.b,BB(mMn(n,(hWn(),Xft)),21),n),!0)},MWn.nf=function(n){var t,e,i;for(t=BB(mMn(n,(hWn(),Xft)),21),i=BB(h6(fut,t),21).Kc();i.Ob();)if(e=BB(i.Pb(),21),!BB(h6(this.b,e),15).dc())return!1;return!0},vX(VZn,"ComponentGroup",325),wAn(765,2005,{},Qv),MWn.of=function(n){var t;for(t=new Wb(this.a);t.a<t.c.c.length;)if(BB(n0(t),325).mf(n))return;WB(this.a,new Xx(n))},MWn.lf=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)i=BB(r.Pb(),37),this.of(i);for(w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;)h=TXn(u=BB(n0(s),325),c),w9(TX(u.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(e=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),e.e);UR(kO(t.f),e.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupGraphPlacer",765),wAn(1293,765,{},hm),MWn.of=function(n){pfn(this,n)},MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)pfn(this,BB(r.Pb(),37));for(v=new Gj,p=new Gj,d=new Gj,w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;){if(u=BB(n0(s),325),dA(BB(mMn(t,(sWn(),bSt)),103))){for(d.a=v.a,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),sIt))){d.a=p.a;break}}else if(gA(BB(mMn(t,bSt),103)))for(d.b=v.b,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),CIt))){d.b=p.b;break}if(h=TXn(BB(u,570),c),w9(TX(u.b),d.a,d.b),dA(BB(mMn(t,bSt),103))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),SIt))){v.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(gA(BB(mMn(t,bSt),103))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),oIt))){v.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(i=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),i.e);UR(kO(t.f),i.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupModelOrderGraphPlacer",1293),wAn(423,22,{3:1,35:1,22:1,423:1},YS);var gut,put,vut,mut=Ben(VZn,"ComponentOrderingStrategy",423,Unt,k1,P_);wAn(650,1,{},Nt),vX(VZn,"ComponentsCompactor",650),wAn(1468,12,QQn,v5),MWn.Fc=function(n){return Yjn(this,BB(n,140))},vX(VZn,"ComponentsCompactor/Hullpoints",1468),wAn(1465,1,{841:1},hvn),MWn.a=!1,vX(VZn,"ComponentsCompactor/InternalComponent",1465),wAn(1464,1,pVn,Yv),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},vX(VZn,"ComponentsCompactor/InternalConnectedComponents",1464),wAn(1467,1,{594:1},dOn),MWn.hf=function(){return null},MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalExternalExtension",1467),wAn(1466,1,{594:1},nm),MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.hf=function(){return this.c},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalUnionExternalExtension",1466),wAn(1470,1,{},Qxn),vX(VZn,"ComponentsCompactor/OuterSegments",1470),wAn(1469,1,{},Jv),vX(VZn,"ComponentsCompactor/Segments",1469),wAn(1264,1,{},bY),vX(VZn,iZn,1264),wAn(1265,1,MYn,xt),MWn.ue=function(n,t){return b0(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"ComponentsProcessor/lambda$0$Type",1265),wAn(570,325,{325:1,570:1},p5),MWn.mf=function(n){return dsn(this,n)},MWn.nf=function(n){return bNn(this,n)},vX(VZn,"ModelOrderComponentGroup",570),wAn(1291,2005,{},Dt),MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;if(1!=n.gc()){if(n.dc())return t.a.c=x8(Ant,HWn,1,0,5,1),t.f.a=0,void(t.f.b=0);if(GI(mMn(t,(HXn(),Cdt)))===GI((Bfn(),wut))){for(s=n.Kc();s.Ob();){for(p=0,d=new Wb((u=BB(s.Pb(),37)).a);d.a<d.c.c.length;)w=BB(n0(d),10),p+=BB(mMn(w,hpt),19).a;u.p=p}SQ(),n.ad(new Rt)}for(a=BB(n.Xb(0),37),t.a.c=x8(Ant,HWn,1,0,5,1),qan(t,a),b=0,y=0,h=n.Kc();h.Ob();)v=(u=BB(h.Pb(),37)).f,b=e.Math.max(b,v.a),y+=v.a*v.b;for(b=e.Math.max(b,e.Math.sqrt(y)*Gy(MD(mMn(t,Edt)))),k=0,j=0,l=0,i=c=Gy(MD(mMn(t,mpt))),o=n.Kc();o.Ob();)k+(v=(u=BB(o.Pb(),37)).f).a>b&&(k=0,j+=l+c,l=0),ZRn(u,k+(g=u.c).a,j+g.b),kO(g),i=e.Math.max(i,k+v.a),l=e.Math.max(l,v.b),k+=v.a+c;if(t.f.a=i,t.f.b=j+l,qy(TD(mMn(a,Mdt)))){for(KXn(r=new Nt,n,c),f=n.Kc();f.Ob();)UR(kO(BB(f.Pb(),37).c),r.e);UR(kO(t.f),r.a)}d9(t,n)}else(m=BB(n.Xb(0),37))!=t&&(t.a.c=x8(Ant,HWn,1,0,5,1),$Kn(t,m,0,0),qan(t,m),kQ(t.d,m.d),t.f.a=m.f.a,t.f.b=m.f.b)},vX(VZn,"SimpleRowGraphPlacer",1291),wAn(1292,1,MYn,Rt),MWn.ue=function(n,t){return zan(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"SimpleRowGraphPlacer/1",1292),wAn(1262,1,qYn,Kt),MWn.Lb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},vX(ZZn,"CompoundGraphPostprocessor/1",1262),wAn(1261,1,n1n,em),MWn.pf=function(n,t){mvn(this,BB(n,37),t)},vX(ZZn,"CompoundGraphPreprocessor",1261),wAn(441,1,{441:1},zfn),MWn.c=!1,vX(ZZn,"CompoundGraphPreprocessor/ExternalPort",441),wAn(243,1,{243:1},L_),MWn.Ib=function(){return dx(this.c)+":"+OIn(this.b)},vX(ZZn,"CrossHierarchyEdge",243),wAn(763,1,MYn,_w),MWn.ue=function(n,t){return Vyn(this,BB(n,243),BB(t,243))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(ZZn,"CrossHierarchyEdgeComparator",763),wAn(299,134,{3:1,299:1,94:1,134:1}),MWn.p=0,vX(t1n,"LGraphElement",299),wAn(17,299,{3:1,17:1,299:1,94:1,134:1},wY),MWn.Ib=function(){return OIn(this)};var yut=vX(t1n,"LEdge",17);wAn(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},min),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.b)},MWn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+LMn(this.a):0==this.a.c.length?"G-layered"+LMn(this.b):"G[layerless"+LMn(this.a)+", layers"+LMn(this.b)+"]"};var kut,jut=vX(t1n,"LGraph",37);wAn(657,1,{}),MWn.qf=function(){return this.e.n},MWn.We=function(n){return mMn(this.e,n)},MWn.rf=function(){return this.e.o},MWn.sf=function(){return this.e.p},MWn.Xe=function(n){return Lx(this.e,n)},MWn.tf=function(n){this.e.n.a=n.a,this.e.n.b=n.b},MWn.uf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},MWn.vf=function(n){this.e.p=n},vX(t1n,"LGraphAdapters/AbstractLShapeAdapter",657),wAn(577,1,{839:1},Fw),MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(this.a.b.c.length),t=new Wb(this.a.b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.b=null,vX(t1n,"LGraphAdapters/LEdgeAdapter",577),wAn(656,1,{},HV),MWn.xf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Np,e=new Wb(this.a.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),this.c.Mb(i)&&(WB(this.b,new __(this,i,this.e)),this.d)){if(Lx(i,(hWn(),Klt)))for(t=BB(mMn(i,Klt),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1));if(Lx(i,Dft))for(t=BB(mMn(i,Dft),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1))}return this.b},MWn.qf=function(){throw Hp(new tk(i1n))},MWn.We=function(n){return mMn(this.a,n)},MWn.rf=function(){return this.a.f},MWn.sf=function(){return this.a.p},MWn.Xe=function(n){return Lx(this.a,n)},MWn.tf=function(n){throw Hp(new tk(i1n))},MWn.uf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},MWn.vf=function(n){this.a.p=n},MWn.b=null,MWn.d=!1,MWn.e=!1,vX(t1n,"LGraphAdapters/LGraphAdapter",656),wAn(576,657,{181:1},Bw),vX(t1n,"LGraphAdapters/LLabelAdapter",576),wAn(575,657,{680:1},__),MWn.yf=function(){return this.b},MWn.zf=function(){return SQ(),SQ(),set},MWn.wf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.e,10).b.c.length),t=new Wb(BB(this.e,10).b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.a,new Bw(n));return this.a},MWn.Af=function(){var n;return new HR((n=BB(this.e,10).d).d,n.c,n.a,n.b)},MWn.Bf=function(){return SQ(),SQ(),set},MWn.Cf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.e,10).j.c.length),t=new Wb(BB(this.e,10).j);t.a<t.c.c.length;)n=BB(n0(t),11),WB(this.c,new gP(n,this.d));return this.c},MWn.Df=function(){return qy(TD(mMn(BB(this.e,10),(hWn(),_ft))))},MWn.Ef=function(n){BB(this.e,10).d.b=n.b,BB(this.e,10).d.d=n.d,BB(this.e,10).d.c=n.c,BB(this.e,10).d.a=n.a},MWn.Ff=function(n){BB(this.e,10).f.b=n.b,BB(this.e,10).f.d=n.d,BB(this.e,10).f.c=n.c,BB(this.e,10).f.a=n.a},MWn.Gf=function(){Ntn(this,(gM(),kut))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LNodeAdapter",575),wAn(1722,657,{838:1},gP),MWn.zf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.a){for(this.a=new Np,e=new Wb(BB(this.e,11).e);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.a,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(fbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.a,new Fw(n))}return this.a},MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(BB(this.e,11).f.c.length),t=new Wb(BB(this.e,11).f);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.Bf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.c){for(this.c=new Np,e=new Wb(BB(this.e,11).g);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.c,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(lbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.c,new Fw(n))}return this.c},MWn.Hf=function(){return BB(this.e,11).j},MWn.If=function(){return qy(TD(mMn(BB(this.e,11),(hWn(),elt))))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LPortAdapter",1722),wAn(1723,1,MYn,_t),MWn.ue=function(n,t){return WDn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t1n,"LGraphAdapters/PortComparator",1723),wAn(804,1,DVn,Ft),MWn.Mb=function(n){return BB(n,10),gM(),!0},vX(t1n,"LGraphAdapters/lambda$0$Type",804),wAn(392,299,{3:1,299:1,392:1,94:1,134:1}),vX(t1n,"LShape",392),wAn(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},qj,O$),MWn.Ib=function(){var n;return null==(n=YH(this))?"label":"l_"+n},vX(t1n,"LLabel",70),wAn(207,1,{3:1,4:1,207:1,414:1}),MWn.Fb=function(n){var t;return!!cL(n,207)&&(t=BB(n,207),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},MWn.Hb=function(){var n,t;return n=VO(this.b)<<16,n|=VO(this.a)&QVn,t=VO(this.c)<<16,n^(t|=VO(this.d)&QVn)},MWn.Jf=function(n){var t,e,i,r,c,a,u,o,s;for(r=0;r<n.length&&Dhn((b1(r,n.length),n.charCodeAt(r)),o1n);)++r;for(t=n.length;t>0&&Dhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(r<t){o=kKn(n.substr(r,t-r),",|;");try{for(a=0,u=(c=o).length;a<u;++a){if(2!=(i=kKn(c[a],"=")).length)throw Hp(new _y("Expecting a list of key-value pairs."));e=RMn(i[0]),s=bSn(RMn(i[1])),mK(e,"top")?this.d=s:mK(e,"left")?this.b=s:mK(e,"bottom")?this.a=s:mK(e,"right")&&(this.c=s)}}catch(h){throw cL(h=lun(h),127)?Hp(new _y(h1n+h)):Hp(h)}}},MWn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"Spacing",207),wAn(142,207,l1n,lm,lA,HR,A_);var Eut=vX(f1n,"ElkMargin",142);wAn(651,142,l1n,fm),vX(t1n,"LMargin",651),wAn(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},$vn),MWn.Ib=function(){return $pn(this)},MWn.i=!1;var Tut,Mut,Sut,Put,Cut,Iut,Out=vX(t1n,"LNode",10);wAn(267,22,{3:1,35:1,22:1,267:1},JS);var Aut,$ut=Ben(t1n,"LNode/NodeType",267,Unt,u9,I_);wAn(116,207,b1n,bm,WA,O_);var Lut,Nut,xut,Dut,Rut,Kut,_ut=vX(f1n,"ElkPadding",116);wAn(764,116,b1n,wm),vX(t1n,"LPadding",764),wAn(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},CSn),MWn.Ib=function(){var n,t,e;return oO(((n=new Ck).a+="p_",n),pyn(this)),this.i&&oO(uO((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&BB(xq(this.e,0),17).c!=this&&(t=BB(xq(this.e,0),17).c,oO((n.a+=" << ",n),pyn(t)),oO(uO((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&BB(xq(this.g,0),17).d!=this&&(e=BB(xq(this.g,0),17).d,oO((n.a+=" >> ",n),pyn(e)),oO(uO((n.a+="[",n),e.i),"]")),n.a},MWn.c=!0,MWn.d=!1;var Fut,But,Hut,qut,Gut=vX(t1n,"LPort",11);wAn(397,1,pVn,Hw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new qw(new Wb(this.a.e))},vX(t1n,"LPort/1",397),wAn(1290,1,QWn,qw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).c},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/1/1",1290),wAn(359,1,pVn,Gw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new zw(new Wb(this.a.g))},vX(t1n,"LPort/2",359),wAn(762,1,QWn,zw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).d},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/2/1",762),wAn(1283,1,pVn,hP),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new m6(this)},vX(t1n,"LPort/CombineIter",1283),wAn(201,1,QWn,m6),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){uE()},MWn.Ob=function(){return zN(this)},MWn.Pb=function(){return y$(this.a)?n0(this.a):n0(this.b)},vX(t1n,"LPort/CombineIter/1",201),wAn(1285,1,qYn,Bt),MWn.Lb=function(n){return Az(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).e.c.length},vX(t1n,"LPort/lambda$0$Type",1285),wAn(1284,1,qYn,Ht),MWn.Lb=function(n){return $z(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).g.c.length},vX(t1n,"LPort/lambda$1$Type",1284),wAn(1286,1,qYn,qt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},vX(t1n,"LPort/lambda$2$Type",1286),wAn(1287,1,qYn,Gt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},vX(t1n,"LPort/lambda$3$Type",1287),wAn(1288,1,qYn,zt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},vX(t1n,"LPort/lambda$4$Type",1288),wAn(1289,1,qYn,Ut),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},vX(t1n,"LPort/lambda$5$Type",1289),wAn(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},HX),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},MWn.Ib=function(){return"L_"+E7(this.b.b,this,0)+LMn(this.a)},vX(t1n,"Layer",29),wAn(1342,1,{},tm),vX(d1n,g1n,1342),wAn(1346,1,{},Xt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),wAn(1349,1,{},Wt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),wAn(1343,1,lVn,Uw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,p1n,1343),wAn(1344,1,lVn,Xw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,v1n,1344),wAn(1345,1,{},Vt),MWn.Kb=function(n){return new Rq(null,new w1(pV(BB(n,79)),16))},vX(d1n,m1n,1345),wAn(1347,1,DVn,Ww),MWn.Mb=function(n){return _A(this.a,BB(n,33))},vX(d1n,y1n,1347),wAn(1348,1,{},Qt),MWn.Kb=function(n){return new Rq(null,new w1(vV(BB(n,79)),16))},vX(d1n,"ElkGraphImporter/lambda$5$Type",1348),wAn(1350,1,DVn,Vw),MWn.Mb=function(n){return FA(this.a,BB(n,33))},vX(d1n,"ElkGraphImporter/lambda$7$Type",1350),wAn(1351,1,DVn,Yt),MWn.Mb=function(n){return AQ(BB(n,79))},vX(d1n,"ElkGraphImporter/lambda$8$Type",1351),wAn(1278,1,{},Qh),vX(d1n,"ElkGraphLayoutTransferrer",1278),wAn(1279,1,DVn,Qw),MWn.Mb=function(n){return JR(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),wAn(1280,1,lVn,Yw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),wAn(1281,1,DVn,Jw),MWn.Mb=function(n){return UD(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),wAn(1282,1,lVn,Zw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),wAn(1485,1,n1n,Jt),MWn.pf=function(n,t){Vrn(BB(n,37),t)},vX(j1n,"CommentNodeMarginCalculator",1485),wAn(1486,1,{},Zt),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"CommentNodeMarginCalculator/lambda$0$Type",1486),wAn(1487,1,lVn,ne),MWn.td=function(n){tHn(BB(n,10))},vX(j1n,"CommentNodeMarginCalculator/lambda$1$Type",1487),wAn(1488,1,n1n,te),MWn.pf=function(n,t){aDn(BB(n,37),t)},vX(j1n,"CommentPostprocessor",1488),wAn(1489,1,n1n,ee),MWn.pf=function(n,t){uUn(BB(n,37),t)},vX(j1n,"CommentPreprocessor",1489),wAn(1490,1,n1n,ie),MWn.pf=function(n,t){jLn(BB(n,37),t)},vX(j1n,"ConstraintsPostprocessor",1490),wAn(1491,1,n1n,re),MWn.pf=function(n,t){can(BB(n,37),t)},vX(j1n,"EdgeAndLayerConstraintEdgeReverser",1491),wAn(1492,1,n1n,ce),MWn.pf=function(n,t){Gwn(BB(n,37),t)},vX(j1n,"EndLabelPostprocessor",1492),wAn(1493,1,{},ae),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPostprocessor/lambda$0$Type",1493),wAn(1494,1,DVn,ue),MWn.Mb=function(n){return MY(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$1$Type",1494),wAn(1495,1,lVn,oe),MWn.td=function(n){ejn(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$2$Type",1495),wAn(1496,1,n1n,se),MWn.pf=function(n,t){ZPn(BB(n,37),t)},vX(j1n,"EndLabelPreprocessor",1496),wAn(1497,1,{},he),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPreprocessor/lambda$0$Type",1497),wAn(1498,1,lVn,D_),MWn.td=function(n){KM(this.a,this.b,this.c,BB(n,10))},MWn.a=0,MWn.b=0,MWn.c=!1,vX(j1n,"EndLabelPreprocessor/lambda$1$Type",1498),wAn(1499,1,DVn,fe),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelPreprocessor/lambda$2$Type",1499),wAn(1500,1,lVn,nd),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$3$Type",1500),wAn(1501,1,DVn,le),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelPreprocessor/lambda$4$Type",1501),wAn(1502,1,lVn,td),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$5$Type",1502),wAn(1551,1,n1n,Vh),MWn.pf=function(n,t){Cln(BB(n,37),t)},vX(j1n,"EndLabelSorter",1551),wAn(1552,1,MYn,be),MWn.ue=function(n,t){return Hgn(BB(n,456),BB(t,456))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"EndLabelSorter/1",1552),wAn(456,1,{456:1},TQ),vX(j1n,"EndLabelSorter/LabelGroup",456),wAn(1553,1,{},we),MWn.Kb=function(n){return EM(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelSorter/lambda$0$Type",1553),wAn(1554,1,DVn,de),MWn.Mb=function(n){return EM(),BB(n,10).k==(uSn(),Cut)},vX(j1n,"EndLabelSorter/lambda$1$Type",1554),wAn(1555,1,lVn,ge),MWn.td=function(n){oSn(BB(n,10))},vX(j1n,"EndLabelSorter/lambda$2$Type",1555),wAn(1556,1,DVn,pe),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelSorter/lambda$3$Type",1556),wAn(1557,1,DVn,ve),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelSorter/lambda$4$Type",1557),wAn(1503,1,n1n,me),MWn.pf=function(n,t){IHn(this,BB(n,37))},MWn.b=0,MWn.c=0,vX(j1n,"FinalSplineBendpointsCalculator",1503),wAn(1504,1,{},ye),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),wAn(1505,1,{},ke),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),wAn(1506,1,DVn,je),MWn.Mb=function(n){return!b5(BB(n,17))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),wAn(1507,1,DVn,Ee),MWn.Mb=function(n){return Lx(BB(n,17),(hWn(),Nlt))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),wAn(1508,1,lVn,ed),MWn.td=function(n){zKn(this.a,BB(n,128))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),wAn(1509,1,lVn,Te),MWn.td=function(n){JPn(BB(n,17).a)},vX(j1n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),wAn(792,1,n1n,id),MWn.pf=function(n,t){Vqn(this,BB(n,37),t)},vX(j1n,"GraphTransformer",792),wAn(511,22,{3:1,35:1,22:1,511:1},ZS);var zut,Uut,Xut,Wut=Ben(j1n,"GraphTransformer/Mode",511,Unt,uJ,tB);wAn(1510,1,n1n,Me),MWn.pf=function(n,t){exn(BB(n,37),t)},vX(j1n,"HierarchicalNodeResizingProcessor",1510),wAn(1511,1,n1n,Se),MWn.pf=function(n,t){lrn(BB(n,37),t)},vX(j1n,"HierarchicalPortConstraintProcessor",1511),wAn(1512,1,MYn,Pe),MWn.ue=function(n,t){return Ipn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),wAn(1513,1,n1n,Ce),MWn.pf=function(n,t){jBn(BB(n,37),t)},vX(j1n,"HierarchicalPortDummySizeProcessor",1513),wAn(1514,1,n1n,Ie),MWn.pf=function(n,t){JDn(this,BB(n,37),t)},MWn.a=0,vX(j1n,"HierarchicalPortOrthogonalEdgeRouter",1514),wAn(1515,1,MYn,Oe),MWn.ue=function(n,t){return _N(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),wAn(1516,1,MYn,Ae),MWn.ue=function(n,t){return P9(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),wAn(1517,1,n1n,$e),MWn.pf=function(n,t){EMn(BB(n,37),t)},vX(j1n,"HierarchicalPortPositionProcessor",1517),wAn(1518,1,n1n,Yh),MWn.pf=function(n,t){rXn(this,BB(n,37))},MWn.a=0,MWn.c=0,vX(j1n,"HighDegreeNodeLayeringProcessor",1518),wAn(571,1,{571:1},Le),MWn.b=-1,MWn.d=-1,vX(j1n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),wAn(1519,1,{},Ne),MWn.Kb=function(n){return q_(),fbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),wAn(1520,1,{},xe),MWn.Kb=function(n){return q_(),lbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),wAn(1526,1,n1n,De),MWn.pf=function(n,t){dFn(this,BB(n,37),t)},vX(j1n,"HyperedgeDummyMerger",1526),wAn(793,1,{},R_),MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(j1n,"HyperedgeDummyMerger/MergeState",793),wAn(1527,1,{},Re),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"HyperedgeDummyMerger/lambda$0$Type",1527),wAn(1528,1,{},Ke),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,10).j,16))},vX(j1n,"HyperedgeDummyMerger/lambda$1$Type",1528),wAn(1529,1,lVn,_e),MWn.td=function(n){BB(n,11).p=-1},vX(j1n,"HyperedgeDummyMerger/lambda$2$Type",1529),wAn(1530,1,n1n,Fe),MWn.pf=function(n,t){bFn(BB(n,37),t)},vX(j1n,"HypernodesProcessor",1530),wAn(1531,1,n1n,Be),MWn.pf=function(n,t){wFn(BB(n,37),t)},vX(j1n,"InLayerConstraintProcessor",1531),wAn(1532,1,n1n,He),MWn.pf=function(n,t){Lcn(BB(n,37),t)},vX(j1n,"InnermostNodeMarginCalculator",1532),wAn(1533,1,n1n,qe),MWn.pf=function(n,t){Vzn(this,BB(n,37))},MWn.a=KQn,MWn.b=KQn,MWn.c=RQn,MWn.d=RQn;var Vut,Qut,Yut,Jut,Zut,not,tot,eot,iot,rot,cot,aot,uot,oot,sot,hot,fot,lot,bot,wot,dot,got,pot,vot,mot,yot,kot,jot,Eot,Tot,Mot,Sot,Pot,Cot,Iot,Oot,Aot,$ot,Lot,Not,xot,Dot,Rot,Kot,_ot,Fot,Bot,Hot,qot,Got,zot,Uot,Xot,Wot,Vot,Qot,Yot,Jot=vX(j1n,"InteractiveExternalPortPositioner",1533);wAn(1534,1,{},Ge),MWn.Kb=function(n){return BB(n,17).d.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),wAn(1535,1,{},rd),MWn.Kb=function(n){return qN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),wAn(1536,1,{},ze),MWn.Kb=function(n){return BB(n,17).c.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),wAn(1537,1,{},cd),MWn.Kb=function(n){return GN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),wAn(1538,1,{},ad),MWn.Kb=function(n){return WR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),wAn(1539,1,{},ud),MWn.Kb=function(n){return VR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),wAn(77,22,{3:1,35:1,22:1,77:1,234:1},nP),MWn.Kf=function(){switch(this.g){case 15:return new dc;case 22:return new gc;case 47:return new mc;case 28:case 35:return new ei;case 32:return new Jt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new id((Srn(),qut));case 0:return new id((Srn(),Hut));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new me;case 55:return new Me;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new $e;case 9:return new Yh;case 49:return new ox;case 37:return new De;case 43:return new Fe;case 27:return new Be;case 30:return new He;case 3:return new qe;case 18:return new Xe;case 29:return new We;case 5:return new Jh;case 50:return new Ue;case 34:return new Zh;case 36:return new ii;case 52:return new Vh;case 11:return new ci;case 7:return new tf;case 39:return new ai;case 45:return new ui;case 16:return new oi;case 10:return new si;case 48:return new fi;case 21:return new li;case 23:return new Ny((oin(),Amt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new af;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new am;case 46:return new Ni;case 31:return new xR;case 14:return new Vi;case 26:return new Sc;case 20:return new nr;case 24:return new Ny((oin(),$mt));default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Zot,nst,tst,est,ist,rst,cst,ast,ust=Ben(j1n,S1n,77,Unt,ENn,nB);wAn(1540,1,n1n,Xe),MWn.pf=function(n,t){Jzn(BB(n,37),t)},vX(j1n,"InvertedPortProcessor",1540),wAn(1541,1,n1n,We),MWn.pf=function(n,t){LKn(BB(n,37),t)},vX(j1n,"LabelAndNodeSizeProcessor",1541),wAn(1542,1,DVn,Ve),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),wAn(1543,1,DVn,Qe),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Mut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),wAn(1544,1,lVn,K_),MWn.td=function(n){_M(this.b,this.a,this.c,BB(n,10))},MWn.a=!1,MWn.c=!1,vX(j1n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),wAn(1545,1,n1n,Jh),MWn.pf=function(n,t){fzn(BB(n,37),t)},vX(j1n,"LabelDummyInserter",1545),wAn(1546,1,qYn,Ye),MWn.Lb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},vX(j1n,"LabelDummyInserter/1",1546),wAn(1547,1,n1n,Ue),MWn.pf=function(n,t){Pqn(BB(n,37),t)},vX(j1n,"LabelDummyRemover",1547),wAn(1548,1,DVn,Je),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelDummyRemover/lambda$0$Type",1548),wAn(1359,1,n1n,Zh),MWn.pf=function(n,t){TGn(this,BB(n,37),t)},MWn.a=null,vX(j1n,"LabelDummySwitcher",1359),wAn(286,1,{286:1},cKn),MWn.c=0,MWn.d=null,MWn.f=0,vX(j1n,"LabelDummySwitcher/LabelDummyInfo",286),wAn(1360,1,{},Ze),MWn.Kb=function(n){return Irn(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"LabelDummySwitcher/lambda$0$Type",1360),wAn(1361,1,DVn,ni),MWn.Mb=function(n){return Irn(),BB(n,10).k==(uSn(),Sut)},vX(j1n,"LabelDummySwitcher/lambda$1$Type",1361),wAn(1362,1,{},hd),MWn.Kb=function(n){return XD(this.a,BB(n,10))},vX(j1n,"LabelDummySwitcher/lambda$2$Type",1362),wAn(1363,1,lVn,fd),MWn.td=function(n){YX(this.a,BB(n,286))},vX(j1n,"LabelDummySwitcher/lambda$3$Type",1363),wAn(1364,1,MYn,ti),MWn.ue=function(n,t){return Lz(BB(n,286),BB(t,286))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"LabelDummySwitcher/lambda$4$Type",1364),wAn(791,1,n1n,ei),MWn.pf=function(n,t){Y6(BB(n,37),t)},vX(j1n,"LabelManagementProcessor",791),wAn(1549,1,n1n,ii),MWn.pf=function(n,t){Nxn(BB(n,37),t)},vX(j1n,"LabelSideSelector",1549),wAn(1550,1,DVn,ri),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelSideSelector/lambda$0$Type",1550),wAn(1558,1,n1n,ci),MWn.pf=function(n,t){EBn(BB(n,37),t)},vX(j1n,"LayerConstraintPostprocessor",1558),wAn(1559,1,n1n,tf),MWn.pf=function(n,t){r$n(BB(n,37),t)},vX(j1n,"LayerConstraintPreprocessor",1559),wAn(360,22,{3:1,35:1,22:1,360:1},tP);var ost,sst,hst,fst,lst,bst,wst,dst,gst,pst=Ben(j1n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Unt,e3,z_);wAn(1560,1,n1n,ai),MWn.pf=function(n,t){Eqn(BB(n,37),t)},vX(j1n,"LayerSizeAndGraphHeightCalculator",1560),wAn(1561,1,n1n,ui),MWn.pf=function(n,t){ALn(BB(n,37),t)},vX(j1n,"LongEdgeJoiner",1561),wAn(1562,1,n1n,oi),MWn.pf=function(n,t){WHn(BB(n,37),t)},vX(j1n,"LongEdgeSplitter",1562),wAn(1563,1,n1n,si),MWn.pf=function(n,t){PGn(this,BB(n,37),t)},MWn.d=0,MWn.e=0,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,vX(j1n,"NodePromotion",1563),wAn(1564,1,{},hi),MWn.Kb=function(n){return BB(n,46),hN(),!0},MWn.Fb=function(n){return this===n},vX(j1n,"NodePromotion/lambda$0$Type",1564),wAn(1565,1,{},od),MWn.Kb=function(n){return aV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$1$Type",1565),wAn(1566,1,{},sd),MWn.Kb=function(n){return uV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$2$Type",1566),wAn(1567,1,n1n,fi),MWn.pf=function(n,t){XUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPostprocessor",1567),wAn(1568,1,n1n,li),MWn.pf=function(n,t){MUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPreprocessor",1568),wAn(1569,1,MYn,bi),MWn.ue=function(n,t){return Zan(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),wAn(1570,1,n1n,wi),MWn.pf=function(n,t){$_n(BB(n,37),t)},vX(j1n,"PartitionMidprocessor",1570),wAn(1571,1,DVn,di),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionMidprocessor/lambda$0$Type",1571),wAn(1572,1,lVn,ld),MWn.td=function(n){$Q(this.a,BB(n,10))},vX(j1n,"PartitionMidprocessor/lambda$1$Type",1572),wAn(1573,1,n1n,gi),MWn.pf=function(n,t){wNn(BB(n,37),t)},vX(j1n,"PartitionPostprocessor",1573),wAn(1574,1,n1n,pi),MWn.pf=function(n,t){NOn(BB(n,37),t)},vX(j1n,"PartitionPreprocessor",1574),wAn(1575,1,DVn,vi),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionPreprocessor/lambda$0$Type",1575),wAn(1576,1,{},mi),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"PartitionPreprocessor/lambda$1$Type",1576),wAn(1577,1,DVn,yi),MWn.Mb=function(n){return Lgn(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$2$Type",1577),wAn(1578,1,lVn,ki),MWn.td=function(n){Run(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$3$Type",1578),wAn(1579,1,n1n,af),MWn.pf=function(n,t){u_n(BB(n,37),t)},vX(j1n,"PortListSorter",1579),wAn(1580,1,{},ji),MWn.Kb=function(n){return zsn(),BB(n,11).e},vX(j1n,"PortListSorter/lambda$0$Type",1580),wAn(1581,1,{},Ei),MWn.Kb=function(n){return zsn(),BB(n,11).g},vX(j1n,"PortListSorter/lambda$1$Type",1581),wAn(1582,1,MYn,Ti),MWn.ue=function(n,t){return T4(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$2$Type",1582),wAn(1583,1,MYn,Mi),MWn.ue=function(n,t){return Oyn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$3$Type",1583),wAn(1584,1,MYn,Si),MWn.ue=function(n,t){return nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$4$Type",1584),wAn(1585,1,n1n,Pi),MWn.pf=function(n,t){WAn(BB(n,37),t)},vX(j1n,"PortSideProcessor",1585),wAn(1586,1,n1n,Ci),MWn.pf=function(n,t){IRn(BB(n,37),t)},vX(j1n,"ReversedEdgeRestorer",1586),wAn(1591,1,n1n,am),MWn.pf=function(n,t){Ymn(this,BB(n,37),t)},vX(j1n,"SelfLoopPortRestorer",1591),wAn(1592,1,{},Ii),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPortRestorer/lambda$0$Type",1592),wAn(1593,1,DVn,Oi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPortRestorer/lambda$1$Type",1593),wAn(1594,1,DVn,Ai),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPortRestorer/lambda$2$Type",1594),wAn(1595,1,{},$i),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopPortRestorer/lambda$3$Type",1595),wAn(1596,1,lVn,bd),MWn.td=function(n){SSn(this.a,BB(n,403))},vX(j1n,"SelfLoopPortRestorer/lambda$4$Type",1596),wAn(794,1,lVn,Li),MWn.td=function(n){nPn(BB(n,101))},vX(j1n,"SelfLoopPortRestorer/lambda$5$Type",794),wAn(1597,1,n1n,Ni),MWn.pf=function(n,t){Lpn(BB(n,37),t)},vX(j1n,"SelfLoopPostProcessor",1597),wAn(1598,1,{},xi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPostProcessor/lambda$0$Type",1598),wAn(1599,1,DVn,Di),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPostProcessor/lambda$1$Type",1599),wAn(1600,1,DVn,Ri),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPostProcessor/lambda$2$Type",1600),wAn(1601,1,lVn,Ki),MWn.td=function(n){Ljn(BB(n,10))},vX(j1n,"SelfLoopPostProcessor/lambda$3$Type",1601),wAn(1602,1,{},_i),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPostProcessor/lambda$4$Type",1602),wAn(1603,1,lVn,wd),MWn.td=function(n){a3(this.a,BB(n,409))},vX(j1n,"SelfLoopPostProcessor/lambda$5$Type",1603),wAn(1604,1,DVn,Fi),MWn.Mb=function(n){return!!BB(n,101).i},vX(j1n,"SelfLoopPostProcessor/lambda$6$Type",1604),wAn(1605,1,lVn,dd),MWn.td=function(n){Ty(this.a,BB(n,101))},vX(j1n,"SelfLoopPostProcessor/lambda$7$Type",1605),wAn(1587,1,n1n,Bi),MWn.pf=function(n,t){Z$n(BB(n,37),t)},vX(j1n,"SelfLoopPreProcessor",1587),wAn(1588,1,{},Hi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPreProcessor/lambda$0$Type",1588),wAn(1589,1,{},qi),MWn.Kb=function(n){return BB(n,409).a},vX(j1n,"SelfLoopPreProcessor/lambda$1$Type",1589),wAn(1590,1,lVn,Gi),MWn.td=function(n){q$(BB(n,17))},vX(j1n,"SelfLoopPreProcessor/lambda$2$Type",1590),wAn(1606,1,n1n,xR),MWn.pf=function(n,t){sSn(this,BB(n,37),t)},vX(j1n,"SelfLoopRouter",1606),wAn(1607,1,{},zi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopRouter/lambda$0$Type",1607),wAn(1608,1,DVn,Ui),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopRouter/lambda$1$Type",1608),wAn(1609,1,DVn,Xi),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopRouter/lambda$2$Type",1609),wAn(1610,1,{},Wi),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopRouter/lambda$3$Type",1610),wAn(1611,1,lVn,eP),MWn.td=function(n){QV(this.a,this.b,BB(n,403))},vX(j1n,"SelfLoopRouter/lambda$4$Type",1611),wAn(1612,1,n1n,Vi),MWn.pf=function(n,t){fxn(BB(n,37),t)},vX(j1n,"SemiInteractiveCrossMinProcessor",1612),wAn(1613,1,DVn,Qi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),wAn(1614,1,DVn,Yi),MWn.Mb=function(n){return Gq(BB(n,10))._b((HXn(),spt))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),wAn(1615,1,MYn,Ji),MWn.ue=function(n,t){return drn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),wAn(1616,1,{},Zi),MWn.Ce=function(n,t){return XQ(BB(n,10),BB(t,10))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),wAn(1618,1,n1n,nr),MWn.pf=function(n,t){MBn(BB(n,37),t)},vX(j1n,"SortByInputModelProcessor",1618),wAn(1619,1,DVn,tr),MWn.Mb=function(n){return 0!=BB(n,11).g.c.length},vX(j1n,"SortByInputModelProcessor/lambda$0$Type",1619),wAn(1620,1,lVn,gd),MWn.td=function(n){fPn(this.a,BB(n,11))},vX(j1n,"SortByInputModelProcessor/lambda$1$Type",1620),wAn(1693,803,{},grn),MWn.Me=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Np,JT(AV(new Rq(null,new w1(this.c.a.b,16)),new dr),new uP(this,t)),pCn(this,new rr),Otn(t,new cr),t.c=x8(Ant,HWn,1,0,5,1),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new ar),new vd(t)),pCn(this,new ur),Otn(t,new or),t.c=x8(Ant,HWn,1,0,5,1),e=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new md(this))),new sr),JT(new Rq(null,new w1(this.c.a.a,16)),new rP(e,t)),pCn(this,new fr),Otn(t,new er),t.c=x8(Ant,HWn,1,0,5,1);break;case 3:i=new Np,pCn(this,new ir),r=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new pd(this))),new hr),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new lr),new aP(r,i)),pCn(this,new br),Otn(i,new wr),i.c=x8(Ant,HWn,1,0,5,1);break;default:throw Hp(new kv)}},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation",1693),wAn(1694,1,qYn,ir),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),wAn(1695,1,{},pd),MWn.Fe=function(n){return GCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),wAn(1703,1,RVn,iP),MWn.Vd=function(){Fkn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),wAn(1705,1,qYn,rr),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),wAn(1706,1,lVn,cr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),wAn(1707,1,DVn,ar),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),wAn(1709,1,lVn,vd),MWn.td=function(n){Ebn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),wAn(1708,1,RVn,lP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),wAn(1710,1,qYn,ur),MWn.Lb=function(n){return cL(BB(n,57).g,10)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),wAn(1711,1,lVn,or),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),wAn(1712,1,{},md),MWn.Fe=function(n){return zCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),wAn(1713,1,{},sr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),wAn(1696,1,{},hr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),wAn(1715,1,lVn,rP),MWn.td=function(n){HG(this.a,this.b,BB(n,307))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),wAn(1714,1,RVn,cP),MWn.Vd=function(){VAn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),wAn(1716,1,qYn,fr),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),wAn(1717,1,lVn,er),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),wAn(1697,1,DVn,lr),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),wAn(1699,1,lVn,aP),MWn.td=function(n){qG(this.a,this.b,BB(n,57))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),wAn(1698,1,RVn,bP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),wAn(1700,1,qYn,br),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),wAn(1701,1,lVn,wr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),wAn(1702,1,DVn,dr),MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),wAn(1704,1,lVn,uP),MWn.td=function(n){Ttn(this.a,this.b,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),wAn(1521,1,n1n,ox),MWn.pf=function(n,t){cqn(this,BB(n,37),t)},vX(A1n,"HorizontalGraphCompactor",1521),wAn(1522,1,{},yd),MWn.Oe=function(n,t){var e,i;return Z7(n,t)?0:(e=f2(n),i=f2(t),e&&e.k==(uSn(),Mut)||i&&i.k==(uSn(),Mut)?0:UN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},MWn.Pe=function(n,t){var e,i;return Z7(n,t)?1:(e=f2(n),i=f2(t),XN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},vX(A1n,"HorizontalGraphCompactor/1",1522),wAn(1523,1,{},gr),MWn.Ne=function(n,t){return MM(),0==n.a.i},vX(A1n,"HorizontalGraphCompactor/lambda$0$Type",1523),wAn(1524,1,{},kd),MWn.Ne=function(n,t){return _Q(this.a,n,t)},vX(A1n,"HorizontalGraphCompactor/lambda$1$Type",1524),wAn(1664,1,{},I7),vX(A1n,"LGraphToCGraphTransformer",1664),wAn(1672,1,DVn,pr),MWn.Mb=function(n){return null!=n},vX(A1n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),wAn(1665,1,{},vr),MWn.Kb=function(n){return G_(),Bbn(mMn(BB(BB(n,57).g,10),(hWn(),dlt)))},vX(A1n,"LGraphToCGraphTransformer/lambda$0$Type",1665),wAn(1666,1,{},mr),MWn.Kb=function(n){return G_(),mfn(BB(BB(n,57).g,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$1$Type",1666),wAn(1675,1,DVn,yr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,10)},vX(A1n,"LGraphToCGraphTransformer/lambda$10$Type",1675),wAn(1676,1,lVn,kr),MWn.td=function(n){KQ(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$11$Type",1676),wAn(1677,1,DVn,jr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,145)},vX(A1n,"LGraphToCGraphTransformer/lambda$12$Type",1677),wAn(1681,1,lVn,Er),MWn.td=function(n){vfn(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$13$Type",1681),wAn(1678,1,lVn,jd),MWn.td=function(n){uA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$14$Type",1678),wAn(1679,1,lVn,Ed),MWn.td=function(n){sA(this.a,BB(n,110))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$15$Type",1679),wAn(1680,1,lVn,Td),MWn.td=function(n){oA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$16$Type",1680),wAn(1682,1,{},Tr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$17$Type",1682),wAn(1683,1,DVn,Mr),MWn.Mb=function(n){return G_(),b5(BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$18$Type",1683),wAn(1684,1,lVn,Md),MWn.td=function(n){Snn(this.a,BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$19$Type",1684),wAn(1668,1,lVn,Sd),MWn.td=function(n){l0(this.a,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$2$Type",1668),wAn(1685,1,{},Sr),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$20$Type",1685),wAn(1686,1,{},Pr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$21$Type",1686),wAn(1687,1,{},Cr),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$22$Type",1687),wAn(1688,1,DVn,Ir),MWn.Mb=function(n){return tx(BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$23$Type",1688),wAn(1689,1,lVn,Pd),MWn.td=function(n){PCn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$24$Type",1689),wAn(1667,1,lVn,oP),MWn.td=function(n){H3(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$3$Type",1667),wAn(1669,1,{},Or),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$4$Type",1669),wAn(1670,1,{},Ar),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$5$Type",1670),wAn(1671,1,{},$r),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$6$Type",1671),wAn(1673,1,lVn,Cd),MWn.td=function(n){KIn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$8$Type",1673),wAn(1674,1,lVn,sP),MWn.td=function(n){x$(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$9$Type",1674),wAn(1663,1,{},Lr),MWn.Le=function(n){var t,e,i,r,c;for(this.a=n,this.d=new Fv,this.c=x8(qit,HWn,121,this.a.a.a.c.length,0,1),this.b=0,e=new Wb(this.a.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).d=this.b,c=AN(oM(new qv,t),this.d),this.c[this.b]=c,++this.b;for(JGn(this),AUn(this),ZLn(this),WKn(B_(this.d),new Xm),r=new Wb(this.a.a.b);r.a<r.c.c.length;)(i=BB(n0(r),57)).d.c=this.c[i.a.d].e+i.b.a},MWn.b=0,vX(A1n,"NetworkSimplexCompaction",1663),wAn(145,1,{35:1,145:1},PBn),MWn.wd=function(n){return Lnn(this,BB(n,145))},MWn.Ib=function(){return mfn(this)},vX(A1n,"VerticalSegment",145),wAn(827,1,{},zEn),MWn.c=0,MWn.e=0,MWn.i=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),wAn(663,1,{663:1},kcn),MWn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},MWn.b=0,MWn.c=0,MWn.f=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),wAn(287,1,{35:1,287:1},Gx),MWn.wd=function(n){return aq(this,BB(n,287))},MWn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},MWn.a=0,MWn.b=0,MWn.c=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),wAn(1929,1,{},ZSn),MWn.b=0,MWn.e=!1,vX($1n,"CrossingMatrixFiller",1929);var vst,mst,yst,kst,jst=bq(L1n,"IInitializable");wAn(1804,1,N1n,vP),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Lf=function(){return this.c!=(oin(),Amt)},MWn.Mf=function(){this.e=x8(ANt,hQn,25,this.d,15,1)},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Qf=function(n,t,e,i){++this.d},MWn.Rf=function(){return!0},MWn.Sf=function(n,t,e,i){return Yhn(this,n,t,e),Z4(this,t)},MWn.Tf=function(n,t){var e;return Yhn(this,n,e=hj(t,n.length),t),bon(this,e)},MWn.d=0,vX($1n,"GreedySwitchHeuristic",1804),wAn(1930,1,{},lG),MWn.b=0,MWn.d=0,vX($1n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),wAn(1917,1,{},uRn),MWn.a=!1,vX($1n,"SwitchDecider",1917),wAn(101,1,{101:1},pPn),MWn.a=null,MWn.c=null,MWn.i=null,vX(x1n,"SelfHyperLoop",101),wAn(1916,1,{},epn),MWn.c=0,MWn.e=0,vX(x1n,"SelfHyperLoopLabels",1916),wAn(411,22,{3:1,35:1,22:1,411:1},mP);var Est,Tst,Mst,Sst,Pst,Cst,Ist=Ben(x1n,"SelfHyperLoopLabels/Alignment",411,Unt,r3,U_);wAn(409,1,{409:1},j6),vX(x1n,"SelfLoopEdge",409),wAn(403,1,{403:1},Ogn),MWn.a=!1,vX(x1n,"SelfLoopHolder",403),wAn(1724,1,DVn,qr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopHolder/lambda$0$Type",1724),wAn(113,1,{113:1},ipn),MWn.a=!1,MWn.c=!1,vX(x1n,"SelfLoopPort",113),wAn(1792,1,DVn,Gr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopPort/lambda$0$Type",1792),wAn(363,22,{3:1,35:1,22:1,363:1},yP);var Ost,Ast,$st,Lst,Nst,xst,Dst,Rst,Kst=Ben(x1n,"SelfLoopType",363,Unt,x5,Y_);wAn(1732,1,{},uf),vX(D1n,"PortRestorer",1732),wAn(361,22,{3:1,35:1,22:1,361:1},kP);var _st,Fst,Bst,Hst,qst,Gst,zst,Ust,Xst,Wst=Ben(D1n,"PortRestorer/PortSideArea",361,Unt,P1,J_);wAn(1733,1,{},Wr),MWn.Kb=function(n){return _Mn(),BB(n,15).Oc()},vX(D1n,"PortRestorer/lambda$0$Type",1733),wAn(1734,1,lVn,Vr),MWn.td=function(n){_Mn(),BB(n,113).c=!1},vX(D1n,"PortRestorer/lambda$1$Type",1734),wAn(1743,1,DVn,Qr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),CIt)},vX(D1n,"PortRestorer/lambda$10$Type",1743),wAn(1744,1,{},Yr),MWn.Kb=function(n){return _Mn(),BB(n,113).d},vX(D1n,"PortRestorer/lambda$11$Type",1744),wAn(1745,1,lVn,Id),MWn.td=function(n){Nj(this.a,BB(n,11))},vX(D1n,"PortRestorer/lambda$12$Type",1745),wAn(1735,1,lVn,Od),MWn.td=function(n){Ax(this.a,BB(n,101))},vX(D1n,"PortRestorer/lambda$2$Type",1735),wAn(1736,1,MYn,Jr),MWn.ue=function(n,t){return oen(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortRestorer/lambda$3$Type",1736),wAn(1737,1,DVn,Zr),MWn.Mb=function(n){return _Mn(),BB(n,113).c},vX(D1n,"PortRestorer/lambda$4$Type",1737),wAn(1738,1,DVn,xr),MWn.Mb=function(n){return Acn(BB(n,11))},vX(D1n,"PortRestorer/lambda$5$Type",1738),wAn(1739,1,DVn,Nr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),sIt)},vX(D1n,"PortRestorer/lambda$6$Type",1739),wAn(1740,1,DVn,Dr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),oIt)},vX(D1n,"PortRestorer/lambda$7$Type",1740),wAn(1741,1,DVn,Rr),MWn.Mb=function(n){return c3(BB(n,11))},vX(D1n,"PortRestorer/lambda$8$Type",1741),wAn(1742,1,DVn,Kr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),SIt)},vX(D1n,"PortRestorer/lambda$9$Type",1742),wAn(270,22,{3:1,35:1,22:1,270:1},WV);var Vst,Qst,Yst,Jst,Zst,nht,tht,eht,iht=Ben(D1n,"PortSideAssigner/Target",270,Unt,Ftn,X_);wAn(1725,1,{},_r),MWn.Kb=function(n){return AV(new Rq(null,new w1(BB(n,101).j,16)),new Xr)},vX(D1n,"PortSideAssigner/lambda$1$Type",1725),wAn(1726,1,{},Fr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$2$Type",1726),wAn(1727,1,lVn,Br),MWn.td=function(n){qCn(BB(n,11),(kUn(),sIt))},vX(D1n,"PortSideAssigner/lambda$3$Type",1727),wAn(1728,1,{},Hr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$4$Type",1728),wAn(1729,1,lVn,Ad),MWn.td=function(n){tv(this.a,BB(n,11))},vX(D1n,"PortSideAssigner/lambda$5$Type",1729),wAn(1730,1,MYn,zr),MWn.ue=function(n,t){return MW(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$6$Type",1730),wAn(1731,1,MYn,Ur),MWn.ue=function(n,t){return oH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$7$Type",1731),wAn(805,1,DVn,Xr),MWn.Mb=function(n){return BB(n,113).c},vX(D1n,"PortSideAssigner/lambda$8$Type",805),wAn(2009,1,{}),vX(R1n,"AbstractSelfLoopRouter",2009),wAn(1750,1,MYn,nc),MWn.ue=function(n,t){return IK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,bJn,1750),wAn(1751,1,MYn,tc),MWn.ue=function(n,t){return CK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,wJn,1751),wAn(1793,2009,{},ec),MWn.Uf=function(n,t,e){return e},vX(R1n,"OrthogonalSelfLoopRouter",1793),wAn(1795,1,lVn,wP),MWn.td=function(n){pgn(this.b,this.a,BB(n,8))},vX(R1n,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),wAn(1794,1793,{},ic),MWn.Uf=function(n,t,e){var i,r;return Kx(e,0,UR(B$((i=n.c.d).n),i.a)),DH(e,UR(B$((r=n.d.d).n),r.a)),E_n(e)},vX(R1n,"PolylineSelfLoopRouter",1794),wAn(1746,1,{},nf),MWn.a=null,vX(R1n,"RoutingDirector",1746),wAn(1747,1,MYn,rc),MWn.ue=function(n,t){return wH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingDirector/lambda$0$Type",1747),wAn(1748,1,{},cc),MWn.Kb=function(n){return SM(),BB(n,101).j},vX(R1n,"RoutingDirector/lambda$1$Type",1748),wAn(1749,1,lVn,ac),MWn.td=function(n){SM(),BB(n,15).ad(Qst)},vX(R1n,"RoutingDirector/lambda$2$Type",1749),wAn(1752,1,{},uc),vX(R1n,"RoutingSlotAssigner",1752),wAn(1753,1,DVn,$d),MWn.Mb=function(n){return CC(this.a,BB(n,101))},vX(R1n,"RoutingSlotAssigner/lambda$0$Type",1753),wAn(1754,1,MYn,Ld),MWn.ue=function(n,t){return Uq(this.a,BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingSlotAssigner/lambda$1$Type",1754),wAn(1796,1793,{},oc),MWn.Uf=function(n,t,e){var i,r,c,a;return i=Gy(MD(gpn(n.b.g.b,(HXn(),jpt)))),nLn(n,t,e,a=new Ux(Pun(Gk(PMt,1),sVn,8,0,[(c=n.c.d,UR(new wA(c.n),c.a))])),i),DH(a,UR(new wA((r=n.d.d).n),r.a)),Fvn(new oBn(a))},vX(R1n,"SplineSelfLoopRouter",1796),wAn(578,1,MYn,Grn,kH),MWn.ue=function(n,t){return fXn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderNodeComparator",578),wAn(1755,1,DVn,sc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$0$Type",1755),wAn(1756,1,{},hc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$1$Type",1756),wAn(1757,1,DVn,fc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$2$Type",1757),wAn(1758,1,{},lc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$3$Type",1758),wAn(1759,1,DVn,bc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$4$Type",1759),wAn(806,1,MYn,O7,pP),MWn.ue=function(n,t){return Nz(this,n,t)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderPortComparator",806),wAn(801,1,{},wc),MWn.Vf=function(n,t){var i,r,c,a;for(c=PSn(t),i=new Np,a=t.f/c,r=1;r<c;++r)WB(i,iln(dG(fan(e.Math.round(r*a)))));return i},MWn.Wf=function(){return!1},vX(_1n,"ARDCutIndexHeuristic",801),wAn(1479,1,n1n,dc),MWn.pf=function(n,t){oKn(BB(n,37),t)},vX(_1n,"BreakingPointInserter",1479),wAn(305,1,{305:1},v3),MWn.Ib=function(){var n;return(n=new Ck).a+="BPInfo[",n.a+="\n\tstart=",uO(n,this.i),n.a+="\n\tend=",uO(n,this.a),n.a+="\n\tnodeStartEdge=",uO(n,this.e),n.a+="\n\tstartEndEdge=",uO(n,this.j),n.a+="\n\toriginalEdge=",uO(n,this.f),n.a+="\n\tstartInLayerDummy=",uO(n,this.k),n.a+="\n\tstartInLayerEdge=",uO(n,this.n),n.a+="\n\tendInLayerDummy=",uO(n,this.b),n.a+="\n\tendInLayerEdge=",uO(n,this.c),n.a},vX(_1n,"BreakingPointInserter/BPInfo",305),wAn(652,1,{652:1},Hd),MWn.a=!1,MWn.b=0,MWn.c=0,vX(_1n,"BreakingPointInserter/Cut",652),wAn(1480,1,n1n,gc),MWn.pf=function(n,t){mLn(BB(n,37),t)},vX(_1n,"BreakingPointProcessor",1480),wAn(1481,1,DVn,pc),MWn.Mb=function(n){return Jnn(BB(n,10))},vX(_1n,"BreakingPointProcessor/0methodref$isEnd$Type",1481),wAn(1482,1,DVn,vc),MWn.Mb=function(n){return Znn(BB(n,10))},vX(_1n,"BreakingPointProcessor/1methodref$isStart$Type",1482),wAn(1483,1,n1n,mc),MWn.pf=function(n,t){rNn(this,BB(n,37),t)},vX(_1n,"BreakingPointRemover",1483),wAn(1484,1,lVn,yc),MWn.td=function(n){BB(n,128).k=!0},vX(_1n,"BreakingPointRemover/lambda$0$Type",1484),wAn(797,1,{},MAn),MWn.b=0,MWn.e=0,MWn.f=0,MWn.j=0,vX(_1n,"GraphStats",797),wAn(798,1,{},kc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/0methodref$max$Type",798),wAn(799,1,{},jc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/2methodref$max$Type",799),wAn(1660,1,{},Ec),MWn.Ce=function(n,t){return vB(MD(n),MD(t))},vX(_1n,"GraphStats/lambda$1$Type",1660),wAn(1661,1,{},Nd),MWn.Kb=function(n){return wpn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$2$Type",1661),wAn(1662,1,{},xd),MWn.Kb=function(n){return VLn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$6$Type",1662),wAn(800,1,{},Tc),MWn.Vf=function(n,t){return BB(mMn(n,(HXn(),_pt)),15)||(SQ(),SQ(),set)},MWn.Wf=function(){return!1},vX(_1n,"ICutIndexCalculator/ManualCutIndexCalculator",800),wAn(802,1,{},Mc),MWn.Vf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(null==t.n&&Dmn(t),k=t.n,null==t.d&&Dmn(t),s=t.d,(y=x8(xNt,qQn,25,k.length,15,1))[0]=k[0],v=k[0],h=1;h<k.length;h++)y[h]=y[h-1]+k[h],v+=k[h];for(c=PSn(t)-1,u=BB(mMn(n,(HXn(),Fpt)),19).a,r=KQn,i=new Np,b=e.Math.max(0,c-u);b<=e.Math.min(t.f-1,c+u);b++){if(g=v/(b+1),p=0,f=1,a=new Np,m=KQn,l=0,o=0,d=s[0],0==b)m=v,null==t.g&&(t.g=Xrn(t,new jc)),o=Gy(t.g);else{for(;f<t.f;)y[f-1]-p>=g&&(WB(a,iln(f)),m=e.Math.max(m,y[f-1]-l),o+=d,p+=y[f-1]-p,l=y[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;o+=d}(w=e.Math.min(1/m,1/t.b/o))>r&&(r=w,i=a)}return i},MWn.Wf=function(){return!1},vX(_1n,"MSDCutIndexHeuristic",802),wAn(1617,1,n1n,Sc),MWn.pf=function(n,t){bBn(BB(n,37),t)},vX(_1n,"SingleEdgeGraphWrapper",1617),wAn(227,22,{3:1,35:1,22:1,227:1},jP);var rht,cht,aht,uht=Ben(F1n,"CenterEdgeLabelPlacementStrategy",227,Unt,Z8,W_);wAn(422,22,{3:1,35:1,22:1,422:1},EP);var oht,sht,hht,fht,lht=Ben(F1n,"ConstraintCalculationStrategy",422,Unt,GY,V_);wAn(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},TP),MWn.Kf=function(){return sIn(this)},MWn.Xf=function(){return sIn(this)};var bht,wht,dht,ght,pht=Ben(F1n,"CrossingMinimizationStrategy",314,Unt,T1,Q_);wAn(337,22,{3:1,35:1,22:1,337:1},MP);var vht,mht,yht,kht,jht,Eht,Tht=Ben(F1n,"CuttingStrategy",337,Unt,M1,Z_);wAn(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},SP),MWn.Kf=function(){return RAn(this)},MWn.Xf=function(){return RAn(this)};var Mht,Sht,Pht,Cht=Ben(F1n,"CycleBreakingStrategy",335,Unt,L5,nF);wAn(419,22,{3:1,35:1,22:1,419:1},PP);var Iht,Oht,Aht,$ht,Lht=Ben(F1n,"DirectionCongruency",419,Unt,qY,tF);wAn(450,22,{3:1,35:1,22:1,450:1},CP);var Nht,xht,Dht,Rht,Kht,_ht,Fht,Bht=Ben(F1n,"EdgeConstraint",450,Unt,S1,eF);wAn(276,22,{3:1,35:1,22:1,276:1},IP);var Hht,qht,Ght,zht=Ben(F1n,"EdgeLabelSideSelection",276,Unt,i9,iF);wAn(479,22,{3:1,35:1,22:1,479:1},OP);var Uht,Xht,Wht,Vht,Qht,Yht,Jht,Zht=Ben(F1n,"EdgeStraighteningStrategy",479,Unt,HY,rF);wAn(274,22,{3:1,35:1,22:1,274:1},AP);var nft,tft,eft,ift,rft,cft,aft,uft=Ben(F1n,"FixedAlignment",274,Unt,t9,cF);wAn(275,22,{3:1,35:1,22:1,275:1},$P);var oft,sft,hft,fft,lft,bft,wft,dft,gft,pft,vft,mft=Ben(F1n,"GraphCompactionStrategy",275,Unt,n9,aF);wAn(256,22,{3:1,35:1,22:1,256:1},LP);var yft,kft,jft,Eft,Tft=Ben(F1n,"GraphProperties",256,Unt,bcn,uF);wAn(292,22,{3:1,35:1,22:1,292:1},NP);var Mft,Sft,Pft,Cft,Ift=Ben(F1n,"GreedySwitchType",292,Unt,I1,oF);wAn(303,22,{3:1,35:1,22:1,303:1},xP);var Oft,Aft,$ft,Lft=Ben(F1n,"InLayerConstraint",303,Unt,C1,sF);wAn(420,22,{3:1,35:1,22:1,420:1},DP);var Nft,xft,Dft,Rft,Kft,_ft,Fft,Bft,Hft,qft,Gft,zft,Uft,Xft,Wft,Vft,Qft,Yft,Jft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,ult,olt,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,vlt,mlt,ylt,klt,jlt,Elt,Tlt,Mlt,Slt,Plt,Clt,Ilt,Olt,Alt,$lt,Llt,Nlt,xlt,Dlt,Rlt,Klt,_lt,Flt,Blt,Hlt,qlt,Glt=Ben(F1n,"InteractiveReferencePoint",420,Unt,zY,hF);wAn(163,22,{3:1,35:1,22:1,163:1},BP);var zlt,Ult,Xlt,Wlt,Vlt,Qlt,Ylt,Jlt,Zlt,nbt,tbt,ebt,ibt,rbt,cbt,abt,ubt,obt,sbt,hbt,fbt,lbt,bbt,wbt,dbt,gbt,pbt,vbt,mbt,ybt,kbt,jbt,Ebt,Tbt,Mbt,Sbt,Pbt,Cbt,Ibt,Obt,Abt,$bt,Lbt,Nbt,xbt,Dbt,Rbt,Kbt,_bt,Fbt,Bbt,Hbt,qbt,Gbt,zbt,Ubt,Xbt,Wbt,Vbt,Qbt,Ybt,Jbt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,uwt,owt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,vwt,mwt,ywt,kwt,jwt,Ewt,Twt,Mwt,Swt,Pwt,Cwt,Iwt,Owt,Awt,$wt,Lwt,Nwt,xwt,Dwt,Rwt,Kwt,_wt,Fwt,Bwt,Hwt,qwt,Gwt,zwt,Uwt,Xwt,Wwt,Vwt,Qwt,Ywt,Jwt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt,udt,odt,sdt,hdt,fdt,ldt,bdt,wdt,ddt,gdt,pdt,vdt,mdt,ydt,kdt,jdt,Edt,Tdt,Mdt,Sdt,Pdt,Cdt,Idt,Odt,Adt,$dt,Ldt,Ndt,xdt,Ddt,Rdt,Kdt,_dt,Fdt,Bdt,Hdt,qdt,Gdt,zdt,Udt,Xdt,Wdt,Vdt,Qdt,Ydt,Jdt,Zdt,ngt,tgt,egt,igt,rgt,cgt,agt,ugt,ogt,sgt,hgt,fgt,lgt,bgt,wgt,dgt,ggt,pgt,vgt,mgt,ygt,kgt,jgt,Egt,Tgt,Mgt,Sgt,Pgt,Cgt,Igt,Ogt,Agt,$gt,Lgt,Ngt,xgt,Dgt,Rgt,Kgt,_gt,Fgt,Bgt,Hgt,qgt,Ggt,zgt,Ugt,Xgt,Wgt,Vgt,Qgt,Ygt,Jgt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,upt,opt,spt,hpt,fpt,lpt,bpt,wpt,dpt,gpt,ppt,vpt,mpt,ypt,kpt,jpt,Ept,Tpt,Mpt,Spt,Ppt,Cpt,Ipt,Opt,Apt,$pt,Lpt,Npt,xpt,Dpt,Rpt,Kpt,_pt,Fpt,Bpt,Hpt,qpt,Gpt,zpt,Upt,Xpt,Wpt,Vpt,Qpt,Ypt,Jpt,Zpt,nvt,tvt,evt,ivt=Ben(F1n,"LayerConstraint",163,Unt,D5,fF);wAn(848,1,QYn,hf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U1n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),Pbt),(PPn(),gMt)),Lht),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X1n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W1n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Qbt),gMt),Glt),nbn(hMt)))),a2(n,W1n,e0n,Jbt),a2(n,W1n,l0n,Ybt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V1n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q1n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Pj(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y1n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wMt),ktt),nbn(fMt)),Pun(Gk(Qtt,1),sVn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J1n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xwt),gMt),zvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z1n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),iln(7)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n0n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t0n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e0n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),Mbt),gMt),Cht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i0n),f2n),"Node Layering Strategy"),"Strategy for node layering."),bwt),gMt),ovt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r0n),f2n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),iwt),gMt),ivt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c0n),f2n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a0n),f2n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u0n),l2n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),iln(4)),vMt),Att),nbn(hMt)))),a2(n,u0n,i0n,awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o0n),l2n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),iln(2)),vMt),Att),nbn(hMt)))),a2(n,o0n,i0n,owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s0n),b2n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fwt),gMt),Dvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h0n),b2n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),iln(0)),vMt),Att),nbn(hMt)))),a2(n,h0n,s0n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f0n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),iln(DWn)),vMt),Att),nbn(hMt)))),a2(n,f0n,i0n,nwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l0n),w2n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),Ebt),gMt),pht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b0n),w2n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w0n),w2n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dMt),Ptt),nbn(hMt)))),a2(n,w0n,d2n,pbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d0n),w2n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wMt),ktt),nbn(hMt)))),a2(n,d0n,l0n,kbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,g0n),w2n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p0n),w2n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v0n),g2n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),iln(40)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m0n),g2n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),wbt),gMt),Ift),nbn(hMt)))),a2(n,m0n,l0n,dbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y0n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),hbt),gMt),Ift),nbn(hMt)))),a2(n,y0n,l0n,fbt),a2(n,y0n,d2n,lbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k0n),p2n),"Node Placement Strategy"),"Strategy for node placement."),Lwt),gMt),Avt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,j0n),p2n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wMt),ktt),nbn(hMt)))),a2(n,j0n,k0n,Ewt),a2(n,j0n,k0n,Twt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E0n),v2n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),pwt),gMt),Zht),nbn(hMt)))),a2(n,E0n,k0n,vwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T0n),v2n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),ywt),gMt),uft),nbn(hMt)))),a2(n,T0n,k0n,kwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M0n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dMt),Ptt),nbn(hMt)))),a2(n,M0n,k0n,Swt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,S0n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gMt),kvt),nbn(sMt)))),a2(n,S0n,k0n,Awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P0n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Iwt),gMt),kvt),nbn(hMt)))),a2(n,P0n,k0n,Owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C0n),m2n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),xbt),gMt),nmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I0n),m2n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Rbt),gMt),cmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O0n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),_bt),gMt),hmt),nbn(hMt)))),a2(n,O0n,y2n,Fbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A0n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dMt),Ptt),nbn(hMt)))),a2(n,A0n,y2n,Hbt),a2(n,A0n,O0n,qbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,$0n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dMt),Ptt),nbn(hMt)))),a2(n,$0n,y2n,Lbt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,L0n),k2n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N0n),k2n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x0n),k2n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D0n),k2n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R0n),j2n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K0n),j2n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_0n),j2n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F0n),E2n),DJn),"Tries to further compact components (disconnected sub-graphs)."),!1),wMt),ktt),nbn(hMt)))),a2(n,F0n,kZn,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B0n),T2n),"Post Compaction Strategy"),M2n),Ylt),gMt),mft),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H0n),T2n),"Post Compaction Constraint Calculation"),M2n),Vlt),gMt),lht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q0n),S2n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G0n),S2n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),iln(16)),vMt),Att),nbn(hMt)))),a2(n,G0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z0n),S2n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),iln(5)),vMt),Att),nbn(hMt)))),a2(n,z0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U0n),P2n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bdt),gMt),Smt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X0n),P2n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dMt),Ptt),nbn(hMt)))),a2(n,X0n,U0n,Uwt),a2(n,X0n,U0n,Xwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W0n),P2n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dMt),Ptt),nbn(hMt)))),a2(n,W0n,U0n,Vwt),a2(n,W0n,U0n,Qwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V0n),C2n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),idt),gMt),Tht),nbn(hMt)))),a2(n,V0n,U0n,rdt),a2(n,V0n,U0n,cdt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Q0n),C2n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),mMt),Rnt),nbn(hMt)))),a2(n,Q0n,V0n,Jwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y0n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),ndt),vMt),Att),nbn(hMt)))),a2(n,Y0n,V0n,tdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J0n),I2n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),vdt),gMt),dmt),nbn(hMt)))),a2(n,J0n,U0n,mdt),a2(n,J0n,U0n,ydt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Z0n),I2n),"Valid Indices for Wrapping"),null),mMt),Rnt),nbn(hMt)))),a2(n,Z0n,U0n,ddt),a2(n,Z0n,U0n,gdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n2n),O2n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wMt),ktt),nbn(hMt)))),a2(n,n2n,U0n,sdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t2n),O2n),"Distance Penalty When Improving Cuts"),null),2),dMt),Ptt),nbn(hMt)))),a2(n,t2n,U0n,udt),a2(n,t2n,n2n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e2n),O2n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wMt),ktt),nbn(hMt)))),a2(n,e2n,U0n,fdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i2n),A2n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Abt),gMt),zht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r2n),A2n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),Ibt),gMt),uht),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c2n),$2n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),abt),gMt),Fvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a2n),$2n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u2n),$2n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Zlt),gMt),mut),nbn(hMt)))),a2(n,u2n,kZn,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o2n),$2n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),ibt),gMt),wvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s2n),$2n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,s2n,c2n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h2n),$2n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,h2n,c2n,null),vWn((new bf,n))},vX(F1n,"LayeredMetaDataProvider",848),wAn(986,1,QYn,bf),MWn.Qe=function(n){vWn(n)},vX(F1n,"LayeredOptions",986),wAn(987,1,{},Cc),MWn.$e=function(){return new Uv},MWn._e=function(n){},vX(F1n,"LayeredOptions/LayeredFactory",987),wAn(1372,1,{}),MWn.a=0,vX(y3n,"ElkSpacings/AbstractSpacingsBuilder",1372),wAn(779,1372,{},uwn),vX(F1n,"LayeredSpacings/LayeredSpacingsBuilder",779),wAn(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},RP),MWn.Kf=function(){return rLn(this)},MWn.Xf=function(){return rLn(this)};var rvt,cvt,avt,uvt,ovt=Ben(F1n,"LayeringStrategy",313,Unt,e9,lF);wAn(378,22,{3:1,35:1,22:1,378:1},KP);var svt,hvt,fvt,lvt,bvt,wvt=Ben(F1n,"LongEdgeOrderingStrategy",378,Unt,E1,bF);wAn(197,22,{3:1,35:1,22:1,197:1},_P);var dvt,gvt,pvt,vvt,mvt,yvt,kvt=Ben(F1n,"NodeFlexibility",197,Unt,k3,wF);wAn(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},FP),MWn.Kf=function(){return DAn(this)},MWn.Xf=function(){return DAn(this)};var jvt,Evt,Tvt,Mvt,Svt,Pvt,Cvt,Ivt,Ovt,Avt=Ben(F1n,"NodePlacementStrategy",315,Unt,$5,yF);wAn(260,22,{3:1,35:1,22:1,260:1},HP);var $vt,Lvt,Nvt,xvt,Dvt=Ben(F1n,"NodePromotionStrategy",260,Unt,Btn,gF);wAn(339,22,{3:1,35:1,22:1,339:1},qP);var Rvt,Kvt,_vt,Fvt=Ben(F1n,"OrderingStrategy",339,Unt,A1,pF);wAn(421,22,{3:1,35:1,22:1,421:1},GP);var Bvt,Hvt,qvt,Gvt,zvt=Ben(F1n,"PortSortingStrategy",421,Unt,UY,vF);wAn(452,22,{3:1,35:1,22:1,452:1},zP);var Uvt,Xvt,Wvt,Vvt,Qvt=Ben(F1n,"PortType",452,Unt,O1,dF);wAn(375,22,{3:1,35:1,22:1,375:1},UP);var Yvt,Jvt,Zvt,nmt=Ben(F1n,"SelfLoopDistributionStrategy",375,Unt,$1,mF);wAn(376,22,{3:1,35:1,22:1,376:1},XP);var tmt,emt,imt,rmt,cmt=Ben(F1n,"SelfLoopOrderingStrategy",376,Unt,BY,kF);wAn(304,1,{304:1},sGn),vX(F1n,"Spacings",304),wAn(336,22,{3:1,35:1,22:1,336:1},WP);var amt,umt,omt,smt,hmt=Ben(F1n,"SplineRoutingMode",336,Unt,N1,jF);wAn(338,22,{3:1,35:1,22:1,338:1},VP);var fmt,lmt,bmt,wmt,dmt=Ben(F1n,"ValidifyStrategy",338,Unt,x1,EF);wAn(377,22,{3:1,35:1,22:1,377:1},QP);var gmt,pmt,vmt,mmt,ymt,kmt,jmt,Emt,Tmt,Mmt,Smt=Ben(F1n,"WrappingStrategy",377,Unt,L1,TF);wAn(1383,1,E3n,wf),MWn.Yf=function(n){return BB(n,37),pmt},MWn.pf=function(n,t){JHn(this,BB(n,37),t)},vX(T3n,"DepthFirstCycleBreaker",1383),wAn(782,1,E3n,KG),MWn.Yf=function(n){return BB(n,37),vmt},MWn.pf=function(n,t){UXn(this,BB(n,37),t)},MWn.Zf=function(n){return BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyCycleBreaker",782),wAn(1386,782,E3n,TI),MWn.Zf=function(n){var t,e,i,r;for(r=null,t=DWn,i=new Wb(n);i.a<i.c.c.length;)Lx(e=BB(n0(i),10),(hWn(),wlt))&&BB(mMn(e,wlt),19).a<t&&(t=BB(mMn(e,wlt),19).a,r=e);return r||BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyModelOrderCycleBreaker",1386),wAn(1384,1,E3n,rf),MWn.Yf=function(n){return BB(n,37),mmt},MWn.pf=function(n,t){Iqn(this,BB(n,37),t)},vX(T3n,"InteractiveCycleBreaker",1384),wAn(1385,1,E3n,cf),MWn.Yf=function(n){return BB(n,37),ymt},MWn.pf=function(n,t){Lqn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,vX(T3n,"ModelOrderCycleBreaker",1385),wAn(1389,1,E3n,$M),MWn.Yf=function(n){return BB(n,37),kmt},MWn.pf=function(n,t){JXn(this,BB(n,37),t)},vX(M3n,"CoffmanGrahamLayerer",1389),wAn(1390,1,MYn,Dd),MWn.ue=function(n,t){return BIn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),wAn(1391,1,MYn,Rd),MWn.ue=function(n,t){return zG(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/lambda$1$Type",1391),wAn(1392,1,E3n,Ic),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),kot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){EUn(this,BB(n,37),t)},vX(M3n,"InteractiveLayerer",1392),wAn(569,1,{569:1},im),MWn.a=0,MWn.c=0,vX(M3n,"InteractiveLayerer/LayerSpan",569),wAn(1388,1,E3n,ef),MWn.Yf=function(n){return BB(n,37),jmt},MWn.pf=function(n,t){qxn(this,BB(n,37),t)},vX(M3n,"LongestPathLayerer",1388),wAn(1395,1,E3n,sf),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){iXn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,MWn.d=0,vX(M3n,"MinWidthLayerer",1395),wAn(1396,1,MYn,Kd),MWn.ue=function(n,t){return dan(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),wAn(1387,1,E3n,of),MWn.Yf=function(n){return BB(n,37),Mmt},MWn.pf=function(n,t){mGn(this,BB(n,37),t)},vX(M3n,"NetworkSimplexLayerer",1387),wAn(1393,1,E3n,RR),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){$zn(this,BB(n,37),t)},MWn.d=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.s=0,MWn.t=0,MWn.u=0,vX(M3n,"StretchWidthLayerer",1393),wAn(1394,1,MYn,Oc),MWn.ue=function(n,t){return R6(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"StretchWidthLayerer/1",1394),wAn(402,1,S3n),MWn.Nf=function(n,t,e,i,r,c){},MWn._f=function(n,t,e){return r_n(this,n,t,e)},MWn.Mf=function(){this.g=x8(DNt,P3n,25,this.d,15,1),this.f=x8(DNt,P3n,25,this.d,15,1)},MWn.Of=function(n,t){this.e[n]=x8(ANt,hQn,25,t[n].length,15,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},MWn.Qf=function(n,t,e,i){BB(xq(i[n][t].j,e),11).p=this.d++},MWn.b=0,MWn.c=0,MWn.d=0,vX(C3n,"AbstractBarycenterPortDistributor",402),wAn(1633,1,MYn,_d),MWn.ue=function(n,t){return qgn(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),wAn(817,1,N1n,G2),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Qf=function(n,t,e,i){},MWn.Lf=function(){return!1},MWn.Mf=function(){this.c=this.e.a,this.g=this.f.g},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Rf=function(){return!1},MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,BB(this,660)):(SQ(),m$(n,this.d)),Ban(this.e,n))},MWn.Sf=function(n,t,e,i){var r,c,a,u,o,s,h;for(t!=Jq(e,n.length)&&(c=n[t-(e?1:-1)],G6(this.f,c,e?(ain(),qvt):(ain(),Hvt))),r=n[t][0],h=!i||r.k==(uSn(),Mut),s=u6(n[t]),this.ag(s,h,!1,e),a=0,o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),n[t][a++]=u;return!1},MWn.Tf=function(n,t){var e,i,r,c,a;for(c=u6(n[a=Jq(t,n.length)]),this.ag(c,!1,!0,t),e=0,r=new Wb(c);r.a<r.c.c.length;)i=BB(n0(r),10),n[a][e++]=i;return!1},vX(C3n,"BarycenterHeuristic",817),wAn(658,1,{658:1},Bd),MWn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},MWn.b=0,MWn.d=0,MWn.e=!1;var Pmt=vX(C3n,"BarycenterHeuristic/BarycenterState",658);wAn(1802,1,MYn,Fd),MWn.ue=function(n,t){return MEn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"BarycenterHeuristic/lambda$0$Type",1802),wAn(816,1,N1n,UEn),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){this.a[n]=x8(Pmt,{3:1,4:1,5:1,2018:1},658,t[n].length,0,1),this.b[n]=x8(Lmt,{3:1,4:1,5:1,2019:1},233,t[n].length,0,1)},MWn.Pf=function(n,t,e){Dgn(this,e[n][t],!0)},MWn.c=!1,vX(C3n,"ForsterConstraintResolver",816),wAn(233,1,{233:1},DY,uGn),MWn.Ib=function(){var n,t;for((t=new Ck).a+="[",n=0;n<this.d.length;n++)oO(t,$pn(this.d[n])),null!=lL(this.g,this.d[0]).a&&oO(oO((t.a+="<",t),ZI(lL(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=FWn);return(t.a+="]",t).a},MWn.a=0,MWn.c=0,MWn.f=0;var Cmt,Imt,Omt,Amt,$mt,Lmt=vX(C3n,"ForsterConstraintResolver/ConstraintGroup",233);wAn(1797,1,lVn,qd),MWn.td=function(n){Dgn(this.a,BB(n,10),!1)},vX(C3n,"ForsterConstraintResolver/lambda$0$Type",1797),wAn(214,1,{214:1,225:1},CGn),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Mf=function(){this.r=x8(ANt,hQn,25,this.n,15,1)},MWn.Pf=function(n,t,e){var i;(i=e[n][t].e)&&WB(this.b,i)},MWn.Qf=function(n,t,e,i){++this.n},MWn.Ib=function(){return izn(this.e,new Rv)},MWn.g=!1,MWn.i=!1,MWn.n=0,MWn.s=!1,vX(C3n,"GraphInfoHolder",214),wAn(1832,1,N1n,Pc),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Qf=function(n,t,e,i){},MWn._f=function(n,t,e){return e&&t>0?uZ(this.a,n[t-1],n[t]):!e&&t<n.length-1?uZ(this.a,n[t],n[t+1]):yrn(this.a,n[t],e?(kUn(),CIt):(kUn(),oIt)),bLn(this,n,t,e)},MWn.Mf=function(){this.d=x8(ANt,hQn,25,this.c,15,1),this.a=new QK(this.d)},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},MWn.c=0,vX(C3n,"GreedyPortDistributor",1832),wAn(1401,1,E3n,df),MWn.Yf=function(n){return Xhn(BB(n,37))},MWn.pf=function(n,t){XGn(BB(n,37),t)},vX(C3n,"InteractiveCrossingMinimizer",1401),wAn(1402,1,MYn,Gd),MWn.ue=function(n,t){return Hjn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"InteractiveCrossingMinimizer/1",1402),wAn(507,1,{507:1,123:1,51:1},Ny),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Imt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){P_n(this,BB(n,37),t)},MWn.e=0,vX(C3n,"LayerSweepCrossingMinimizer",507),wAn(1398,1,lVn,zd),MWn.td=function(n){wBn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),wAn(1399,1,lVn,Ud),MWn.td=function(n){Ohn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),wAn(1400,1,lVn,Xd),MWn.td=function(n){pFn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),wAn(454,22,{3:1,35:1,22:1,454:1},YP);var Nmt,xmt=Ben(C3n,"LayerSweepCrossingMinimizer/CrossMinType",454,Unt,D1,MF);wAn(1397,1,DVn,Ac),MWn.Mb=function(n){return _cn(),0==BB(n,29).a.c.length},vX(C3n,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),wAn(1799,1,N1n,aZ),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){t[n][0].c.p=n,this.b[n]=x8(_mt,{3:1,4:1,5:1,1944:1},659,t[n].length,0,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,$X(this.b[n],t,new $c)},vX(C3n,"LayerSweepTypeDecider",1799),wAn(659,1,{659:1},$c),MWn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0;var Dmt,Rmt,Kmt,_mt=vX(C3n,"LayerSweepTypeDecider/NodeInfo",659);wAn(1800,1,qYn,Lc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$0$Type",1800),wAn(1801,1,qYn,Nc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$1$Type",1801),wAn(1833,402,S3n,Dj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,o=new Wb(n.j);o.a<o.c.c.length;)0!=(a=BB(n0(o),11)).e.c.length&&(++i,a.j==(kUn(),sIt)&&++r);for(c=t+r,f=t+i,u=xwn(n,(ain(),Hvt)).Kc();u.Ob();)(a=BB(u.Pb(),11)).j==(kUn(),sIt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,u=xwn(n,(ain(),qvt)).Kc();u.Ob();)++h,s[(a=BB(u.Pb(),11)).p]=t+h;return h;default:throw Hp(new wv)}},vX(C3n,"LayerTotalPortDistributor",1833),wAn(660,817,{660:1,225:1},prn),MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,this):(SQ(),m$(n,this.d)),qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),xdt)))||Ban(this.e,n))},vX(C3n,"ModelOrderBarycenterHeuristic",660),wAn(1803,1,MYn,Wd),MWn.ue=function(n,t){return KSn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),wAn(1403,1,E3n,jf),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Dmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){mY((BB(n,37),t))},vX(C3n,"NoCrossingMinimizer",1403),wAn(796,402,S3n,Rj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Wb(n.j);h.a<h.c.c.length;)0!=(o=BB(n0(h),11)).e.c.length&&(++r,o.j==(kUn(),sIt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=xwn(n,(ain(),Hvt)).Kc();s.Ob();)(o=BB(s.Pb(),11)).j==(kUn(),sIt)?(f[o.p]=a,a-=i):(f[o.p]=b,b-=i);break;case 2:for(u=0,h=new Wb(n.j);h.a<h.c.c.length;)0==(o=BB(n0(h),11)).g.c.length||++u;for(l=t+(i=1/(u+1)),s=xwn(n,(ain(),qvt)).Kc();s.Ob();)f[(o=BB(s.Pb(),11)).p]=l,l+=i;break;default:throw Hp(new _y("Port type is undefined"))}return 1},vX(C3n,"NodeRelativePortDistributor",796),wAn(807,1,{},Vz,HMn),vX(C3n,"SweepCopy",807),wAn(1798,1,N1n,wdn),MWn.Of=function(n,t){},MWn.Mf=function(){var n;n=x8(ANt,hQn,25,this.f,15,1),this.d=new eg(n),this.a=new QK(n)},MWn.Nf=function(n,t,e,i,r,c){var a;a=BB(xq(c[n][t].j,e),11),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(uSn(),Iut)},MWn.Qf=function(n,t,e,i){var r;(r=BB(xq(i[n][t].j,e),11)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(kUn(),oIt)?this.b[n]=!0:r.j==CIt&&n>0&&(this.b[n-1]=!0))},MWn.f=0,vX(L1n,"AllCrossingsCounter",1798),wAn(587,1,{},mrn),MWn.b=0,MWn.d=0,vX(L1n,"BinaryIndexedTree",587),wAn(524,1,{},QK),vX(L1n,"CrossingsCounter",524),wAn(1906,1,MYn,Vd),MWn.ue=function(n,t){return Xq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$0$Type",1906),wAn(1907,1,MYn,Qd),MWn.ue=function(n,t){return Wq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$1$Type",1907),wAn(1908,1,MYn,Yd),MWn.ue=function(n,t){return Vq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$2$Type",1908),wAn(1909,1,MYn,Jd),MWn.ue=function(n,t){return Qq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$3$Type",1909),wAn(1910,1,lVn,Zd),MWn.td=function(n){p7(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$4$Type",1910),wAn(1911,1,DVn,ng),MWn.Mb=function(n){return yI(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$5$Type",1911),wAn(1912,1,lVn,tg),MWn.td=function(n){mI(this,n)},vX(L1n,"CrossingsCounter/lambda$6$Type",1912),wAn(1913,1,lVn,ZP),MWn.td=function(n){var t;hH(),d3(this.b,(t=this.a,BB(n,11),t))},vX(L1n,"CrossingsCounter/lambda$7$Type",1913),wAn(826,1,qYn,xc),MWn.Lb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},vX(L1n,"CrossingsCounter/lambda$8$Type",826),wAn(1905,1,{},eg),vX(L1n,"HyperedgeCrossingsCounter",1905),wAn(467,1,{35:1,467:1},DR),MWn.wd=function(n){return vgn(this,BB(n,467))},MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0;var Fmt=vX(L1n,"HyperedgeCrossingsCounter/Hyperedge",467);wAn(362,1,{35:1,362:1},qV),MWn.wd=function(n){return l$n(this,BB(n,362))},MWn.b=0,MWn.c=0;var Bmt,Hmt,qmt=vX(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner",362);wAn(523,22,{3:1,35:1,22:1,523:1},JP);var Gmt,zmt,Umt,Xmt,Wmt,Vmt=Ben(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Unt,XY,SF);wAn(1405,1,E3n,lf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?zmt:null},MWn.pf=function(n,t){ljn(this,BB(n,37),t)},vX(I3n,"InteractiveNodePlacer",1405),wAn(1406,1,E3n,ff),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Umt:null},MWn.pf=function(n,t){jmn(this,BB(n,37),t)},vX(I3n,"LinearSegmentsNodePlacer",1406),wAn(257,1,{35:1,257:1},rm),MWn.wd=function(n){return uj(this,BB(n,257))},MWn.Fb=function(n){var t;return!!cL(n,257)&&(t=BB(n,257),this.b==t.b)},MWn.Hb=function(){return this.b},MWn.Ib=function(){return"ls"+LMn(this.e)},MWn.a=0,MWn.b=0,MWn.c=-1,MWn.d=-1,MWn.g=0;var Qmt,Ymt=vX(I3n,"LinearSegmentsNodePlacer/LinearSegment",257);wAn(1408,1,E3n,_G),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Qmt:null},MWn.pf=function(n,t){SXn(this,BB(n,37),t)},MWn.b=0,MWn.g=0,vX(I3n,"NetworkSimplexPlacer",1408),wAn(1427,1,MYn,Dc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/0methodref$compare$Type",1427),wAn(1429,1,MYn,Rc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/1methodref$compare$Type",1429),wAn(649,1,{649:1},nC);var Jmt=vX(I3n,"NetworkSimplexPlacer/EdgeRep",649);wAn(401,1,{401:1},GV),MWn.b=!1;var Zmt,nyt,tyt,eyt=vX(I3n,"NetworkSimplexPlacer/NodeRep",401);wAn(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},um),vX(I3n,"NetworkSimplexPlacer/Path",508),wAn(1409,1,{},Kc),MWn.Kb=function(n){return BB(n,17).d.i.k},vX(I3n,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),wAn(1410,1,DVn,_c),MWn.Mb=function(n){return BB(n,267)==(uSn(),Put)},vX(I3n,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),wAn(1411,1,{},Fc),MWn.Kb=function(n){return BB(n,17).d.i},vX(I3n,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),wAn(1412,1,DVn,ig),MWn.Mb=function(n){return HD(tdn(BB(n,10)))},vX(I3n,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),wAn(1413,1,DVn,Bc),MWn.Mb=function(n){return hq(BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$0$Type",1413),wAn(1414,1,lVn,tC),MWn.td=function(n){D$(this.a,this.b,BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$1$Type",1414),wAn(1423,1,lVn,rg),MWn.td=function(n){WCn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$10$Type",1423),wAn(1424,1,{},Hc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$11$Type",1424),wAn(1425,1,lVn,cg),MWn.td=function(n){BDn(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$12$Type",1425),wAn(1426,1,{},qc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$13$Type",1426),wAn(1428,1,{},Gc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$15$Type",1428),wAn(1430,1,DVn,zc),MWn.Mb=function(n){return BZ(),BB(n,401).c.k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$17$Type",1430),wAn(1431,1,DVn,Uc),MWn.Mb=function(n){return BZ(),BB(n,401).c.j.c.length>1},vX(I3n,"NetworkSimplexPlacer/lambda$18$Type",1431),wAn(1432,1,lVn,zV),MWn.td=function(n){cwn(this.c,this.b,this.d,this.a,BB(n,401))},MWn.c=0,MWn.d=0,vX(I3n,"NetworkSimplexPlacer/lambda$19$Type",1432),wAn(1415,1,{},Xc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$2$Type",1415),wAn(1433,1,lVn,ag),MWn.td=function(n){N$(this.a,BB(n,11))},MWn.a=0,vX(I3n,"NetworkSimplexPlacer/lambda$20$Type",1433),wAn(1434,1,{},Wc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$21$Type",1434),wAn(1435,1,lVn,ug),MWn.td=function(n){dL(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$22$Type",1435),wAn(1436,1,DVn,Vc),MWn.Mb=function(n){return HD(n)},vX(I3n,"NetworkSimplexPlacer/lambda$23$Type",1436),wAn(1437,1,{},Qc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$24$Type",1437),wAn(1438,1,DVn,og),MWn.Mb=function(n){return EO(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$25$Type",1438),wAn(1439,1,lVn,eC),MWn.td=function(n){MPn(this.a,this.b,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$26$Type",1439),wAn(1440,1,DVn,Yc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$27$Type",1440),wAn(1441,1,DVn,Jc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$28$Type",1441),wAn(1442,1,{},sg),MWn.Ce=function(n,t){return sL(this.a,BB(n,29),BB(t,29))},vX(I3n,"NetworkSimplexPlacer/lambda$29$Type",1442),wAn(1416,1,{},Zc),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$3$Type",1416),wAn(1417,1,DVn,na),MWn.Mb=function(n){return BZ(),t2(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$4$Type",1417),wAn(1418,1,lVn,hg),MWn.td=function(n){iBn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$5$Type",1418),wAn(1419,1,{},ta),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$6$Type",1419),wAn(1420,1,DVn,ea),MWn.Mb=function(n){return BZ(),BB(n,10).k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$7$Type",1420),wAn(1421,1,{},ia),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(hbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$8$Type",1421),wAn(1422,1,DVn,ra),MWn.Mb=function(n){return BZ(),UH(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$9$Type",1422),wAn(1404,1,E3n,Cf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Zmt:null},MWn.pf=function(n,t){kHn(BB(n,37),t)},vX(I3n,"SimpleNodePlacer",1404),wAn(180,1,{180:1},qKn),MWn.Ib=function(){var n;return n="",this.c==(gJ(),tyt)?n+=aJn:this.c==nyt&&(n+=cJn),this.o==(oZ(),ryt)?n+=pJn:this.o==cyt?n+="UP":n+="BALANCED",n},vX($3n,"BKAlignedLayout",180),wAn(516,22,{3:1,35:1,22:1,516:1},cC);var iyt,ryt,cyt,ayt=Ben($3n,"BKAlignedLayout/HDirection",516,Unt,VY,PF);wAn(515,22,{3:1,35:1,22:1,515:1},rC);var uyt,oyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,vyt,myt,yyt,kyt,jyt,Eyt,Tyt,Myt,Syt=Ben($3n,"BKAlignedLayout/VDirection",515,Unt,QY,CF);wAn(1634,1,{},iC),vX($3n,"BKAligner",1634),wAn(1637,1,{},Jyn),vX($3n,"BKCompactor",1637),wAn(654,1,{654:1},ca),MWn.a=0,vX($3n,"BKCompactor/ClassEdge",654),wAn(458,1,{458:1},cm),MWn.a=null,MWn.b=0,vX($3n,"BKCompactor/ClassNode",458),wAn(1407,1,E3n,jI),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?oyt:null},MWn.pf=function(n,t){rWn(this,BB(n,37),t)},MWn.d=!1,vX($3n,"BKNodePlacer",1407),wAn(1635,1,{},aa),MWn.d=0,vX($3n,"NeighborhoodInformation",1635),wAn(1636,1,MYn,fg),MWn.ue=function(n,t){return Mtn(this,BB(n,46),BB(t,46))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($3n,"NeighborhoodInformation/NeighborComparator",1636),wAn(808,1,{}),vX($3n,"ThresholdStrategy",808),wAn(1763,808,{},dm),MWn.bg=function(n,t,e){return this.a.o==(oZ(),cyt)?RQn:KQn},MWn.cg=function(){},vX($3n,"ThresholdStrategy/NullThresholdStrategy",1763),wAn(579,1,{579:1},aC),MWn.c=!1,MWn.d=!1,vX($3n,"ThresholdStrategy/Postprocessable",579),wAn(1764,808,{},gm),MWn.bg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,gJ(),r&&(c=THn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=THn(this,e,!1)),c):n},MWn.cg=function(){for(var n,t,e;0!=this.d.b;)(t=cFn(this,e=BB(PJ(this.d),579))).a&&(n=t.a,(qy(this.a.f[this.a.g[e.b.p].p])||b5(n)||n.c.i.c!=n.d.i.c)&&(b$n(this,e)||rA(this.e,e)));for(;0!=this.e.a.c.length;)b$n(this,BB(thn(this.e),579))},vX($3n,"ThresholdStrategy/SimpleThresholdStrategy",1764),wAn(635,1,{635:1,246:1,234:1},ua),MWn.Kf=function(){return Tan(this)},MWn.Xf=function(){return Tan(this)},vX(L3n,"EdgeRouterFactory",635),wAn(1458,1,E3n,If),MWn.Yf=function(n){return Uxn(BB(n,37))},MWn.pf=function(n,t){DHn(BB(n,37),t)},vX(L3n,"OrthogonalEdgeRouter",1458),wAn(1451,1,E3n,EI),MWn.Yf=function(n){return Ejn(BB(n,37))},MWn.pf=function(n,t){OUn(this,BB(n,37),t)},vX(L3n,"PolylineEdgeRouter",1451),wAn(1452,1,qYn,oa),MWn.Lb=function(n){return Qan(BB(n,10))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return Qan(BB(n,10))},vX(L3n,"PolylineEdgeRouter/1",1452),wAn(1809,1,DVn,sa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$0$Type",1809),wAn(1810,1,{},ha),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$1$Type",1810),wAn(1811,1,DVn,fa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$2$Type",1811),wAn(1812,1,{},la),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$3$Type",1812),wAn(1813,1,{},ba),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$4$Type",1813),wAn(1814,1,{},wa),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$5$Type",1814),wAn(112,1,{35:1,112:1},Fan),MWn.wd=function(n){return oj(this,BB(n,112))},MWn.Fb=function(n){var t;return!!cL(n,112)&&(t=BB(n,112),this.g==t.g)},MWn.Hb=function(){return this.g},MWn.Ib=function(){var n,t,e,i;for(n=new lN("{"),i=new Wb(this.n);i.a<i.c.c.length;)null==(t=gyn((e=BB(n0(i),11)).i))&&(t="n"+AK(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},MWn.a=0,MWn.b=0,MWn.c=NaN,MWn.d=0,MWn.g=0,MWn.i=0,MWn.o=0,MWn.s=NaN,vX(N3n,"HyperEdgeSegment",112),wAn(129,1,{129:1},zZ),MWn.Ib=function(){return this.a+"->"+this.b+" ("+wx(this.c)+")"},MWn.d=0,vX(N3n,"HyperEdgeSegmentDependency",129),wAn(520,22,{3:1,35:1,22:1,520:1},uC);var Pyt,Cyt,Iyt,Oyt,Ayt,$yt,Lyt,Nyt,xyt=Ben(N3n,"HyperEdgeSegmentDependency/DependencyType",520,Unt,WY,IF);wAn(1815,1,{},lg),vX(N3n,"HyperEdgeSegmentSplitter",1815),wAn(1816,1,{},zj),MWn.a=0,MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/AreaRating",1816),wAn(329,1,{329:1},kB),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"HyperEdgeSegmentSplitter/FreeArea",329),wAn(1817,1,MYn,ja),MWn.ue=function(n,t){return OK(BB(n,112),BB(t,112))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(N3n,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),wAn(1818,1,lVn,XV),MWn.td=function(n){n4(this.a,this.d,this.c,this.b,BB(n,112))},MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),wAn(1819,1,{},Ea),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),wAn(1820,1,{},Ta),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),wAn(1821,1,{},Ma),MWn.Fe=function(n){return Gy(MD(n))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),wAn(655,1,{},fX),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"OrthogonalRoutingGenerator",655),wAn(1638,1,{},Sa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$0$Type",1638),wAn(1639,1,{},Pa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$1$Type",1639),wAn(661,1,{}),vX(x3n,"BaseRoutingDirectionStrategy",661),wAn(1807,661,{},pm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t+b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),SIt},MWn.gg=function(){return kUn(),sIt},vX(x3n,"NorthToSouthRoutingStrategy",1807),wAn(1808,661,{},vm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t-b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),sIt},MWn.gg=function(){return kUn(),SIt},vX(x3n,"SouthToNorthRoutingStrategy",1808),wAn(1806,661,{},mm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(a=f,l),DH(u.a,r),F_n(this,u,c,r,!0),(b=n.r)&&(r=new xC(a,w=Gy(MD(Dpn(b.e,0)))),DH(u.a,r),F_n(this,u,c,r,!0),c=b,r=new xC(a=t+b.o*i,w),DH(u.a,r),F_n(this,u,c,r,!0)),r=new xC(a,g),DH(u.a,r),F_n(this,u,c,r,!0)))},MWn.eg=function(n){return n.i.n.b+n.n.b+n.a.b},MWn.fg=function(){return kUn(),oIt},MWn.gg=function(){return kUn(),CIt},vX(x3n,"WestToEastRoutingStrategy",1806),wAn(813,1,{},oBn),MWn.Ib=function(){return LMn(this.a)},MWn.b=0,MWn.c=!1,MWn.d=!1,MWn.f=0,vX(R3n,"NubSpline",813),wAn(407,1,{407:1},Exn,wJ),vX(R3n,"NubSpline/PolarCP",407),wAn(1453,1,E3n,hyn),MWn.Yf=function(n){return rTn(BB(n,37))},MWn.pf=function(n,t){cXn(this,BB(n,37),t)},vX(R3n,"SplineEdgeRouter",1453),wAn(268,1,{268:1},S6),MWn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},MWn.c=0,vX(R3n,"SplineEdgeRouter/Dependency",268),wAn(455,22,{3:1,35:1,22:1,455:1},oC);var Dyt,Ryt,Kyt,_yt,Fyt,Byt=Ben(R3n,"SplineEdgeRouter/SideToProcess",455,Unt,YY,OF);wAn(1454,1,DVn,ya),MWn.Mb=function(n){return gxn(),!BB(n,128).o},vX(R3n,"SplineEdgeRouter/lambda$0$Type",1454),wAn(1455,1,{},ma),MWn.Ge=function(n){return gxn(),BB(n,128).v+1},vX(R3n,"SplineEdgeRouter/lambda$1$Type",1455),wAn(1456,1,lVn,sC),MWn.td=function(n){iq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$2$Type",1456),wAn(1457,1,lVn,hC),MWn.td=function(n){rq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$3$Type",1457),wAn(128,1,{35:1,128:1},tCn,hqn),MWn.wd=function(n){return sj(this,BB(n,128))},MWn.b=0,MWn.e=!1,MWn.f=0,MWn.g=0,MWn.j=!1,MWn.k=!1,MWn.n=0,MWn.o=!1,MWn.p=!1,MWn.q=!1,MWn.s=0,MWn.u=0,MWn.v=0,MWn.F=0,vX(R3n,"SplineSegment",128),wAn(459,1,{459:1},ka),MWn.a=0,MWn.b=!1,MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=0,vX(R3n,"SplineSegment/EdgeInformation",459),wAn(1234,1,{},da),vX(H3n,iZn,1234),wAn(1235,1,MYn,ga),MWn.ue=function(n,t){return IIn(BB(n,135),BB(t,135))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H3n,rZn,1235),wAn(1233,1,{},AE),vX(H3n,"MrTree",1233),wAn(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},fC),MWn.Kf=function(){return AIn(this)},MWn.Xf=function(){return AIn(this)};var Hyt,qyt=Ben(H3n,"TreeLayoutPhases",393,Unt,j3,AF);wAn(1130,209,NJn,_R),MWn.Ze=function(n,t){var e,i,r,c,a,u;for(qy(TD(ZAn(n,(CAn(),Ckt))))||jJ(new Tw((GM(),new Dy(n)))),qan(a=new P6,n),hon(a,(qqn(),skt),n),v_n(n,a,u=new xp),W_n(n,a,u),c=a,i=new Wb(r=x_n(this.a,c));i.a<i.c.c.length;)e=BB(n0(i),135),WEn(this.b,e,mcn(t,1/r.c.length));Izn(c=tWn(r))},vX(H3n,"TreeLayoutProvider",1130),wAn(1847,1,pVn,pa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/1",1847),wAn(1848,1,pVn,va),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/2",1848),wAn(502,134,{3:1,502:1,94:1,134:1}),MWn.g=0,vX(q3n,"TGraphElement",502),wAn(188,502,{3:1,188:1,502:1,94:1,134:1},UQ),MWn.Ib=function(){return this.b&&this.c?g0(this.b)+"->"+g0(this.c):"e_"+nsn(this)},vX(q3n,"TEdge",188),wAn(135,134,{3:1,135:1,94:1,134:1},P6),MWn.Ib=function(){var n,t,e,i,r;for(r=null,i=spn(this.b,0);i.b!=i.d.c;)r+=(null==(e=BB(b3(i),86)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=spn(this.a,0);t.b!=t.d.c;)r+=((n=BB(b3(t),188)).b&&n.c?g0(n.b)+"->"+g0(n.c):"e_"+nsn(n))+"\n";return r};var Gyt=vX(q3n,"TGraph",135);wAn(633,502,{3:1,502:1,633:1,94:1,134:1}),vX(q3n,"TShape",633),wAn(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},csn),MWn.Ib=function(){return g0(this)};var zyt,Uyt,Xyt,Wyt,Vyt,Qyt,Yyt=vX(q3n,"TNode",86);wAn(255,1,pVn,bg),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new wg(spn(this.a.d,0))},vX(q3n,"TNode/2",255),wAn(358,1,QWn,wg),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(b3(this.a),188).c},MWn.Ob=function(){return EE(this.a)},MWn.Qb=function(){mtn(this.a)},vX(q3n,"TNode/2/1",358),wAn(1840,1,n1n,KR),MWn.pf=function(n,t){xFn(this,BB(n,135),t)},vX(G3n,"FanProcessor",1840),wAn(327,22,{3:1,35:1,22:1,327:1,234:1},lC),MWn.Kf=function(){switch(this.g){case 0:return new Qm;case 1:return new KR;case 2:return new Oa;case 3:return new Ca;case 4:return new $a;case 5:return new La;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Jyt,Zyt,nkt,tkt,ekt,ikt,rkt,ckt,akt,ukt,okt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,vkt,mkt,ykt,kkt,jkt,Ekt,Tkt,Mkt,Skt,Pkt,Ckt,Ikt,Okt,Akt,$kt,Lkt,Nkt,xkt,Dkt,Rkt,Kkt,_kt=Ben(G3n,S1n,327,Unt,r9,$F);wAn(1843,1,n1n,Ca),MWn.pf=function(n,t){u$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"LevelHeightProcessor",1843),wAn(1844,1,pVn,Ia),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"LevelHeightProcessor/1",1844),wAn(1841,1,n1n,Oa),MWn.pf=function(n,t){QPn(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NeighborsProcessor",1841),wAn(1842,1,pVn,Aa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"NeighborsProcessor/1",1842),wAn(1845,1,n1n,$a),MWn.pf=function(n,t){a$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NodePositionProcessor",1845),wAn(1839,1,n1n,Qm),MWn.pf=function(n,t){ZHn(this,BB(n,135))},vX(G3n,"RootProcessor",1839),wAn(1846,1,n1n,La),MWn.pf=function(n,t){dln(BB(n,135))},vX(G3n,"Untreeifyer",1846),wAn(851,1,QYn,Pf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X3n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),kkt),(PPn(),gMt)),qkt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W3n),""),"Search Order"),"Which search order to use when computing a spanning tree."),mkt),gMt),Jkt),nbn(hMt)))),KGn((new Sf,n))},vX(V3n,"MrTreeMetaDataProvider",851),wAn(994,1,QYn,Sf),MWn.Qe=function(n){KGn(n)},vX(V3n,"MrTreeOptions",994),wAn(995,1,{},Na),MWn.$e=function(){return new _R},MWn._e=function(n){},vX(V3n,"MrTreeOptions/MrtreeFactory",995),wAn(480,22,{3:1,35:1,22:1,480:1},bC);var Fkt,Bkt,Hkt,qkt=Ben(V3n,"OrderWeighting",480,Unt,ZY,LF);wAn(425,22,{3:1,35:1,22:1,425:1},wC);var Gkt,zkt,Ukt,Xkt,Wkt,Vkt,Qkt,Ykt,Jkt=Ben(V3n,"TreeifyingOrder",425,Unt,JY,xF);wAn(1459,1,E3n,pf),MWn.Yf=function(n){return BB(n,135),zkt},MWn.pf=function(n,t){ycn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),wAn(1460,1,E3n,vf),MWn.Yf=function(n){return BB(n,135),Ukt},MWn.pf=function(n,t){fCn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),wAn(1461,1,E3n,gf),MWn.Yf=function(n){return BB(n,135),Xkt},MWn.pf=function(n,t){nRn(this,BB(n,135),t)},MWn.a=0,vX("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),wAn(1462,1,E3n,mf),MWn.Yf=function(n){return BB(n,135),Wkt},MWn.pf=function(n,t){xkn(BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462),wAn(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},dC),MWn.Kf=function(){return bwn(this)},MWn.Xf=function(){return bwn(this)};var Zkt,njt,tjt,ejt,ijt=Ben(J3n,"RadialLayoutPhases",495,Unt,nJ,NF);wAn(1131,209,NJn,OE),MWn.Ze=function(n,t){var e,i,r;if(OTn(t,"Radial layout",ECn(this,n).c.length),qy(TD(ZAn(n,(Uyn(),Ajt))))||jJ(new Tw((GM(),new Dy(n)))),r=uTn(n),Ypn(n,(wD(),Vkt),r),!r)throw Hp(new _y("The given graph is not a tree!"));for(0==(e=Gy(MD(ZAn(n,Djt))))&&(e=fIn(n)),Ypn(n,Djt,e),i=new Wb(ECn(this,n));i.a<i.c.c.length;)BB(n0(i),51).pf(n,mcn(t,1));HSn(t)},vX(J3n,"RadialLayoutProvider",1131),wAn(549,1,MYn,IE),MWn.ue=function(n,t){return DRn(this.a,this.b,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=0,MWn.b=0,vX(J3n,"RadialUtil/lambda$0$Type",549),wAn(1375,1,n1n,Da),MWn.pf=function(n,t){dGn(BB(n,33),t)},vX(t4n,"CalculateGraphSize",1375),wAn(442,22,{3:1,35:1,22:1,442:1,234:1},gC),MWn.Kf=function(){switch(this.g){case 0:return new Ba;case 1:return new xa;case 2:return new Da;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var rjt,cjt,ajt,ujt=Ben(t4n,S1n,442,Unt,R1,DF);wAn(645,1,{}),MWn.e=1,MWn.g=0,vX(e4n,"AbstractRadiusExtensionCompaction",645),wAn(1772,645,{},gD),MWn.hg=function(n){var t,e,i,r,c,a,u,o,s;for(this.c=BB(ZAn(n,(wD(),Vkt)),33),eb(this,this.c),this.d=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(o=BB(ZAn(n,Mjt),19))&&tb(this,o.a),ib(this,(kW(u=MD(ZAn(n,(sWn(),LPt)))),u)),s=wDn(this.c),this.d&&this.d.lg(s),vKn(this,s),a=new Jy(Pun(Gk(UOt,1),i4n,33,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new Jy(Pun(Gk(UOt,1),i4n,33,0,[(l1(t,s.c.length),BB(s.c[t],33))])),c=t<s.c.length-1?(l1(t+1,s.c.length),BB(s.c[t+1],33)):(l1(0,s.c.length),BB(s.c[0],33)),i=0==t?BB(xq(s,s.c.length-1),33):(l1(t-1,s.c.length),BB(s.c[t-1],33)),ZTn(this,(l1(t,s.c.length),BB(s.c[t],33),a),i,c,r)},vX(e4n,"AnnulusWedgeCompaction",1772),wAn(1374,1,n1n,xa),MWn.pf=function(n,t){bjn(BB(n,33),t)},vX(e4n,"GeneralCompactor",1374),wAn(1771,645,{},Ra),MWn.hg=function(n){var t,e,i,r;e=BB(ZAn(n,(wD(),Vkt)),33),this.f=e,this.b=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(r=BB(ZAn(n,Mjt),19))&&tb(this,r.a),ib(this,(kW(i=MD(ZAn(n,(sWn(),LPt)))),i)),t=wDn(e),this.b&&this.b.lg(t),vPn(this,t)},MWn.a=0,vX(e4n,"RadialCompaction",1771),wAn(1779,1,{},Ka),MWn.ig=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Wb(a=wDn(n));c.a<c.c.c.length;)for(r=BB(n0(c),33),e=++i;e<a.c.length;e++)YFn(this,r,(l1(e,a.c.length),BB(a.c[e],33)))&&(t+=1);return t},vX(r4n,"CrossingMinimizationPosition",1779),wAn(1777,1,{},_a),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f,l,b,w,d;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),f=(o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+o.g/2,l=o.j+o.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new Gj).a=f-c,b.b=l-a,Ukn(u=new xC(b.a,b.b),n.g,n.f),b.a-=u.a,b.b-=u.b,c=f-b.a,a=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},vX(r4n,"EdgeLengthOptimization",1777),wAn(1778,1,{},Fa),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),u=(a=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+a.g/2,o=a.j+a.f/2,c=BB(ZAn(a,(sWn(),gPt)),8),s=u-(n.i+c.a+n.g/2),f=o-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},vX(r4n,"EdgeLengthPositionOptimization",1778),wAn(1373,645,n1n,Ba),MWn.pf=function(n,t){fLn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),wAn(426,22,{3:1,35:1,22:1,426:1},pC);var ojt,sjt,hjt,fjt,ljt=Ben(a4n,"AnnulusWedgeCriteria",426,Unt,tJ,RF);wAn(380,22,{3:1,35:1,22:1,380:1},vC);var bjt,wjt,djt,gjt,pjt,vjt,mjt,yjt,kjt,jjt,Ejt,Tjt,Mjt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,$jt,Ljt,Njt,xjt,Djt,Rjt,Kjt,_jt,Fjt,Bjt,Hjt,qjt,Gjt=Ben(a4n,FJn,380,Unt,K1,KF);wAn(852,1,QYn,yf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u4n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),iln(0)),(PPn(),vMt)),Att),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o4n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s4n),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),gjt),gMt),Gjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h4n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),iln(1)),vMt),Att),nbn(hMt)))),a2(n,h4n,s4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f4n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),jjt),gMt),Yjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l4n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),Tjt),gMt),ljt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b4n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vjt),gMt),Vjt),nbn(hMt)))),tUn((new kf,n))},vX(a4n,"RadialMetaDataProvider",852),wAn(996,1,QYn,kf),MWn.Qe=function(n){tUn(n)},vX(a4n,"RadialOptions",996),wAn(997,1,{},Ha),MWn.$e=function(){return new OE},MWn._e=function(n){},vX(a4n,"RadialOptions/RadialFactory",997),wAn(340,22,{3:1,35:1,22:1,340:1},mC);var zjt,Ujt,Xjt,Wjt,Vjt=Ben(a4n,"RadialTranslationStrategy",340,Unt,E3,_F);wAn(293,22,{3:1,35:1,22:1,293:1},yC);var Qjt,Yjt=Ben(a4n,"SortingStrategy",293,Unt,F1,FF);wAn(1449,1,E3n,qa),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){SLn(this,BB(n,33),t)},MWn.c=0,vX("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),wAn(1775,1,{},Ga),MWn.jg=function(n){return Upn(n)},vX(d4n,"AnnulusWedgeByLeafs",1775),wAn(1776,1,{},za),MWn.jg=function(n){return VEn(this,n)},vX(d4n,"AnnulusWedgeByNodeSpace",1776),wAn(1450,1,E3n,Ua),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){bEn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),wAn(811,1,{},Jm),MWn.kg=function(n){},MWn.lg=function(n){nv(this,n)},vX(g4n,"IDSorter",811),wAn(1774,1,MYn,Xa),MWn.ue=function(n,t){return Qrn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(g4n,"IDSorter/lambda$0$Type",1774),wAn(1773,1,{},Arn),MWn.kg=function(n){c2(this,n)},MWn.lg=function(n){n.dc()||(this.e||c2(this,nG(BB(n.Xb(0),33))),nv(this.e,n))},vX(g4n,"PolarCoordinateSorter",1773),wAn(1136,209,NJn,Wa),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;if(OTn(t,"Rectangle Packing",1),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),i=Gy(MD(ZAn(n,(W$n(),lEt)))),w=BB(ZAn(n,PEt),381),p=qy(TD(ZAn(n,yEt))),y=qy(TD(ZAn(n,SEt))),f=qy(TD(ZAn(n,gEt))),k=BB(ZAn(n,CEt),116),m=Gy(MD(ZAn(n,$Et))),r=qy(TD(ZAn(n,AEt))),l=qy(TD(ZAn(n,pEt))),g=qy(TD(ZAn(n,vEt))),T=Gy(MD(ZAn(n,LEt))),!n.a&&(n.a=new eU(UOt,n,10,11)),Trn(E=n.a),g){for(b=new Np,o=new AL(E);o.e!=o.i.gc();)P8(a=BB(kpn(o),33),dEt)&&(b.c[b.c.length]=a);for(s=new Wb(b);s.a<s.c.c.length;)snn(E,a=BB(n0(s),33));for(SQ(),m$(b,new Va),h=new Wb(b);h.a<h.c.c.length;)a=BB(n0(h),33),j=BB(ZAn(a,dEt),19).a,sln(E,j=e.Math.min(j,E.i),a);for(d=0,u=new AL(E);u.e!=u.i.gc();)Ypn(a=BB(kpn(u),33),wEt,iln(d)),++d}(v=XPn(n)).a-=k.b+k.c,v.b-=k.d+k.a,v.a,T<0||T<v.a?(c=OKn(new jB(i,w,p),E,m,k),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt))):c=new eq(i,T,0,(YLn(),_Et)),v.a+=k.b+k.c,v.b+=k.d+k.a,y||(Trn(E),c=kzn(new m3(i,f,l,r,m),E,e.Math.max(v.a,c.c),v,t,n,k)),pan(E,k),KUn(n,c.c+(k.b+k.c),c.b+(k.d+k.a),!1,!0),qy(TD(ZAn(n,MEt)))||jJ(new Tw((GM(),new Dy(n)))),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),HSn(t)},vX(y4n,"RectPackingLayoutProvider",1136),wAn(1137,1,MYn,Va),MWn.ue=function(n,t){return wsn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y4n,"RectPackingLayoutProvider/lambda$0$Type",1137),wAn(1256,1,{},jB),MWn.a=0,MWn.c=!1,vX(k4n,"AreaApproximation",1256);var Jjt,Zjt,nEt,tEt=bq(k4n,"BestCandidateFilter");wAn(638,1,{526:1},Qa),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=RQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.min(a,(u.c+(i.b+i.c))*(u.b+(i.d+i.a)));for(c=new Wb(n);c.a<c.c.c.length;)((r=BB(n0(c),220)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&(s.c[s.c.length]=r);return s},vX(k4n,"AreaFilter",638),wAn(639,1,{526:1},Ya),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(o=new Np,s=RQn,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),220),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Wb(n);c.a<c.c.c.length;)r=BB(n0(c),220),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&(o.c[o.c.length]=r);return o},vX(k4n,"AspectRatioFilter",639),wAn(637,1,{526:1},Ja),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=KQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.max(a,Yq(u.c+(i.b+i.c),u.b+(i.d+i.a),u.a));for(c=new Wb(n);c.a<c.c.c.length;)Yq((r=BB(n0(c),220)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&(s.c[s.c.length]=r);return s},vX(k4n,"ScaleMeasureFilter",637),wAn(381,22,{3:1,35:1,22:1,381:1},kC);var eEt,iEt,rEt,cEt,aEt,uEt,oEt,sEt,hEt,fEt,lEt,bEt,wEt,dEt,gEt,pEt,vEt,mEt,yEt,kEt,jEt,EEt,TEt,MEt,SEt,PEt,CEt,IEt,OEt,AEt,$Et,LEt,NEt=Ben(j4n,"OptimizationGoal",381,Unt,_1,BF);wAn(856,1,QYn,Of),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E4n),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),sEt),(PPn(),gMt)),NEt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T4n),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(hN(),!0)),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M4n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S4n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P4n),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C4n),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I4n),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),wMt),ktt),nbn(sMt)))),a2(n,I4n,A4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O4n),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dMt),Ptt),nbn(sMt)))),NXn((new Af,n))},vX(j4n,"RectPackingMetaDataProvider",856),wAn(1004,1,QYn,Af),MWn.Qe=function(n){NXn(n)},vX(j4n,"RectPackingOptions",1004),wAn(1005,1,{},Za),MWn.$e=function(){return new Wa},MWn._e=function(n){},vX(j4n,"RectPackingOptions/RectpackingFactory",1005),wAn(1257,1,{},m3),MWn.a=0,MWn.b=!1,MWn.c=0,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=0,vX("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),wAn(187,1,{187:1},asn),MWn.a=0,MWn.c=!1,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.k=!1,MWn.o=RQn,MWn.p=RQn,MWn.r=0,MWn.s=0,MWn.t=0,vX(L4n,"Block",187),wAn(211,1,{211:1},RJ),MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockRow",211),wAn(443,1,{443:1},KJ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockStack",443),wAn(220,1,{220:1},eq,awn),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0;var xEt,DEt,REt,KEt,_Et,FEt=vX(L4n,"DrawingData",220);wAn(355,22,{3:1,35:1,22:1,355:1},jC);var BEt,HEt,qEt,GEt,zEt=Ben(L4n,"DrawingDataDescriptor",355,Unt,N5,HF);wAn(200,1,{200:1},x0),MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0,vX(L4n,"RectRow",200),wAn(756,1,{},Ehn),MWn.j=0,vX(x4n,g1n,756),wAn(1245,1,{},nu),MWn.Je=function(n){return W8(n.a,n.b)},vX(x4n,p1n,1245),wAn(1246,1,{},dg),MWn.Je=function(n){return p6(this.a,n)},vX(x4n,v1n,1246),wAn(1247,1,{},gg),MWn.Je=function(n){return Opn(this.a,n)},vX(x4n,m1n,1247),wAn(1248,1,{},pg),MWn.Je=function(n){return uon(this.a,n)},vX(x4n,"ElkGraphImporter/lambda$3$Type",1248),wAn(1249,1,{},vg),MWn.Je=function(n){return iOn(this.a,n)},vX(x4n,y1n,1249),wAn(1133,209,NJn,$E),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h,f;for(P8(n,(MMn(),kTt))&&(f=SD(ZAn(n,(Bvn(),qTt))),(c=XRn(cin(),f))&&BB(sJ(c.f),209).Ze(n,mcn(t,1))),Ypn(n,gTt,($6(),ZEt)),Ypn(n,pTt,($Sn(),cTt)),Ypn(n,vTt,(Lun(),WTt)),a=BB(ZAn(n,(Bvn(),_Tt)),19).a,OTn(t,"Overlap removal",1),qy(TD(ZAn(n,KTt))),o=new mg(u=new Rv),e=GXn(i=new Ehn,n),s=!0,r=0;r<a&&s;){if(qy(TD(ZAn(n,FTt)))){if(u.a.$b(),HPn(new I$(o),e.i),0==u.a.gc())break;e.e=u}for(h2(this.b),CU(this.b,(Pbn(),HEt),(OM(),GTt)),CU(this.b,qEt,e.g),CU(this.b,GEt,(IM(),QEt)),this.a=$qn(this.b,e),h=new Wb(this.a);h.a<h.c.c.length;)BB(n0(h),51).pf(e,mcn(t,1));cjn(i,e),s=qy(TD(mMn(e,(Xcn(),Yrt)))),++r}DGn(i,e),HSn(t)},vX(x4n,"OverlapRemovalLayoutProvider",1133),wAn(1134,1,{},mg),vX(x4n,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),wAn(437,22,{3:1,35:1,22:1,437:1},EC);var UEt,XEt,WEt=Ben(x4n,"SPOrEPhases",437,Unt,B1,qF);wAn(1255,1,{},LE),vX(x4n,"ShrinkTree",1255),wAn(1135,209,NJn,Zm),MWn.Ze=function(n,t){var e,i,r,c;P8(n,(MMn(),kTt))&&(c=SD(ZAn(n,kTt)),(r=XRn(cin(),c))&&BB(sJ(r.f),209).Ze(n,mcn(t,1))),e=GXn(i=new Ehn,n),$Ln(this.a,e,mcn(t,1)),DGn(i,e)},vX(x4n,"ShrinkTreeLayoutProvider",1135),wAn(300,134,{3:1,300:1,94:1,134:1},DJ),MWn.c=!1,vX("org.eclipse.elk.alg.spore.graph","Graph",300),wAn(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},LM),MWn.Kf=function(){return esn(this)},MWn.Xf=function(){return esn(this)};var VEt,QEt,YEt=Ben(D4n,FJn,482,Unt,KV,GF);wAn(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},vD),MWn.Kf=function(){return new ru},MWn.Xf=function(){return new ru};var JEt,ZEt,nTt,tTt=Ben(D4n,"OverlapRemovalStrategy",551,Unt,_V,zF);wAn(430,22,{3:1,35:1,22:1,430:1},TC);var eTt,iTt,rTt,cTt,aTt,uTt,oTt=Ben(D4n,"RootSelection",430,Unt,iJ,UF);wAn(316,22,{3:1,35:1,22:1,316:1},MC);var sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,vTt,mTt,yTt,kTt,jTt,ETt,TTt,MTt,STt,PTt,CTt,ITt,OTt,ATt,$Tt,LTt,NTt,xTt,DTt,RTt,KTt,_Tt,FTt,BTt,HTt,qTt,GTt,zTt=Ben(D4n,"SpanningTreeCostFunction",316,Unt,A5,XF);wAn(1002,1,QYn,Ef),MWn.Qe=function(n){yHn(n)},vX(D4n,"SporeCompactionOptions",1002),wAn(1003,1,{},tu),MWn.$e=function(){return new Zm},MWn._e=function(n){},vX(D4n,"SporeCompactionOptions/SporeCompactionFactory",1003),wAn(855,1,QYn,Tf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,K4n),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q4n),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),DTt),gMt),VTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_4n),W4n),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),NTt),gMt),YTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F4n),W4n),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),$Tt),gMt),zTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B4n),W4n),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),yMt),Qtt),nbn(hMt)))),a2(n,B4n,H4n,CTt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H4n),W4n),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OTt),gMt),oTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G4n),E2n),"Compaction Strategy"),"This option defines how the compaction is applied."),ETt),gMt),YEt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z4n),E2n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U4n),V4n),"Upper limit for iterations of overlap removal"),null),iln(64)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X4n),V4n),"Whether to run a supplementary scanline overlap check."),null),!0),wMt),ktt),nbn(hMt)))),AKn((new Mf,n)),yHn((new Ef,n))},vX(D4n,"SporeMetaDataProvider",855),wAn(VVn,1,QYn,Mf),MWn.Qe=function(n){AKn(n)},vX(D4n,"SporeOverlapRemovalOptions",VVn),wAn(1001,1,{},eu),MWn.$e=function(){return new $E},MWn._e=function(n){},vX(D4n,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),wAn(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},XW),MWn.Kf=function(){return isn(this)},MWn.Xf=function(){return isn(this)};var UTt,XTt,WTt,VTt=Ben(D4n,"StructureExtractionStrategy",530,Unt,FV,WF);wAn(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},SC),MWn.Kf=function(){return wwn(this)},MWn.Xf=function(){return wwn(this)};var QTt,YTt=Ben(D4n,"TreeConstructionStrategy",429,Unt,eJ,VF);wAn(1443,1,E3n,iu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){Tjn(BB(n,300),t)},vX(Y4n,"DelaunayTriangulationPhase",1443),wAn(1444,1,lVn,yg),MWn.td=function(n){WB(this.a,BB(n,65).a)},vX(Y4n,"DelaunayTriangulationPhase/lambda$0$Type",1444),wAn(783,1,E3n,Vm),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){this.ng(BB(n,300),t)},MWn.ng=function(n,t){var e;OTn(t,"Minimum spanning tree construction",1),e=n.d?n.d.a:BB(xq(n.i,0),65).a,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,e,n.b)),n),HSn(t)},vX(J4n,"MinSTPhase",783),wAn(1446,783,E3n,ym),MWn.ng=function(n,t){var e,i;OTn(t,"Maximum spanning tree construction",1),e=new kg(n),i=n.d?n.d.c:BB(xq(n.i,0),65).c,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,i,e)),n),HSn(t)},vX(J4n,"MaxSTPhase",1446),wAn(1447,1,{},kg),MWn.Je=function(n){return IC(this.a,n)},vX(J4n,"MaxSTPhase/lambda$0$Type",1447),wAn(1445,1,lVn,jg),MWn.td=function(n){R$(this.a,BB(n,65))},vX(J4n,"MinSTPhase/lambda$0$Type",1445),wAn(785,1,E3n,ru),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){WTn(this,BB(n,300),t)},MWn.a=!1,vX(Z4n,"GrowTreePhase",785),wAn(786,1,lVn,EB),MWn.td=function(n){eun(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"GrowTreePhase/lambda$0$Type",786),wAn(1448,1,E3n,cu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){tmn(this,BB(n,300),t)},vX(Z4n,"ShrinkTreeCompactionPhase",1448),wAn(784,1,lVn,TB),MWn.td=function(n){lAn(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var JTt,ZTt,nMt=bq(y3n,"IGraphElementVisitor");wAn(860,1,{527:1},R0),MWn.og=function(n){var t;qan(t=hRn(this,n),BB(RX(this.b,n),94)),yLn(this,n,t)},vX(xJn,"LayoutConfigurator",860);var tMt,eMt,iMt,rMt=bq(xJn,"LayoutConfigurator/IPropertyHolderOptionFilter");wAn(932,1,{1933:1},au),MWn.pg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$0$Type",932),wAn(933,1,{1933:1},uu),MWn.pg=function(n,t){return SE(n,t)},vX(xJn,"LayoutConfigurator/lambda$1$Type",933),wAn(931,1,{831:1},ou),MWn.qg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$2$Type",931),wAn(934,1,DVn,LC),MWn.Mb=function(n){return YW(this.a,this.b,BB(n,1933))},vX(xJn,"LayoutConfigurator/lambda$3$Type",934),wAn(858,1,{},su),vX(xJn,"RecursiveGraphLayoutEngine",858),wAn(296,60,BVn,kv,rk),vX(xJn,"UnsupportedConfigurationException",296),wAn(453,60,BVn,ck),vX(xJn,"UnsupportedGraphException",453),wAn(754,1,{}),vX(y3n,"AbstractRandomListAccessor",754),wAn(500,754,{},CNn),MWn.rg=function(){return null},MWn.d=!0,MWn.e=!0,MWn.f=0,vX(t5n,"AlgorithmAssembler",500),wAn(1236,1,DVn,hu),MWn.Mb=function(n){return!!BB(n,123)},vX(t5n,"AlgorithmAssembler/lambda$0$Type",1236),wAn(1237,1,{},Eg),MWn.Kb=function(n){return bj(this.a,BB(n,123))},vX(t5n,"AlgorithmAssembler/lambda$1$Type",1237),wAn(1238,1,DVn,fu),MWn.Mb=function(n){return!!BB(n,80)},vX(t5n,"AlgorithmAssembler/lambda$2$Type",1238),wAn(1239,1,lVn,Tg),MWn.td=function(n){Jcn(this.a,BB(n,80))},vX(t5n,"AlgorithmAssembler/lambda$3$Type",1239),wAn(1240,1,lVn,NC),MWn.td=function(n){Dx(this.a,this.b,BB(n,234))},vX(t5n,"AlgorithmAssembler/lambda$4$Type",1240),wAn(1355,1,MYn,lu),MWn.ue=function(n,t){return FQ(BB(n,234),BB(t,234))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t5n,"EnumBasedFactoryComparator",1355),wAn(80,754,{80:1},B2),MWn.rg=function(){return new Rv},MWn.a=0,vX(t5n,"LayoutProcessorConfiguration",80),wAn(1013,1,{527:1},$f),MWn.og=function(n){nan(eMt,new Mg(n))},vX(zYn,"DeprecatedLayoutOptionReplacer",1013),wAn(1014,1,lVn,bu),MWn.td=function(n){N9(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),wAn(1015,1,lVn,wu),MWn.td=function(n){Twn(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),wAn(1016,1,{},Mg),MWn.Od=function(n,t){Rx(this.a,BB(n,146),BB(t,38))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),wAn(149,1,{686:1,149:1},MTn),MWn.Fb=function(n){return j5(this,n)},MWn.sg=function(){return this.b},MWn.tg=function(){return this.c},MWn.ne=function(){return this.e},MWn.Hb=function(){return vvn(this.c)},MWn.Ib=function(){return"Layout Algorithm: "+this.c};var cMt,aMt=vX(zYn,"LayoutAlgorithmData",149);wAn(263,1,{},du),vX(zYn,"LayoutAlgorithmData/Builder",263),wAn(1017,1,{527:1},gu),MWn.og=function(n){cL(n,239)&&!qy(TD(n.We((sWn(),zSt))))&&KFn(BB(n,33))},vX(zYn,"LayoutAlgorithmResolver",1017),wAn(229,1,{686:1,229:1},UZ),MWn.Fb=function(n){return!!cL(n,229)&&mK(this.b,BB(n,229).b)},MWn.sg=function(){return this.a},MWn.tg=function(){return this.b},MWn.ne=function(){return this.d},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return"Layout Type: "+this.b},vX(zYn,"LayoutCategoryData",229),wAn(344,1,{},pu),vX(zYn,"LayoutCategoryData/Builder",344),wAn(867,1,{},ORn),vX(zYn,"LayoutMetaDataService",867),wAn(868,1,{},UX),vX(zYn,"LayoutMetaDataService/Registry",868),wAn(478,1,{478:1},vu),vX(zYn,"LayoutMetaDataService/Registry/Triple",478),wAn(869,1,e5n,mu),MWn.ug=function(){return new Gj},vX(zYn,"LayoutMetaDataService/lambda$0$Type",869),wAn(870,1,i5n,yu),MWn.vg=function(n){return B$(BB(n,8))},vX(zYn,"LayoutMetaDataService/lambda$1$Type",870),wAn(879,1,e5n,ku),MWn.ug=function(){return new Np},vX(zYn,"LayoutMetaDataService/lambda$10$Type",879),wAn(880,1,i5n,ju),MWn.vg=function(n){return new t_(BB(n,12))},vX(zYn,"LayoutMetaDataService/lambda$11$Type",880),wAn(881,1,e5n,Eu),MWn.ug=function(){return new YT},vX(zYn,"LayoutMetaDataService/lambda$12$Type",881),wAn(882,1,i5n,Tu),MWn.vg=function(n){return zB(BB(n,68))},vX(zYn,"LayoutMetaDataService/lambda$13$Type",882),wAn(883,1,e5n,Mu),MWn.ug=function(){return new Rv},vX(zYn,"LayoutMetaDataService/lambda$14$Type",883),wAn(884,1,i5n,Su),MWn.vg=function(n){return JQ(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$15$Type",884),wAn(885,1,e5n,Pu),MWn.ug=function(){return new fA},vX(zYn,"LayoutMetaDataService/lambda$16$Type",885),wAn(886,1,i5n,Cu),MWn.vg=function(n){return S4(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$17$Type",886),wAn(887,1,e5n,Iu),MWn.ug=function(){return new zv},vX(zYn,"LayoutMetaDataService/lambda$18$Type",887),wAn(888,1,i5n,Ou),MWn.vg=function(n){return GB(BB(n,208))},vX(zYn,"LayoutMetaDataService/lambda$19$Type",888),wAn(871,1,e5n,Au),MWn.ug=function(){return new km},vX(zYn,"LayoutMetaDataService/lambda$2$Type",871),wAn(872,1,i5n,$u),MWn.vg=function(n){return new Kj(BB(n,74))},vX(zYn,"LayoutMetaDataService/lambda$3$Type",872),wAn(873,1,e5n,Lu),MWn.ug=function(){return new lm},vX(zYn,"LayoutMetaDataService/lambda$4$Type",873),wAn(874,1,i5n,Nu),MWn.vg=function(n){return new A_(BB(n,142))},vX(zYn,"LayoutMetaDataService/lambda$5$Type",874),wAn(875,1,e5n,Du),MWn.ug=function(){return new bm},vX(zYn,"LayoutMetaDataService/lambda$6$Type",875),wAn(876,1,i5n,Ru),MWn.vg=function(n){return new O_(BB(n,116))},vX(zYn,"LayoutMetaDataService/lambda$7$Type",876),wAn(877,1,e5n,Ku),MWn.ug=function(){return new Yu},vX(zYn,"LayoutMetaDataService/lambda$8$Type",877),wAn(878,1,i5n,_u),MWn.vg=function(n){return new rnn(BB(n,373))},vX(zYn,"LayoutMetaDataService/lambda$9$Type",878);var uMt,oMt,sMt,hMt,fMt,lMt=bq(IJn,"IProperty");wAn(23,1,{35:1,686:1,23:1,146:1},bPn),MWn.wd=function(n){return gL(this,BB(n,146))},MWn.Fb=function(n){return cL(n,23)?mK(this.f,BB(n,23).f):cL(n,146)&&mK(this.f,BB(n,146).tg())},MWn.wg=function(){var n;if(cL(this.b,4)){if(null==(n=Jdn(this.b)))throw Hp(new Fy(o5n+this.f+"'. Make sure it's type is registered with the "+(ED(bAt),bAt.k)+c5n));return n}return this.b},MWn.sg=function(){return this.d},MWn.tg=function(){return this.f},MWn.ne=function(){return this.i},MWn.Hb=function(){return vvn(this.f)},MWn.Ib=function(){return"Layout Option: "+this.f},vX(zYn,"LayoutOptionData",23),wAn(24,1,{},Fu),vX(zYn,"LayoutOptionData/Builder",24),wAn(175,22,{3:1,35:1,22:1,175:1},AC);var bMt,wMt,dMt,gMt,pMt,vMt,mMt,yMt,kMt,jMt=Ben(zYn,"LayoutOptionData/Target",175,Unt,O5,QF);wAn(277,22,{3:1,35:1,22:1,277:1},$C);var EMt,TMt,MMt,SMt=Ben(zYn,"LayoutOptionData/Type",277,Unt,_tn,YF);wAn(110,1,{110:1},bA,UV,gY),MWn.Fb=function(n){var t;return!(null==n||!cL(n,110))&&(t=BB(n,110),cV(this.c,t.c)&&cV(this.d,t.d)&&cV(this.b,t.b)&&cV(this.a,t.a))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d,this.b,this.a]))},MWn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"ElkRectangle",110),wAn(8,1,{3:1,4:1,8:1,414:1},Gj,XZ,xC,wA),MWn.Fb=function(n){return nrn(this,n)},MWn.Hb=function(){return VO(this.a)+byn(VO(this.b))},MWn.Jf=function(n){var t,e,i;for(e=0;e<n.length&&xhn((b1(e,n.length),n.charCodeAt(e)),o1n);)++e;for(t=n.length;t>0&&xhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(e>=t)throw Hp(new _y("The given string does not contain any numbers."));if(2!=(i=kKn(n.substr(e,t-e),",|;|\r|\n")).length)throw Hp(new _y("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=bSn(RMn(i[0])),this.b=bSn(RMn(i[1]))}catch(r){throw cL(r=lun(r),127)?Hp(new _y(h1n+r)):Hp(r)}},MWn.Ib=function(){return"("+this.a+","+this.b+")"},MWn.a=0,MWn.b=0;var PMt=vX(f1n,"KVector",8);wAn(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},km,Kj,Ux),MWn.Pc=function(){return Vsn(this)},MWn.Jf=function(n){var t,e,i,r,c;e=kKn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),yQ(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&RMn(e[t]).length>0&&(r%2==0?i=bSn(e[t]):c=bSn(e[t]),r>0&&r%2!=0&&DH(this,new xC(i,c)),++r),++t}catch(a){throw cL(a=lun(a),127)?Hp(new _y("The given string does not match the expected format for vectors."+a)):Hp(a)}},MWn.Ib=function(){var n,t,e;for(n=new lN("("),t=spn(this,0);t.b!=t.d.c;)oO(n,(e=BB(b3(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CMt,IMt,OMt,AMt,$Mt,LMt,NMt=vX(f1n,"KVectorChain",74);wAn(248,22,{3:1,35:1,22:1,248:1},DC);var xMt,DMt,RMt,KMt,_Mt,FMt,BMt,HMt,qMt,GMt,zMt,UMt,XMt,WMt,VMt,QMt,YMt,JMt,ZMt,nSt=Ben(h5n,"Alignment",248,Unt,J8,JF);wAn(979,1,QYn,Lf),MWn.Qe=function(n){G_n(n)},vX(h5n,"BoxLayouterOptions",979),wAn(980,1,{},xu),MWn.$e=function(){return new Gu},MWn._e=function(n){},vX(h5n,"BoxLayouterOptions/BoxFactory",980),wAn(291,22,{3:1,35:1,22:1,291:1},RC);var tSt,eSt,iSt,rSt,cSt,aSt,uSt,oSt,sSt,hSt,fSt,lSt,bSt,wSt,dSt,gSt,pSt,vSt,mSt,ySt,kSt,jSt,ESt,TSt,MSt,SSt,PSt,CSt,ISt,OSt,ASt,$St,LSt,NSt,xSt,DSt,RSt,KSt,_St,FSt,BSt,HSt,qSt,GSt,zSt,USt,XSt,WSt,VSt,QSt,YSt,JSt,ZSt,nPt,tPt,ePt,iPt,rPt,cPt,aPt,uPt,oPt,sPt,hPt,fPt,lPt,bPt,wPt,dPt,gPt,pPt,vPt,mPt,yPt,kPt,jPt,EPt,TPt,MPt,SPt,PPt,CPt,IPt,OPt,APt,$Pt,LPt,NPt,xPt,DPt,RPt,KPt,_Pt,FPt,BPt,HPt,qPt=Ben(h5n,"ContentAlignment",291,Unt,Y8,ZF);wAn(684,1,QYn,Nf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,w5n),""),"Layout Algorithm"),"Select a specific layout algorithm."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d5n),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),mMt),aMt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W2n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),rSt),gMt),nSt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,VJn),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g5n),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u3n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),fSt),pMt),qPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X2n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J2n),""),TJn),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),wSt),gMt),WPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y2n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),mSt),gMt),oCt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A4n),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d2n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),TSt),gMt),SCt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,QJn),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),WSt),mMt),_ut),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,jZn),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m3n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,MZn),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,EZn),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oPt),gMt),aIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g3n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),mMt),PMt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,pZn),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),vMt),Att),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,yZn),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,kZn),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o3n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),ASt),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f3n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l3n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,p5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),mMt),KNt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p3n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),LSt),mMt),Eut),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z2n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wMt),ktt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v5n),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dMt),Ptt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m5n),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y5n),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),iln(100)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k5n),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,j5n),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),iln(4e3)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E5n),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),iln(400)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T5n),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M5n),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S5n),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P5n),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b5n),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),oSt),gMt),cOt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,L2n),k2n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N2n),k2n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XJn),k2n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x2n),k2n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,mZn),k2n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D2n),k2n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R2n),k2n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F2n),k2n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K2n),k2n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_2n),k2n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,vZn),k2n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B2n),k2n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H2n),k2n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,q2n),k2n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),mMt),hOt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v3n),k2n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),DPt),mMt),Eut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d3n),A5n),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),vMt),Att),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),a2(n,d3n,w3n,JSt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w3n),A5n),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),QSt),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z2n),$5n),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),xSt),mMt),_ut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,CZn),$5n),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),RSt),pMt),GCt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e3n),L5n),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),nPt),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,i3n),L5n),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,r3n),L5n),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,c3n),L5n),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,a3n),L5n),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,PZn),N5n),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),_St),pMt),YIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,SZn),N5n),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),GSt),pMt),iOt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BZn),N5n),"Node Size Minimum"),"The minimal size to which a node can be reduced."),HSt),mMt),PMt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y2n),N5n),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s3n),A2n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),pSt),gMt),nCt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,TZn),A2n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wMt),ktt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,C5n),"font"),"Font Name"),"Font name used for a label."),yMt),Qtt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,I5n),"font"),"Font Size"),"Font size used for a label."),vMt),Att),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,b3n),x5n),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),mMt),PMt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,h3n),x5n),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),vMt),Att),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U2n),x5n),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),dPt),gMt),FIt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,G2n),x5n),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dMt),Ptt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,IZn),D5n),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),lPt),pMt),IIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n3n),D5n),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t3n),D5n),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V2n),R5n),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q2n),R5n),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wMt),ktt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WJn),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dMt),Ptt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O5n),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),kSt),gMt),yCt),nbn(uMt)))),xM(n,new UZ(yj(jj(kj(new pu,w1n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),xM(n,new UZ(yj(jj(kj(new pu,gZn),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),xM(n,new UZ(yj(jj(kj(new pu,Y3n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),xM(n,new UZ(yj(jj(kj(new pu,w4n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),bKn((new xf,n)),G_n((new Lf,n)),RDn((new Df,n))},vX(h5n,"CoreOptions",684),wAn(103,22,{3:1,35:1,22:1,103:1},KC);var GPt,zPt,UPt,XPt,WPt=Ben(h5n,TJn,103,Unt,C5,eB);wAn(272,22,{3:1,35:1,22:1,272:1},_C);var VPt,QPt,YPt,JPt,ZPt,nCt=Ben(h5n,"EdgeLabelPlacement",272,Unt,q1,iB);wAn(218,22,{3:1,35:1,22:1,218:1},FC);var tCt,eCt,iCt,rCt,cCt,aCt,uCt,oCt=Ben(h5n,"EdgeRouting",218,Unt,S3,rB);wAn(312,22,{3:1,35:1,22:1,312:1},BC);var sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,vCt,mCt,yCt=Ben(h5n,"EdgeType",312,Unt,a9,cB);wAn(977,1,QYn,xf),MWn.Qe=function(n){bKn(n)},vX(h5n,"FixedLayouterOptions",977),wAn(978,1,{},Vu),MWn.$e=function(){return new Hu},MWn._e=function(n){},vX(h5n,"FixedLayouterOptions/FixedFactory",978),wAn(334,22,{3:1,35:1,22:1,334:1},HC);var kCt,jCt,ECt,TCt,MCt,SCt=Ben(h5n,"HierarchyHandling",334,Unt,H1,aB);wAn(285,22,{3:1,35:1,22:1,285:1},qC);var PCt,CCt,ICt,OCt,ACt,$Ct,LCt,NCt,xCt,DCt,RCt=Ben(h5n,"LabelSide",285,Unt,M3,uB);wAn(93,22,{3:1,35:1,22:1,93:1},GC);var KCt,_Ct,FCt,BCt,HCt,qCt,GCt=Ben(h5n,"NodeLabelPlacement",93,Unt,ken,oB);wAn(249,22,{3:1,35:1,22:1,249:1},zC);var zCt,UCt,XCt,WCt,VCt,QCt,YCt,JCt=Ben(h5n,"PortAlignment",249,Unt,I5,sB);wAn(98,22,{3:1,35:1,22:1,98:1},UC);var ZCt,nIt,tIt,eIt,iIt,rIt,cIt,aIt=Ben(h5n,"PortConstraints",98,Unt,S8,hB);wAn(273,22,{3:1,35:1,22:1,273:1},XC);var uIt,oIt,sIt,hIt,fIt,lIt,bIt,wIt,dIt,gIt,pIt,vIt,mIt,yIt,kIt,jIt,EIt,TIt,MIt,SIt,PIt,CIt,IIt=Ben(h5n,"PortLabelPlacement",273,Unt,c9,fB);wAn(61,22,{3:1,35:1,22:1,61:1},WC);var OIt,AIt,$It,LIt,NIt,xIt,DIt,RIt,KIt,_It,FIt=Ben(h5n,"PortSide",61,Unt,h5,wB);wAn(981,1,QYn,Df),MWn.Qe=function(n){RDn(n)},vX(h5n,"RandomLayouterOptions",981),wAn(982,1,{},Qu),MWn.$e=function(){return new no},MWn._e=function(n){},vX(h5n,"RandomLayouterOptions/RandomFactory",982),wAn(374,22,{3:1,35:1,22:1,374:1},VC);var BIt,HIt,qIt,GIt,zIt,UIt,XIt,WIt,VIt,QIt,YIt=Ben(h5n,"SizeConstraint",374,Unt,T3,lB);wAn(259,22,{3:1,35:1,22:1,259:1},QC);var JIt,ZIt,nOt,tOt,eOt,iOt=Ben(h5n,"SizeOptions",259,Unt,Ein,bB);wAn(370,1,{1949:1},Xm),MWn.b=!1,MWn.c=0,MWn.d=-1,MWn.e=null,MWn.f=null,MWn.g=-1,MWn.j=!1,MWn.k=!1,MWn.n=!1,MWn.o=0,MWn.q=0,MWn.r=0,vX(y3n,"BasicProgressMonitor",370),wAn(972,209,NJn,Gu),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h;OTn(t,"Box layout",2),r=zy(MD(ZAn(n,(SMn(),XMt)))),c=BB(ZAn(n,GMt),116),e=qy(TD(ZAn(n,_Mt))),i=qy(TD(ZAn(n,FMt))),0===BB(ZAn(n,RMt),311).g?(u=new t_((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),SQ(),m$(u,new Sg(i)),a=u,o=XPn(n),(null==(s=MD(ZAn(n,DMt)))||(kW(s),s<=0))&&(s=1.3),KUn(n,(h=HUn(a,r,c,o.a,o.b,e,(kW(s),s))).a,h.b,!1,!0)):kqn(n,r,c,e),HSn(t)},vX(y3n,"BoxLayoutProvider",972),wAn(973,1,MYn,Sg),MWn.ue=function(n,t){return hNn(this,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=!1,vX(y3n,"BoxLayoutProvider/1",973),wAn(157,1,{157:1},Gtn,zx),MWn.Ib=function(){return this.c?zRn(this.c):LMn(this.b)},vX(y3n,"BoxLayoutProvider/Group",157),wAn(311,22,{3:1,35:1,22:1,311:1},YC);var rOt,cOt=Ben(y3n,"BoxLayoutProvider/PackingMode",311,Unt,P3,dB);wAn(974,1,MYn,zu),MWn.ue=function(n,t){return DQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$0$Type",974),wAn(975,1,MYn,Uu),MWn.ue=function(n,t){return cQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$1$Type",975),wAn(976,1,MYn,Xu),MWn.ue=function(n,t){return aQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$2$Type",976),wAn(1365,1,{831:1},Wu),MWn.qg=function(n,t){return AM(),!cL(t,160)||SE((Nun(),BB(n,160)),t)},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),wAn(1366,1,lVn,Pg),MWn.td=function(n){Jsn(this.a,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),wAn(1367,1,lVn,qu),MWn.td=function(n){BB(n,94),AM()},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),wAn(1371,1,lVn,Cg),MWn.td=function(n){Orn(this.a,BB(n,94))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),wAn(1369,1,DVn,JC),MWn.Mb=function(n){return Von(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),wAn(1368,1,DVn,ZC),MWn.Mb=function(n){return $x(this.a,this.b,BB(n,831))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),wAn(1370,1,lVn,nI),MWn.td=function(n){Fz(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),wAn(935,1,{},Bu),MWn.Kb=function(n){return yA(n)},MWn.Fb=function(n){return this===n},vX(y3n,"ElkUtil/lambda$0$Type",935),wAn(936,1,lVn,tI),MWn.td=function(n){rOn(this.a,this.b,BB(n,79))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$1$Type",936),wAn(937,1,lVn,eI),MWn.td=function(n){Ey(this.a,this.b,BB(n,202))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$2$Type",937),wAn(938,1,lVn,iI),MWn.td=function(n){t$(this.a,this.b,BB(n,137))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$3$Type",938),wAn(939,1,lVn,Ig),MWn.td=function(n){cq(this.a,BB(n,469))},vX(y3n,"ElkUtil/lambda$4$Type",939),wAn(342,1,{35:1,342:1},$p),MWn.wd=function(n){return vL(this,BB(n,236))},MWn.Fb=function(n){var t;return!!cL(n,342)&&(t=BB(n,342),this.a==t.a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return this.a+" (exclusive)"},MWn.a=0,vX(y3n,"ExclusiveBounds/ExclusiveLowerBound",342),wAn(1138,209,NJn,Hu),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(OTn(t,"Fixed Layout",1),a=BB(ZAn(n,(sWn(),vSt)),218),b=0,w=0,v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();){for(g=BB(kpn(v),33),(T=BB(ZAn(g,(Xsn(),gCt)),8))&&(SA(g,T.a,T.b),BB(ZAn(g,fCt),174).Hc((mdn(),DIt))&&(d=BB(ZAn(g,bCt),8)).a>0&&d.b>0&&KUn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new AL((!g.n&&(g.n=new eU(zOt,g,1,7)),g.n));f.e!=f.i.gc();)o=BB(kpn(f),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,g.i+o.i+o.g),w=e.Math.max(w,g.j+o.j+o.f);for(k=new AL((!g.c&&(g.c=new eU(XOt,g,9,9)),g.c));k.e!=k.i.gc();)for(y=BB(kpn(k),118),(T=BB(ZAn(y,gCt),8))&&SA(y,T.a,T.b),j=g.i+y.i,E=g.j+y.j,b=e.Math.max(b,j+y.g),w=e.Math.max(w,E+y.f),s=new AL((!y.n&&(y.n=new eU(zOt,y,1,7)),y.n));s.e!=s.i.gc();)o=BB(kpn(s),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,j+o.i+o.g),w=e.Math.max(w,E+o.j+o.f);for(c=new oz(ZL(dLn(g).a.Kc(),new h));dAn(c);)l=_Un(i=BB(U5(c),79)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new oz(ZL(wLn(g).a.Kc(),new h));dAn(r);)JJ(PMn(i=BB(U5(r),79)))!=n&&(l=_Un(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(Mbn(),QPt))for(p=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new oz(ZL(dLn(g=BB(kpn(p),33)).a.Kc(),new h));dAn(r);)0==(u=rFn(i=BB(U5(r),79))).b?Ypn(i,OSt,null):Ypn(i,OSt,u);qy(TD(ZAn(n,(Xsn(),lCt))))||KUn(n,b+(m=BB(ZAn(n,wCt),116)).b+m.c,w+m.d+m.a,!0,!0),HSn(t)},vX(y3n,"FixedLayoutProvider",1138),wAn(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,rnn),MWn.Jf=function(n){var t,e,i,r,c,a,u;if(n)try{for(a=kKn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=kKn(i[r],"\\:"),!(e=pGn(cin(),t[0])))throw Hp(new _y("Invalid option id: "+t[0]));if(null==(u=Zqn(e,t[1])))throw Hp(new _y("Invalid option value: "+t[1]));null==u?(!this.q&&(this.q=new xp),v6(this.q,e)):(!this.q&&(this.q=new xp),VW(this.q,e,u))}}catch(o){throw cL(o=lun(o),102)?Hp(new Fsn(o)):Hp(o)}},MWn.Ib=function(){return SD(P4($V((this.q?this.q:(SQ(),SQ(),het)).vc().Oc(),new Ju),x7(new YB,new Z,new W,new V,Pun(Gk(nit,1),$Vn,132,0,[]))))};var aOt,uOt,oOt,sOt,hOt=vX(y3n,"IndividualSpacings",373);wAn(971,1,{},Ju),MWn.Kb=function(n){return RQ(BB(n,42))},vX(y3n,"IndividualSpacings/lambda$0$Type",971),wAn(709,1,{},sG),MWn.c=0,vX(y3n,"InstancePool",709),wAn(1275,1,{},Zu),vX(y3n,"LoggedGraph",1275),wAn(396,22,{3:1,35:1,22:1,396:1},cI);var fOt,lOt,bOt,wOt=Ben(y3n,"LoggedGraph/Type",396,Unt,C3,gB);wAn(46,1,{20:1,46:1},rI),MWn.Jc=function(n){e5(this,n)},MWn.Fb=function(n){var t,e,i;return!!cL(n,46)&&(e=BB(n,46),t=null==this.a?null==e.a:Nfn(this.a,e.a),i=null==this.b?null==e.b:Nfn(this.b,e.b),t&&i)},MWn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:nsn(this.a)),t&QVn^(-65536&(e=null==this.b?0:nsn(this.b)))>>16&QVn|n^(e&QVn)<<16},MWn.Kc=function(){return new Og(this)},MWn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+Bbn(this.b)+")":null==this.b?"pair("+Bbn(this.a)+",null)":"pair("+Bbn(this.a)+","+Bbn(this.b)+")"},vX(y3n,"Pair",46),wAn(983,1,QWn,Og),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},MWn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw Hp(new yv)},MWn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),Hp(new dv)},MWn.b=!1,MWn.c=!1,vX(y3n,"Pair/1",983),wAn(448,1,{448:1},VV),MWn.Fb=function(n){return cV(this.a,BB(n,448).a)&&cV(this.c,BB(n,448).c)&&cV(this.d,BB(n,448).d)&&cV(this.b,BB(n,448).b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.a,this.c,this.d,this.b]))},MWn.Ib=function(){return"("+this.a+FWn+this.c+FWn+this.d+FWn+this.b+")"},vX(y3n,"Quadruple",448),wAn(1126,209,NJn,no),MWn.Ze=function(n,t){var e;OTn(t,"Random Layout",1),0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i?(iUn(n,(e=BB(ZAn(n,(vdn(),NIt)),19))&&0!=e.a?new C4(e.a):new sbn,zy(MD(ZAn(n,AIt))),zy(MD(ZAn(n,xIt))),BB(ZAn(n,$It),116)),HSn(t)):HSn(t)},vX(y3n,"RandomLayoutProvider",1126),wAn(553,1,{}),MWn.qf=function(){return new xC(this.f.i,this.f.j)},MWn.We=function(n){return EY(n,(sWn(),aPt))?ZAn(this.f,bOt):ZAn(this.f,n)},MWn.rf=function(){return new xC(this.f.g,this.f.f)},MWn.sf=function(){return this.g},MWn.Xe=function(n){return P8(this.f,n)},MWn.tf=function(n){Pen(this.f,n.a),Cen(this.f,n.b)},MWn.uf=function(n){Sen(this.f,n.a),Men(this.f,n.b)},MWn.vf=function(n){this.g=n},MWn.g=0,vX(H5n,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),wAn(554,1,{839:1},Ag),MWn.wf=function(){var n,t;if(!this.b)for(this.b=C2(mV(this.a).i),t=new AL(mV(this.a));t.e!=t.i.gc();)n=BB(kpn(t),137),WB(this.b,new Ry(n));return this.b},MWn.b=null,vX(H5n,"ElkGraphAdapters/ElkEdgeAdapter",554),wAn(301,553,{},Dy),MWn.xf=function(){return eyn(this)},MWn.a=null,vX(H5n,"ElkGraphAdapters/ElkGraphAdapter",301),wAn(630,553,{181:1},Ry),vX(H5n,"ElkGraphAdapters/ElkLabelAdapter",630),wAn(629,553,{680:1},JN),MWn.wf=function(){return nyn(this)},MWn.Af=function(){var n;return!(n=BB(ZAn(this.f,(sWn(),$St)),142))&&(n=new lm),n},MWn.Cf=function(){return tyn(this)},MWn.Ef=function(n){var t;t=new A_(n),Ypn(this.f,(sWn(),$St),t)},MWn.Ff=function(n){Ypn(this.f,(sWn(),XSt),new O_(n))},MWn.yf=function(){return this.d},MWn.zf=function(){var n,t;if(!this.a)for(this.a=new Np,t=new oz(ZL(wLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=new Np,t=new oz(ZL(dLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.c,new Ag(n));return this.c},MWn.Df=function(){return 0!=YQ(BB(this.f,33)).i||qy(TD(BB(this.f,33).We((sWn(),SSt))))},MWn.Gf=function(){_7(this,(GM(),lOt))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(H5n,"ElkGraphAdapters/ElkNodeAdapter",629),wAn(1266,553,{838:1},op),MWn.wf=function(){return kyn(this)},MWn.zf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.f,118).xg().i),t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.f,118).yg().i),t=new AL(BB(this.f,118).yg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.c,new Ag(n));return this.c},MWn.Hf=function(){return BB(BB(this.f,118).We((sWn(),wPt)),61)},MWn.If=function(){var n,t,e,i,r,c,a;for(i=WJ(BB(this.f,118)),e=new AL(BB(this.f,118).yg());e.e!=e.i.gc();)for(a=new AL((!(n=BB(kpn(e),79)).c&&(n.c=new hK(KOt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ctn(PTn(c=BB(kpn(a),82)),i))return!0;if(PTn(c)==i&&qy(TD(ZAn(n,(sWn(),PSt)))))return!0}for(t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)for(r=new AL((!(n=BB(kpn(t),79)).b&&(n.b=new hK(KOt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ctn(PTn(BB(kpn(r),82)),i))return!0;return!1},MWn.a=null,MWn.b=null,MWn.c=null,vX(H5n,"ElkGraphAdapters/ElkPortAdapter",1266),wAn(1267,1,MYn,to),MWn.ue=function(n,t){return GRn(BB(n,118),BB(t,118))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H5n,"ElkGraphAdapters/PortComparator",1267);var dOt,gOt,pOt,vOt,mOt,yOt,kOt,jOt,EOt,TOt,MOt,SOt,POt,COt,IOt,OOt,AOt,$Ot,LOt=bq(q5n,"EObject"),NOt=bq(G5n,z5n),xOt=bq(G5n,U5n),DOt=bq(G5n,X5n),ROt=bq(G5n,"ElkShape"),KOt=bq(G5n,W5n),_Ot=bq(G5n,V5n),FOt=bq(G5n,Q5n),BOt=bq(q5n,Y5n),HOt=bq(q5n,"EFactory"),qOt=bq(q5n,J5n),GOt=bq(q5n,"EPackage"),zOt=bq(G5n,Z5n),UOt=bq(G5n,n6n),XOt=bq(G5n,t6n);wAn(90,1,e6n),MWn.Jg=function(){return this.Kg(),null},MWn.Kg=function(){return null},MWn.Lg=function(){return this.Kg(),!1},MWn.Mg=function(){return!1},MWn.Ng=function(n){ban(this,n)},vX(i6n,"BasicNotifierImpl",90),wAn(97,90,f6n),MWn.nh=function(){return mA(this)},MWn.Og=function(n,t){return n},MWn.Pg=function(){throw Hp(new pv)},MWn.Qg=function(n){var t;return t=Cvn(BB(itn(this.Tg(),this.Vg()),18)),this.eh().ih(this,t.n,t.f,n)},MWn.Rg=function(n,t){throw Hp(new pv)},MWn.Sg=function(n,t,e){return T_n(this,n,t,e)},MWn.Tg=function(){var n;return this.Pg()&&(n=this.Pg().ck())?n:this.zh()},MWn.Ug=function(){return cAn(this)},MWn.Vg=function(){throw Hp(new pv)},MWn.Wg=function(){var n,t;return!(t=this.ph().dk())&&this.Pg().ik((QM(),t=null==(n=lJ(qFn(this.Tg())))?N$t:new QN(this,n))),t},MWn.Xg=function(n,t){return n},MWn.Yg=function(n){return n.Gj()?n.aj():Awn(this.Tg(),n)},MWn.Zg=function(){var n;return(n=this.Pg())?n.fk():null},MWn.$g=function(){return this.Pg()?this.Pg().ck():null},MWn._g=function(n,t,e){return Zpn(this,n,t,e)},MWn.ah=function(n){return S9(this,n)},MWn.bh=function(n,t){return V5(this,n,t)},MWn.dh=function(){var n;return!!(n=this.Pg())&&n.gk()},MWn.eh=function(){throw Hp(new pv)},MWn.fh=function(){return Ydn(this)},MWn.gh=function(n,t,e,i){return Npn(this,n,t,i)},MWn.hh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Qj(this,this.yh(),t-this.Ah(),n,e)},MWn.ih=function(n,t,e,i){return oJ(this,n,t,i)},MWn.jh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Rj(this,this.yh(),t-this.Ah(),n,e)},MWn.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},MWn.lh=function(n){return vpn(this,n)},MWn.mh=function(n){return ZJ(this,n)},MWn.oh=function(n){return _qn(this,n)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return this.Pg()?this.Pg().ek():null},MWn.rh=function(){return Ydn(this)},MWn.sh=function(n,t){yCn(this,n,t)},MWn.th=function(n){this.ph().hk(n)},MWn.uh=function(n){this.ph().kk(n)},MWn.vh=function(n){this.ph().jk(n)},MWn.wh=function(n,t){var e,i,r,c;return(c=this.Zg())&&n&&(t=_pn(c.Vk(),this,t),c.Zk(this)),(i=this.eh())&&(0!=(gKn(this,this.eh(),this.Vg()).Bb&BQn)?(r=i.fh())&&(n?!c&&r.Zk(this):r.Yk(this)):(t=(e=this.Vg())>=0?this.Qg(t):this.eh().ih(this,-1-e,null,t),t=this.Sg(null,-1,t))),this.uh(n),t},MWn.xh=function(n){var t,e,i,r,c,a,u;if((c=Awn(e=this.Tg(),n))>=(t=this.Ah()))return BB(n,66).Nj().Uj(this,this.yh(),c-t);if(c<=-1){if(!(a=Fqn((IPn(),Z$t),e,n)))throw Hp(new _y(r6n+n.ne()+u6n));if(ZM(),BB(a,66).Oj()||(a=Z1(B7(Z$t,a))),r=BB((i=this.Yg(a))>=0?this._g(i,!0,!0):cOn(this,a,!0),153),(u=a.Zj())>1||-1==u)return BB(BB(r,215).hl(n,!1),76)}else if(n.$j())return BB((i=this.Yg(n))>=0?this._g(i,!1,!0):cOn(this,n,!1),76);return new II(this,n)},MWn.yh=function(){return Q7(this)},MWn.zh=function(){return(QX(),t$t).S},MWn.Ah=function(){return bX(this.zh())},MWn.Bh=function(n){mPn(this,n)},MWn.Ib=function(){return P$n(this)},vX(l6n,"BasicEObjectImpl",97),wAn(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),MWn.Ch=function(n){return Y7(this)[n]},MWn.Dh=function(n,t){$X(Y7(this),n,t)},MWn.Eh=function(n){$X(Y7(this),n,null)},MWn.Jg=function(){return BB(yan(this,4),126)},MWn.Kg=function(){throw Hp(new pv)},MWn.Lg=function(){return 0!=(4&this.Db)},MWn.Pg=function(){throw Hp(new pv)},MWn.Fh=function(n){hgn(this,2,n)},MWn.Rg=function(n,t){this.Db=t<<16|255&this.Db,this.Fh(n)},MWn.Tg=function(){return jY(this)},MWn.Vg=function(){return this.Db>>16},MWn.Wg=function(){var n;return QM(),null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?N$t:new QN(this,n)},MWn.Mg=function(){return 0==(1&this.Db)},MWn.Zg=function(){return BB(yan(this,128),1935)},MWn.$g=function(){return BB(yan(this,16),26)},MWn.dh=function(){return 0!=(32&this.Db)},MWn.eh=function(){return BB(yan(this,2),49)},MWn.kh=function(){return 0!=(64&this.Db)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return BB(yan(this,64),281)},MWn.th=function(n){hgn(this,16,n)},MWn.uh=function(n){hgn(this,128,n)},MWn.vh=function(n){hgn(this,64,n)},MWn.yh=function(){return fgn(this)},MWn.Db=0,vX(l6n,"MinimalEObjectImpl",114),wAn(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn.Fh=function(n){this.Cb=n},MWn.eh=function(){return this.Cb},vX(l6n,"MinimalEObjectImpl/Container",115),wAn(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Eyn(this,n,t,e)},MWn.jh=function(n,t,e){return eSn(this,n,t,e)},MWn.lh=function(n){return m0(this,n)},MWn.sh=function(n,t){rsn(this,n,t)},MWn.zh=function(){return CXn(),POt},MWn.Bh=function(n){zun(this,n)},MWn.Ve=function(){return lpn(this)},MWn.We=function(n){return ZAn(this,n)},MWn.Xe=function(n){return P8(this,n)},MWn.Ye=function(n,t){return Ypn(this,n,t)},vX(b6n,"EMapPropertyHolderImpl",1985),wAn(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ro),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void jen(this,Gy(MD(t)));case 1:return void Een(this,Gy(MD(t)))}yCn(this,n,t)},MWn.zh=function(){return CXn(),pOt},MWn.Bh=function(n){switch(n){case 0:return void jen(this,0);case 1:return void Een(this,0)}mPn(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (x: ",vE(n,this.a),n.a+=", y: ",vE(n,this.b),n.a+=")",n.a)},MWn.a=0,MWn.b=0,vX(b6n,"ElkBendPointImpl",567),wAn(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return _fn(this,n,t,e)},MWn.hh=function(n,t,e){return FTn(this,n,t,e)},MWn.jh=function(n,t,e){return run(this,n,t,e)},MWn.lh=function(n){return Ean(this,n)},MWn.sh=function(n,t){Gjn(this,n,t)},MWn.zh=function(){return CXn(),kOt},MWn.Bh=function(n){ofn(this,n)},MWn.zg=function(){return this.k},MWn.Ag=function(){return mV(this)},MWn.Ib=function(){return Yln(this)},MWn.k=null,vX(b6n,"ElkGraphElementImpl",723),wAn(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Rbn(this,n,t,e)},MWn.lh=function(n){return fwn(this,n)},MWn.sh=function(n,t){zjn(this,n,t)},MWn.zh=function(){return CXn(),SOt},MWn.Bh=function(n){Dwn(this,n)},MWn.Bg=function(){return this.f},MWn.Cg=function(){return this.g},MWn.Dg=function(){return this.i},MWn.Eg=function(){return this.j},MWn.Fg=function(n,t){MA(this,n,t)},MWn.Gg=function(n,t){SA(this,n,t)},MWn.Hg=function(n){Pen(this,n)},MWn.Ig=function(n){Cen(this,n)},MWn.Ib=function(){return mSn(this)},MWn.f=0,MWn.g=0,MWn.i=0,MWn.j=0,vX(b6n,"ElkShapeImpl",724),wAn(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){return djn(this,n,t,e)},MWn.jh=function(n,t,e){return gjn(this,n,t,e)},MWn.lh=function(n){return Gon(this,n)},MWn.sh=function(n,t){LAn(this,n,t)},MWn.zh=function(){return CXn(),vOt},MWn.Bh=function(n){xpn(this,n)},MWn.xg=function(){return!this.d&&(this.d=new hK(_Ot,this,8,5)),this.d},MWn.yg=function(){return!this.e&&(this.e=new hK(_Ot,this,7,4)),this.e},vX(b6n,"ElkConnectableShapeImpl",725),wAn(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},io),MWn.Qg=function(n){return Mkn(this,n)},MWn._g=function(n,t,e){switch(n){case 3:return XJ(this);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),this.a;case 7:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return hN(),!!nAn(this);case 9:return hN(),!!QIn(this);case 10:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return _fn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Mkn(this,e):this.Cb.ih(this,-1-i,null,e)),VD(this,BB(n,33),e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),Ywn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),Ywn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),Ywn(this.a,n,e)}return FTn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 3:return VD(this,null,e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),_pn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),_pn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),_pn(this.a,n,e)}return run(this,n,t,e)},MWn.lh=function(n){switch(n){case 3:return!!XJ(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return nAn(this);case 9:return QIn(this);case 10:return!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return Ean(this,n)},MWn.sh=function(n,t){switch(n){case 3:return void HLn(this,BB(t,33));case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),sqn(this.b),!this.b&&(this.b=new hK(KOt,this,4,7)),void pX(this.b,BB(t,14));case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),sqn(this.c),!this.c&&(this.c=new hK(KOt,this,5,8)),void pX(this.c,BB(t,14));case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),sqn(this.a),!this.a&&(this.a=new eU(FOt,this,6,6)),void pX(this.a,BB(t,14))}Gjn(this,n,t)},MWn.zh=function(){return CXn(),mOt},MWn.Bh=function(n){switch(n){case 3:return void HLn(this,null);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),void sqn(this.b);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),void sqn(this.c);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),void sqn(this.a)}ofn(this,n)},MWn.Ib=function(){return lHn(this)},vX(b6n,"ElkEdgeImpl",352),wAn(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},co),MWn.Qg=function(n){return skn(this,n)},MWn._g=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new $L(xOt,this,5)),this.a;case 6:return VJ(this);case 7:return t?Pvn(this):this.i;case 8:return t?Svn(this):this.f;case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),this.e;case 11:return this.d}return Eyn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?skn(this,e):this.Cb.ih(this,-1-i,null,e)),QD(this,BB(n,79),e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),Ywn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),Ywn(this.e,n,e)}return BB(itn(BB(yan(this,16),26)||(CXn(),yOt),t),66).Nj().Qj(this,fgn(this),t-bX((CXn(),yOt)),n,e)},MWn.jh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new $L(xOt,this,5)),_pn(this.a,n,e);case 6:return QD(this,null,e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),_pn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),_pn(this.e,n,e)}return eSn(this,n,t,e)},MWn.lh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!VJ(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return m0(this,n)},MWn.sh=function(n,t){switch(n){case 1:return void Ien(this,Gy(MD(t)));case 2:return void Aen(this,Gy(MD(t)));case 3:return void Ten(this,Gy(MD(t)));case 4:return void Oen(this,Gy(MD(t)));case 5:return!this.a&&(this.a=new $L(xOt,this,5)),sqn(this.a),!this.a&&(this.a=new $L(xOt,this,5)),void pX(this.a,BB(t,14));case 6:return void FLn(this,BB(t,79));case 7:return void Nin(this,BB(t,82));case 8:return void Lin(this,BB(t,82));case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),sqn(this.g),!this.g&&(this.g=new hK(FOt,this,9,10)),void pX(this.g,BB(t,14));case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),sqn(this.e),!this.e&&(this.e=new hK(FOt,this,10,9)),void pX(this.e,BB(t,14));case 11:return void crn(this,SD(t))}rsn(this,n,t)},MWn.zh=function(){return CXn(),yOt},MWn.Bh=function(n){switch(n){case 1:return void Ien(this,0);case 2:return void Aen(this,0);case 3:return void Ten(this,0);case 4:return void Oen(this,0);case 5:return!this.a&&(this.a=new $L(xOt,this,5)),void sqn(this.a);case 6:return void FLn(this,null);case 7:return void Nin(this,null);case 8:return void Lin(this,null);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),void sqn(this.g);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),void sqn(this.e);case 11:return void crn(this,null)}zun(this,n)},MWn.Ib=function(){return ROn(this)},MWn.b=0,MWn.c=0,MWn.d=null,MWn.j=0,MWn.k=0,vX(b6n,"ElkEdgeSectionImpl",439),wAn(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn._g=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab):U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.oh=function(n){return hUn(this,n)},MWn.sh=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.uh=function(n){hgn(this,128,n)},MWn.zh=function(){return gWn(),b$t},MWn.Bh=function(n){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){this.Bb|=1},MWn.Hh=function(n){return N_n(this,n)},MWn.Bb=0,vX(l6n,"EModelElementImpl",150),wAn(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Rf),MWn.Ih=function(n,t){return qGn(this,n,t)},MWn.Jh=function(n){var t,e,i,r;if(this.a!=Utn(n)||0!=(256&n.Bb))throw Hp(new _y(m6n+n.zb+g6n));for(e=kY(n);0!=a4(e.a).i;){if(iyn(t=BB(eGn(e,0,cL(r=BB(Wtn(a4(e.a),0),87).c,88)?BB(r,26):(gWn(),d$t)),26)))return BB(i=Utn(t).Nh().Jh(t),49).th(n),i;e=kY(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new fq(n):new jH(n)},MWn.Kh=function(n,t){return xXn(this,n,t)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.a}return U9(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t,e)},MWn.hh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 1:return this.a&&(e=BB(this.a,49).ih(this,4,GOt,e)),Jhn(this,BB(n,235),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 1:return Jhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return O3(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void xMn(this,BB(t,235))}Lbn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t)},MWn.zh=function(){return gWn(),h$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void xMn(this,null)}qfn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},vX(l6n,"EFactoryImpl",704),wAn(k6n,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ao),MWn.Ih=function(n,t){switch(n.yj()){case 12:return BB(t,146).tg();case 13:return Bbn(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 4:return new uo;case 6:return new jm;case 7:return new Em;case 8:return new io;case 9:return new ro;case 10:return new co;case 11:return new so;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 13:case 12:return null;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(b6n,"ElkGraphFactoryImpl",k6n),wAn(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn.Wg=function(){var n;return null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?(QM(),QM(),N$t):new Wx(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.ne()}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),w$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.ne=function(){return this.zb},MWn.Lh=function(n){Nrn(this,n)},MWn.Ib=function(){return kfn(this)},MWn.zb=null,vX(l6n,"ENamedElementImpl",438),wAn(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},vY),MWn.Qg=function(n){return wkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb;case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?BB(this.Cb,235):null:QJ(this)}return U9(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 4:return this.sb&&(e=BB(this.sb,49).ih(this,1,HOt,e)),jfn(this,BB(n,471),e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),Ywn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),Ywn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?wkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 4:return jfn(this,null,e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),_pn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),_pn(this.vb,n,e);case 7:return T_n(this,null,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!QJ(this)}return O3(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.oh=function(n){return LNn(this,n)||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Drn(this,SD(t));case 3:return void xrn(this,SD(t));case 4:return void iSn(this,BB(t,471));case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),sqn(this.rb),!this.rb&&(this.rb=new Jz(this,HAt,this)),void pX(this.rb,BB(t,14));case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),sqn(this.vb),!this.vb&&(this.vb=new eK(GOt,this,6,7)),void pX(this.vb,BB(t,14))}Lbn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t)},MWn.vh=function(n){var t,e;if(n&&this.rb)for(e=new AL(this.rb);e.e!=e.i.gc();)cL(t=kpn(e),351)&&(BB(t,351).w=null);hgn(this,64,n)},MWn.zh=function(){return gWn(),v$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Drn(this,null);case 3:return void xrn(this,null);case 4:return void iSn(this,null);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),void sqn(this.rb);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),void sqn(this.vb)}qfn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.Gh=function(){Tyn(this)},MWn.Mh=function(){return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb},MWn.Nh=function(){return this.sb},MWn.Oh=function(){return this.ub},MWn.Ph=function(){return this.xb},MWn.Qh=function(){return this.yb},MWn.Rh=function(n){this.ub=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?kfn(this):((n=new fN(kfn(this))).a+=" (nsURI: ",cO(n,this.yb),n.a+=", nsPrefix: ",cO(n,this.xb),n.a+=")",n.a)},MWn.xb=null,MWn.yb=null,vX(l6n,"EPackageImpl",179),wAn(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},sAn),MWn.q=!1,MWn.r=!1;var WOt=!1;vX(b6n,"ElkGraphPackageImpl",555),wAn(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},uo),MWn.Qg=function(n){return hkn(this,n)},MWn._g=function(n,t,e){switch(n){case 7:return YJ(this);case 8:return this.a}return Rbn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?hkn(this,e):this.Cb.ih(this,-1-i,null,e)),VG(this,BB(n,160),e)):FTn(this,n,t,e)},MWn.jh=function(n,t,e){return 7==t?VG(this,null,e):run(this,n,t,e)},MWn.lh=function(n){switch(n){case 7:return!!YJ(this);case 8:return!mK("",this.a)}return fwn(this,n)},MWn.sh=function(n,t){switch(n){case 7:return void INn(this,BB(t,160));case 8:return void xin(this,SD(t))}zjn(this,n,t)},MWn.zh=function(){return CXn(),jOt},MWn.Bh=function(n){switch(n){case 7:return void INn(this,null);case 8:return void xin(this,"")}Dwn(this,n)},MWn.Ib=function(){return cPn(this)},MWn.a="",vX(b6n,"ElkLabelImpl",354),wAn(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},jm),MWn.Qg=function(n){return Skn(this,n)},MWn._g=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a;case 11:return JJ(this);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),this.b;case 13:return hN(),!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),Ywn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),Ywn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?Skn(this,e):this.Cb.ih(this,-1-i,null,e)),zR(this,BB(n,33),e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),Ywn(this.b,n,e)}return djn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),_pn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),_pn(this.a,n,e);case 11:return zR(this,null,e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),_pn(this.b,n,e)}return gjn(this,n,t,e)},MWn.lh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!JJ(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Gon(this,n)},MWn.sh=function(n,t){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),sqn(this.c),!this.c&&(this.c=new eU(XOt,this,9,9)),void pX(this.c,BB(t,14));case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),sqn(this.a),!this.a&&(this.a=new eU(UOt,this,10,11)),void pX(this.a,BB(t,14));case 11:return void nNn(this,BB(t,33));case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),sqn(this.b),!this.b&&(this.b=new eU(_Ot,this,12,3)),void pX(this.b,BB(t,14))}LAn(this,n,t)},MWn.zh=function(){return CXn(),EOt},MWn.Bh=function(n){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),void sqn(this.c);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),void sqn(this.a);case 11:return void nNn(this,null);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),void sqn(this.b)}xpn(this,n)},MWn.Ib=function(){return zRn(this)},vX(b6n,"ElkNodeImpl",239),wAn(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Em),MWn.Qg=function(n){return fkn(this,n)},MWn._g=function(n,t,e){return 9==n?WJ(this):Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?fkn(this,e):this.Cb.ih(this,-1-i,null,e)),YD(this,BB(n,33),e)):djn(this,n,t,e)},MWn.jh=function(n,t,e){return 9==t?YD(this,null,e):gjn(this,n,t,e)},MWn.lh=function(n){return 9==n?!!WJ(this):Gon(this,n)},MWn.sh=function(n,t){9!==n?LAn(this,n,t):BLn(this,BB(t,33))},MWn.zh=function(){return CXn(),TOt},MWn.Bh=function(n){9!==n?xpn(this,n):BLn(this,null)},MWn.Ib=function(){return URn(this)},vX(b6n,"ElkPortImpl",186);var VOt=bq(B6n,"BasicEMap/Entry");wAn(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},so),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){Din(this,BB(n,146))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void Din(this,BB(t,146));case 1:return void _in(this,t)}yCn(this,n,t)},MWn.zh=function(){return CXn(),MOt},MWn.Bh=function(n){switch(n){case 0:return void Din(this,null);case 1:return void _in(this,null)}mPn(this,n)},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=n?nsn(n):0),this.a},MWn.dd=function(){return this.c},MWn.Th=function(n){this.a=n},MWn.ed=function(n){var t;return t=this.c,_in(this,n),t},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):(oO(oO(oO(n=new Ck,this.b?this.b.tg():zWn),e1n),kN(this.c)),n.a)},MWn.a=-1,MWn.c=null;var QOt,YOt,JOt,ZOt,nAt,tAt,eAt,iAt,rAt=vX(b6n,"ElkPropertyToValueMapEntryImpl",1092);wAn(984,1,{},lo),vX(G6n,"JsonAdapter",984),wAn(210,60,BVn,ek),vX(G6n,"JsonImportException",210),wAn(857,1,{},dkn),vX(G6n,"JsonImporter",857),wAn(891,1,{},aI),vX(G6n,"JsonImporter/lambda$0$Type",891),wAn(892,1,{},uI),vX(G6n,"JsonImporter/lambda$1$Type",892),wAn(900,1,{},$g),vX(G6n,"JsonImporter/lambda$10$Type",900),wAn(902,1,{},oI),vX(G6n,"JsonImporter/lambda$11$Type",902),wAn(903,1,{},sI),vX(G6n,"JsonImporter/lambda$12$Type",903),wAn(909,1,{},fQ),vX(G6n,"JsonImporter/lambda$13$Type",909),wAn(908,1,{},hQ),vX(G6n,"JsonImporter/lambda$14$Type",908),wAn(904,1,{},hI),vX(G6n,"JsonImporter/lambda$15$Type",904),wAn(905,1,{},fI),vX(G6n,"JsonImporter/lambda$16$Type",905),wAn(906,1,{},lI),vX(G6n,"JsonImporter/lambda$17$Type",906),wAn(907,1,{},bI),vX(G6n,"JsonImporter/lambda$18$Type",907),wAn(912,1,{},Lg),vX(G6n,"JsonImporter/lambda$19$Type",912),wAn(893,1,{},Ng),vX(G6n,"JsonImporter/lambda$2$Type",893),wAn(910,1,{},xg),vX(G6n,"JsonImporter/lambda$20$Type",910),wAn(911,1,{},Dg),vX(G6n,"JsonImporter/lambda$21$Type",911),wAn(915,1,{},Rg),vX(G6n,"JsonImporter/lambda$22$Type",915),wAn(913,1,{},Kg),vX(G6n,"JsonImporter/lambda$23$Type",913),wAn(914,1,{},_g),vX(G6n,"JsonImporter/lambda$24$Type",914),wAn(917,1,{},Fg),vX(G6n,"JsonImporter/lambda$25$Type",917),wAn(916,1,{},Bg),vX(G6n,"JsonImporter/lambda$26$Type",916),wAn(918,1,lVn,wI),MWn.td=function(n){E9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$27$Type",918),wAn(919,1,lVn,dI),MWn.td=function(n){T9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$28$Type",919),wAn(920,1,{},gI),vX(G6n,"JsonImporter/lambda$29$Type",920),wAn(896,1,{},Hg),vX(G6n,"JsonImporter/lambda$3$Type",896),wAn(921,1,{},pI),vX(G6n,"JsonImporter/lambda$30$Type",921),wAn(922,1,{},qg),vX(G6n,"JsonImporter/lambda$31$Type",922),wAn(923,1,{},Gg),vX(G6n,"JsonImporter/lambda$32$Type",923),wAn(924,1,{},zg),vX(G6n,"JsonImporter/lambda$33$Type",924),wAn(925,1,{},Ug),vX(G6n,"JsonImporter/lambda$34$Type",925),wAn(859,1,{},Xg),vX(G6n,"JsonImporter/lambda$35$Type",859),wAn(929,1,{},MB),vX(G6n,"JsonImporter/lambda$36$Type",929),wAn(926,1,lVn,Wg),MWn.td=function(n){Y4(this.a,BB(n,469))},vX(G6n,"JsonImporter/lambda$37$Type",926),wAn(927,1,lVn,SI),MWn.td=function(n){lO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$38$Type",927),wAn(928,1,lVn,PI),MWn.td=function(n){bO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$39$Type",928),wAn(894,1,{},Vg),vX(G6n,"JsonImporter/lambda$4$Type",894),wAn(930,1,lVn,Qg),MWn.td=function(n){J4(this.a,BB(n,8))},vX(G6n,"JsonImporter/lambda$40$Type",930),wAn(895,1,{},Yg),vX(G6n,"JsonImporter/lambda$5$Type",895),wAn(899,1,{},Jg),vX(G6n,"JsonImporter/lambda$6$Type",899),wAn(897,1,{},Zg),vX(G6n,"JsonImporter/lambda$7$Type",897),wAn(898,1,{},np),vX(G6n,"JsonImporter/lambda$8$Type",898),wAn(901,1,{},tp),vX(G6n,"JsonImporter/lambda$9$Type",901),wAn(948,1,lVn,ep),MWn.td=function(n){nW(this.a,new GX(SD(n)))},vX(G6n,"JsonMetaDataConverter/lambda$0$Type",948),wAn(949,1,lVn,ip),MWn.td=function(n){_X(this.a,BB(n,237))},vX(G6n,"JsonMetaDataConverter/lambda$1$Type",949),wAn(950,1,lVn,rp),MWn.td=function(n){t1(this.a,BB(n,149))},vX(G6n,"JsonMetaDataConverter/lambda$2$Type",950),wAn(951,1,lVn,cp),MWn.td=function(n){FX(this.a,BB(n,175))},vX(G6n,"JsonMetaDataConverter/lambda$3$Type",951),wAn(237,22,{3:1,35:1,22:1,237:1},MI);var cAt,aAt=Ben(IJn,"GraphFeature",237,Unt,Ktn,pB);wAn(13,1,{35:1,146:1},up,iR,$O,XA),MWn.wd=function(n){return pL(this,BB(n,146))},MWn.Fb=function(n){return EY(this,n)},MWn.wg=function(){return mpn(this)},MWn.tg=function(){return this.b},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return this.b},vX(IJn,"Property",13),wAn(818,1,MYn,ap),MWn.ue=function(n,t){return _ln(this,BB(n,94),BB(t,94))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IJn,"PropertyHolderComparator",818),wAn(695,1,QWn,sp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return A9(this)},MWn.Qb=function(){uE()},MWn.Ob=function(){return!!this.a},vX(c8n,"ElkGraphUtil/AncestorIterator",695);var uAt=bq(B6n,"EList");wAn(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),MWn.Vc=function(n,t){sln(this,n,t)},MWn.Fc=function(n){return f9(this,n)},MWn.Wc=function(n,t){return oon(this,n,t)},MWn.Gc=function(n){return pX(this,n)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.ai=function(){return!0},MWn.bi=function(n,t){},MWn.ci=function(){},MWn.di=function(n,t){L8(this,n,t)},MWn.ei=function(n,t,e){},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.Fb=function(n){return QDn(this,n)},MWn.Hb=function(){return Mun(this)},MWn.hi=function(){return!1},MWn.Kc=function(){return new AL(this)},MWn.Yc=function(){return new cx(this)},MWn.Zc=function(n){var t;if(t=this.gc(),n<0||n>t)throw Hp(new tK(n,t));return new GU(this,n)},MWn.ji=function(n,t){this.ii(n,this.Xc(t))},MWn.Mc=function(n){return snn(this,n)},MWn.li=function(n,t){return t},MWn._c=function(n,t){return ovn(this,n,t)},MWn.Ib=function(){return Jbn(this)},MWn.ni=function(){return!0},MWn.oi=function(n,t){return xsn(this,t)},vX(B6n,"AbstractEList",67),wAn(63,67,h8n,go,gtn,jcn),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.$b=function(){a6(this)},MWn.Hc=function(n){return Sjn(this,n)},MWn.Xb=function(n){return Wtn(this,n)},MWn.qi=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)<n&&(t=n),this.g=this.ri(t),null!=i&&aHn(i,0,this.g,0,this.i))},MWn.Xc=function(n){return Wyn(this,n)},MWn.dc=function(){return 0==this.i},MWn.ii=function(n,t){return YIn(this,n,t)},MWn.ri=function(n){return x8(Ant,HWn,1,n,5,1)},MWn.ki=function(n){return this.g[n]},MWn.$c=function(n){return Lyn(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.gc=function(){return this.i},MWn.Pc=function(){return N3(this)},MWn.Qc=function(n){return Qwn(this,n)},MWn.i=0;var oAt=vX(B6n,"BasicEList",63),sAt=bq(B6n,"TreeIterator");wAn(694,63,f8n),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&BB(this.g[this.i-1],47).Ob():tZ(this)},MWn.Pb=function(){return aLn(this)},MWn.Qb=function(){if(!this.e)throw Hp(new Fy("There is no valid object to remove."));this.e.Qb()},MWn.c=!1,vX(B6n,"AbstractTreeIterator",694),wAn(685,694,f8n,OA),MWn.si=function(n){var t;return cL(t=BB(n,56).Wg().Kc(),279)&&BB(t,279).Nk(new bo),t},vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),wAn(952,1,{},bo),vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var hAt,fAt,lAt,bAt=vX(c8n,"ElkReflect",null);wAn(889,1,i5n,wo),MWn.vg=function(n){return hZ(),B6(BB(n,174))},vX(c8n,"ElkReflect/lambda$0$Type",889),bq(B6n,"ResourceLocator"),wAn(1051,1,{}),vX(B6n,"DelegatingResourceLocator",1051),wAn(1052,1051,{}),vX("org.eclipse.emf.common","EMFPlugin",1052);var wAt,dAt=bq(J8n,"Adapter"),gAt=bq(J8n,"Notification");wAn(1153,1,Z8n),MWn.ti=function(){return this.d},MWn.ui=function(n){},MWn.vi=function(n){this.d=n},MWn.wi=function(n){this.d==n&&(this.d=null)},MWn.d=null,vX(i6n,"AdapterImpl",1153),wAn(1995,67,n9n),MWn.Vh=function(n,t){return kwn(this,n,t)},MWn.Wh=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Vi(),i=n.Kc();i.Ob();)e=i.Pb(),this.Ii(this.oi(t,e)),++t;return!0},MWn.Xh=function(n,t){ZD(this,n,t)},MWn.Yh=function(n){eW(this,n)},MWn.Gi=function(){return this.Ji()},MWn.$b=function(){JD(this,this.Vi(),this.Wi())},MWn.Hc=function(n){return this.Li(n)},MWn.Ic=function(n){return this.Mi(n)},MWn.Hi=function(n,t){this.Si().jm()},MWn.Ii=function(n){this.Si().jm()},MWn.Ji=function(){return this.Si()},MWn.Ki=function(){this.Si().jm()},MWn.Li=function(n){return this.Si().jm()},MWn.Mi=function(n){return this.Si().jm()},MWn.Ni=function(n){return this.Si().jm()},MWn.Oi=function(n){return this.Si().jm()},MWn.Pi=function(){return this.Si().jm()},MWn.Qi=function(n){return this.Si().jm()},MWn.Ri=function(){return this.Si().jm()},MWn.Ti=function(n){return this.Si().jm()},MWn.Ui=function(n,t){return this.Si().jm()},MWn.Vi=function(){return this.Si().jm()},MWn.Wi=function(){return this.Si().jm()},MWn.Xi=function(n){return this.Si().jm()},MWn.Yi=function(){return this.Si().jm()},MWn.Fb=function(n){return this.Ni(n)},MWn.Xb=function(n){return this.li(n,this.Oi(n))},MWn.Hb=function(){return this.Pi()},MWn.Xc=function(n){return this.Qi(n)},MWn.dc=function(){return this.Ri()},MWn.ii=function(n,t){return AMn(this,n,t)},MWn.ki=function(n){return this.Oi(n)},MWn.$c=function(n){return wq(this,n)},MWn.Mc=function(n){var t;return(t=this.Xc(n))>=0&&(this.$c(t),!0)},MWn.mi=function(n,t){return this.Ui(n,this.oi(n,t))},MWn.gc=function(){return this.Vi()},MWn.Pc=function(){return this.Wi()},MWn.Qc=function(n){return this.Xi(n)},MWn.Ib=function(){return this.Yi()},vX(B6n,"DelegatingEList",1995),wAn(1996,1995,n9n),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){vqn(this)},MWn.Zi=function(n,t,e,i,r){return new NY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return!this.Ri()},MWn.ii=function(n,t){var e,i;return this.ej()?(i=this.fj(),e=AMn(this,n,t),this.$i(this.Zi(7,iln(t),e,n,i)),e):AMn(this,n,t)},MWn.$c=function(n){var t,e,i,r;return this.ej()?(e=null,i=this.fj(),t=this.Zi(4,r=wq(this,n),null,n,i),this.bj()&&r?(e=this.dj(r,e))?(e.Ei(t),e.Fi()):this.$i(t):e?(e.Ei(t),e.Fi()):this.$i(t),r):(r=wq(this,n),this.bj()&&r&&(e=this.dj(r,null))&&e.Fi(),r)},MWn.mi=function(n,t){return oFn(this,n,t)},vX(i6n,"DelegatingNotifyingListImpl",1996),wAn(143,1,t9n),MWn.Ei=function(n){return KEn(this,n)},MWn.Fi=function(){$7(this)},MWn.xi=function(){return this.d},MWn._i=function(){return null},MWn.gj=function(){return null},MWn.yi=function(n){return-1},MWn.zi=function(){return Rxn(this)},MWn.Ai=function(){return null},MWn.Bi=function(){return Kxn(this)},MWn.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},MWn.hj=function(){return!1},MWn.Di=function(n){var t,e,i,r,c,a,u,o;switch(this.d){case 1:case 2:switch(n.xi()){case 1:case 2:if(GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0}case 4:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return a=tGn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.Ci(),this.d=6,o=new gtn(2),c<=i?(f9(o,this.n),f9(o,n.Bi()),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=c,i+1])):(f9(o,n.Bi()),f9(o,this.n),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=i,c])),this.n=o,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null)){for(a=tGn(this),i=n.Ci(),u=BB(this.g,48),e=x8(ANt,hQn,25,u.length+1,15,1),t=0;t<u.length&&(r=u[t])<=i;)e[t++]=r,++i;for(BB(this.n,15).Vc(t,n.Bi()),e[t]=i;++t<e.length;)e[t]=u[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},MWn.Ib=function(){var n,t,e;switch((e=new fN(nE(this.gm)+"@"+(nsn(this)>>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:mE(e,this.d)}if(lKn(this)&&(e.a+=", touch: true"),e.a+=", position: ",mE(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",rO(e,this.Ai()),e.a+=", feature: ",rO(e,this._i()),e.a+=", oldValue: ",rO(e,Kxn(this)),e.a+=", newValue: ",6==this.d&&cL(this.g,48)){for(t=BB(this.g,48),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=FWn);e.a+="]"}else rO(e,Rxn(this));return e.a+=", isTouch: ",yE(e,lKn(this)),e.a+=", wasSet: ",yE(e,tGn(this)),e.a+=")",e.a},MWn.d=0,MWn.e=0,MWn.f=0,MWn.j=0,MWn.k=0,MWn.o=0,MWn.p=0,vX(i6n,"NotificationImpl",143),wAn(1167,143,t9n,NY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"DelegatingNotifyingListImpl/1",1167),wAn(242,63,h8n,po,Fj),MWn.Fc=function(n){return Mwn(this,BB(n,366))},MWn.Ei=function(n){return Mwn(this,n)},MWn.Fi=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=BB(this.g[n],366)).Ai())&&-1!=t.xi()&&BB(e,92).Ng(t)},MWn.ri=function(n){return x8(gAt,HWn,366,n,0,1)},vX(i6n,"NotificationChainImpl",242),wAn(1378,90,e6n),MWn.Kg=function(){return this.e},MWn.Mg=function(){return 0!=(1&this.f)},MWn.f=1,vX(i6n,"NotifierImpl",1378),wAn(1993,63,h8n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){sqn(this)},MWn.Zi=function(n,t,e,i,r){return new xY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.ij=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return 0!=this.i},MWn.ii=function(n,t){return Iln(this,n,t)},MWn.$c=function(n){return fDn(this,n)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.jj=function(n,t){return t},MWn.kj=function(n,t){return t},MWn.lj=function(n,t,e){return e},vX(i6n,"NotifyingListImpl",1993),wAn(1166,143,t9n,xY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"NotifyingListImpl/1",1166),wAn(953,63,h8n,aR),MWn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new $q(this),this.a=this.j),FT(this.b,n)):Sjn(this,n)},MWn.ni=function(){return!0},MWn.a=0,vX(B6n,"AbstractEList/1",953),wAn(295,73,NQn,tK),vX(B6n,"AbstractEList/BasicIndexOutOfBoundsException",295),wAn(40,1,QWn,AL),MWn.Nb=function(n){fU(this,n)},MWn.mj=function(){if(this.i.j!=this.f)throw Hp(new vv)},MWn.nj=function(){return kpn(this)},MWn.Ob=function(){return this.e!=this.i.gc()},MWn.Pb=function(){return this.nj()},MWn.Qb=function(){Qjn(this)},MWn.e=0,MWn.f=0,MWn.g=-1,vX(B6n,"AbstractEList/EIterator",40),wAn(278,40,cVn,cx,GU),MWn.Qb=function(){Qjn(this)},MWn.Rb=function(n){odn(this,n)},MWn.oj=function(){var n;try{return n=this.d.Xb(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.pj=function(n){kmn(this,n)},MWn.Sb=function(){return 0!=this.e},MWn.Tb=function(){return this.e},MWn.Ub=function(){return this.oj()},MWn.Vb=function(){return this.e-1},MWn.Wb=function(n){this.pj(n)},vX(B6n,"AbstractEList/EListIterator",278),wAn(341,40,QWn,ax),MWn.nj=function(){return jpn(this)},MWn.Qb=function(){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEIterator",341),wAn(385,278,cVn,ux,RK),MWn.Rb=function(n){throw Hp(new pv)},MWn.nj=function(){var n;try{return n=this.c.ki(this.e),this.mj(),this.g=this.e++,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.oj=function(){var n;try{return n=this.c.ki(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEListIterator",385),wAn(1982,67,r9n),MWn.Vh=function(n,t){var e,i,r,c,a,u,o,s,h;if(0!=(i=t.gc())){for(e=Psn(this,(s=null==(o=BB(yan(this.a,4),126))?0:o.length)+i),(h=s-n)>0&&aHn(o,n,e,n+i,h),u=t.Kc(),c=0;c<i;++c)JA(e,n+c,xsn(this,a=u.Pb()));for(Fgn(this,e),r=0;r<i;++r)a=e[n],this.bi(n,a),++n;return!0}return++this.j,!1},MWn.Wh=function(n){var t,e,i,r,c,a,u,o,s;if(0!=(i=n.gc())){for(t=Psn(this,s=(o=null==(e=BB(yan(this.a,4),126))?0:e.length)+i),u=n.Kc(),c=o;c<s;++c)JA(t,c,xsn(this,a=u.Pb()));for(Fgn(this,t),r=o;r<s;++r)a=t[r],this.bi(r,a);return!0}return++this.j,!1},MWn.Xh=function(n,t){var e,i,r,c;e=Psn(this,(r=null==(i=BB(yan(this.a,4),126))?0:i.length)+1),c=xsn(this,t),n!=r&&aHn(i,n,e,n+1,r-n),$X(e,n,c),Fgn(this,e),this.bi(n,t)},MWn.Yh=function(n){var t,e,i;JA(t=Psn(this,(i=null==(e=BB(yan(this.a,4),126))?0:e.length)+1),i,xsn(this,n)),Fgn(this,t),this.bi(i,n)},MWn.Zh=function(){return new S5(this)},MWn.$h=function(){return new Yz(this)},MWn._h=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new BW(this,n)},MWn.$b=function(){var n,t;++this.j,t=null==(n=BB(yan(this.a,4),126))?0:n.length,Fgn(this,null),L8(this,t,n)},MWn.Hc=function(n){var t,e,i,r;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(Nfn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(GI(e[i])===GI(n))return!0;return!1},MWn.Xb=function(n){var t,e;if(n>=(e=null==(t=BB(yan(this.a,4),126))?0:t.length))throw Hp(new tK(n,e));return t[n]},MWn.Xc=function(n){var t,e,i;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(Nfn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(GI(t[e])===GI(n))return e;return-1},MWn.dc=function(){return null==BB(yan(this.a,4),126)},MWn.Kc=function(){return new M5(this)},MWn.Yc=function(){return new Qz(this)},MWn.Zc=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new FW(this,n)},MWn.ii=function(n,t){var e,i,r;if(n>=(r=null==(e=$dn(this))?0:e.length))throw Hp(new Ay(u8n+n+o8n+r));if(t>=r)throw Hp(new Ay(s8n+t+o8n+r));return i=e[t],n!=t&&(n<t?aHn(e,n,e,n+1,t-n):aHn(e,t+1,e,t,n-t),$X(e,n,i),Fgn(this,e)),i},MWn.ki=function(n){return BB(yan(this.a,4),126)[n]},MWn.$c=function(n){return EOn(this,n)},MWn.mi=function(n,t){var e,i;return i=(e=$dn(this))[n],JA(e,n,xsn(this,t)),Fgn(this,e),i},MWn.gc=function(){var n;return null==(n=BB(yan(this.a,4),126))?0:n.length},MWn.Pc=function(){var n,t,e;return e=null==(n=BB(yan(this.a,4),126))?0:n.length,t=x8(dAt,i9n,415,e,0,1),e>0&&aHn(n,0,t,0,e),t},MWn.Qc=function(n){var t,e;return(e=null==(t=BB(yan(this.a,4),126))?0:t.length)>0&&(n.length<e&&(n=Den(tsn(n).c,e)),aHn(t,0,n,0,e)),n.length>e&&$X(n,e,null),n},vX(B6n,"ArrayDelegatingEList",1982),wAn(1038,40,QWn,M5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EIterator",1038),wAn(706,278,cVn,Qz,FW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.pj=function(n){kmn(this,n),this.a=BB(yan(this.b.a,4),126)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EListIterator",706),wAn(1039,341,QWn,S5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEIterator",1039),wAn(707,385,cVn,Yz,BW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEListIterator",707),wAn(606,295,NQn,LO),vX(B6n,"BasicEList/BasicIndexOutOfBoundsException",606),wAn(696,63,h8n,DI),MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.qi=function(n){throw Hp(new pv)},MWn.Kc=function(){return this.Zh()},MWn.Yc=function(){return this.$h()},MWn.Zc=function(n){return this._h(n)},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.$c=function(n){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},vX(B6n,"BasicEList/UnmodifiableEList",696),wAn(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),MWn.Vc=function(n,t){Q$(this,n,BB(t,42))},MWn.Fc=function(n){return aD(this,BB(n,42))},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return BB(Wtn(this.c,n),133)},MWn.ii=function(n,t){return BB(this.c.ii(n,t),42)},MWn.ji=function(n,t){Y$(this,n,BB(t,42))},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BB(this.c.$c(n),42)},MWn._c=function(n,t){return uX(this,n,BB(t,42))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Wc=function(n,t){return this.c.Wc(n,t)},MWn.Gc=function(n){return this.c.Gc(n)},MWn.$b=function(){this.c.$b()},MWn.Hc=function(n){return this.c.Hc(n)},MWn.Ic=function(n){return oun(this.c,n)},MWn.qj=function(){var n,t;if(null==this.d){for(this.d=x8(oAt,c9n,63,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)Ivn(this,BB(n.nj(),133));this.e=t}},MWn.Fb=function(n){return NK(this,n)},MWn.Hb=function(){return Mun(this.c)},MWn.Xc=function(n){return this.c.Xc(n)},MWn.rj=function(){this.c=new hp(this)},MWn.dc=function(){return 0==this.f},MWn.Kc=function(){return this.c.Kc()},MWn.Yc=function(){return this.c.Yc()},MWn.Zc=function(n){return this.c.Zc(n)},MWn.sj=function(){return A8(this)},MWn.tj=function(n,t,e){return new SB(n,t,e)},MWn.uj=function(){return new vo},MWn.Mc=function(n){return hin(this,n)},MWn.gc=function(){return this.f},MWn.bd=function(n,t){return new s1(this.c,n,t)},MWn.Pc=function(){return this.c.Pc()},MWn.Qc=function(n){return this.c.Qc(n)},MWn.Ib=function(){return Jbn(this.c)},MWn.e=0,MWn.f=0,vX(B6n,"BasicEMap",705),wAn(1033,63,h8n,hp),MWn.bi=function(n,t){Av(this,BB(t,133))},MWn.ei=function(n,t,e){var i;++(i=this,BB(t,133),i).a.e},MWn.fi=function(n,t){$v(this,BB(t,133))},MWn.gi=function(n,t,e){VN(this,BB(t,133),BB(e,133))},MWn.di=function(n,t){aan(this.a)},vX(B6n,"BasicEMap/1",1033),wAn(1034,63,h8n,vo),MWn.ri=function(n){return x8(vAt,a9n,612,n,0,1)},vX(B6n,"BasicEMap/2",1034),wAn(1035,nVn,tVn,fp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return rdn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Bj(this.a)},MWn.Mc=function(n){var t;return t=this.a.f,Wdn(this.a,n),this.a.f!=t},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/3",1035),wAn(1036,28,ZWn,lp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return YDn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Hj(this.a)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/4",1036),wAn(1037,nVn,tVn,bp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){var t,e,i,r,c,a,u,o,s;if(this.a.f>0&&cL(n,42)&&(this.a.qj(),r=null==(u=(o=BB(n,42)).cd())?0:nsn(u),c=eR(this.a,r),t=this.a.d[c]))for(e=BB(t.g,367),s=t.i,a=0;a<s;++a)if((i=e[a]).Sh()==r&&i.Fb(o))return!0;return!1},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new pQ(this.a)},MWn.Mc=function(n){return IAn(this,n)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/5",1037),wAn(613,1,QWn,pQ),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return-1!=this.b},MWn.Pb=function(){var n;if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.b)throw Hp(new yv);return this.d=this.a,this.e=this.b,ujn(this),n=BB(this.f.d[this.d].g[this.e],133),this.vj(n)},MWn.Qb=function(){if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.e)throw Hp(new dv);this.f.c.Mc(Wtn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},MWn.vj=function(n){return n},MWn.a=0,MWn.b=-1,MWn.c=0,MWn.d=0,MWn.e=0,vX(B6n,"BasicEMap/BasicEMapIterator",613),wAn(1031,613,QWn,Bj),MWn.vj=function(n){return n.cd()},vX(B6n,"BasicEMap/BasicEMapKeyIterator",1031),wAn(1032,613,QWn,Hj),MWn.vj=function(n){return n.dd()},vX(B6n,"BasicEMap/BasicEMapValueIterator",1032),wAn(1030,1,JWn,wp),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.a.c.$b()},MWn._b=function(n){return BI(this,n)},MWn.uc=function(n){return YDn(this.a,n)},MWn.vc=function(){return I8(this.a)},MWn.Fb=function(n){return NK(this.a,n)},MWn.xc=function(n){return cdn(this.a,n)},MWn.Hb=function(){return Mun(this.a.c)},MWn.dc=function(){return 0==this.a.f},MWn.ec=function(){return O8(this.a)},MWn.zc=function(n,t){return vjn(this.a,n,t)},MWn.Bc=function(n){return Wdn(this.a,n)},MWn.gc=function(){return this.a.f},MWn.Ib=function(){return Jbn(this.a.c)},MWn.Cc=function(){return C8(this.a)},vX(B6n,"BasicEMap/DelegatingMap",1030),wAn(612,1,{42:1,133:1,612:1},SB),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),(null!=this.b?Nfn(this.b,t.cd()):GI(this.b)===GI(t.cd()))&&(null!=this.c?Nfn(this.c,t.dd()):GI(this.c)===GI(t.dd())))},MWn.Sh=function(){return this.a},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return this.a^(null==this.c?0:nsn(this.c))},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){throw Hp(new sv)},MWn.ed=function(n){var t;return t=this.c,this.c=n,t},MWn.Ib=function(){return this.b+"->"+this.c},MWn.a=0;var pAt,vAt=vX(B6n,"BasicEMap/EntryImpl",612);wAn(536,1,{},oo),vX(B6n,"BasicEMap/View",536),wAn(768,1,{}),MWn.Fb=function(n){return NAn((SQ(),set),n)},MWn.Hb=function(){return Fon((SQ(),set))},MWn.Ib=function(){return LMn((SQ(),set))},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList",768),wAn(1312,1,cVn,mo),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList/1",1312),wAn(1310,768,{20:1,14:1,15:1,58:1},Tm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},vX(B6n,"ECollections/EmptyUnmodifiableEList",1310),wAn(1311,768,{20:1,14:1,15:1,58:1,589:1},Mm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},MWn.sj=function(){return SQ(),SQ(),het},vX(B6n,"ECollections/EmptyUnmodifiableEMap",1311);var mAt,yAt=bq(B6n,"Enumerator");wAn(281,1,{281:1},rRn),MWn.Fb=function(n){var t;return this===n||!!cL(n,281)&&(t=BB(n,281),this.f==t.f&&vG(this.i,t.i)&&pG(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&pG(this.d,t.d)&&pG(this.g,t.g)&&pG(this.e,t.e)&&Spn(this,t))},MWn.Hb=function(){return this.f},MWn.Ib=function(){return M_n(this)},MWn.f=0;var kAt,jAt,EAt,TAt=0,MAt=0,SAt=0,PAt=0,CAt=0,IAt=0,OAt=0,AAt=0,$At=0,LAt=0,NAt=0,xAt=0,DAt=0;vX(B6n,"URI",281),wAn(1091,43,tYn,Sm),MWn.zc=function(n,t){return BB(mZ(this,SD(n),BB(t,281)),281)},vX(B6n,"URI/URICache",1091),wAn(497,63,h8n,fo,rG),MWn.hi=function(){return!0},vX(B6n,"UniqueEList",497),wAn(581,60,BVn,L7),vX(B6n,"WrappedException",581);var RAt,KAt=bq(q5n,s9n),_At=bq(q5n,h9n),FAt=bq(q5n,f9n),BAt=bq(q5n,l9n),HAt=bq(q5n,b9n),qAt=bq(q5n,"EClass"),GAt=bq(q5n,"EDataType");wAn(1183,43,tYn,Pm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var zAt,UAt,XAt=bq(q5n,"EEnum"),WAt=bq(q5n,w9n),VAt=bq(q5n,d9n),QAt=bq(q5n,g9n),YAt=bq(q5n,p9n),JAt=bq(q5n,v9n);wAn(1029,1,{},ho),MWn.Ib=function(){return"NIL"},vX(q5n,"EStructuralFeature/Internal/DynamicValueHolder/1",1029),wAn(1028,43,tYn,Cm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var ZAt,n$t,t$t,e$t,i$t,r$t,c$t,a$t,u$t,o$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,v$t,m$t,y$t,k$t,j$t,E$t,T$t,M$t,S$t,P$t,C$t,I$t,O$t=bq(q5n,m9n),A$t=bq(q5n,"EValidator/PatternMatcher"),$$t=bq(y9n,"FeatureMap/Entry");wAn(535,1,{72:1},CI),MWn.ak=function(){return this.a},MWn.dd=function(){return this.b},vX(l6n,"BasicEObjectImpl/1",535),wAn(1027,1,k9n,II),MWn.Wj=function(n){return V5(this.a,this.b,n)},MWn.fj=function(){return ZJ(this.a,this.b)},MWn.Wb=function(n){NJ(this.a,this.b,n)},MWn.Xj=function(){PW(this.a,this.b)},vX(l6n,"BasicEObjectImpl/4",1027),wAn(1983,1,{108:1}),MWn.bk=function(n){this.e=0==n?M$t:x8(Ant,HWn,1,n,5,1)},MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.ck=function(){return this.c},MWn.dk=function(){throw Hp(new pv)},MWn.ek=function(){throw Hp(new pv)},MWn.fk=function(){return this.d},MWn.gk=function(){return null!=this.e},MWn.hk=function(n){this.c=n},MWn.ik=function(n){throw Hp(new pv)},MWn.jk=function(n){throw Hp(new pv)},MWn.kk=function(n){this.d=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),wAn(185,1983,{108:1},Kf),MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderImpl",185),wAn(506,97,f6n,yo),MWn.Kg=function(){return this.f},MWn.Pg=function(){return this.k},MWn.Rg=function(n,t){this.g=n,this.i=t},MWn.Tg=function(){return 0==(2&this.j)?this.zh():this.ph().ck()},MWn.Vg=function(){return this.i},MWn.Mg=function(){return 0!=(1&this.j)},MWn.eh=function(){return this.g},MWn.kh=function(){return 0!=(4&this.j)},MWn.ph=function(){return!this.k&&(this.k=new Kf),this.k},MWn.th=function(n){this.ph().hk(n),n?this.j|=2:this.j&=-3},MWn.vh=function(n){this.ph().jk(n),n?this.j|=4:this.j&=-5},MWn.zh=function(){return(QX(),t$t).S},MWn.i=0,MWn.j=1,vX(l6n,"EObjectImpl",506),wAn(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},jH),MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.Tg=function(){return this.d},MWn.Yg=function(n){return Awn(this.d,n)},MWn.$g=function(){return this.d},MWn.dh=function(){return null!=this.e},MWn.ph=function(){return!this.k&&(this.k=new ko),this.k},MWn.th=function(n){this.d=n},MWn.yh=function(){var n;return null==this.e&&(n=bX(this.d),this.e=0==n?S$t:x8(Ant,HWn,1,n,5,1)),this},MWn.Ah=function(){return 0},vX(l6n,"DynamicEObjectImpl",780),wAn(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},fq),MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.th=function(n){this.d=n,this.b=NNn(n,"key"),this.c=NNn(n,E6n)},MWn.Sh=function(){var n;return-1==this.a&&(n=J7(this,this.b),this.a=null==n?0:nsn(n)),this.a},MWn.cd=function(){return J7(this,this.b)},MWn.dd=function(){return J7(this,this.c)},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){NJ(this,this.b,n)},MWn.ed=function(n){var t;return t=J7(this,this.c),NJ(this,this.c,n),t},MWn.a=0,vX(l6n,"DynamicEObjectImpl/BasicEMapEntry",1376),wAn(1377,1,{108:1},ko),MWn.bk=function(n){throw Hp(new pv)},MWn.Ch=function(n){throw Hp(new pv)},MWn.Dh=function(n,t){throw Hp(new pv)},MWn.Eh=function(n){throw Hp(new pv)},MWn.ck=function(){throw Hp(new pv)},MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.fk=function(){return this.c},MWn.gk=function(){throw Hp(new pv)},MWn.hk=function(n){throw Hp(new pv)},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},MWn.kk=function(n){this.c=n},vX(l6n,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),wAn(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},jo),MWn.Qg=function(n){return bkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),this.b):(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),A8(this.b));case 3:return bZ(this);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),this.a;case 5:return!this.c&&(this.c=new RL(LOt,this,5)),this.c}return U9(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?bkn(this,e):this.Cb.ih(this,-1-i,null,e)),QG(this,BB(n,147),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),BK(this.b,n,e);case 3:return QG(this,null,e);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!bZ(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return O3(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void pq(this,SD(t));case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void tan(this.b,t);case 3:return void ONn(this,BB(t,147));case 4:return!this.a&&(this.a=new $L(LOt,this,4)),sqn(this.a),!this.a&&(this.a=new $L(LOt,this,4)),void pX(this.a,BB(t,14));case 5:return!this.c&&(this.c=new RL(LOt,this,5)),sqn(this.c),!this.c&&(this.c=new RL(LOt,this,5)),void pX(this.c,BB(t,14))}Lbn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t)},MWn.zh=function(){return gWn(),e$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Bin(this,null);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void this.b.c.$b();case 3:return void ONn(this,null);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),void sqn(this.a);case 5:return!this.c&&(this.c=new RL(LOt,this,5)),void sqn(this.c)}qfn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.Ib=function(){return Vfn(this)},MWn.d=null,vX(l6n,"EAnnotationImpl",510),wAn(151,705,j9n,y9),MWn.Xh=function(n,t){n$(this,n,BB(t,42))},MWn.lk=function(n,t){return FK(this,BB(n,42),t)},MWn.pi=function(n){return BB(BB(this.c,69).pi(n),133)},MWn.Zh=function(){return BB(this.c,69).Zh()},MWn.$h=function(){return BB(this.c,69).$h()},MWn._h=function(n){return BB(this.c,69)._h(n)},MWn.mk=function(n,t){return BK(this,n,t)},MWn.Wj=function(n){return BB(this.c,76).Wj(n)},MWn.rj=function(){},MWn.fj=function(){return BB(this.c,76).fj()},MWn.tj=function(n,t,e){var i;return(i=BB(Utn(this.b).Nh().Jh(this.b),133)).Th(n),i.Uh(t),i.ed(e),i},MWn.uj=function(){return new Ip(this)},MWn.Wb=function(n){tan(this,n)},MWn.Xj=function(){BB(this.c,76).Xj()},vX(y9n,"EcoreEMap",151),wAn(158,151,j9n,Jx),MWn.qj=function(){var n,t,e,i,r;if(null==this.d){for(r=x8(oAt,c9n,63,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=BB(e.nj(),133)).Sh()&DWn)%r.length])&&(n=r[i]=new Ip(this)),n.Fc(t);this.d=r}},vX(l6n,"EAnnotationImpl/1",158),wAn(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi())}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),E$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi())}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ikn(this),this.Bb|=1},MWn.Yj=function(){return Ikn(this)},MWn.Zj=function(){return this.t},MWn.$j=function(){var n;return(n=this.t)>1||-1==n},MWn.hi=function(){return 0!=(512&this.Bb)},MWn.nk=function(n,t){return Pfn(this,n,t)},MWn.ok=function(n){Nen(this,n)},MWn.Ib=function(){return KOn(this)},MWn.s=0,MWn.t=1,vX(l6n,"ETypedElementImpl",284),wAn(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),MWn.Qg=function(n){return Nyn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?Nyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 17:return T_n(this,null,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),j$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Gj=function(){return this.f},MWn.zj=function(){return qLn(this)},MWn.Hj=function(){return dZ(this)},MWn.Lj=function(){return null},MWn.pk=function(){return this.k},MWn.aj=function(){return this.n},MWn.Mj=function(){return oEn(this)},MWn.Nj=function(){var n,t,e,i,r,c,a,u,o;return this.p||((null==(e=dZ(this)).i&&qFn(e),e.i).length,(i=this.Lj())&&bX(dZ(i)),n=(a=(r=Ikn(this)).Bj())?0!=(1&a.i)?a==$Nt?ktt:a==ANt?Att:a==DNt?Ctt:a==xNt?Ptt:a==LNt?Rtt:a==RNt?_tt:a==NNt?Ttt:Stt:a:null,t=qLn(this),u=r.zj(),bbn(this),0!=(this.Bb&hVn)&&((c=mjn((IPn(),Z$t),e))&&c!=this||(c=Z1(B7(Z$t,this))))?this.p=new AI(this,c):this.$j()?this.rk()?i?0!=(this.Bb&T9n)?n?this.sk()?this.p=new lQ(47,n,this,i):this.p=new lQ(5,n,this,i):this.sk()?this.p=new w4(46,this,i):this.p=new w4(4,this,i):n?this.sk()?this.p=new lQ(49,n,this,i):this.p=new lQ(7,n,this,i):this.sk()?this.p=new w4(48,this,i):this.p=new w4(6,this,i):0!=(this.Bb&T9n)?n?n==Hnt?this.p=new PB(50,VOt,this):this.sk()?this.p=new PB(43,n,this):this.p=new PB(1,n,this):this.sk()?this.p=new RY(42,this):this.p=new RY(0,this):n?n==Hnt?this.p=new PB(41,VOt,this):this.sk()?this.p=new PB(45,n,this):this.p=new PB(3,n,this):this.sk()?this.p=new RY(44,this):this.p=new RY(2,this):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(512&this.Bb)?0!=(this.Bb&T9n)?this.p=n?new PB(9,n,this):new RY(8,this):this.p=n?new PB(11,n,this):new RY(10,this):0!=(this.Bb&T9n)?this.p=n?new PB(13,n,this):new RY(12,this):this.p=n?new PB(15,n,this):new RY(14,this):i?(o=i.t)>1||-1==o?this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(25,n,this,i):new w4(24,this,i):this.p=n?new lQ(27,n,this,i):new w4(26,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(29,n,this,i):new w4(28,this,i):this.p=n?new lQ(31,n,this,i):new w4(30,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(33,n,this,i):new w4(32,this,i):this.p=n?new lQ(35,n,this,i):new w4(34,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(37,n,this,i):new w4(36,this,i):this.p=n?new lQ(39,n,this,i):new w4(38,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new PB(17,n,this):new RY(16,this):this.p=n?new PB(19,n,this):new RY(18,this):0!=(this.Bb&T9n)?this.p=n?new PB(21,n,this):new RY(20,this):this.p=n?new PB(23,n,this):new RY(22,this):this.qk()?this.sk()?this.p=new CB(BB(r,26),this,i):this.p=new mJ(BB(r,26),this,i):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(this.Bb&T9n)?this.p=n?new nz(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new dQ(BB(r,148),t,u,this):this.p=n?new ZG(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new wQ(BB(r,148),t,u,this):this.rk()?i?0!=(this.Bb&T9n)?this.sk()?this.p=new NB(BB(r,26),this,i):this.p=new LB(BB(r,26),this,i):this.sk()?this.p=new $B(BB(r,26),this,i):this.p=new IB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.sk()?this.p=new eD(BB(r,26),this):this.p=new tD(BB(r,26),this):this.sk()?this.p=new nD(BB(r,26),this):this.p=new Zx(BB(r,26),this):this.sk()?i?0!=(this.Bb&T9n)?this.p=new xB(BB(r,26),this,i):this.p=new OB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new rD(BB(r,26),this):this.p=new iD(BB(r,26),this):i?0!=(this.Bb&T9n)?this.p=new DB(BB(r,26),this,i):this.p=new AB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new cD(BB(r,26),this):this.p=new cG(BB(r,26),this)),this.p},MWn.Ij=function(){return 0!=(this.Bb&k6n)},MWn.qk=function(){return!1},MWn.rk=function(){return!1},MWn.Jj=function(){return 0!=(this.Bb&hVn)},MWn.Oj=function(){return hnn(this)},MWn.sk=function(){return!1},MWn.Kj=function(){return 0!=(this.Bb&T9n)},MWn.tk=function(n){this.k=n},MWn.Lh=function(n){JZ(this,n)},MWn.Ib=function(){return ERn(this)},MWn.e=!1,MWn.n=0,vX(l6n,"EStructuralFeatureImpl",449),wAn(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Om),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!NIn(this);case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return t?uun(this):x6(this)}return U9(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return NIn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!x6(this)}return O3(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Uj(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void Gln(this,qy(TD(t)))}Lbn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t)},MWn.zh=function(){return gWn(),i$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return this.b=0,void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return void Gln(this,!1)}qfn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.Gh=function(){uun(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.$j=function(){return NIn(this)},MWn.nk=function(n,t){return this.b=0,this.a=null,Pfn(this,n,t)},MWn.ok=function(n){Uj(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (iD: ",yE(n,0!=(this.Bb&h6n)),n.a+=")",n.a)},MWn.b=0,vX(l6n,"EAttributeImpl",322),wAn(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),MWn.uk=function(n){return n.Tg()==this},MWn.Qg=function(n){return fyn(this,n)},MWn.Rg=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),c$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.yj=function(){var n;return-1==this.G&&(this.G=(n=Utn(this))?uvn(n.Mh(),this):-1),this.G},MWn.zj=function(){return null},MWn.Aj=function(){return Utn(this)},MWn.vk=function(){return this.v},MWn.Bj=function(){return iyn(this)},MWn.Cj=function(){return null!=this.D?this.D:this.B},MWn.Dj=function(){return this.F},MWn.wj=function(n){return SFn(this,n)},MWn.wk=function(n){this.v=n},MWn.xk=function(n){Urn(this,n)},MWn.yk=function(n){this.C=n},MWn.Lh=function(n){ZZ(this,n)},MWn.Ib=function(){return Cwn(this)},MWn.C=null,MWn.D=null,MWn.G=-1,vX(l6n,"EClassifierImpl",351),wAn(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},_f),MWn.uk=function(n){return QR(this,n.Tg())},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return null;case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return hN(),0!=(512&this.Bb);case 10:return kY(this);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),this.q;case 12:return YBn(this);case 13:return RBn(this);case 14:return RBn(this),this.r;case 15:return YBn(this),this.k;case 16:return WPn(this);case 17:return gBn(this);case 18:return qFn(this);case 19:return CLn(this);case 20:return YBn(this),this.o;case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),this.s;case 22:return a4(this);case 23:return HDn(this)}return U9(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),Ywn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),Ywn(this.s,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),_pn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),_pn(this.s,n,e);case 22:return _pn(a4(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==a4(this.u.a).i||this.n&&Rvn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=YBn(this).i;case 13:return 0!=RBn(this).i;case 14:return RBn(this),0!=this.r.i;case 15:return YBn(this),0!=this.k.i;case 16:return 0!=WPn(this).i;case 17:return 0!=gBn(this).i;case 18:return 0!=qFn(this).i;case 19:return 0!=CLn(this).i;case 20:return YBn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&Rvn(this.n);case 23:return 0!=HDn(this).i}return O3(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.oh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:NNn(this,n))||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Jfn(this,qy(TD(t)));case 9:return void tln(this,qy(TD(t)));case 10:return vqn(kY(this)),void pX(kY(this),BB(t,14));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),sqn(this.q),!this.q&&(this.q=new eU(QAt,this,11,10)),void pX(this.q,BB(t,14));case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),sqn(this.s),!this.s&&(this.s=new eU(FAt,this,21,17)),void pX(this.s,BB(t,14));case 22:return sqn(a4(this)),void pX(a4(this),BB(t,14))}Lbn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t)},MWn.zh=function(){return gWn(),r$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Jfn(this,!1);case 9:return void tln(this,!1);case 10:return void(this.u&&vqn(this.u));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),void sqn(this.q);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),void sqn(this.s);case 22:return void(this.n&&sqn(this.n))}qfn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.Gh=function(){var n,t;if(YBn(this),RBn(this),WPn(this),gBn(this),qFn(this),CLn(this),HDn(this),a6(XB(P5(this))),this.s)for(n=0,t=this.s.i;n<t;++n)vx(Wtn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)vx(Wtn(this.q,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Ib=function(){return dEn(this)},MWn.k=null,MWn.r=null,vX(l6n,"EClassImpl",88),wAn(1994,1993,D9n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return LFn(this,this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.lk=function(n,t){return Ywn(this,n,t)},MWn.pi=function(n){return F9(this,n)},MWn.mk=function(n,t){return _pn(this,n,t)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"NotifyingInternalEListImpl",1994),wAn(622,1994,R9n),MWn.Hc=function(n){return bqn(this,n)},MWn.Zi=function(n,t,e,i,r){return yZ(this,n,t,e,i,r)},MWn.$i=function(n){Lv(this,n)},MWn.Wj=function(n){return this},MWn.ak=function(){return itn(this.e.Tg(),this.aj())},MWn._i=function(){return this.ak()},MWn.aj=function(){return Awn(this.e.Tg(),this.ak())},MWn.zk=function(){return BB(this.ak().Yj(),26).Bj()},MWn.Ak=function(){return Cvn(BB(this.ak(),18)).n},MWn.Ai=function(){return this.e},MWn.Bk=function(){return!0},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!1},MWn.Xc=function(n){return uvn(this,n)},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.e,this.Ak(),this.zk(),t):e.gh(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.gh(this.e,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.e,this.Ak(),this.zk(),t):e.ih(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.ih(this.e,-1-this.aj(),null,t)},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return x3(this.d,n)},MWn.ej=function(){return mA(this.e)},MWn.fj=function(){return 0!=this.i},MWn.ri=function(n){return Den(this.d,n)},MWn.li=function(n,t){return this.Fk()&&this.Ek()?GOn(this,n,BB(t,56)):t},MWn.Gk=function(n){return n.kh()?tfn(this.e,BB(n,49)):n},MWn.Wb=function(n){J$(this,n)},MWn.Pc=function(){return H9(this)},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.i-1;t>=0;--t)Wtn(this,t);return Qwn(this,n)},MWn.Xj=function(){sqn(this)},MWn.oi=function(n,t){return _en(this,n,t)},vX(y9n,"EcoreEList",622),wAn(496,622,R9n,yH),MWn.ai=function(){return!1},MWn.aj=function(){return this.c},MWn.bj=function(){return!1},MWn.Fk=function(){return!0},MWn.hi=function(){return!0},MWn.li=function(n,t){return t},MWn.ni=function(){return!1},MWn.c=0,vX(y9n,"EObjectEList",496),wAn(85,496,R9n,$L),MWn.bj=function(){return!0},MWn.Dk=function(){return!1},MWn.rk=function(){return!0},vX(y9n,"EObjectContainmentEList",85),wAn(545,85,R9n,LL),MWn.ci=function(){this.b=!0},MWn.fj=function(){return this.b},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.b,this.b=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.b=!1},MWn.b=!1,vX(y9n,"EObjectContainmentEList/Unsettable",545),wAn(1140,545,R9n,YG),MWn.ii=function(n,t){var e,i;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),a$t),iln(t),cL(i=e.c,88)?BB(i,26):d$t,n)),e},MWn.jj=function(n,t){return Zwn(this,BB(n,87),t)},MWn.kj=function(n,t){return Jwn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return _jn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Rvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EClassImpl/1",1140),wAn(1154,1153,Z8n),MWn.ui=function(n){var t,e,i,r,c,a,u;if(8!=(e=n.xi())){if(0==(i=apn(n)))switch(e){case 1:case 9:null!=(u=n.Bi())&&(!(t=P5(BB(u,473))).c&&(t.c=new Bo),snn(t.c,n.Ai())),null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 3:null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 5:if(null!=(a=n.zi()))for(c=BB(a,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 4:null!=(u=n.Bi())&&0==(1&(r=BB(u,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()));break;case 6:if(null!=(u=n.Bi()))for(c=BB(u,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()))}this.Hk(i)}},MWn.Hk=function(n){dRn(this,n)},MWn.b=63,vX(l6n,"ESuperAdapter",1154),wAn(1155,1154,Z8n,dp),MWn.Hk=function(n){ACn(this,n)},vX(l6n,"EClassImpl/10",1155),wAn(1144,696,R9n),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.lk=function(n,t){throw Hp(new pv)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.mk=function(n,t){throw Hp(new pv)},MWn.Wj=function(n){return this},MWn.fj=function(){return 0!=this.i},MWn.Wb=function(n){throw Hp(new pv)},MWn.Xj=function(){throw Hp(new pv)},vX(y9n,"EcoreEList/UnmodifiableEList",1144),wAn(319,1144,R9n,NO),MWn.ni=function(){return!1},vX(y9n,"EcoreEList/UnmodifiableEList/FastCompare",319),wAn(1147,319,R9n,don),MWn.Xc=function(n){var t,e;if(cL(n,170)&&-1!=(t=BB(n,170).aj()))for(e=this.i;t<e;++t)if(GI(this.g[t])===GI(n))return t;return-1},vX(l6n,"EClassImpl/1EAllStructuralFeaturesList",1147),wAn(1141,497,h8n,Eo),MWn.ri=function(n){return x8(VAt,B9n,87,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EGenericSuperTypeEList",1141),wAn(623,497,h8n,To),MWn.ri=function(n){return x8(FAt,N9n,170,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EStructuralFeatureUniqueEList",623),wAn(741,497,h8n,Mo),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1ReferenceList",741),wAn(1142,497,h8n,gp),MWn.bi=function(n,t){tz(this,BB(t,34))},MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/2",1142),wAn(1143,497,h8n,So),MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/3",1143),wAn(1145,319,R9n,EH),MWn.Fc=function(n){return mB(this,BB(n,34))},MWn.Yh=function(n){JE(this,BB(n,34))},vX(l6n,"EClassImpl/4",1145),wAn(1146,319,R9n,TH),MWn.Fc=function(n){return yB(this,BB(n,18))},MWn.Yh=function(n){ZE(this,BB(n,18))},vX(l6n,"EClassImpl/5",1146),wAn(1148,497,h8n,Po),MWn.ri=function(n){return x8(QAt,x9n,59,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/6",1148),wAn(1149,497,h8n,Co),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/7",1149),wAn(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return uFn(this,this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.lk=function(n,t){return wmn(this,n,t)},MWn.mk=function(n,t){return Fpn(this,n,t)},MWn.mi=function(n,t){return oFn(this,n,t)},MWn.pi=function(n){return this.Oi(n)},MWn.Zh=function(){return new ax(this)},MWn.Gi=function(){return this.Ji()},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"DelegatingNotifyingInternalEListImpl",1997),wAn(742,1997,H9n),MWn.ai=function(){var n;return cL(n=itn(jY(this.b),this.aj()).Yj(),148)&&!cL(n,457)&&0==(1&n.Bj().i)},MWn.Hc=function(n){var t,e,i,r,c,a,u;if(this.Fk()){if((u=this.Vi())>4){if(!this.wj(n))return!1;if(this.rk()){if(a=(t=(e=BB(n,49)).Ug())==this.b&&(this.Dk()?e.Og(e.Vg(),BB(itn(jY(this.b),this.aj()).Yj(),26).Bj())==Cvn(BB(itn(jY(this.b),this.aj()),18)).n:-1-e.Vg()==this.aj()),this.Ek()&&!a&&!t&&e.Zg())for(i=0;i<u;++i)if(GI(Gz(this,this.Oi(i)))===GI(n))return!0;return a}if(this.Dk()&&!this.Ck()){if(GI(r=BB(n,56).ah(Cvn(BB(itn(jY(this.b),this.aj()),18))))===GI(this.b))return!0;if(null==r||!BB(r,56).kh())return!1}}if(c=this.Li(n),this.Ek()&&!c)for(i=0;i<u;++i)if(GI(e=Gz(this,this.Oi(i)))===GI(n))return!0;return c}return this.Li(n)},MWn.Zi=function(n,t,e,i,r){return new N7(this.b,n,this.aj(),t,e,i,r)},MWn.$i=function(n){ban(this.b,n)},MWn.Wj=function(n){return this},MWn._i=function(){return itn(jY(this.b),this.aj())},MWn.aj=function(){return Awn(jY(this.b),itn(jY(this.b),this.aj()))},MWn.Ai=function(){return this.b},MWn.Bk=function(){return!!itn(jY(this.b),this.aj()).Yj().Bj()},MWn.bj=function(){var n;return!(!cL(n=itn(jY(this.b),this.aj()),99)||0==(BB(n,18).Bb&h6n)&&!Cvn(BB(n,18)))},MWn.Ck=function(){var n,t,e;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!(t=Cvn(BB(n,18)))&&((e=t.t)>1||-1==e)},MWn.Dk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!Cvn(BB(n,18))},MWn.Ek=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&BQn)},MWn.Xc=function(n){var t,e,i;if((e=this.Qi(n))>=0)return e;if(this.Fk())for(t=0,i=this.Vi();t<i;++t)if(GI(Gz(this,this.Oi(t)))===GI(n))return t;return-1},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.gh(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.gh(this.b,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.ih(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.ih(this.b,-1-this.aj(),null,t)},MWn.rk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&h6n)},MWn.Fk=function(){return cL(itn(jY(this.b),this.aj()).Yj(),88)},MWn.wj=function(n){return itn(jY(this.b),this.aj()).Yj().wj(n)},MWn.ej=function(){return mA(this.b)},MWn.fj=function(){return!this.Ri()},MWn.hi=function(){return itn(jY(this.b),this.aj()).hi()},MWn.li=function(n,t){return eGn(this,n,t)},MWn.Wb=function(n){vqn(this),pX(this,BB(n,15))},MWn.Pc=function(){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)eGn(this,n,this.Oi(n));return this.Wi()},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.Vi()-1;t>=0;--t)eGn(this,t,this.Oi(t));return this.Xi(n)},MWn.Xj=function(){vqn(this)},MWn.oi=function(n,t){return B9(this,n,t)},vX(y9n,"DelegatingEcoreEList",742),wAn(1150,742,H9n,uR),MWn.Hi=function(n,t){lD(this,n,BB(t,26))},MWn.Ii=function(n){e$(this,BB(n,26))},MWn.Oi=function(n){var t;return cL(t=BB(Wtn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ti=function(n){var t;return cL(t=BB(fDn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ui=function(n,t){return dmn(this,n,BB(t,26))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new pp(this)},MWn.Ki=function(){sqn(a4(this.a))},MWn.Li=function(n){return Ufn(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!Ufn(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==a4(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e,i;for(t=1,n=new AL(a4(this.a));n.e!=n.i.gc();)t=31*t+((e=cL(i=BB(kpn(n),87).c,88)?BB(i,26):(gWn(),d$t))?PN(e):0);return t},MWn.Qi=function(n){var t,e,i,r;for(i=0,e=new AL(a4(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(cL(r=t.c,88)?BB(r,26):(gWn(),d$t)))return i;++i}return-1},MWn.Ri=function(){return 0==a4(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return a4(this.a).i},MWn.Wi=function(){var n,t,e,i,r,c;for(c=a4(this.a).i,r=x8(Ant,HWn,1,c,5,1),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),r[e++]=cL(i=n.c,88)?BB(i,26):(gWn(),d$t);return r},MWn.Xi=function(n){var t,e,i,r;for(r=a4(this.a).i,n.length<r&&(n=Den(tsn(n).c,r)),n.length>r&&$X(n,r,null),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)$X(n,e++,cL(i=BB(kpn(t),87).c,88)?BB(i,26):(gWn(),d$t));return n},MWn.Yi=function(){var n,t,e,i,r;for((r=new Sk).a+="[",n=a4(this.a),t=0,i=a4(this.a).i;t<i;)cO(r,kN(cL(e=BB(Wtn(n,t),87).c,88)?BB(e,26):(gWn(),d$t))),++t<i&&(r.a+=FWn);return r.a+="]",r.a},MWn.$i=function(n){},MWn.aj=function(){return 10},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,88)},MWn.fj=function(){return Q0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EClassImpl/8",1150),wAn(1151,1964,LVn,pp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return a4(this.a.a).i},vX(l6n,"EClassImpl/8/1",1151),wAn(1152,497,h8n,Io),MWn.ri=function(n){return x8(HAt,HWn,138,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/9",1152),wAn(1139,53,eYn,Im),vX(l6n,"EClassImpl/MyHashSet",1139),wAn(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},Ev),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),u$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Fj=function(){var n,t;if(!this.c&&!(n=G$n(Utn(this))).dc())for(t=n.Kc();t.Ob();)N_n(this,SD(t.Pb()))&&Rln(this);return this.b},MWn.zj=function(){var n;if(!this.e){n=null;try{n=iyn(this)}catch(t){if(!cL(t=lun(t),102))throw Hp(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==$Nt?(hN(),ptt):n==ANt?iln(0):n==DNt?new Nb(0):n==xNt?0:n==LNt?jgn(0):n==RNt?rln(0):n==NNt?Pnn(0):fun(0)),this.e=!0}return this.d},MWn.Ej=function(){return 0!=(256&this.Bb)},MWn.Ik=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},MWn.xk=function(n){Urn(this,n),this.Ik(n)},MWn.yk=function(n){this.C=n,this.e=!1},MWn.Ib=function(){var n;return 0!=(64&this.Db)?Cwn(this):((n=new fN(Cwn(this))).a+=" (serializable: ",yE(n,0!=(256&this.Bb)),n.a+=")",n.a)},MWn.c=!1,MWn.d=null,MWn.e=!1,vX(l6n,"EDataTypeImpl",566),wAn(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Am),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return Qsn(this);case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),this.a}return U9(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),Ywn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!!Qsn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)));case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),sqn(this.a),!this.a&&(this.a=new eU(WAt,this,9,5)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t)},MWn.zh=function(){return gWn(),o$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),void sqn(this.a)}qfn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.Gh=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)vx(Wtn(this.a,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.zj=function(){return Qsn(this)},MWn.wj=function(n){return null!=n},MWn.Ik=function(n){},vX(l6n,"EEnumImpl",457),wAn(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},jv),MWn.ne=function(){return this.zb},MWn.Qg=function(n){return lkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return iln(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?BB(this.Cb,671):null}return U9(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?lkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 5:return T_n(this,null,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!BB(this.Cb,671))}return O3(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void $en(this,BB(t,19).a);case 3:return void gOn(this,BB(t,1940));case 4:return void Fin(this,SD(t))}Lbn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t)},MWn.zh=function(){return gWn(),s$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void $en(this,0);case 3:return void gOn(this,null);case 4:return void Fin(this,null)}qfn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},MWn.b=null,MWn.c=null,MWn.d=0,vX(l6n,"EEnumLiteralImpl",573);var L$t,N$t,x$t,D$t=bq(l6n,"EFactoryImpl/InternalEDateTimeFormat");wAn(489,1,{2015:1},vp),vX(l6n,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),wAn(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},Kp),MWn.Sg=function(n,t,e){var i;return e=T_n(this,n,t,e),this.e&&cL(n,170)&&(i=kLn(this,this.e))!=this.c&&(e=azn(this,i,e)),e},MWn._g=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new $L(VAt,this,1)),this.d;case 2:return t?lFn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?qvn(this):this.a}return U9(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return nfn(this,null,e);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),_pn(this.d,n,e);case 3:return Zhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),f$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),f$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return O3(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void jEn(this,BB(t,87));case 1:return!this.d&&(this.d=new $L(VAt,this,1)),sqn(this.d),!this.d&&(this.d=new $L(VAt,this,1)),void pX(this.d,BB(t,14));case 3:return void kEn(this,BB(t,87));case 4:return void DMn(this,BB(t,836));case 5:return void cen(this,BB(t,138))}Lbn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t)},MWn.zh=function(){return gWn(),f$t},MWn.Bh=function(n){switch(n){case 0:return void jEn(this,null);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),void sqn(this.d);case 3:return void kEn(this,null);case 4:return void DMn(this,null);case 5:return void cen(this,null)}qfn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.Ib=function(){var n;return(n=new lN(P$n(this))).a+=" (expression: ",bHn(this,n),n.a+=")",n.a},vX(l6n,"EGenericTypeImpl",241),wAn(1969,1964,q9n),MWn.Xh=function(n,t){nR(this,n,t)},MWn.lk=function(n,t){return nR(this,this.gc(),n),t},MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return this.$h()},MWn.Gi=function(){return new Pp(this)},MWn.$h=function(){return this._h(0)},MWn._h=function(n){return this.Gi().Zc(n)},MWn.mk=function(n,t){return ywn(this,n,!0),t},MWn.ii=function(n,t){var e;return e=tkn(this,t),this.Zc(n).Rb(e),e},MWn.ji=function(n,t){ywn(this,t,!0),this.Zc(n).Rb(t)},vX(y9n,"AbstractSequentialInternalEList",1969),wAn(486,1969,q9n,QN),MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn.Gi=function(){return new DO(this.a,this.b)},MWn.$h=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn._h=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(c=this.a.bh(n,!1),ZM(),BB(n,66).Oj()){for(i=0,r=(t=BB(c,153)).gc();i<r;++i)if(wX(t.il(i))&&null!=t.jl(i))return!1}else if(n.$j()){if(!BB(c,14).dc())return!1}else if(null!=c)return!1;return!0},MWn.Kc=function(){return Ern(this)},MWn.Zc=function(n){var t,e;if(null==this.b){if(0!=n)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Lk()?this.Kk():this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.Jk=function(){return new YN(this.a,this.b)},MWn.Kk=function(){return new Vx(this.a,this.b)},MWn.Lk=function(){return!0},MWn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(a=this.a.bh(n,!1),ZM(),BB(n,66).Oj())for(i=0,c=(t=BB(a,153)).gc();i<c;++i)wX(t.il(i))&&null!=t.jl(i)&&++r;else n.$j()?r+=BB(a,14).gc():null!=a&&++r;return r},MWn.Mk=function(){return!0},vX(y9n,"EContentsEList",486),wAn(1156,486,q9n,Wx),MWn.Jk=function(){return new Qx(this.a,this.b)},MWn.Kk=function(){return new Yx(this.a,this.b)},MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1",1156),wAn(279,1,G9n,YN),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Nk=function(n){if(0!=this.g||this.e)throw Hp(new Fy("Iterator already in use or already filtered"));this.e=n},MWn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?kPn(this,this.p):pOn(this)))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?kPn(this,this.p):pOn(this))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=2,!0;return this.k=null,this.p=null,this.f=!1,this.g=1,!1}},MWn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?jPn(this,this.p):wCn(this)))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?jPn(this,this.p):wCn(this))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},MWn.Pb=function(){return Man(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Lk=function(){return!1},MWn.Wb=function(n){throw Hp(new pv)},MWn.Mk=function(){return!0},MWn.a=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.n=0,MWn.o=0,vX(y9n,"EContentsEList/FeatureIteratorImpl",279),wAn(697,279,G9n,Vx),MWn.Lk=function(){return!0},vX(y9n,"EContentsEList/ResolvingFeatureIteratorImpl",697),wAn(1157,697,G9n,Yx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/1",1157),wAn(1158,279,G9n,Qx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/2",1158),wAn(36,143,t9n,f4,l4,nU,k9,N7,t6,Hen,S0,qen,P0,J5,C0,Uen,I0,Z5,O0,Gen,A0,tU,j9,GQ,zen,$0,n6,L0),MWn._i=function(){return h9(this)},MWn.gj=function(){var n;return(n=h9(this))?n.zj():null},MWn.yi=function(n){return-1==this.b&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,n)},MWn.Ai=function(){return this.c},MWn.hj=function(){var n;return!!(n=h9(this))&&n.Kj()},MWn.b=-1,vX(l6n,"ENotificationImpl",36),wAn(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},$m),MWn.Qg=function(n){return Pkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,26):null;case 11:return!this.d&&(this.d=new NL(O$t,this,11)),this.d;case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oR(this,this)),this.a;case 14:return H7(this)}return U9(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Pkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),Ywn(this.c,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e);case 11:return!this.d&&(this.d=new NL(O$t,this,11)),_pn(this.d,n,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),_pn(this.c,n,e);case 14:return _pn(H7(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,26));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==H7(this.a.a).i||this.b&&Kvn(this.b));case 14:return!!this.b&&Kvn(this.b)}return O3(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),sqn(this.d),!this.d&&(this.d=new NL(O$t,this,11)),void pX(this.d,BB(t,14));case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),sqn(this.c),!this.c&&(this.c=new eU(YAt,this,12,10)),void pX(this.c,BB(t,14));case 13:return!this.a&&(this.a=new oR(this,this)),vqn(this.a),!this.a&&(this.a=new oR(this,this)),void pX(this.a,BB(t,14));case 14:return sqn(H7(this)),void pX(H7(this),BB(t,14))}Lbn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t)},MWn.zh=function(){return gWn(),g$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),void sqn(this.d);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),void sqn(this.c);case 13:return void(this.a&&vqn(this.a));case 14:return void(this.b&&sqn(this.b))}qfn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.Gh=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)vx(Wtn(this.c,n));Ikn(this),this.Bb|=1},vX(l6n,"EOperationImpl",399),wAn(505,742,H9n,oR),MWn.Hi=function(n,t){fD(this,n,BB(t,138))},MWn.Ii=function(n){i$(this,BB(n,138))},MWn.Oi=function(n){return BB(Wtn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ti=function(n){return BB(fDn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ui=function(n,t){return bgn(this,n,BB(t,138))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new mp(this)},MWn.Ki=function(){sqn(H7(this.a))},MWn.Li=function(n){return oln(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!oln(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==H7(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e;for(t=1,n=new AL(H7(this.a));n.e!=n.i.gc();)t=31*t+((e=BB(kpn(n),87).c||(gWn(),l$t))?nsn(e):0);return t},MWn.Qi=function(n){var t,e,i;for(i=0,e=new AL(H7(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(t.c||(gWn(),l$t)))return i;++i}return-1},MWn.Ri=function(){return 0==H7(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return H7(this.a).i},MWn.Wi=function(){var n,t,e,i,r;for(r=H7(this.a).i,i=x8(Ant,HWn,1,r,5,1),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),i[e++]=n.c||(gWn(),l$t);return i},MWn.Xi=function(n){var t,e,i;for(i=H7(this.a).i,n.length<i&&(n=Den(tsn(n).c,i)),n.length>i&&$X(n,i,null),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)$X(n,e++,BB(kpn(t),87).c||(gWn(),l$t));return n},MWn.Yi=function(){var n,t,e,i;for((i=new Sk).a+="[",n=H7(this.a),t=0,e=H7(this.a).i;t<e;)cO(i,kN(BB(Wtn(n,t),87).c||(gWn(),l$t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a},MWn.$i=function(n){},MWn.aj=function(){return 13},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,138)},MWn.fj=function(){return V0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EOperationImpl/1",505),wAn(1340,1964,LVn,mp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return H7(this.a.a).i},vX(l6n,"EOperationImpl/1/1",1340),wAn(1341,545,R9n,JG),MWn.ii=function(n,t){var e;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),p$t),iln(t),e.c||l$t,n)),e},MWn.jj=function(n,t){return Mfn(this,BB(n,87),t)},MWn.kj=function(n,t){return Sfn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return Wgn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Kvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EOperationImpl/2",1341),wAn(498,1,{1938:1,498:1},OI),vX(l6n,"EPackageImpl/1",498),wAn(16,85,R9n,eU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectContainmentWithInverseEList",16),wAn(353,16,R9n,eK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Resolving",353),wAn(298,353,R9n,Jz),MWn.ci=function(){this.a.tb=null},vX(l6n,"EPackageImpl/2",298),wAn(1228,1,{},Oo),vX(l6n,"EPackageImpl/3",1228),wAn(718,43,tYn,Nm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},vX(l6n,"EPackageRegistryImpl",718),wAn(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Lm),MWn.Qg=function(n){return Ckn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,59):null}return U9(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Ckn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,59))}return O3(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n))},MWn.zh=function(){return gWn(),m$t},vX(l6n,"EParameterImpl",509),wAn(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},pD),MWn._g=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(r=this.t)>1||-1==r;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return hN(),!(!(i=Cvn(this))||0==(i.Bb&h6n));case 20:return hN(),0!=(this.Bb&BQn);case 21:return t?Cvn(this):this.b;case 22:return t?Ion(this):K5(this);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),this.a}return U9(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t,e)},MWn.lh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!(t=Cvn(this))&&0!=(t.Bb&h6n);case 20:return 0==(this.Bb&BQn);case 21:return!!this.b;case 22:return!!K5(this);case 23:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void YZ(this,qy(TD(t)));case 20:return void Uln(this,qy(TD(t)));case 21:return void rrn(this,BB(t,18));case 23:return!this.a&&(this.a=new RL(BAt,this,23)),sqn(this.a),!this.a&&(this.a=new RL(BAt,this,23)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t)},MWn.zh=function(){return gWn(),y$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return zln(this,!1),void(cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),2));case 20:return void Uln(this,!0);case 21:return void rrn(this,null);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),void sqn(this.a)}qfn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.Gh=function(){Ion(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Lj=function(){return Cvn(this)},MWn.qk=function(){var n;return!!(n=Cvn(this))&&0!=(n.Bb&h6n)},MWn.rk=function(){return 0!=(this.Bb&h6n)},MWn.sk=function(){return 0!=(this.Bb&BQn)},MWn.nk=function(n,t){return this.c=null,Pfn(this,n,t)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (containment: ",yE(n,0!=(this.Bb&h6n)),n.a+=", resolveProxies: ",yE(n,0!=(this.Bb&BQn)),n.a+=")",n.a)},vX(l6n,"EReferenceImpl",99),wAn(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},Ao),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){vq(this,SD(n))},MWn.ed=function(n){return $H(this,SD(n))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return U9(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return O3(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void mq(this,SD(t));case 1:return void Kin(this,SD(t))}Lbn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t)},MWn.zh=function(){return gWn(),k$t},MWn.Bh=function(n){switch(n){case 0:return void Rin(this,null);case 1:return void Kin(this,null)}qfn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:vvn(n)),this.a},MWn.Th=function(n){this.a=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (key: ",cO(n,this.b),n.a+=", value: ",cO(n,this.c),n.a+=")",n.a)},MWn.a=-1,MWn.b=null,MWn.c=null;var R$t,K$t,_$t,F$t,B$t,H$t,q$t,G$t,z$t,U$t,X$t=vX(l6n,"EStringToStringMapEntryImpl",548),W$t=bq(y9n,"FeatureMap/Entry/Internal");wAn(565,1,z9n),MWn.Ok=function(n){return this.Pk(BB(n,49))},MWn.Pk=function(n){return this.Ok(n)},MWn.Fb=function(n){var t,e;return this===n||!!cL(n,72)&&(t=BB(n,72)).ak()==this.c&&(null==(e=this.dd())?null==t.dd():Nfn(e,t.dd()))},MWn.ak=function(){return this.c},MWn.Hb=function(){var n;return n=this.dd(),nsn(this.c)^(null==n?0:nsn(n))},MWn.Ib=function(){var n,t;return t=Utn((n=this.c).Hj()).Ph(),n.ne(),(null!=t&&0!=t.length?t+":"+n.ne():n.ne())+"="+this.dd()},vX(l6n,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),wAn(776,565,z9n,rR),MWn.Pk=function(n){return new rR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return Scn(this,n,this.a,t,e)},MWn.Rk=function(n,t,e){return Pcn(this,n,this.a,t,e)},vX(l6n,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),wAn(1314,1,{},AI),MWn.Pj=function(n,t,e,i,r){return BB(S9(n,this.b),215).nl(this.a).Wj(i)},MWn.Qj=function(n,t,e,i,r){return BB(S9(n,this.b),215).el(this.a,i,r)},MWn.Rj=function(n,t,e,i,r){return BB(S9(n,this.b),215).fl(this.a,i,r)},MWn.Sj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a).fj()},MWn.Tj=function(n,t,e,i){BB(S9(n,this.b),215).nl(this.a).Wb(i)},MWn.Uj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a)},MWn.Vj=function(n,t,e){BB(S9(n,this.b),215).nl(this.a).Xj()},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),wAn(89,1,{},PB,lQ,RY,w4),MWn.Pj=function(n,t,e,i,r){var c;if(null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),!r)switch(this.e){case 50:case 41:return BB(c,589).sj();case 40:return BB(c,215).kl()}return c},MWn.Qj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),BB(c,69).lk(i,r)},MWn.Rj=function(n,t,e,i,r){var c;return null!=(c=t.Ch(e))&&(r=BB(c,69).mk(i,r)),r},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&BB(i,76).fj()},MWn.Tj=function(n,t,e,i){var r;!(r=BB(t.Ch(e),76))&&t.Dh(e,r=iWn(this,n)),r.Wb(i)},MWn.Uj=function(n,t,e){var i;return null==(i=t.Ch(e))&&t.Dh(e,i=iWn(this,n)),cL(i,76)?BB(i,76):new Ep(BB(t.Ch(e),15))},MWn.Vj=function(n,t,e){var i;!(i=BB(t.Ch(e),76))&&t.Dh(e,i=iWn(this,n)),i.Xj()},MWn.b=0,MWn.e=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),wAn(504,1,{}),MWn.Qj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Rj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Uj=function(n,t,e){return new bQ(this,n,t,e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),wAn(1331,1,k9n,bQ),MWn.Wj=function(n){return this.a.Pj(this.c,this.d,this.b,n,!0)},MWn.fj=function(){return this.a.Sj(this.c,this.d,this.b)},MWn.Wb=function(n){this.a.Tj(this.c,this.d,this.b,n)},MWn.Xj=function(){this.a.Vj(this.c,this.d,this.b)},MWn.b=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),wAn(769,504,{},mJ),MWn.Pj=function(n,t,e,i,r){return gKn(n,n.eh(),n.Vg())==this.b?this.sk()&&i?cAn(n):n.eh():null},MWn.Qj=function(n,t,e,i,r){var c,a;return n.eh()&&(r=(c=n.Vg())>=0?n.Qg(r):n.eh().ih(n,-1-c,null,r)),a=Awn(n.Tg(),this.e),n.Sg(i,a,r)},MWn.Rj=function(n,t,e,i,r){var c;return c=Awn(n.Tg(),this.e),n.Sg(null,c,r)},MWn.Sj=function(n,t,e){var i;return i=Awn(n.Tg(),this.e),!!n.eh()&&n.Vg()==i},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));if(r=n.eh(),a=Awn(n.Tg(),this.e),GI(i)!==GI(r)||n.Vg()!=a&&null!=i){if(vkn(n,BB(i,56)))throw Hp(new _y(w6n+n.Ib()));o=null,r&&(o=(c=n.Vg())>=0?n.Qg(o):n.eh().ih(n,-1-c,null,o)),(u=BB(i,49))&&(o=u.gh(n,Awn(u.Tg(),this.b),null,o)),(o=n.Sg(u,a,o))&&o.Fi()}else n.Lg()&&n.Mg()&&ban(n,new nU(n,1,a,i,i))},MWn.Vj=function(n,t,e){var i,r,c;n.eh()?(c=(i=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-i,null,null),r=Awn(n.Tg(),this.e),(c=n.Sg(null,r,c))&&c.Fi()):n.Lg()&&n.Mg()&&ban(n,new tU(n,1,this.e,null,null))},MWn.sk=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),wAn(1315,769,{},CB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),wAn(563,504,{}),MWn.Pj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&(GI(i)===GI(R$t)||!Nfn(i,this.b))},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c,null==i?null!=this.c?(t.Dh(e,null),i=this.b):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Tk(n,1,this.e,r,i))):null==i?null!=this.c?t.Dh(e,null):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=null==(r=t.Ch(e))?this.b:GI(r)===GI(R$t)?null:r,t.Eh(e),ban(n,this.d.Tk(n,1,this.e,i,this.b))):t.Eh(e)},MWn.Sk=function(n){throw Hp(new bv)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),wAn(W9n,1,{},$o),MWn.Tk=function(n,t,e,i,r){return new tU(n,t,e,i,r)},MWn.Uk=function(n,t,e,i,r,c){return new GQ(n,t,e,i,r,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",W9n),wAn(1332,W9n,{},Lo),MWn.Tk=function(n,t,e,i,r){return new n6(n,t,e,qy(TD(i)),qy(TD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new L0(n,t,e,qy(TD(i)),qy(TD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),wAn(1333,W9n,{},No),MWn.Tk=function(n,t,e,i,r){return new Hen(n,t,e,BB(i,217).a,BB(r,217).a)},MWn.Uk=function(n,t,e,i,r,c){return new S0(n,t,e,BB(i,217).a,BB(r,217).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),wAn(1334,W9n,{},xo),MWn.Tk=function(n,t,e,i,r){return new qen(n,t,e,BB(i,172).a,BB(r,172).a)},MWn.Uk=function(n,t,e,i,r,c){return new P0(n,t,e,BB(i,172).a,BB(r,172).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),wAn(1335,W9n,{},Do),MWn.Tk=function(n,t,e,i,r){return new J5(n,t,e,Gy(MD(i)),Gy(MD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new C0(n,t,e,Gy(MD(i)),Gy(MD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),wAn(1336,W9n,{},Ro),MWn.Tk=function(n,t,e,i,r){return new Uen(n,t,e,BB(i,155).a,BB(r,155).a)},MWn.Uk=function(n,t,e,i,r,c){return new I0(n,t,e,BB(i,155).a,BB(r,155).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),wAn(1337,W9n,{},Ko),MWn.Tk=function(n,t,e,i,r){return new Z5(n,t,e,BB(i,19).a,BB(r,19).a)},MWn.Uk=function(n,t,e,i,r,c){return new O0(n,t,e,BB(i,19).a,BB(r,19).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),wAn(1338,W9n,{},_o),MWn.Tk=function(n,t,e,i,r){return new Gen(n,t,e,BB(i,162).a,BB(r,162).a)},MWn.Uk=function(n,t,e,i,r,c){return new A0(n,t,e,BB(i,162).a,BB(r,162).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),wAn(1339,W9n,{},Fo),MWn.Tk=function(n,t,e,i,r){return new zen(n,t,e,BB(i,184).a,BB(r,184).a)},MWn.Uk=function(n,t,e,i,r,c){return new $0(n,t,e,BB(i,184).a,BB(r,184).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),wAn(1317,563,{},wQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),wAn(1318,563,{},ZG),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),wAn(770,563,{}),MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=!0,null==(c=t.Ch(e))?(r=!1,c=this.b):GI(c)===GI(R$t)&&(c=null),null==i?null!=this.c?(t.Dh(e,null),i=this.b):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Uk(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.Dh(e,null):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=!0,null==(r=t.Ch(e))?(i=!1,r=this.b):GI(r)===GI(R$t)&&(r=null),t.Eh(e),ban(n,this.d.Uk(n,2,this.e,r,this.b,i))):t.Eh(e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),wAn(1319,770,{},dQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),wAn(1320,770,{},nz),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),wAn(398,504,{},cG),MWn.Pj=function(n,t,e,i,r){var c,a,u,o,s;if(s=t.Ch(e),this.Kj()&&GI(s)===GI(R$t))return null;if(this.sk()&&i&&null!=s){if((u=BB(s,49)).kh()&&u!=(o=tfn(n,u))){if(!SFn(this.a,o))throw Hp(new Ky(U9n+tsn(o)+X9n+this.a+"'"));t.Dh(e,s=o),this.rk()&&(c=BB(o,49),a=u.ih(n,this.b?Awn(u.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,null),!c.eh()&&(a=c.gh(n,this.b?Awn(c.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,a)),a&&a.Fi()),n.Lg()&&n.Mg()&&ban(n,new tU(n,9,this.e,u,o))}return s}return s},MWn.Qj=function(n,t,e,i,r){var c,a;return GI(a=t.Ch(e))===GI(R$t)&&(a=null),t.Dh(e,i),this.bj()?GI(a)!==GI(i)&&null!=a&&(r=(c=BB(a,49)).ih(n,Awn(c.Tg(),this.b),null,r)):this.rk()&&null!=a&&(r=BB(a,49).ih(n,-1-Awn(n.Tg(),this.e),null,r)),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),r.Ei(new tU(n,1,this.e,a,i))),r},MWn.Rj=function(n,t,e,i,r){var c;return GI(c=t.Ch(e))===GI(R$t)&&(c=null),t.Eh(e),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),this.Kj()?r.Ei(new tU(n,2,this.e,c,null)):r.Ei(new tU(n,1,this.e,c,null))),r},MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));u=null!=(o=t.Ch(e)),this.Kj()&&GI(o)===GI(R$t)&&(o=null),a=null,this.bj()?GI(o)!==GI(i)&&(null!=o&&(a=(r=BB(o,49)).ih(n,Awn(r.Tg(),this.b),null,a)),null!=i&&(a=(r=BB(i,49)).gh(n,Awn(r.Tg(),this.b),null,a))):this.rk()&&GI(o)!==GI(i)&&(null!=o&&(a=BB(o,49).ih(n,-1-Awn(n.Tg(),this.e),null,a)),null!=i&&(a=BB(i,49).gh(n,-1-Awn(n.Tg(),this.e),null,a))),null==i&&this.Kj()?t.Dh(e,R$t):t.Dh(e,i),n.Lg()&&n.Mg()?(c=new GQ(n,1,this.e,o,i,this.Kj()&&!u),a?(a.Ei(c),a.Fi()):ban(n,c)):a&&a.Fi()},MWn.Vj=function(n,t,e){var i,r,c,a,u;a=null!=(u=t.Ch(e)),this.Kj()&&GI(u)===GI(R$t)&&(u=null),c=null,null!=u&&(this.bj()?c=(i=BB(u,49)).ih(n,Awn(i.Tg(),this.b),null,c):this.rk()&&(c=BB(u,49).ih(n,-1-Awn(n.Tg(),this.e),null,c))),t.Eh(e),n.Lg()&&n.Mg()?(r=new GQ(n,this.Kj()?2:1,this.e,u,null,a),c?(c.Ei(r),c.Fi()):ban(n,r)):c&&c.Fi()},MWn.bj=function(){return!1},MWn.rk=function(){return!1},MWn.sk=function(){return!1},MWn.Kj=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),wAn(564,398,{},Zx),MWn.rk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),wAn(1323,564,{},nD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),wAn(772,564,{},tD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),wAn(1325,772,{},eD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),wAn(640,564,{},IB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),wAn(1324,640,{},$B),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),wAn(773,640,{},LB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),wAn(1326,773,{},NB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),wAn(641,398,{},iD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),wAn(1327,641,{},rD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),wAn(774,641,{},OB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),wAn(1328,774,{},xB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),wAn(1321,398,{},cD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),wAn(771,398,{},AB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),wAn(1322,771,{},DB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),wAn(775,565,z9n,aW),MWn.Pk=function(n){return new aW(this.a,this.c,n)},MWn.dd=function(){return this.b},MWn.Qk=function(n,t,e){return D8(this,n,this.b,e)},MWn.Rk=function(n,t,e){return R8(this,n,this.b,e)},vX(l6n,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),wAn(1329,1,k9n,Ep),MWn.Wj=function(n){return this.a},MWn.fj=function(){return cL(this.a,95)?BB(this.a,95).fj():!this.a.dc()},MWn.Wb=function(n){this.a.$b(),this.a.Gc(BB(n,15))},MWn.Xj=function(){cL(this.a,95)?BB(this.a,95).Xj():this.a.$b()},vX(l6n,"EStructuralFeatureImpl/SettingMany",1329),wAn(1330,565,z9n,g4),MWn.Ok=function(n){return new cR((Uqn(),FLt),this.b.Ih(this.a,n))},MWn.dd=function(){return null},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),wAn(642,565,z9n,cR),MWn.Ok=function(n){return new cR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),wAn(391,497,h8n,Bo),MWn.ri=function(n){return x8(qAt,HWn,26,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"ESuperAdapter/1",391),wAn(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},Ho),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new aG(this,VAt,this)),this.a}return U9(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),T$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),T$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return!this.a&&(this.a=new aG(this,VAt,this)),sqn(this.a),!this.a&&(this.a=new aG(this,VAt,this)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t)},MWn.zh=function(){return gWn(),T$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),void sqn(this.a)}qfn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},vX(l6n,"ETypeParameterImpl",444),wAn(445,85,R9n,aG),MWn.cj=function(n,t){return LTn(this,BB(n,87),t)},MWn.dj=function(n,t){return NTn(this,BB(n,87),t)},vX(l6n,"ETypeParameterImpl/1",445),wAn(634,43,tYn,xm),MWn.ec=function(){return new Tp(this)},vX(l6n,"ETypeParameterImpl/2",634),wAn(556,nVn,tVn,Tp),MWn.Fc=function(n){return YR(this,BB(n,87))},MWn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=BB(e.Pb(),87),null==VW(this.a,t,"")&&(i=!0);return i},MWn.$b=function(){$U(this.a)},MWn.Hc=function(n){return hU(this.a,n)},MWn.Kc=function(){return new Mp(new usn(new Pb(this.a).a))},MWn.Mc=function(n){return _6(this,n)},MWn.gc=function(){return NT(this.a)},vX(l6n,"ETypeParameterImpl/2/1",556),wAn(557,1,QWn,Mp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(ten(this.a).cd(),87)},MWn.Ob=function(){return this.a.b},MWn.Qb=function(){o9(this.a)},vX(l6n,"ETypeParameterImpl/2/1/1",557),wAn(1276,43,tYn,Dm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},MWn.xc=function(n){var t;return cL(t=XI(n)?SJ(this,n):qI(AY(this.f,n)),837)?(t=BB(t,837)._j(),VW(this,BB(n,235),t),t):null!=t?t:null==n?(JM(),rLt):null},vX(l6n,"EValidatorRegistryImpl",1276),wAn(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},qo),MWn.Ih=function(n,t){switch(n.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:Bbn(t);case 25:return Xtn(t);case 27:return X9(t);case 28:return W9(t);case 29:return null==t?null:H$(IOt[0],BB(t,199));case 41:return null==t?"":nE(BB(t,290));case 42:return Bbn(t);case 50:return SD(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Om;case 1:return new jo;case 2:return new _f;case 4:return new Ev;case 5:return new Am;case 6:return new jv;case 7:return new Rf;case 10:return new yo;case 11:return new $m;case 12:return new vY;case 13:return new Lm;case 14:return new pD;case 17:return new Ao;case 18:return new Kp;case 19:return new Ho;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 20:return null==t?null:new wE(t);case 21:return null==t?null:new $A(t);case 23:case 22:return null==t?null:Zdn(t);case 26:case 24:return null==t?null:Pnn(l_n(t,-128,127)<<24>>24);case 25:return d$n(t);case 27:return Syn(t);case 28:return Pyn(t);case 29:return gMn(t);case 32:case 31:return null==t?null:bSn(t);case 38:case 37:return null==t?null:new Dv(t);case 40:case 39:return null==t?null:iln(l_n(t,_Vn,DWn));case 41:case 42:return null;case 44:case 43:return null==t?null:jgn(rUn(t));case 49:case 48:return null==t?null:rln(l_n(t,Q9n,32767)<<16>>16);case 50:return t;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(l6n,"EcoreFactoryImpl",1313),wAn(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},UW),MWn.gb=!1,MWn.hb=!1;var V$t,Q$t=!1;vX(l6n,"EcorePackageImpl",547),wAn(1184,1,{837:1},Go),MWn._j=function(){return sN(),cLt},vX(l6n,"EcorePackageImpl/1",1184),wAn(1193,1,s7n,zo),MWn.wj=function(n){return cL(n,147)},MWn.xj=function(n){return x8(BOt,HWn,147,n,0,1)},vX(l6n,"EcorePackageImpl/10",1193),wAn(1194,1,s7n,Uo),MWn.wj=function(n){return cL(n,191)},MWn.xj=function(n){return x8(qOt,HWn,191,n,0,1)},vX(l6n,"EcorePackageImpl/11",1194),wAn(1195,1,s7n,Xo),MWn.wj=function(n){return cL(n,56)},MWn.xj=function(n){return x8(LOt,HWn,56,n,0,1)},vX(l6n,"EcorePackageImpl/12",1195),wAn(1196,1,s7n,Wo),MWn.wj=function(n){return cL(n,399)},MWn.xj=function(n){return x8(QAt,x9n,59,n,0,1)},vX(l6n,"EcorePackageImpl/13",1196),wAn(1197,1,s7n,Vo),MWn.wj=function(n){return cL(n,235)},MWn.xj=function(n){return x8(GOt,HWn,235,n,0,1)},vX(l6n,"EcorePackageImpl/14",1197),wAn(1198,1,s7n,Qo),MWn.wj=function(n){return cL(n,509)},MWn.xj=function(n){return x8(YAt,HWn,2017,n,0,1)},vX(l6n,"EcorePackageImpl/15",1198),wAn(1199,1,s7n,Yo),MWn.wj=function(n){return cL(n,99)},MWn.xj=function(n){return x8(JAt,N9n,18,n,0,1)},vX(l6n,"EcorePackageImpl/16",1199),wAn(1200,1,s7n,Jo),MWn.wj=function(n){return cL(n,170)},MWn.xj=function(n){return x8(FAt,N9n,170,n,0,1)},vX(l6n,"EcorePackageImpl/17",1200),wAn(1201,1,s7n,Zo),MWn.wj=function(n){return cL(n,472)},MWn.xj=function(n){return x8(_At,HWn,472,n,0,1)},vX(l6n,"EcorePackageImpl/18",1201),wAn(1202,1,s7n,ns),MWn.wj=function(n){return cL(n,548)},MWn.xj=function(n){return x8(X$t,a9n,548,n,0,1)},vX(l6n,"EcorePackageImpl/19",1202),wAn(1185,1,s7n,ts),MWn.wj=function(n){return cL(n,322)},MWn.xj=function(n){return x8(BAt,N9n,34,n,0,1)},vX(l6n,"EcorePackageImpl/2",1185),wAn(1203,1,s7n,es),MWn.wj=function(n){return cL(n,241)},MWn.xj=function(n){return x8(VAt,B9n,87,n,0,1)},vX(l6n,"EcorePackageImpl/20",1203),wAn(1204,1,s7n,is),MWn.wj=function(n){return cL(n,444)},MWn.xj=function(n){return x8(O$t,HWn,836,n,0,1)},vX(l6n,"EcorePackageImpl/21",1204),wAn(1205,1,s7n,rs),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(l6n,"EcorePackageImpl/22",1205),wAn(1206,1,s7n,cs),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(l6n,"EcorePackageImpl/23",1206),wAn(1207,1,s7n,as),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(l6n,"EcorePackageImpl/24",1207),wAn(1208,1,s7n,us),MWn.wj=function(n){return cL(n,172)},MWn.xj=function(n){return x8(Stt,sVn,172,n,0,1)},vX(l6n,"EcorePackageImpl/25",1208),wAn(1209,1,s7n,os),MWn.wj=function(n){return cL(n,199)},MWn.xj=function(n){return x8(mtt,sVn,199,n,0,1)},vX(l6n,"EcorePackageImpl/26",1209),wAn(1210,1,s7n,ss),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(_Nt,HWn,2110,n,0,1)},vX(l6n,"EcorePackageImpl/27",1210),wAn(1211,1,s7n,hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(l6n,"EcorePackageImpl/28",1211),wAn(1212,1,s7n,fs),MWn.wj=function(n){return cL(n,58)},MWn.xj=function(n){return x8(uAt,nZn,58,n,0,1)},vX(l6n,"EcorePackageImpl/29",1212),wAn(1186,1,s7n,ls),MWn.wj=function(n){return cL(n,510)},MWn.xj=function(n){return x8(KAt,{3:1,4:1,5:1,1934:1},590,n,0,1)},vX(l6n,"EcorePackageImpl/3",1186),wAn(1213,1,s7n,bs),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(yAt,HWn,1940,n,0,1)},vX(l6n,"EcorePackageImpl/30",1213),wAn(1214,1,s7n,ws),MWn.wj=function(n){return cL(n,153)},MWn.xj=function(n){return x8(oLt,nZn,153,n,0,1)},vX(l6n,"EcorePackageImpl/31",1214),wAn(1215,1,s7n,ds),MWn.wj=function(n){return cL(n,72)},MWn.xj=function(n){return x8($$t,h7n,72,n,0,1)},vX(l6n,"EcorePackageImpl/32",1215),wAn(1216,1,s7n,gs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(l6n,"EcorePackageImpl/33",1216),wAn(1217,1,s7n,ps),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(l6n,"EcorePackageImpl/34",1217),wAn(1218,1,s7n,vs),MWn.wj=function(n){return cL(n,290)},MWn.xj=function(n){return x8($nt,HWn,290,n,0,1)},vX(l6n,"EcorePackageImpl/35",1218),wAn(1219,1,s7n,ms),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(l6n,"EcorePackageImpl/36",1219),wAn(1220,1,s7n,ys),MWn.wj=function(n){return cL(n,83)},MWn.xj=function(n){return x8(Nnt,HWn,83,n,0,1)},vX(l6n,"EcorePackageImpl/37",1220),wAn(1221,1,s7n,ks),MWn.wj=function(n){return cL(n,591)},MWn.xj=function(n){return x8(iLt,HWn,591,n,0,1)},vX(l6n,"EcorePackageImpl/38",1221),wAn(1222,1,s7n,js),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(FNt,HWn,2111,n,0,1)},vX(l6n,"EcorePackageImpl/39",1222),wAn(1187,1,s7n,Es),MWn.wj=function(n){return cL(n,88)},MWn.xj=function(n){return x8(qAt,HWn,26,n,0,1)},vX(l6n,"EcorePackageImpl/4",1187),wAn(1223,1,s7n,Ts),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(l6n,"EcorePackageImpl/40",1223),wAn(1224,1,s7n,Ms),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(l6n,"EcorePackageImpl/41",1224),wAn(1225,1,s7n,Ss),MWn.wj=function(n){return cL(n,588)},MWn.xj=function(n){return x8(sAt,HWn,588,n,0,1)},vX(l6n,"EcorePackageImpl/42",1225),wAn(1226,1,s7n,Ps),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(BNt,sVn,2112,n,0,1)},vX(l6n,"EcorePackageImpl/43",1226),wAn(1227,1,s7n,Cs),MWn.wj=function(n){return cL(n,42)},MWn.xj=function(n){return x8(Hnt,kVn,42,n,0,1)},vX(l6n,"EcorePackageImpl/44",1227),wAn(1188,1,s7n,Is),MWn.wj=function(n){return cL(n,138)},MWn.xj=function(n){return x8(HAt,HWn,138,n,0,1)},vX(l6n,"EcorePackageImpl/5",1188),wAn(1189,1,s7n,Os),MWn.wj=function(n){return cL(n,148)},MWn.xj=function(n){return x8(GAt,HWn,148,n,0,1)},vX(l6n,"EcorePackageImpl/6",1189),wAn(1190,1,s7n,As),MWn.wj=function(n){return cL(n,457)},MWn.xj=function(n){return x8(XAt,HWn,671,n,0,1)},vX(l6n,"EcorePackageImpl/7",1190),wAn(1191,1,s7n,$s),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(WAt,HWn,678,n,0,1)},vX(l6n,"EcorePackageImpl/8",1191),wAn(1192,1,s7n,Ls),MWn.wj=function(n){return cL(n,471)},MWn.xj=function(n){return x8(HOt,HWn,471,n,0,1)},vX(l6n,"EcorePackageImpl/9",1192),wAn(1025,1982,r9n,xy),MWn.bi=function(n,t){Afn(this,BB(t,415))},MWn.fi=function(n,t){eCn(this,n,BB(t,415))},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),wAn(1026,143,t9n,uW),MWn.Ai=function(){return this.a.a},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),wAn(1053,1052,{},o$),vX("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var Y$t,J$t,Z$t,nLt,tLt,eLt,iLt=bq(f7n,"Resource");wAn(781,1378,l7n),MWn.Yk=function(n){},MWn.Zk=function(n){},MWn.Vk=function(){return!this.a&&(this.a=new Sp(this)),this.a},MWn.Wk=function(n){var t,e,i,r,c;if((i=n.length)>0){if(b1(0,n.length),47==n.charCodeAt(0)){for(c=new J6(4),r=1,t=1;t<i;++t)b1(t,n.length),47==n.charCodeAt(t)&&(WB(c,r==t?"":n.substr(r,t-r)),r=t+1);return WB(c,n.substr(r)),ojn(this,c)}b1(i-1,n.length),63==n.charCodeAt(i-1)&&(e=MK(n,YTn(63),i-2))>0&&(n=n.substr(0,e))}return jIn(this,n)},MWn.Xk=function(){return this.c},MWn.Ib=function(){return nE(this.gm)+"@"+(nsn(this)>>>0).toString(16)+" uri='"+this.d+"'"},MWn.b=!1,vX(b7n,"ResourceImpl",781),wAn(1379,781,l7n,Cp),vX(b7n,"BinaryResourceImpl",1379),wAn(1169,694,f8n),MWn.si=function(n){return cL(n,56)?TY(this,BB(n,56)):cL(n,591)?new AL(BB(n,591).Vk()):GI(n)===GI(this.f)?BB(n,14).Kc():(dD(),pAt.a)},MWn.Ob=function(){return bOn(this)},MWn.a=!1,vX(y9n,"EcoreUtil/ContentTreeIterator",1169),wAn(1380,1169,f8n,rU),MWn.si=function(n){return GI(n)===GI(this.f)?BB(n,15).Kc():new F2(BB(n,56))},vX(b7n,"ResourceImpl/5",1380),wAn(648,1994,D9n,Sp),MWn.Hc=function(n){return this.i<=4?Sjn(this,n):cL(n,49)&&BB(n,49).Zg()==this.a},MWn.bi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},MWn.di=function(n,t){0==n?this.a.b||(this.a.b=!0):L8(this,n,t)},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.aj=function(){return 2},MWn.Ai=function(){return this.a},MWn.bj=function(){return!0},MWn.cj=function(n,t){return t=BB(n,49).wh(this.a,t)},MWn.dj=function(n,t){return BB(n,49).wh(null,t)},MWn.ej=function(){return!1},MWn.hi=function(){return!0},MWn.ri=function(n){return x8(LOt,HWn,56,n,0,1)},MWn.ni=function(){return!1},vX(b7n,"ResourceImpl/ContentsEList",648),wAn(957,1964,LVn,Pp),MWn.Zc=function(n){return this.a._h(n)},MWn.gc=function(){return this.a.gc()},vX(y9n,"AbstractSequentialInternalEList/1",957),wAn(624,1,{},SH),vX(y9n,"BasicExtendedMetaData",624),wAn(1160,1,{},$I),MWn.$k=function(){return null},MWn._k=function(){return-2==this.a&&ob(this,aMn(this.d,this.b)),this.a},MWn.al=function(){return null},MWn.bl=function(){return SQ(),SQ(),set},MWn.ne=function(){return this.c==C7n&&hb(this,Egn(this.d,this.b)),this.c},MWn.cl=function(){return 0},MWn.a=-2,MWn.c=C7n,vX(y9n,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),wAn(1161,1,{},_0),MWn.$k=function(){return this.a==(R5(),tLt)&&sb(this,vNn(this.f,this.b)),this.a},MWn._k=function(){return 0},MWn.al=function(){return this.c==(R5(),tLt)&&fb(this,mNn(this.f,this.b)),this.c},MWn.bl=function(){return!this.d&&lb(this,SKn(this.f,this.b)),this.d},MWn.ne=function(){return this.e==C7n&&bb(this,Egn(this.f,this.b)),this.e},MWn.cl=function(){return-2==this.g&&wb(this,YEn(this.f,this.b)),this.g},MWn.e=C7n,MWn.g=-2,vX(y9n,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),wAn(1159,1,{},RI),MWn.b=!1,MWn.c=!1,vX(y9n,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),wAn(1162,1,{},K0),MWn.c=-2,MWn.e=C7n,MWn.f=C7n,vX(y9n,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),wAn(585,622,R9n,MH),MWn.aj=function(){return this.c},MWn.Fk=function(){return!1},MWn.li=function(n,t){return t},MWn.c=0,vX(y9n,"EDataTypeEList",585);var rLt,cLt,aLt,uLt,oLt=bq(y9n,"FeatureMap");wAn(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ecn),MWn.Vc=function(n,t){lNn(this,n,BB(t,72))},MWn.Fc=function(n){return uLn(this,BB(n,72))},MWn.Yh=function(n){dX(this,BB(n,72))},MWn.cj=function(n,t){return HK(this,BB(n,72),t)},MWn.dj=function(n,t){return qK(this,BB(n,72),t)},MWn.ii=function(n,t){return a_n(this,n,t)},MWn.li=function(n,t){return hGn(this,n,BB(t,72))},MWn._c=function(n,t){return Pxn(this,n,BB(t,72))},MWn.jj=function(n,t){return GK(this,BB(n,72),t)},MWn.kj=function(n,t){return zK(this,BB(n,72),t)},MWn.lj=function(n,t,e){return gEn(this,BB(n,72),BB(t,72),e)},MWn.oi=function(n,t){return sTn(this,n,BB(t,72))},MWn.dl=function(n,t){return xKn(this,n,t)},MWn.Wc=function(n,t){var e,i,r,c,a,u,o,s,h;for(s=new gtn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=BB(r.Pb(),72)).ak(),$xn(this.e,c))(!c.hi()||!G3(this,c,i.dd())&&!Sjn(s,i))&&f9(s,i);else{for(h=axn(this.e.Tg(),c),e=BB(this.g,119),a=!0,u=0;u<this.i;++u)if(o=e[u],h.rl(o.ak())){BB(ovn(this,u,i),72),a=!1;break}a&&f9(s,i)}return oon(this,n,s)},MWn.Gc=function(n){var t,e,i,r,c,a,u,o,s;for(o=new gtn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=BB(i.Pb(),72)).ak(),$xn(this.e,r))(!r.hi()||!G3(this,r,e.dd())&&!Sjn(o,e))&&f9(o,e);else{for(s=axn(this.e.Tg(),r),t=BB(this.g,119),c=!0,a=0;a<this.i;++a)if(u=t[a],s.rl(u.ak())){BB(ovn(this,a,e),72),c=!1;break}c&&f9(o,e)}return pX(this,o)},MWn.Wh=function(n){return this.j=-1,LFn(this,this.i,n)},MWn.el=function(n,t,e){return PRn(this,n,t,e)},MWn.mk=function(n,t){return TKn(this,n,t)},MWn.fl=function(n,t,e){return ZBn(this,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this,n,t)},MWn.il=function(n){return BB(Wtn(this,n),72).ak()},MWn.jl=function(n){return BB(Wtn(this,n),72).dd()},MWn.kl=function(){return this.b},MWn.bj=function(){return!0},MWn.ij=function(){return!0},MWn.ll=function(n){return!adn(this,n)},MWn.ri=function(n){return x8(W$t,h7n,332,n,0,1)},MWn.Gk=function(n){return hD(this,n)},MWn.Wb=function(n){tX(this,n)},MWn.ml=function(n,t){MHn(this,n,t)},MWn.nl=function(n){return zin(this,n)},MWn.ol=function(n){Kmn(this,n)},vX(y9n,"BasicFeatureMap",75),wAn(1851,1,cVn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{Axn(this.e,this.b,this.a,n),this.d=this.e.j,cvn(this)}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.Ob=function(){return Ksn(this)},MWn.Sb=function(){return _sn(this)},MWn.Pb=function(){return cvn(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(_sn(this))return mz(this),this.g=--this.a,this.Lk()&&(n=FIn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){if(-1==this.g)throw Hp(new dv);mz(this);try{aPn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw cL(n=lun(n),73)?Hp(new vv):Hp(n)}},MWn.Lk=function(){return!1},MWn.Wb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{XFn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.a=0,MWn.c=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.i=0,vX(y9n,"FeatureMapUtil/BasicFeatureEIterator",1851),wAn(410,1851,cVn,Aan),MWn.pl=function(){var n,t,e;for(e=this.e.i,n=BB(this.e.g,119);this.c<e;){if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},MWn.ql=function(){var n,t;for(n=BB(this.e.g,119);--this.c>=0;)if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},vX(y9n,"BasicFeatureMap/FeatureEIterator",410),wAn(662,410,cVn,xO),MWn.Lk=function(){return!0},vX(y9n,"BasicFeatureMap/ResolvingFeatureEIterator",662),wAn(955,486,q9n,z$),MWn.Gi=function(){return this},vX(y9n,"EContentsEList/1",955),wAn(956,486,q9n,DO),MWn.Lk=function(){return!1},vX(y9n,"EContentsEList/2",956),wAn(954,279,G9n,U$),MWn.Nk=function(n){},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},vX(y9n,"EContentsEList/FeatureIteratorImpl/1",954),wAn(825,585,R9n,KL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EDataTypeEList/Unsettable",825),wAn(1849,585,R9n,_L),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList",1849),wAn(1850,825,R9n,FL),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList/Unsettable",1850),wAn(139,85,R9n,NL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Resolving",139),wAn(1163,545,R9n,xL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Unsettable/Resolving",1163),wAn(748,16,R9n,iK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectContainmentWithInverseEList/Unsettable",748),wAn(1173,748,R9n,rK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),wAn(743,496,R9n,DL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectEList/Unsettable",743),wAn(328,496,R9n,RL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList",328),wAn(1641,743,R9n,BL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList/Unsettable",1641),wAn(1381,1,{},Ns),vX(y9n,"EObjectValidator",1381),wAn(546,496,R9n,iU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.bj=function(){return!0},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectWithInverseEList",546),wAn(1176,546,R9n,cK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/ManyInverse",1176),wAn(625,546,R9n,aK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectWithInverseEList/Unsettable",625),wAn(1175,625,R9n,oK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),wAn(749,546,R9n,uK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList",749),wAn(31,749,R9n,hK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/ManyInverse",31),wAn(750,625,R9n,sK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable",750),wAn(1174,750,R9n,fK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),wAn(1164,622,R9n),MWn.ai=function(){return 0==(1792&this.b)},MWn.ci=function(){this.b|=1},MWn.Bk=function(){return 0!=(4&this.b)},MWn.bj=function(){return 0!=(40&this.b)},MWn.Ck=function(){return 0!=(16&this.b)},MWn.Dk=function(){return 0!=(8&this.b)},MWn.Ek=function(){return 0!=(this.b&M9n)},MWn.rk=function(){return 0!=(32&this.b)},MWn.Fk=function(){return 0!=(this.b&k6n)},MWn.wj=function(n){return this.d?x3(this.d,n):this.ak().Yj().wj(n)},MWn.fj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},MWn.hi=function(){return 0!=(128&this.b)},MWn.Xj=function(){var n;sqn(this),0!=(2&this.b)&&(mA(this.e)?(n=0!=(1&this.b),this.b&=-2,Lv(this,new t6(this.e,2,Awn(this.e.Tg(),this.ak()),n,!1))):this.b&=-2)},MWn.ni=function(){return 0==(1536&this.b)},MWn.b=0,vX(y9n,"EcoreEList/Generic",1164),wAn(1165,1164,R9n,zQ),MWn.ak=function(){return this.a},vX(y9n,"EcoreEList/Dynamic",1165),wAn(747,63,h8n,Ip),MWn.ri=function(n){return Den(this.a.a,n)},vX(y9n,"EcoreEMap/1",747),wAn(746,85,R9n,Zz),MWn.bi=function(n,t){Ivn(this.b,BB(t,133))},MWn.di=function(n,t){aan(this.b)},MWn.ei=function(n,t,e){var i;++(i=this.b,BB(t,133),i).e},MWn.fi=function(n,t){Oln(this.b,BB(t,133))},MWn.gi=function(n,t,e){Oln(this.b,BB(e,133)),GI(e)===GI(t)&&BB(e,133).Th(c$(BB(t,133).cd())),Ivn(this.b,BB(t,133))},vX(y9n,"EcoreEMap/DelegateEObjectContainmentEList",746),wAn(1171,151,j9n,yin),vX(y9n,"EcoreEMap/Unsettable",1171),wAn(1172,746,R9n,lK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),wAn(1168,228,tYn,lX),MWn.a=!1,MWn.b=!1,vX(y9n,"EcoreUtil/Copier",1168),wAn(745,1,QWn,F2),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return udn(this)},MWn.Pb=function(){var n;return udn(this),n=this.b,this.b=null,n},MWn.Qb=function(){this.a.Qb()},vX(y9n,"EcoreUtil/ProperContentIterator",745),wAn(1382,1381,{},Ff),vX(y9n,"EcoreValidator",1382),bq(y9n,"FeatureMapUtil/Validator"),wAn(1260,1,{1942:1},xs),MWn.rl=function(n){return!0},vX(y9n,"FeatureMapUtil/1",1260),wAn(757,1,{1942:1},cUn),MWn.rl=function(n){var t;return this.c==n||(null==(t=TD(RX(this.a,n)))?xRn(this,n)?(r6(this.a,n,(hN(),vtt)),!0):(r6(this.a,n,(hN(),ptt)),!1):t==(hN(),vtt))},MWn.e=!1,vX(y9n,"FeatureMapUtil/BasicValidator",757),wAn(758,43,tYn,X$),vX(y9n,"FeatureMapUtil/BasicValidator/Cache",758),wAn(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},xI),MWn.Vc=function(n,t){Axn(this.c,this.b,n,t)},MWn.Fc=function(n){return xKn(this.c,this.b,n)},MWn.Wc=function(n,t){return jHn(this.c,this.b,n,t)},MWn.Gc=function(n){return Z$(this,n)},MWn.Xh=function(n,t){htn(this.c,this.b,n,t)},MWn.lk=function(n,t){return PRn(this.c,this.b,n,t)},MWn.pi=function(n){return iHn(this.c,this.b,n,!1)},MWn.Zh=function(){return jA(this.c,this.b)},MWn.$h=function(){return EA(this.c,this.b)},MWn._h=function(n){return $8(this.c,this.b,n)},MWn.mk=function(n,t){return tR(this,n,t)},MWn.$b=function(){Nv(this)},MWn.Hc=function(n){return G3(this.c,this.b,n)},MWn.Ic=function(n){return Mcn(this.c,this.b,n)},MWn.Xb=function(n){return iHn(this.c,this.b,n,!0)},MWn.Wj=function(n){return this},MWn.Xc=function(n){return z3(this.c,this.b,n)},MWn.dc=function(){return HI(this)},MWn.fj=function(){return!adn(this.c,this.b)},MWn.Kc=function(){return cnn(this.c,this.b)},MWn.Yc=function(){return ann(this.c,this.b)},MWn.Zc=function(n){return lln(this.c,this.b,n)},MWn.ii=function(n,t){return mFn(this.c,this.b,n,t)},MWn.ji=function(n,t){Q6(this.c,this.b,n,t)},MWn.$c=function(n){return aPn(this.c,this.b,n)},MWn.Mc=function(n){return CKn(this.c,this.b,n)},MWn._c=function(n,t){return XFn(this.c,this.b,n,t)},MWn.Wb=function(n){AOn(this.c,this.b),Z$(this,BB(n,15))},MWn.gc=function(){return Kln(this.c,this.b)},MWn.Pc=function(){return G1(this.c,this.b)},MWn.Qc=function(n){return U3(this.c,this.b,n)},MWn.Ib=function(){var n,t;for((t=new Sk).a+="[",n=jA(this.c,this.b);Ksn(n);)cO(t,kN(cvn(n))),Ksn(n)&&(t.a+=FWn);return t.a+="]",t.a},MWn.Xj=function(){AOn(this.c,this.b)},vX(y9n,"FeatureMapUtil/FeatureEList",501),wAn(627,36,t9n,b4),MWn.yi=function(n){return eln(this,n)},MWn.Di=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0;break;case 3:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=5,f9(t=new gtn(2),this.g),f9(t,n.zi()),this.g=t,!0;break;case 5:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.g,14).Fc(n.zi()),!0;break;case 4:switch(n.xi()){case 3:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=1,this.g=n.zi(),!0;break;case 4:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=6,f9(r=new gtn(2),this.n),f9(r,n.Bi()),this.n=r,i=Pun(Gk(ANt,1),hQn,25,15,[this.o,n.Ci()]),this.g=i,!0}break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.n,14).Fc(n.Bi()),aHn(i=BB(this.g,48),0,e=x8(ANt,hQn,25,i.length+1,15,1),0,i.length),e[i.length]=n.Ci(),this.g=e,!0}return!1},vX(y9n,"FeatureMapUtil/FeatureENotificationImpl",627),wAn(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},lq),MWn.dl=function(n,t){return xKn(this.c,n,t)},MWn.el=function(n,t,e){return PRn(this.c,n,t,e)},MWn.fl=function(n,t,e){return ZBn(this.c,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this.c,n,t)},MWn.il=function(n){return BB(iHn(this.c,this.b,n,!1),72).ak()},MWn.jl=function(n){return BB(iHn(this.c,this.b,n,!1),72).dd()},MWn.kl=function(){return this.a},MWn.ll=function(n){return!adn(this.c,n)},MWn.ml=function(n,t){MHn(this.c,n,t)},MWn.nl=function(n){return zin(this.c,n)},MWn.ol=function(n){Kmn(this.c,n)},vX(y9n,"FeatureMapUtil/FeatureFeatureMap",552),wAn(1259,1,k9n,KI),MWn.Wj=function(n){return iHn(this.b,this.a,-1,n)},MWn.fj=function(){return!adn(this.b,this.a)},MWn.Wb=function(n){MHn(this.b,this.a,n)},MWn.Xj=function(){AOn(this.b,this.a)},vX(y9n,"FeatureMapUtil/FeatureValue",1259);var sLt,hLt,fLt,lLt,bLt,wLt=bq(O7n,"AnyType");wAn(666,60,BVn,ik),vX(O7n,"InvalidDatatypeValueException",666);var dLt,gLt,pLt,vLt,mLt,yLt,kLt,jLt,ELt,TLt,MLt,SLt,PLt,CLt,ILt,OLt,ALt,$Lt,LLt,NLt,xLt,DLt,RLt,KLt,_Lt,FLt,BLt,HLt,qLt,GLt,zLt=bq(O7n,A7n),ULt=bq(O7n,$7n),XLt=bq(O7n,L7n);wAn(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Rm),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b)}return U9(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new Ecn(this,0)),TKn(this.c,n,e);case 1:return(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),69)).mk(n,e);case 2:return!this.b&&(this.b=new Ecn(this,2)),TKn(this.b,n,e)}return BB(itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i}return O3(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t)}Lbn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),pLt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b)}qfn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.c),n.a+=", anyAttribute: ",rO(n,this.b),n.a+=")",n.a)},vX(N7n,"AnyTypeImpl",830),wAn(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},Rs),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return U9(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return O3(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return void kb(this,SD(t));case 1:return void jb(this,SD(t))}Lbn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),OLt},MWn.Bh=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}qfn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (data: ",cO(n,this.a),n.a+=", target: ",cO(n,this.b),n.a+=")",n.a)},MWn.a=null,MWn.b=null,vX(N7n,"ProcessingInstructionImpl",667),wAn(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_m),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return this.a}return U9(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new Ecn(this,0)),null!=SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return null!=gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return!!this.a}return O3(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t);case 3:return void F0(this,SD(t));case 4:return void F0(this,pK(this.a,t));case 5:return void Eb(this,BB(t,148))}Lbn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),$Lt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),void MHn(this.c,(Uqn(),LLt),null);case 4:return void F0(this,pK(this.a,null));case 5:return void(this.a=null)}qfn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},vX(N7n,"SimpleAnyTypeImpl",668),wAn(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Km),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new Ecn(this,0)),this.a):(!this.a&&(this.a=new Ecn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),this.b):(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),A8(this.b));case 2:return e?(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),this.c):(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),A8(this.c));case 3:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),DLt));case 4:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),RLt));case 5:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),_Lt));case 6:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),FLt))}return U9(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new Ecn(this,0)),TKn(this.a,n,e);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),BK(this.b,n,e);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),BK(this.c,n,e);case 5:return!this.a&&(this.a=new Ecn(this,0)),tR(n1(this.a,(Uqn(),_Lt)),n,e)}return BB(itn(0==(2&this.j)?(Uqn(),xLt):(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX((Uqn(),xLt)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),FLt)))}return O3(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void tX(this.a,t);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void tan(this.b,t);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void tan(this.c,t);case 3:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),DLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,DLt),BB(t,14));case 4:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),RLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,RLt),BB(t,14));case 5:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),_Lt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,_Lt),BB(t,14));case 6:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),FLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,FLt),BB(t,14))}Lbn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),xLt},MWn.Bh=function(n){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void sqn(this.a);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),FLt)))}qfn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.a),n.a+=")",n.a)},vX(N7n,"XMLTypeDocumentRootImpl",669),wAn(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Ds),MWn.Ih=function(n,t){switch(n.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:Bbn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return SD(t);case 6:return mD(BB(t,190));case 12:case 47:case 49:case 11:return qGn(this,n,t);case 13:return null==t?null:GBn(BB(t,240));case 15:case 14:return null==t?null:RU(Gy(MD(t)));case 17:return EEn((Uqn(),t));case 18:return EEn(t);case 21:case 20:return null==t?null:KU(BB(t,155).a);case 27:return yD(BB(t,190));case 30:return _mn((Uqn(),BB(t,15)));case 31:return _mn(BB(t,15));case 40:return jD((Uqn(),t));case 42:return TEn((Uqn(),t));case 43:return TEn(t);case 59:case 48:return kD((Uqn(),t));default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Rm;case 1:return new Rs;case 2:return new _m;case 3:return new Km;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;switch(n.yj()){case 5:case 52:case 4:return t;case 6:return ypn(t);case 8:case 7:return null==t?null:_En(t);case 9:return null==t?null:Pnn(l_n((i=FBn(t,!0)).length>0&&(b1(0,i.length),43==i.charCodeAt(0))?i.substr(1):i,-128,127)<<24>>24);case 10:return null==t?null:Pnn(l_n((r=FBn(t,!0)).length>0&&(b1(0,r.length),43==r.charCodeAt(0))?r.substr(1):r,-128,127)<<24>>24);case 11:return SD(xXn(this,(Uqn(),kLt),t));case 12:return SD(xXn(this,(Uqn(),jLt),t));case 13:return null==t?null:new wE(FBn(t,!0));case 15:case 14:return gLn(t);case 16:return SD(xXn(this,(Uqn(),ELt),t));case 17:return Hdn((Uqn(),t));case 18:return Hdn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return FBn(t,!0);case 21:case 20:return ILn(t);case 22:return SD(xXn(this,(Uqn(),TLt),t));case 23:return SD(xXn(this,(Uqn(),MLt),t));case 24:return SD(xXn(this,(Uqn(),SLt),t));case 25:return SD(xXn(this,(Uqn(),PLt),t));case 26:return SD(xXn(this,(Uqn(),CLt),t));case 27:return Zgn(t);case 30:return qdn((Uqn(),t));case 31:return qdn(t);case 32:return null==t?null:iln(l_n((h=FBn(t,!0)).length>0&&(b1(0,h.length),43==h.charCodeAt(0))?h.substr(1):h,_Vn,DWn));case 33:return null==t?null:new $A((f=FBn(t,!0)).length>0&&(b1(0,f.length),43==f.charCodeAt(0))?f.substr(1):f);case 34:return null==t?null:iln(l_n((l=FBn(t,!0)).length>0&&(b1(0,l.length),43==l.charCodeAt(0))?l.substr(1):l,_Vn,DWn));case 36:return null==t?null:jgn(rUn((b=FBn(t,!0)).length>0&&(b1(0,b.length),43==b.charCodeAt(0))?b.substr(1):b));case 37:return null==t?null:jgn(rUn((w=FBn(t,!0)).length>0&&(b1(0,w.length),43==w.charCodeAt(0))?w.substr(1):w));case 40:return Vwn((Uqn(),t));case 42:return Gdn((Uqn(),t));case 43:return Gdn(t);case 44:return null==t?null:new $A((d=FBn(t,!0)).length>0&&(b1(0,d.length),43==d.charCodeAt(0))?d.substr(1):d);case 45:return null==t?null:new $A((g=FBn(t,!0)).length>0&&(b1(0,g.length),43==g.charCodeAt(0))?g.substr(1):g);case 46:return FBn(t,!1);case 47:return SD(xXn(this,(Uqn(),ILt),t));case 59:case 48:return Wwn((Uqn(),t));case 49:return SD(xXn(this,(Uqn(),ALt),t));case 50:return null==t?null:rln(l_n((p=FBn(t,!0)).length>0&&(b1(0,p.length),43==p.charCodeAt(0))?p.substr(1):p,Q9n,32767)<<16>>16);case 51:return null==t?null:rln(l_n((c=FBn(t,!0)).length>0&&(b1(0,c.length),43==c.charCodeAt(0))?c.substr(1):c,Q9n,32767)<<16>>16);case 53:return SD(xXn(this,(Uqn(),NLt),t));case 55:return null==t?null:rln(l_n((a=FBn(t,!0)).length>0&&(b1(0,a.length),43==a.charCodeAt(0))?a.substr(1):a,Q9n,32767)<<16>>16);case 56:return null==t?null:rln(l_n((u=FBn(t,!0)).length>0&&(b1(0,u.length),43==u.charCodeAt(0))?u.substr(1):u,Q9n,32767)<<16>>16);case 57:return null==t?null:jgn(rUn((o=FBn(t,!0)).length>0&&(b1(0,o.length),43==o.charCodeAt(0))?o.substr(1):o));case 58:return null==t?null:jgn(rUn((s=FBn(t,!0)).length>0&&(b1(0,s.length),43==s.charCodeAt(0))?s.substr(1):s));case 60:return null==t?null:iln(l_n((e=FBn(t,!0)).length>0&&(b1(0,e.length),43==e.charCodeAt(0))?e.substr(1):e,_Vn,DWn));case 61:return null==t?null:iln(l_n(FBn(t,!0),_Vn,DWn));default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(N7n,"XMLTypeFactoryImpl",1919),wAn(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},zW),MWn.N=!1,MWn.O=!1;var WLt,VLt,QLt,YLt,JLt,ZLt=!1;vX(N7n,"XMLTypePackageImpl",586),wAn(1852,1,{837:1},Ks),MWn._j=function(){return fFn(),TNt},vX(N7n,"XMLTypePackageImpl/1",1852),wAn(1861,1,s7n,_s),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/10",1861),wAn(1862,1,s7n,Fs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/11",1862),wAn(1863,1,s7n,Bs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/12",1863),wAn(1864,1,s7n,Hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(N7n,"XMLTypePackageImpl/13",1864),wAn(1865,1,s7n,qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/14",1865),wAn(1866,1,s7n,Gs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/15",1866),wAn(1867,1,s7n,zs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/16",1867),wAn(1868,1,s7n,Us),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/17",1868),wAn(1869,1,s7n,Xs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(N7n,"XMLTypePackageImpl/18",1869),wAn(1870,1,s7n,Ws),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/19",1870),wAn(1853,1,s7n,Vs),MWn.wj=function(n){return cL(n,843)},MWn.xj=function(n){return x8(wLt,HWn,843,n,0,1)},vX(N7n,"XMLTypePackageImpl/2",1853),wAn(1871,1,s7n,Qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/20",1871),wAn(1872,1,s7n,Ys),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/21",1872),wAn(1873,1,s7n,Js),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/22",1873),wAn(1874,1,s7n,Zs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/23",1874),wAn(1875,1,s7n,nh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/24",1875),wAn(1876,1,s7n,th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/25",1876),wAn(1877,1,s7n,eh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/26",1877),wAn(1878,1,s7n,ih),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/27",1878),wAn(1879,1,s7n,rh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/28",1879),wAn(1880,1,s7n,ch),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/29",1880),wAn(1854,1,s7n,ah),MWn.wj=function(n){return cL(n,667)},MWn.xj=function(n){return x8(zLt,HWn,2021,n,0,1)},vX(N7n,"XMLTypePackageImpl/3",1854),wAn(1881,1,s7n,uh),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/30",1881),wAn(1882,1,s7n,oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/31",1882),wAn(1883,1,s7n,sh),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/32",1883),wAn(1884,1,s7n,hh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/33",1884),wAn(1885,1,s7n,fh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/34",1885),wAn(1886,1,s7n,lh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/35",1886),wAn(1887,1,s7n,bh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/36",1887),wAn(1888,1,s7n,wh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/37",1888),wAn(1889,1,s7n,dh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/38",1889),wAn(1890,1,s7n,gh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/39",1890),wAn(1855,1,s7n,ph),MWn.wj=function(n){return cL(n,668)},MWn.xj=function(n){return x8(ULt,HWn,2022,n,0,1)},vX(N7n,"XMLTypePackageImpl/4",1855),wAn(1891,1,s7n,vh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/40",1891),wAn(1892,1,s7n,mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/41",1892),wAn(1893,1,s7n,yh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/42",1893),wAn(1894,1,s7n,kh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/43",1894),wAn(1895,1,s7n,jh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/44",1895),wAn(1896,1,s7n,Eh),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/45",1896),wAn(1897,1,s7n,Th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/46",1897),wAn(1898,1,s7n,Mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/47",1898),wAn(1899,1,s7n,Sh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/48",1899),wAn(sQn,1,s7n,Ph),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/49",sQn),wAn(1856,1,s7n,Ch),MWn.wj=function(n){return cL(n,669)},MWn.xj=function(n){return x8(XLt,HWn,2023,n,0,1)},vX(N7n,"XMLTypePackageImpl/5",1856),wAn(1901,1,s7n,Ih),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/50",1901),wAn(1902,1,s7n,Oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/51",1902),wAn(1903,1,s7n,Ah),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/52",1903),wAn(1857,1,s7n,$h),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/6",1857),wAn(1858,1,s7n,Lh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/7",1858),wAn(1859,1,s7n,Nh),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(N7n,"XMLTypePackageImpl/8",1859),wAn(1860,1,s7n,xh),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(N7n,"XMLTypePackageImpl/9",1860),wAn(50,60,BVn,ak),vX(ant,"RegEx/ParseException",50),wAn(820,1,{},Dh),MWn.sl=function(n){return n<this.j&&63==fV(this.i,n)},MWn.tl=function(){var n,t,e,i,r;if(10!=this.c)throw Hp(new ak(kWn((u$(),g8n))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if(123==this.a){for(r=0,e=0;;){if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if((r=Gvn(this.a))<0)break;if(e>16*e)throw Hp(new ak(kWn((u$(),H8n))));e=16*e+r}if(125!=this.a)throw Hp(new ak(kWn((u$(),q8n))));if(e>unt)throw Hp(new ak(kWn((u$(),G8n))));n=e}else{if(r=0,0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(e=r,QXn(this),0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=e=16*e+r}break;case 117:if(i=0,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=t=16*t+i;break;case 118:if(QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if((t=16*t+i)>unt)throw Hp(new ak(kWn((u$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw Hp(new ak(kWn((u$(),z8n))))}return n},MWn.ul=function(n){var t;switch(n){case 100:t=32==(32&this.e)?ZUn("Nd",!0):(wWn(),uNt);break;case 68:t=32==(32&this.e)?ZUn("Nd",!1):(wWn(),lNt);break;case 119:t=32==(32&this.e)?ZUn("IsWord",!0):(wWn(),kNt);break;case 87:t=32==(32&this.e)?ZUn("IsWord",!1):(wWn(),wNt);break;case 115:t=32==(32&this.e)?ZUn("IsSpace",!0):(wWn(),gNt);break;case 83:t=32==(32&this.e)?ZUn("IsSpace",!1):(wWn(),bNt);break;default:throw Hp(new dy(ont+n.toString(16)))}return t},MWn.vl=function(n){var t,e,i,r,c,a,u,o,s,h,f;for(this.b=1,QXn(this),t=null,0==this.c&&94==this.a?(QXn(this),n?(wWn(),wWn(),s=new M0(5)):(wWn(),wWn(),Yxn(t=new M0(4),0,unt),s=new M0(4))):(wWn(),wWn(),s=new M0(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(s,this.ul(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.Ll(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=DIn(this,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(s,h),i=!0;break;default:e=this.tl()}else if(20==f){if((c=lx(this.i,58,this.d))<0)throw Hp(new ak(kWn((u$(),A8n))));if(a=!0,94==fV(this.i,this.d)&&(++this.d,a=!1),!(u=b9(fx(this.i,this.d,c),a,512==(512&this.e))))throw Hp(new ak(kWn((u$(),L8n))));if(sHn(s,u),i=!0,c+1>=this.j||93!=fV(this.i,c+1))throw Hp(new ak(kWn((u$(),A8n))));this.d=c+2}if(QXn(this),!i)if(0!=this.c||45!=this.a)Yxn(s,e,e);else{if(QXn(this),1==(f=this.c))throw Hp(new ak(kWn((u$(),$8n))));0==f&&93==this.a?(Yxn(s,e,e),Yxn(s,45,45)):(o=this.a,10==f&&(o=this.tl()),QXn(this),Yxn(s,e,o))}(this.e&k6n)==k6n&&0==this.c&&44==this.a&&QXn(this)}if(1==this.c)throw Hp(new ak(kWn((u$(),$8n))));return t&&(WGn(t,s),s=t),T$n(s),qHn(s),this.b=0,QXn(this),s},MWn.wl=function(){var n,t,e,i;for(e=this.vl(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw Hp(new ak(kWn((u$(),_8n))));if(QXn(this),9!=this.c)throw Hp(new ak(kWn((u$(),K8n))));if(t=this.vl(!1),4==i)sHn(e,t);else if(45==n)WGn(e,t);else{if(38!=n)throw Hp(new dy("ASSERT"));kGn(e,t)}}return QXn(this),e},MWn.xl=function(){var n,t;return n=this.a-48,wWn(),wWn(),t=new vJ(12,null,n),!this.g&&(this.g=new _v),Cv(this.g,new Op(n)),QXn(this),t},MWn.yl=function(){return QXn(this),wWn(),pNt},MWn.zl=function(){return QXn(this),wWn(),dNt},MWn.Al=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Bl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Cl=function(){return QXn(this),fsn()},MWn.Dl=function(){return QXn(this),wWn(),mNt},MWn.El=function(){return QXn(this),wWn(),jNt},MWn.Fl=function(){var n;if(this.d>=this.j||64!=(65504&(n=fV(this.i,this.d++))))throw Hp(new ak(kWn((u$(),S8n))));return QXn(this),wWn(),wWn(),new oG(0,n-64)},MWn.Gl=function(){return QXn(this),RFn()},MWn.Hl=function(){return QXn(this),wWn(),ENt},MWn.Il=function(){var n;return wWn(),wWn(),n=new oG(0,105),QXn(this),n},MWn.Jl=function(){return QXn(this),wWn(),yNt},MWn.Kl=function(){return QXn(this),wWn(),vNt},MWn.Ll=function(n,t){return this.tl()},MWn.Ml=function(){return QXn(this),wWn(),hNt},MWn.Nl=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw Hp(new ak(kWn((u$(),E8n))));if(i=-1,t=null,49<=(n=fV(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new _v),Cv(this.g,new Op(i)),++this.d,41!=fV(this.i,this.d))throw Hp(new ak(kWn((u$(),y8n))));++this.d}else switch(63==n&&--this.d,QXn(this),(t=OXn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));break;default:throw Hp(new ak(kWn((u$(),T8n))))}if(QXn(this),e=null,2==(r=Vdn(this)).e){if(2!=r.em())throw Hp(new ak(kWn((u$(),M8n))));e=r.am(1),r=r.am(0)}if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),wWn(),wWn(),new jnn(i,t,r,e)},MWn.Ol=function(){return QXn(this),wWn(),fNt},MWn.Pl=function(){var n;if(QXn(this),n=uU(24,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ql=function(){var n;if(QXn(this),n=uU(20,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Rl=function(){var n;if(QXn(this),n=uU(22,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Sl=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))))}if(58==t){if(++this.d,QXn(this),i=AX(Vdn(this),n,e),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));QXn(this)}else{if(41!=t)throw Hp(new ak(kWn((u$(),j8n))));++this.d,QXn(this),i=AX(Vdn(this),n,e)}return i},MWn.Tl=function(){var n;if(QXn(this),n=uU(21,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ul=function(){var n;if(QXn(this),n=uU(23,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Vl=function(){var n,t;if(QXn(this),n=this.f++,t=oU(Vdn(this),n),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),t},MWn.Wl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Xl=function(n){return QXn(this),5==this.c?(QXn(this),gG(n,(wWn(),wWn(),new h4(9,n)))):gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),t=new r$(2),5==this.c?(QXn(this),tqn(t,sNt),tqn(t,n)):(tqn(t,n),tqn(t,sNt)),t},MWn.Zl=function(n){return QXn(this),5==this.c?(QXn(this),wWn(),wWn(),new h4(9,n)):(wWn(),wWn(),new h4(3,n))},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=1,MWn.g=null,MWn.j=0,vX(ant,"RegEx/RegexParser",820),wAn(1824,820,{},Fm),MWn.sl=function(n){return!1},MWn.tl=function(){return qDn(this)},MWn.ul=function(n){return d_n(n)},MWn.vl=function(n){return ZXn(this)},MWn.wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.xl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.yl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.zl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Al=function(){return QXn(this),d_n(67)},MWn.Bl=function(){return QXn(this),d_n(73)},MWn.Cl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Dl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.El=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Fl=function(){return QXn(this),d_n(99)},MWn.Gl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Hl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Il=function(){return QXn(this),d_n(105)},MWn.Jl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Kl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ll=function(n,t){return sHn(n,d_n(t)),-1},MWn.Ml=function(){return QXn(this),wWn(),wWn(),new oG(0,94)},MWn.Nl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ol=function(){return QXn(this),wWn(),wWn(),new oG(0,36)},MWn.Pl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ql=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Rl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Sl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Tl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ul=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Vl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Xl=function(n){return QXn(this),gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),tqn(t=new r$(2),n),tqn(t,sNt),t},MWn.Zl=function(n){return QXn(this),wWn(),wWn(),new h4(3,n)};var nNt=null,tNt=null;vX(ant,"RegEx/ParserForXMLSchema",1824),wAn(117,1,ynt,Ap),MWn.$l=function(n){throw Hp(new dy("Not supported."))},MWn._l=function(){return-1},MWn.am=function(n){return null},MWn.bm=function(){return null},MWn.cm=function(n){},MWn.dm=function(n){},MWn.em=function(){return 0},MWn.Ib=function(){return this.fm(0)},MWn.fm=function(n){return 11==this.e?".":""},MWn.e=0;var eNt,iNt,rNt,cNt,aNt,uNt,oNt,sNt,hNt,fNt,lNt,bNt,wNt,dNt,gNt,pNt,vNt,mNt,yNt,kNt,jNt,ENt,TNt,MNt,SNt=null,PNt=null,CNt=null,INt=vX(ant,"RegEx/Token",117);wAn(136,117,{3:1,136:1,117:1},M0),MWn.fm=function(n){var t,e,i;if(4==this.e)if(this==oNt)e=".";else if(this==uNt)e="\\d";else if(this==kNt)e="\\w";else if(this==gNt)e="\\s";else{for((i=new Sk).a+="[",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}else if(this==lNt)e="\\D";else if(this==wNt)e="\\W";else if(this==bNt)e="\\S";else{for((i=new Sk).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}return e},MWn.a=!1,MWn.c=!1,vX(ant,"RegEx/RangeToken",136),wAn(584,1,{584:1},Op),MWn.a=0,vX(ant,"RegEx/RegexParser/ReferencePosition",584),wAn(583,1,{3:1,583:1},XE),MWn.Fb=function(n){var t;return null!=n&&!!cL(n,583)&&(t=BB(n,583),mK(this.b,t.b)&&this.a==t.a)},MWn.Hb=function(){return vvn(this.b+"/"+txn(this.a))},MWn.Ib=function(){return this.c.fm(this.a)},MWn.a=0,vX(ant,"RegEx/RegularExpression",583),wAn(223,117,ynt,oG),MWn._l=function(){return this.a},MWn.fm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+PR(this.a&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=BQn?"\\v"+fx(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+PR(this.a&QVn)}break;case 8:e=this==hNt||this==fNt?""+PR(this.a&QVn):"\\"+PR(this.a&QVn);break;default:e=null}return e},MWn.a=0,vX(ant,"RegEx/Token/CharToken",223),wAn(309,117,ynt,h4),MWn.am=function(n){return this.a},MWn.cm=function(n){this.b=n},MWn.dm=function(n){this.c=n},MWn.em=function(){return 1},MWn.fm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.fm(n)+"*";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): CLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.fm(n)+"*?";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): NONGREEDYCLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}?"}return t},MWn.b=0,MWn.c=0,vX(ant,"RegEx/Token/ClosureToken",309),wAn(821,117,ynt,UU),MWn.am=function(n){return 0==n?this.a:this.b},MWn.em=function(){return 2},MWn.fm=function(n){return 3==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+":9==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+?":this.a.fm(n)+""+this.b.fm(n)},vX(ant,"RegEx/Token/ConcatToken",821),wAn(1822,117,ynt,jnn),MWn.am=function(n){if(0==n)return this.d;if(1==n)return this.b;throw Hp(new dy("Internal Error: "+n))},MWn.em=function(){return this.b?2:1},MWn.fm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},MWn.c=0,vX(ant,"RegEx/Token/ConditionToken",1822),wAn(1823,117,ynt,T0),MWn.am=function(n){return this.b},MWn.em=function(){return 1},MWn.fm=function(n){return"(?"+(0==this.a?"":txn(this.a))+(0==this.c?"":txn(this.c))+":"+this.b.fm(n)+")"},MWn.a=0,MWn.c=0,vX(ant,"RegEx/Token/ModifierToken",1823),wAn(822,117,ynt,cW),MWn.am=function(n){return this.a},MWn.em=function(){return 1},MWn.fm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.fm(n)+")":"("+this.a.fm(n)+")";break;case 20:t="(?="+this.a.fm(n)+")";break;case 21:t="(?!"+this.a.fm(n)+")";break;case 22:t="(?<="+this.a.fm(n)+")";break;case 23:t="(?<!"+this.a.fm(n)+")";break;case 24:t="(?>"+this.a.fm(n)+")"}return t},MWn.b=0,vX(ant,"RegEx/Token/ParenToken",822),wAn(521,117,{3:1,117:1,521:1},vJ),MWn.bm=function(){return this.b},MWn.fm=function(n){return 12==this.e?"\\"+this.a:iAn(this.b)},MWn.a=0,vX(ant,"RegEx/Token/StringToken",521),wAn(465,117,ynt,r$),MWn.$l=function(n){tqn(this,n)},MWn.am=function(n){return BB(bW(this.a,n),117)},MWn.em=function(){return this.a?this.a.a.c.length:0},MWn.fm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=BB(bW(this.a,0),117),r=3==(e=BB(bW(this.a,1),117)).e&&e.am(0)==t?t.fm(n)+"+":9==e.e&&e.am(0)==t?t.fm(n)+"+?":t.fm(n)+""+e.fm(n);else{for(c=new Sk,i=0;i<this.a.a.c.length;i++)cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==BB(bW(this.a,1),117).e)r=BB(bW(this.a,0),117).fm(n)+"?";else if(2==this.a.a.c.length&&7==BB(bW(this.a,0),117).e)r=BB(bW(this.a,1),117).fm(n)+"??";else{for(cO(c=new Sk,BB(bW(this.a,0),117).fm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r},vX(ant,"RegEx/Token/UnionToken",465),wAn(518,1,{592:1},UE),MWn.Ib=function(){return this.a.b},vX(knt,"XMLTypeUtil/PatternMatcherImpl",518),wAn(1622,1381,{},Rh),vX(knt,"XMLTypeValidator",1622),wAn(264,1,pVn,hz),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return(this.b-this.a)*this.c<0?MNt:new XL(this)},MWn.a=0,MWn.b=0,MWn.c=0,vX(Ent,"ExclusiveRange",264),wAn(1068,1,cVn,Kh),MWn.Rb=function(n){BB(n,19),l$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return GE()},MWn.Ub=function(){return zE()},MWn.Wb=function(n){BB(n,19),w$()},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Tb=function(){return-1},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new tk(Snt))},vX(Ent,"ExclusiveRange/1",1068),wAn(254,1,cVn,XL),MWn.Rb=function(n){BB(n,19),b$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return Fhn(this)},MWn.Ub=function(){return O9(this)},MWn.Wb=function(n){BB(n,19),d$()},MWn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Vb=function(){return this.b-1},MWn.Qb=function(){throw Hp(new tk(Snt))},MWn.a=0,MWn.b=0,vX(Ent,"ExclusiveRange/RangeIterator",254);var ONt=RW(P9n,"C"),ANt=RW(O9n,"I"),$Nt=RW($Wn,"Z"),LNt=RW(A9n,"J"),NNt=RW(S9n,"B"),xNt=RW(C9n,"D"),DNt=RW(I9n,"F"),RNt=RW($9n,"S"),KNt=bq("org.eclipse.elk.core.labels","ILabelManager"),_Nt=bq(B6n,"DiagnosticChain"),FNt=bq(f7n,"ResourceSet"),BNt=vX(B6n,"InvocationTargetException",null),HNt=(Dk(),f5),qNt=qNt=hEn;Zen(Qp),scn("permProps",[[[Pnt,Cnt],[Int,"gecko1_8"]],[[Pnt,Cnt],[Int,"ie10"]],[[Pnt,Cnt],[Int,"ie8"]],[[Pnt,Cnt],[Int,"ie9"]],[[Pnt,Cnt],[Int,"safari"]]]),qNt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var u=n("web-worker");c.workerFactory=function(n){return new u(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var o=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new o(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},9487:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>k});var i=e(6432),r=e(9373),c=e(3349),a=e(7295),u=e.n(a);e(7484),e(7967),e(7856),e(277),e(5625),e(9354),e(1518),e(9542),e(285),e(8734);const o=new(u()),s={},h={};let f={};const l=(n,t,e)=>{const r={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return r.TD=r.TB,i.l.info("abc88",e,t,n),r[e][t][n]},b=(n,t,e)=>{if(i.l.info("getNextPort abc88",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const r="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),r},w=function(n,t,e,c){i.l.info("abc78 edges = ",n);const a=c.insert("g").attr("class","edgeLabels");let u,o,s={},l=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,i.a)(n.defaultStyle);u=t.style,o=t.labelStyle}return n.forEach((function(t){var c="L-"+t.start+"-"+t.end;void 0===s[c]?(s[c]=0,i.l.info("abc78 new entry",c,s[c])):(s[c]++,i.l.info("abc78 new entry",c,s[c]));let w=c+"-"+s[c];i.l.info("abc78 new link id to be used is",c,w,s[c]);var d="LS-"+t.start,g="LE-"+t.end;const p={style:"",labelStyle:""};switch(p.minlen=t.length||1,"arrow_open"===t.type?p.arrowhead="none":p.arrowhead="normal",p.arrowTypeStart="arrow_open",p.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":p.arrowTypeStart="arrow_cross";case"arrow_cross":p.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":p.arrowTypeStart="arrow_point";case"arrow_point":p.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":p.arrowTypeStart="arrow_circle";case"arrow_circle":p.arrowTypeEnd="arrow_circle"}let v="",m="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==o&&(m=o),p.thickness="normal",p.pattern="solid";break;case"dotted":p.thickness="normal",p.pattern="dotted",p.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":p.thickness="thick",p.pattern="solid",p.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,i.a)(t.style);v=n.style,m=n.labelStyle}p.style=p.style+=v,p.labelStyle=p.labelStyle+=m,void 0!==t.interpolate?p.curve=(0,i.d)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?p.curve=(0,i.d)(n.defaultInterpolate,r.c_6):p.curve=(0,i.d)(h.curve,r.c_6),void 0===t.text?void 0!==t.style&&(p.arrowheadStyle="fill: #333"):(p.arrowheadStyle="fill: #333",p.labelpos="c"),p.labelType="text",p.label=t.text.replace(i.c.lineBreakRegex,"\n"),void 0===t.style&&(p.style=p.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),p.labelStyle=p.labelStyle.replace("color:","fill:"),p.id=w,p.classes="flowchart-link "+d+" "+g;const y=(0,i.f)(a,p),{source:k,target:j}=((n,t)=>{let e=n.start,i=n.end;const r=f[e],c=f[i];return r&&c?("diamond"===r.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===c.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i}):{source:e,target:i}})(t,l);i.l.debug("abc78 source and target",k,j),e.edges.push({id:"e"+t.start+t.end,sources:[k],targets:[j],labelEl:y,labels:[{width:p.width,height:p.height,orgWidth:p.width,orgHeight:p.height,text:p.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:p})})),e},d=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,c){const a=d(t.sources[0],t.targets[0],c),u=t.sections[0].startPoint,o=t.sections[0].endPoint,s=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+a.x,n.y+a.y])),h=[[u.x+a.x,u.y+a.y],...s,[o.x+a.x,o.y+a.y]],f=(0,r.jvg)().curve(r.c_6),l=n.insert("path").attr("d",f(h)).attr("class","path").attr("fill","none"),b=n.insert("g").attr("class","edgeLabel"),w=(0,r.Ys)(b.node().appendChild(t.labelEl)),g=w.node().firstChild.getBoundingClientRect();w.attr("width",g.width),w.attr("height",g.height),b.attr("transform",`translate(${t.labels[0].x+a.x}, ${t.labels[0].y+a.y})`),function(n,t,e,i){let r="";switch(i&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.arrowTypeStart){case"arrow_cross":n.attr("marker-start","url("+r+"#"+e+"-crossStart)");break;case"arrow_point":n.attr("marker-start","url("+r+"#"+e+"-pointStart)");break;case"arrow_barb":n.attr("marker-start","url("+r+"#"+e+"-barbStart)");break;case"arrow_circle":n.attr("marker-start","url("+r+"#"+e+"-circleStart)");break;case"aggregation":n.attr("marker-start","url("+r+"#"+e+"-aggregationStart)");break;case"extension":n.attr("marker-start","url("+r+"#"+e+"-extensionStart)");break;case"composition":n.attr("marker-start","url("+r+"#"+e+"-compositionStart)");break;case"dependency":n.attr("marker-start","url("+r+"#"+e+"-dependencyStart)");break;case"lollipop":n.attr("marker-start","url("+r+"#"+e+"-lollipopStart)")}switch(t.arrowTypeEnd){case"arrow_cross":n.attr("marker-end","url("+r+"#"+e+"-crossEnd)");break;case"arrow_point":n.attr("marker-end","url("+r+"#"+e+"-pointEnd)");break;case"arrow_barb":n.attr("marker-end","url("+r+"#"+e+"-barbEnd)");break;case"arrow_circle":n.attr("marker-end","url("+r+"#"+e+"-circleEnd)");break;case"aggregation":n.attr("marker-end","url("+r+"#"+e+"-aggregationEnd)");break;case"extension":n.attr("marker-end","url("+r+"#"+e+"-extensionEnd)");break;case"composition":n.attr("marker-end","url("+r+"#"+e+"-compositionEnd)");break;case"dependency":n.attr("marker-end","url("+r+"#"+e+"-dependencyEnd)");break;case"lollipop":n.attr("marker-end","url("+r+"#"+e+"-lollipopEnd)")}}(l,e,i.type,i.arrowMarkerAbsolute)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},v=(n,t,e,r,c,a,u)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:u,width:e.width,height:e.height},"group"===e.type){const r=c.insert("g").attr("class","subgraph");r.insert("rect").attr("class","subgraph subgraph-lvl-"+u%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const a=r.insert("g").attr("class","label");a.attr("transform",`translate(${e.labels[0].x+n+e.x}, ${e.labels[0].y+t+e.y})`),a.node().appendChild(e.labelData.labelNode),i.l.info("Id (UGH)= ",e.type,e.labels)}else i.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&v(n+e.x,t+e.y,e.children,r,c,a,u+1)}))},m={getClasses:function(n,t){i.l.info("Extracting classes"),t.db.clear("ver-2");try{return t.parse(n),t.db.getClasses()}catch(e){return{}}},draw:async function(n,t,e,a){var u;a.db.clear(),f={},a.db.setGen("gen-2"),a.parser.parse(n);const s=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let h={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(i.l.info("Drawing flowchart using v3 renderer",o),a.db.getDirection()){case"BT":h.layoutOptions["elk.direction"]="UP";break;case"TB":h.layoutOptions["elk.direction"]="DOWN";break;case"LR":h.layoutOptions["elk.direction"]="RIGHT";break;case"RL":h.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:l,flowchart:b}=(0,i.g)();let d;"sandbox"===l&&(d=(0,r.Ys)("#i"+t));const m="sandbox"===l?(0,r.Ys)(d.nodes()[0].contentDocument.body):(0,r.Ys)("body"),y="sandbox"===l?d.nodes()[0].contentDocument:document,k=m.select(`[id="${t}"]`);(0,i.i)(k,["point","circle","cross"],a.type,a.arrowMarkerAbsolute);const j=a.db.getVertices();let E;const T=a.db.getSubGraphs();i.l.info("Subgraphs - ",T);for(let i=T.length-1;i>=0;i--)E=T[i],a.db.addVertex(E.id,E.title,"group",void 0,E.classes,E.dir);const M=k.insert("g").attr("class","subgraphs"),S=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return i.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(a.db);h=function(n,t,e,r,a,u,o){const s=e.select(`[id="${t}"]`),h=s.insert("g").attr("class","nodes");return Object.keys(n).forEach((function(t){const e=n[t];let o="default";e.classes.length>0&&(o=e.classes.join(" "));const l=(0,i.a)(e.styles);let b,w=void 0!==e.text?e.text:e.id;const d={width:0,height:0};if((0,i.e)((0,i.g)().flowchart.htmlLabels)){const n={label:w.replace(/fa[blrs]?:fa-[\w-]+/g,(n=>`<i class='${n.replace(":"," ")}'></i>`))};b=(0,c.a)(s,n).node();const t=b.getBBox();d.width=t.width,d.height=t.height,d.labelNode=b,b.parentNode.removeChild(b)}else{const n=r.createElementNS("http://www.w3.org/2000/svg","text");n.setAttribute("style",l.labelStyle.replace("color:","fill:"));const t=w.split(i.c.lineBreakRegex);for(const i of t){const t=r.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=i,n.appendChild(t)}b=n;const e=b.getBBox();d.width=e.width,d.height=e.height,d.labelNode=b}const g=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let p=0,v="",m={};switch(e.type){case"round":p=5,v="rect";break;case"square":case"group":default:v="rect";break;case"diamond":v="question",m={portConstraints:"FIXED_SIDE"};break;case"hexagon":v="hexagon";break;case"odd":case"odd_right":v="rect_left_inv_arrow";break;case"lean_right":v="lean_right";break;case"lean_left":v="lean_left";break;case"trapezoid":v="trapezoid";break;case"inv_trapezoid":v="inv_trapezoid";break;case"circle":v="circle";break;case"ellipse":v="ellipse";break;case"stadium":v="stadium";break;case"subroutine":v="subroutine";break;case"cylinder":v="cylinder";break;case"doublecircle":v="doublecircle"}const y={labelStyle:l.labelStyle,shape:v,labelText:w,rx:p,ry:p,class:o,style:l.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:a.db.getTooltip(e.id)||"",domId:a.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,i.g)().flowchart.padding};let k,j;"group"!==y.type&&(j=(0,i.b)(h,y,e.dir),k=j.node().getBBox());const E={id:e.id,ports:"diamond"===e.type?g:[],layoutOptions:m,labelText:w,labelData:d,domId:a.db.lookUpDomId(e.id),width:null==k?void 0:k.width,height:null==k?void 0:k.height,type:e.type,el:j,parent:u.parentById[e.id]};f[y.id]=E})),o}(j,t,m,y,a,S,h);const P=k.insert("g").attr("class","edges edgePath"),C=a.db.getEdges();h=w(C,a,h,k);Object.keys(f).forEach((n=>{const t=f[n];t.parent||h.children.push(t),void 0!==S.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),p(h.children,S),i.l.info("after layout",JSON.stringify(h,null,2));const I=await o.layout(h);v(0,0,I.children,k,M,a,0),i.l.info("after layout",I),null==(u=I.edges)||u.map((n=>{g(P,n,n.edgeData,a,S)})),(0,i.s)({},k,b.diagramPadding,b.useMaxWidth),s.remove()}},y=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,k={db:i.h,renderer:m,parser:i.p,styles:y}}}]); \ No newline at end of file diff --git a/assets/js/95b96bb9.aefbf3b7.js b/assets/js/95b96bb9.aefbf3b7.js new file mode 100644 index 0000000..4711a8e --- /dev/null +++ b/assets/js/95b96bb9.aefbf3b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3561],{4577:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr"},{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"},{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"},{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"},{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"}]}')}}]); \ No newline at end of file diff --git a/assets/js/95be84b6.0463fc28.js b/assets/js/95be84b6.0463fc28.js new file mode 100644 index 0000000..5378c5a --- /dev/null +++ b/assets/js/95be84b6.0463fc28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3835],{1820:t=>{t.exports=JSON.parse('{"label":"csharp","permalink":"/ib002/tags/csharp","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"graphs/iterative-and-iterators","title":"Iterative algorithms via iterators","description":"Iterative DFS using iterators.\\n","permalink":"/ib002/graphs/iterative-and-iterators"}]}')}}]); \ No newline at end of file diff --git a/assets/js/95f41f0b.79e14732.js b/assets/js/95f41f0b.79e14732.js new file mode 100644 index 0000000..88c5eac --- /dev/null +++ b/assets/js/95f41f0b.79e14732.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9385],{3905:(e,t,r)=>{r.d(t,{Zo:()=>f,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},f=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,f=c(e,["components","mdxType","originalType","parentName"]),u=s(r),d=o,m=u["".concat(l,".").concat(d)]||u[d]||p[d]||a;return r?n.createElement(m,i(i({ref:t},f),{},{components:r})):n.createElement(m,i({ref:t},f))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[u]="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},6534:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15",slug:"aoc-2022/1st-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,c={permalink:"/blog/aoc-2022/1st-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/01-week-1.md",source:"@site/blog/aoc-2022/01-week-1.md",title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15:00.000Z",formattedDate:"December 15, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:12.4,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15",slug:"aoc-2022/1st-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"2nd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/2nd-week"},nextItem:{title:"Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/intro"}},l={authorsImageUrls:[void 0]},s=[],f={toc:s},u="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},f,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the first week of ","[",(0,o.kt)("em",{parentName:"p"},"Advent of Code"),"]"," in Rust."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.dadc79bc.js b/assets/js/9e4087bc.dadc79bc.js new file mode 100644 index 0000000..40ca758 --- /dev/null +++ b/assets/js/9e4087bc.dadc79bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3608],{3169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),l=a(9960),n=a(5999),c=a(833),i=a(7452);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/assets/js/9eb50c57.bc586b34.js b/assets/js/9eb50c57.bc586b34.js new file mode 100644 index 0000000..9b31e59 --- /dev/null +++ b/assets/js/9eb50c57.bc586b34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7509],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var i=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n,i,o={},a=Object.keys(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,h=m["".concat(l,".").concat(d)]||m[d]||u[d]||a;return n?i.createElement(h,r(r({ref:t},c),{},{components:n})):i.createElement(h,r({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,r=new Array(a);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:o,r[1]=s;for(var p=2;p<a;p++)r[p]=n[p];return i.createElement.apply(null,r)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},6239:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var i=n(7462),o=(n(7294),n(3905));const a={id:"postcondition-ambiguity",title:"Vague postconditions and proving correctness of algorithms",description:"Debugging and testing with precise postconditions.\n",tags:["python","testing","postconditions","sorting"],last_update:{date:new Date("2021-03-18T00:00:00.000Z")}},r=void 0,s={unversionedId:"algorithms-correctness/postcondition-ambiguity",id:"algorithms-correctness/postcondition-ambiguity",title:"Vague postconditions and proving correctness of algorithms",description:"Debugging and testing with precise postconditions.\n",source:"@site/ib002/02-algorithms-correctness/2021-03-18-postcondition-ambiguity.md",sourceDirName:"02-algorithms-correctness",slug:"/algorithms-correctness/postcondition-ambiguity",permalink:"/ib002/algorithms-correctness/postcondition-ambiguity",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/02-algorithms-correctness/2021-03-18-postcondition-ambiguity.md",tags:[{label:"python",permalink:"/ib002/tags/python"},{label:"testing",permalink:"/ib002/tags/testing"},{label:"postconditions",permalink:"/ib002/tags/postconditions"},{label:"sorting",permalink:"/ib002/tags/sorting"}],version:"current",lastUpdatedAt:1616025600,formattedLastUpdatedAt:"Mar 18, 2021",frontMatter:{id:"postcondition-ambiguity",title:"Vague postconditions and proving correctness of algorithms",description:"Debugging and testing with precise postconditions.\n",tags:["python","testing","postconditions","sorting"],last_update:{date:"2021-03-18T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Algorithms and Correctness",permalink:"/ib002/category/algorithms-and-correctness"},next:{title:"Asymptotic Notation and Time Complexity",permalink:"/ib002/category/asymptotic-notation-and-time-complexity"}},l={},p=[{value:"Introduction",id:"introduction",level:2},{value:"Implementation of select sort from the exercises",id:"implementation-of-select-sort-from-the-exercises",level:2},{value:"Discussed preconditions, loop invariants and postconditions",id:"discussed-preconditions-loop-invariants-and-postconditions",level:2},{value:"Precondition",id:"precondition",level:3},{value:"Loop invariant",id:"loop-invariant",level:3},{value:"Postcondition",id:"postcondition",level:3},{value:"So is the permutation really required?",id:"so-is-the-permutation-really-required",level:2},{value:"Implementation of the broken select sort",id:"implementation-of-the-broken-select-sort",level:2},{value:"Property-based tests for our sorts",id:"property-based-tests-for-our-sorts",level:2},{value:"Loop invariant",id:"loop-invariant-1",level:3},{value:"Postcondition(s)",id:"postconditions",level:3},{value:"Putting it together",id:"putting-it-together",level:3},{value:"Let's run the tests!",id:"lets-run-the-tests",level:3},{value:"Summary",id:"summary",level:2}],c={toc:p},m="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(m,(0,i.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"pathname:///files/ib002/algorithms-correctness/postcondition-ambiguity/test_sort.py"},"Source code")," used later on."),(0,o.kt)("h2",{id:"implementation-of-select-sort-from-the-exercises"},"Implementation of select sort from the exercises"),(0,o.kt)("p",null,"To implement select sort from the exercises and make it as easy to read as possible, I have implemented maximum function that returns index of the biggest element from the first ",(0,o.kt)("span",{parentName:"p",className:"math math-inline"},(0,o.kt)("span",{parentName:"span",className:"katex"},(0,o.kt)("span",{parentName:"span",className:"katex-mathml"},(0,o.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,o.kt)("semantics",{parentName:"math"},(0,o.kt)("mrow",{parentName:"semantics"},(0,o.kt)("mi",{parentName:"mrow"},"n")),(0,o.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,o.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,o.kt)("span",{parentName:"span",className:"base"},(0,o.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,o.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," elements."),(0,o.kt)("p",null,"For the sake of time and memory complexity, I am also using ",(0,o.kt)("inlineCode",{parentName:"p"},"itertools.islice"),", which makes a slice, but does not copy the elements into the memory like normal slice does."),(0,o.kt)("p",null,"There is also a ",(0,o.kt)("inlineCode",{parentName:"p"},"check_loop_invariant")," function that will be described later."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"def compare_by_value(pair):\n index, value = pair\n return value\n\n\ndef maximum(arr, n):\n first_n_elements = itertools.islice(enumerate(arr), n)\n index, value = max(first_n_elements, key=compare_by_value)\n return index\n\n\ndef select_sort(arr, n):\n assert n == len(arr)\n\n check_loop_invariant(arr, n, n)\n for i in reversed(range(1, n)):\n j = maximum(arr, i + 1)\n arr[i], arr[j] = arr[j], arr[i]\n\n check_loop_invariant(arr, n, i)\n\n return arr\n")),(0,o.kt)("h2",{id:"discussed-preconditions-loop-invariants-and-postconditions"},"Discussed preconditions, loop invariants and postconditions"),(0,o.kt)("p",null,"You can safely replace ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," with ",(0,o.kt)("inlineCode",{parentName:"p"},"arr")," or array for list."),(0,o.kt)("h3",{id:"precondition"},"Precondition"),(0,o.kt)("p",null,"As a precondition we have established that ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," represents an array of values and ",(0,o.kt)("span",{parentName:"p",className:"math math-inline"},(0,o.kt)("span",{parentName:"span",className:"katex"},(0,o.kt)("span",{parentName:"span",className:"katex-mathml"},(0,o.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,o.kt)("semantics",{parentName:"math"},(0,o.kt)("mrow",{parentName:"semantics"},(0,o.kt)("mi",{parentName:"mrow"},"n")),(0,o.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,o.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,o.kt)("span",{parentName:"span",className:"base"},(0,o.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,o.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," is length of the ",(0,o.kt)("inlineCode",{parentName:"p"},"A"),"."),(0,o.kt)("h3",{id:"loop-invariant"},"Loop invariant"),(0,o.kt)("p",null,"As for loop invariant we have established that we require two properties:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"A[i + 1 : n]")," is sorted"),(0,o.kt)("li",{parentName:"ol"},"all elements of ",(0,o.kt)("inlineCode",{parentName:"li"},"A[i + 1 : n]")," are bigger or equal to the other elements")),(0,o.kt)("p",null,"This invariant is later defined as ",(0,o.kt)("inlineCode",{parentName:"p"},"check_loop_invariant")," function. It is checked before the first iteration and after each iteration."),(0,o.kt)("h3",{id:"postcondition"},"Postcondition"),(0,o.kt)("p",null,"For the postcondition the first suggestion was that ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," must be sorted. And later we have added that ",(0,o.kt)("inlineCode",{parentName:"p"},"A'")," must be a permutation of ",(0,o.kt)("inlineCode",{parentName:"p"},"A"),"."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"However at the end of the session question arose if it is really required to state in the postcondition that ",(0,o.kt)("inlineCode",{parentName:"p"},"A'")," is a permutation.")),(0,o.kt)("h2",{id:"so-is-the-permutation-really-required"},"So is the permutation really required?"),(0,o.kt)("p",null,"As I have said it is better to have postconditions explicit and do not expect anything that is not stated explicitly, e.g. ",(0,o.kt)("em",{parentName:"p"},"name suggests it"),". In reality we could consider it as a smaller mistake (but it has consequences)."),(0,o.kt)("p",null,"On the other hand explicit postconditions can be used to our advantage ",(0,o.kt)("strong",{parentName:"p"},"and also")," help our proof of correctness."),(0,o.kt)("p",null,"Consequences:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Property-based testing"),(0,o.kt)("p",{parentName:"li"},"If we have explicit postconditions we can use them to define properties of the output from our algorithms. That way we can use property-based testing, which does not depend on specific inputs and expected outputs, but rather on randomly generated input and checking if the output conforms to our expectations (the postconditions are fulfilled).")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Proof of correctness"),(0,o.kt)("p",{parentName:"li"},"If we can prove that algorithm is correct even for algorithm that ",(0,o.kt)("strong",{parentName:"p"},"is not")," correct, we have a problem. That proof has no value and is useless."))),(0,o.kt)("p",null,'For the sake of showcasing the power of postconditions I will introduce "select sort" that is not correct, but will comply with both the loop invariant and our vague postcondition and thus pass the tests.'),(0,o.kt)("h2",{id:"implementation-of-the-broken-select-sort"},"Implementation of the broken select sort"),(0,o.kt)("p",null,"To make sure this thing passes everything, but our explicit postcondition with permutation will ",(0,o.kt)("em",{parentName:"p"},"blow it up"),', I have designed this "select sort" as follows:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If I get empty list, there is nothing to do."),(0,o.kt)("li",{parentName:"ol"},"I find maximum in the array."),(0,o.kt)("li",{parentName:"ol"},"For each index from the end, I will assign ",(0,o.kt)("inlineCode",{parentName:"li"},"maximum + index"),".\nThis will ensure that even if the maximum in the original array was the first element, I will always satisfy that 2nd part of the loop invariant.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"def broken_select_sort(arr, n):\n assert n == len(arr)\n\n if not arr:\n return\n\n max_value = max(arr)\n\n check_loop_invariant(arr, n, n)\n for i in reversed(range(n)):\n arr[i] = max_value + i\n\n check_loop_invariant(arr, n, i)\n\n return arr\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"There is also an easier way to break this, I leave that as an exercise ;)")),(0,o.kt)("h2",{id:"property-based-tests-for-our-sorts"},"Property-based tests for our sorts"),(0,o.kt)("p",null,"Since we have talked a lot about proofs at the seminar, I would like to demonstrate it on the testing of the sorts. In the following text I will cover implementation of the loop invariant and both postconditions we have talked about and then test our sorts using them."),(0,o.kt)("h3",{id:"loop-invariant-1"},"Loop invariant"),(0,o.kt)("p",null,"To check loop invariant I have implemented this function:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},'def check_loop_invariant(arr, n, i):\n # A[i + 1 : n] is sorted\n for x, y in zip(itertools.islice(arr, i + 1, n), itertools.islice(arr, i + 2, n)):\n assert x <= y\n\n # all elements of A[i + 1 : n] are bigger or equal to the other elements\n if i + 1 >= n:\n # in case there are no elements\n return\n\n # otherwise, since the "tail" is sorted, we can assume that it is enough to\n # check the other elements to the smallest value of the tail\n smallest = arr[i + 1]\n for element in itertools.islice(arr, i + 1):\n assert smallest >= element\n')),(0,o.kt)("p",null,'First part checks if the "ending" of the array is sorted.'),(0,o.kt)("p",null,"In second part I have used a ",(0,o.kt)("em",{parentName:"p"},"dirty trick")," of taking just the first element that is the smallest and compared the rest of the elements to it. Why is it enough? I leave it as an exercise ;)"),(0,o.kt)("h3",{id:"postconditions"},"Postcondition(s)"),(0,o.kt)("p",null,"I have defined both the vague and explicit postconditions:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"def check_vague_postcondition(original_arr, arr):\n if not arr:\n return\n\n # check ordering\n for x, y in zip(arr, itertools.islice(arr, 1, len(arr))):\n assert x <= y\n\n\ndef check_postcondition(original_arr, arr):\n if not arr:\n return\n\n # check ordering\n for x, y in zip(arr, itertools.islice(arr, 1, len(arr))):\n assert x <= y\n\n # get counts from original list\n original_counts = {}\n for value in original_arr:\n original_counts[value] = 1 + original_counts.get(value, 0)\n\n # get counts from resulting list\n counts = {}\n for value in arr:\n counts[value] = 1 + counts.get(value, 0)\n\n # if arr is permutation of original_arr then all counts must be the same\n assert counts == original_counts\n")),(0,o.kt)("h3",{id:"putting-it-together"},"Putting it together"),(0,o.kt)("p",null,"Now that we have everything implement, we can move on to the implementation of the tests:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},'from hypothesis import given, settings\nfrom hypothesis.strategies import integers, lists\nimport pytest\n\n@given(lists(integers()))\n@settings(max_examples=1000)\n@pytest.mark.parametrize(\n "postcondition", [check_vague_postcondition, check_postcondition]\n)\n@pytest.mark.parametrize("sorting_function", [select_sort, broken_select_sort])\ndef test_select_sort(sorting_function, postcondition, numbers):\n result = sorting_function(numbers[:], len(numbers))\n postcondition(numbers, result)\n')),(0,o.kt)("p",null,"Since it might seem a bit scary, I will disect it by parts."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Parameters of test function"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"def test_select_sort(sorting_function, postcondition, numbers):\n")),(0,o.kt)("p",{parentName:"li"},"We are given 3 parameters:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"sorting_function")," - as the name suggests is the sorting function we test"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"postcondition")," - as the name suggests is the postcondition that we check"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"numbers")," - is random list of numbers that we will be sorting"))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Body of the test"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},"result = sorting_function(numbers[:], len(numbers))\npostcondition(numbers, result)\n")),(0,o.kt)("p",{parentName:"li"},"We pass to the sorting function ",(0,o.kt)("strong",{parentName:"p"},"copy")," of the numbers we got, this ensures that once we are checking the more strict postcondition, we can gather the necessary information even after sorting the list in-situ, i.e. we can check if the ",(0,o.kt)("inlineCode",{parentName:"p"},"result")," is really a ",(0,o.kt)("inlineCode",{parentName:"p"},"permutation")," of the ",(0,o.kt)("inlineCode",{parentName:"p"},"numbers")," even though the sorting functions has modified the passed in list."))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Now we get to the more complicated part and it is the ",(0,o.kt)("em",{parentName:"p"},"decorators"),".")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"1st ",(0,o.kt)("inlineCode",{parentName:"p"},"parametrize")," from the bottom"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-py",metastring:"showLineNumbers",showLineNumbers:!0},'@pytest.mark.parametrize("sorting_function", [select_sort, broken_select_sort])\n')),(0,o.kt)("p",{parentName:"li"},"This tells pytest, that we want to pass the values from the list to the parameter ",(0,o.kt)("inlineCode",{parentName:"p"},"sorting_function"),". In other words, this lets us use the same test function for both the correct and incorrect select sort.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"2nd ",(0,o.kt)("inlineCode",{parentName:"p"},"parametrize")," from the bottom is similar, but works with the postcondition.\nThe reason why they are separated is pretty simple, this way they act like cartesian product: for each sorting function we also use each postcondition.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"@settings")," raises the count of tests that hypothesis runs (from default of 100(?)).")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"@given(lists(integers()))"),"\nThis means hypothesis is randomly creating lists of integers and passing them to the function, which has only one parameter left and that is ",(0,o.kt)("inlineCode",{parentName:"p"},"numbers"),"."))),(0,o.kt)("h3",{id:"lets-run-the-tests"},"Let's run the tests!"),(0,o.kt)("p",null,"In case you want to experiment locally, you should install ",(0,o.kt)("inlineCode",{parentName:"p"},"pytest")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"hypothesis")," from the PyPI."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'% pytest -v test_sort.py\n=================================== test session starts ====================================\nplatform linux -- Python 3.6.8, pytest-3.8.2, py-1.7.0, pluggy-0.13.1 -- /usr/bin/python3\ncachedir: .pytest_cache\nrootdir: /home/xfocko/git/xfocko/ib002/postcondition-ambiguity, inifile:\nplugins: hypothesis-5.16.1\ncollected 4 items\n\ntest_sort.py::test_select_sort[select_sort-check_vague_postcondition] PASSED [ 25%]\ntest_sort.py::test_select_sort[select_sort-check_postcondition] PASSED [ 50%]\ntest_sort.py::test_select_sort[broken_select_sort-check_vague_postcondition] PASSED [ 75%]\ntest_sort.py::test_select_sort[broken_select_sort-check_postcondition] FAILED [100%]\n\n========================================= FAILURES =========================================\n_________________ test_select_sort[broken_select_sort-check_postcondition] _________________\n\nsorting_function = <function broken_select_sort at 0x7fac179308c8>\npostcondition = <function check_postcondition at 0x7fac1786d1e0>\n\n @given(lists(integers()))\n> @settings(max_examples=1000)\n @pytest.mark.parametrize(\n "postcondition", [check_vague_postcondition, check_postcondition]\n )\n @pytest.mark.parametrize("sorting_function", [select_sort, broken_select_sort])\n def test_select_sort(sorting_function, postcondition, numbers):\n\ntest_sort.py:132:\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ntest_sort.py:139: in test_select_sort\n postcondition(numbers, result)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\noriginal_arr = [0, 0], arr = [0, 1]\n\n def check_postcondition(original_arr, arr):\n if not arr:\n return\n\n # check ordering\n for x, y in zip(arr, itertools.islice(arr, 1, len(arr))):\n assert x <= y\n\n # get counts from original list\n original_counts = {}\n for value in original_arr:\n original_counts[value] = 1 + original_counts.get(value, 0)\n\n # get counts from resulting list\n counts = {}\n for value in arr:\n counts[value] = 1 + counts.get(value, 0)\n\n # if arr is permutation of original_arr then all counts must be the same\n> assert counts == original_counts\nE assert {0: 1, 1: 1} == {0: 2}\nE Differing items:\nE {0: 1} != {0: 2}\nE Left contains more items:\nE {1: 1}\nE Full diff:\nE - {0: 1, 1: 1}\nE + {0: 2}\n\ntest_sort.py:128: AssertionError\n----------------------------------- Captured stdout call -----------------------------------\nFalsifying example: test_select_sort(\n sorting_function=<function test_sort.broken_select_sort>,\n postcondition=<function test_sort.check_postcondition>,\n numbers=[0, 0],\n)\n============================ 1 failed, 3 passed in 6.84 seconds ============================\n')),(0,o.kt)("p",null,"We can clearly see that our broken select sort has passed the ",(0,o.kt)("em",{parentName:"p"},"vague postcondition"),", but the explicit one was not satisfied."),(0,o.kt)("h2",{id:"summary"},"Summary"),(0,o.kt)("p",null,"For proving the correctness of the algorithm it is better to be explicit than prove that algorithm is correct even though it is not. Being explicit also allows you to test smaller ",(0,o.kt)("em",{parentName:"p"},"chunks")," of code better."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a082abd3.1797976b.js b/assets/js/a082abd3.1797976b.js new file mode 100644 index 0000000..7d98656 --- /dev/null +++ b/assets/js/a082abd3.1797976b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8786],{3276:a=>{a.exports=JSON.parse('{"label":"admin","permalink":"/blog/tags/admin","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/a2be6ffb.f8d1346f.js b/assets/js/a2be6ffb.f8d1346f.js new file mode 100644 index 0000000..169da96 --- /dev/null +++ b/assets/js/a2be6ffb.f8d1346f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4800],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var o=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,i=function(e,t){if(null==e)return{};var n,o,i={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=i,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return n?o.createElement(g,r(r({ref:t},c),{},{components:n})):o.createElement(g,r({ref:t},c))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,r=new Array(a);r[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:i,r[1]=l;for(var p=2;p<a;p++)r[p]=n[p];return o.createElement.apply(null,r)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},5185:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var o=n(7462),i=(n(7294),n(3905));const a={title:"Environment",description:"Suggestions for setting up a local environment for C++ course.\n",last_update:{date:new Date("2023-02-18T00:00:00.000Z")}},r=void 0,l={unversionedId:"environment",id:"environment",title:"Environment",description:"Suggestions for setting up a local environment for C++ course.\n",source:"@site/pb161/environment.md",sourceDirName:".",slug:"/environment",permalink:"/pb161/environment",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb161/environment.md",tags:[],version:"current",lastUpdatedAt:1676678400,formattedLastUpdatedAt:"Feb 18, 2023",frontMatter:{title:"Environment",description:"Suggestions for setting up a local environment for C++ course.\n",last_update:{date:"2023-02-18T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Introduction",permalink:"/pb161/"}},s={},p=[{value:"Required tools per OS",id:"required-tools-per-os",level:2},{value:"Windows",id:"windows",level:3},{value:"Linux",id:"linux",level:3},{value:"macOS",id:"macos",level:3},{value:"nix(OS)",id:"nixos",level:3},{value:"IDEs",id:"ides",level:2},{value:"git",id:"git",level:2},{value:"pre-commit (link)",id:"pre-commit-link",level:3},{value:"Testing",id:"testing",level:2},{value:"catch2",id:"catch2",level:3},{value:"Google Test",id:"google-test",level:3}],c={toc:p},m="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(m,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"required-tools-per-os"},"Required tools per OS"),(0,i.kt)("h3",{id:"windows"},"Windows"),(0,i.kt)("p",null,"Most likely WSL, VM or VPS. If you consider setting up either of those PITA, then\nVSCode + SSH to ",(0,i.kt)("em",{parentName:"p"},"aisa")," might be the best option for you."),(0,i.kt)("admonition",{title:"VSCode @ aisa",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Be careful when using VSCode on aisa, most notably:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"VSCode can leave lingering processes running in the background that can \u201eeat\nup\u201c your quota for running processes.\nAFAIK UNIX team has implemented some periodic clean up of those."),(0,i.kt)("li",{parentName:"ol"},"Disk quota can be also affected, because of the C/C++ extension toolkit that\nhas a cache for IntelliSense."))),(0,i.kt)("p",null,"Either of those will be linux distros, so jump to ",(0,i.kt)("a",{parentName:"p",href:"#linux"},"next section"),"."),(0,i.kt)("h3",{id:"linux"},"Linux"),(0,i.kt)("p",null,"Majority (if not all) of the provided materials include makefile (contains absolute\npath, so in case of linting and compiling, you need to adjust to your needs). You\nbasically need following list of tools:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"gcc")," - for compiling"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"clang-tidy")," - for linting (depends on distribution, might be provided with\nclang itself or in separate package, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"clang-tools-extra"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"clang-format")," - for your own sanity of keeping consistent formatting"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"make")," - since you are provided makefiles and it might be quickest to set up"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"valgrind")," - in case you manage to create memory errors in your code")),(0,i.kt)("p",null,"In case of Fedora it is following set of packages:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo dnf install -y clang clang-tools-extra valgrind gcc make\n# If you decide to use google test: add `gtest` or `llvm-googletest` for clang\n")),(0,i.kt)("h3",{id:"macos"},"macOS"),(0,i.kt)("p",null,"In case of macOS you should be able to find all of the packages in brew.sh, except\n",(0,i.kt)("inlineCode",{parentName:"p"},"valgrind"),", not sure if you can solve with podman/docker."),(0,i.kt)("p",null,"There is also an alterantive to homebrew, that is nixpkgs."),(0,i.kt)("h3",{id:"nixos"},"nix(OS)"),(0,i.kt)("p",null,"In case you run nixOS or linux distribution with nixpkgs or you use nixpkgs as a\nreplacement for homebrew on macOS. You should be fine with the following config:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-nix"},'with import <nixpkgs> {};\nstdenv.mkDerivation {\n name = "cppenv";\n buildInputs = [\n clang-tools\n\n gnumake\n\n gmock # used for google test\n valgrind # not sure about macOS though\n ];\n}\n')),(0,i.kt)("h2",{id:"ides"},"IDEs"),(0,i.kt)("p",null,"Choice of the IDE is mostly up to you, you do not need to use IDE at all ;)"),(0,i.kt)("p",null,"I would probably recommend VSCode + appropriate extension or CLion if you are used\nto the JetBrains IDEs."),(0,i.kt)("h2",{id:"git"},"git"),(0,i.kt)("p",null,"I recommend you using some basic versioning for your code, even though you submit\nonly the sources on ",(0,i.kt)("em",{parentName:"p"},"aisa"),". There are specific reasons why I suggest it:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"if you build a ",(0,i.kt)("em",{parentName:"li"},"commit, tag and submit")," habit, you might be able to address\nsome of the smaller problems in your sources even before submission; more info\nin the ",(0,i.kt)("a",{parentName:"li",href:"#pre-commit"},"pre-commit section"))),(0,i.kt)("p",null,"In case you are planning to use git branches for separating different\nassignments and/or merge requests I suggest you to keep specifications and\nskeletons on your default branch, since ",(0,i.kt)("em",{parentName:"p"},"frag")," on ",(0,i.kt)("em",{parentName:"p"},"aisa")," automatically downloads\neverything that is not present and by that can create conflicts when switching\nbranches."),(0,i.kt)("admonition",{title:"Commit conventions",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"When creating smaller and well defined commits, you can more easily argue about\ncorrectness of your implementation and also identify bugs, since they are better\ncontained.")),(0,i.kt)("p",null,"Since frag creates a lot of support files (majority of them are dotfiles, i.e.\nhidden files), I recommend you to use following\n",(0,i.kt)("a",{parentName:"p",href:"pathname:///files/pb161/environment/gitignore"},"gitignore")," configuration that\nshould cover most of the scenarios."),(0,i.kt)("h3",{id:"pre-commit-link"},"pre-commit (",(0,i.kt)("a",{parentName:"h3",href:"https://pre-commit.com/"},"link"),")"),(0,i.kt)("p",null,'Pre-commit basically allows you to "check" your code before committing. It functions\nas a git hook, i.e. you want to make a commit, pre-commit checks it before-hand.'),(0,i.kt)("p",null,"In case of C++ there are few use-cases:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"formatting")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"linting")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"building and/or running tests, in case you feel like masochist"),(0,i.kt)("p",{parentName:"li"},"However this might be a challenging task to implement, since most of the tasks\nare published from the beginning."))),(0,i.kt)("p",null,"In case of formatting and linting, there are already existing hooks (there is a\nlist of supported ones on the page), but there is also an option for you setting\nit up yourself (it is just a matter of specifying command and files it should run\non)."),(0,i.kt)("admonition",{title:"Formatting",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"For formatting you can the following ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/pre-commit/mirrors-clang-format#using-clang-format-with-pre-commit"},"git hook"),"."),(0,i.kt)("p",{parentName:"admonition"},"This hook follows the formatting conventions defined by the ",(0,i.kt)("inlineCode",{parentName:"p"},".clang-format")," file\nthat is looked up recursively all the way to the root of the filesystem, therefore\nit is ideal to keep it in the root of the git repository."),(0,i.kt)("p",{parentName:"admonition"},"You can look up the different codestyles ",(0,i.kt)("a",{parentName:"p",href:"https://gitlab.fi.muni.cz/pb071/codestyles"},"here"),".")),(0,i.kt)("h2",{id:"testing"},"Testing"),(0,i.kt)("p",null,"I have tried 2 frameworks for testing, one of them will be probably showcased in\nlectures. If you have not picked one yet, you can take an inspiration from the\nfollowing."),(0,i.kt)("h3",{id:"catch2"},"catch2"),(0,i.kt)("p",null,"It is quite popular, only one header-file, also might be easier to set up."),(0,i.kt)("p",null,"Might feel slow to compile, this can be addressed by having one object file with\nprecompiled ",(0,i.kt)("inlineCode",{parentName:"p"},"main")," for tests, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},'/* File: catch_main.cpp\n * Compile it with: g++ $(CXXFLAGS) -c catch_main.cpp\n *\n * Once you have source file with tests, e.g. test_something.cpp, compile it in\n * a similar fashion: g++ $(CXXFLAGS) -c test_something.cpp $(LDLIBS)\n *\n * And link them together:\n * g++ catch_main.o test_something.o -o test_something\n *\n * Now you can run ./test_something and if you change it, you do not need to compile\n * the main again.\n */\n#define CATCH_CONFIG_MAIN\n#include "catch.hpp"\n')),(0,i.kt)("h3",{id:"google-test"},"Google Test"),(0,i.kt)("p",null,"It is faster compared to catch2, even if you do not precompile the ",(0,i.kt)("inlineCode",{parentName:"p"},"main"),". Might\nbe more complicated to set up, since there are multiple files (it is not one header\nfile). Not very user friendly on ",(0,i.kt)("em",{parentName:"p"},"aisa"),". However can be installed through package\nmanager."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a6a48ea2.d5faeb42.js b/assets/js/a6a48ea2.d5faeb42.js new file mode 100644 index 0000000..dfc5c33 --- /dev/null +++ b/assets/js/a6a48ea2.d5faeb42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3618],{3905:(e,t,n)=>{n.d(t,{Zo:()=>f,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(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 i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},f=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,f=c(e,["components","mdxType","originalType","parentName"]),u=s(n),p=o,m=u["".concat(l,".").concat(p)]||u[p]||d[p]||a;return n?r.createElement(m,i(i({ref:t},f),{},{components:n})):r.createElement(m,i({ref:t},f))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[u]="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},8763:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15",slug:"aoc-2022/2nd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,c={permalink:"/blog/aoc-2022/2nd-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/02-week-2.md",source:"@site/blog/aoc-2022/02-week-2.md",title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15:00.000Z",formattedDate:"December 25, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:20.875,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"2nd week of Advent of Code '22 in Rust",description:"Surviving second week in Rust.",date:"2022-12-25T23:15",slug:"aoc-2022/2nd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"Sort the matrix diagonally",permalink:"/blog/leetcode/sort-diagonally"},nextItem:{title:"1st week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/1st-week"}},l={authorsImageUrls:[void 0]},s=[],f={toc:s},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the second week of ","[",(0,o.kt)("em",{parentName:"p"},"Advent of Code"),"]"," in Rust."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.c08b78c4.js b/assets/js/a6aa9e1f.c08b78c4.js new file mode 100644 index 0000000..760dd24 --- /dev/null +++ b/assets/js/a6aa9e1f.c08b78c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7294),l=a(6010),r=a(2263),i=a(833),o=a(5281),s=a(9058),m=a(9703),c=a(197),g=a(9985);function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,r.Z)(),{blogDescription:l,blogTitle:o,permalink:s}=t,m="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:m,description:l}),n.createElement(c.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:l}=e;return n.createElement(s.Z,{sidebar:l},n.createElement(g.Z,{items:a}),n.createElement(m.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(p,e),n.createElement(d,e))}},9703:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(5999),r=a(2244);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(r.Z,{permalink:i,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(9460),r=a(390);function i(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/assets/js/a7098721.ef506174.js b/assets/js/a7098721.ef506174.js new file mode 100644 index 0000000..1f7c58b --- /dev/null +++ b/assets/js/a7098721.ef506174.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1050],{6615:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a7d8226e.dabdb919.js b/assets/js/a7d8226e.dabdb919.js new file mode 100644 index 0000000..2998341 --- /dev/null +++ b/assets/js/a7d8226e.dabdb919.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[516],{4475:t=>{t.exports=JSON.parse('{"title":"Asymptotic Notation and Time Complexity","description":"Materials related to asymptotic notation and time complexity.\\n","slug":"/category/asymptotic-notation-and-time-complexity","permalink":"/ib002/category/asymptotic-notation-and-time-complexity","navigation":{"previous":{"title":"Vague postconditions and proving correctness of algorithms","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"},"next":{"title":"Time complexity of \u2039extend\u203a","permalink":"/ib002/time-complexity/extend"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a80747a0.4dc03a81.js b/assets/js/a80747a0.4dc03a81.js new file mode 100644 index 0000000..480b702 --- /dev/null +++ b/assets/js/a80747a0.4dc03a81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5824],{4464:e=>{e.exports=JSON.parse('{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/assets/js/ab2721d4.e0b371f9.js b/assets/js/ab2721d4.e0b371f9.js new file mode 100644 index 0000000..d89699b --- /dev/null +++ b/assets/js/ab2721d4.e0b371f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7755],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),f=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=f(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=f(r),d=o,m=p["".concat(l,".").concat(d)]||p[d]||s[d]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var f=2;f<a;f++)i[f]=r[f];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},861:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>c,toc:()=>f});var n=r(7462),o=(r(7294),r(3905));const a={title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14",slug:"aoc-2022/4th-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,c={permalink:"/blog/aoc-2022/4th-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/04-week-4.md",source:"@site/blog/aoc-2022/04-week-4.md",title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:15.175,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"4th week of Advent of Code '22 in Rust",description:"Surviving fourth week in Rust.",date:"2023-07-07T15:14",slug:"aoc-2022/4th-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"How can Copr help with broken dependencies",permalink:"/blog/2023/08/02/copr"},nextItem:{title:"3rd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/3rd-week"}},l={authorsImageUrls:[void 0]},f=[],u={toc:f},p="wrapper";function s(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the fourth week of ","[",(0,o.kt)("em",{parentName:"p"},"Advent of Code"),"]"," in Rust."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/af8b72a7.1e28998e.js b/assets/js/af8b72a7.1e28998e.js new file mode 100644 index 0000000..803d7f1 --- /dev/null +++ b/assets/js/af8b72a7.1e28998e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5658],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(r),d=o,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||a;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[m]="string"==typeof e?e:o,i[1]=c;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},3650:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},i=void 0,c={permalink:"/blog/2023/08/02/copr",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},l={authorsImageUrls:[void 0]},p=[],s={toc:p},m="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(m,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b0067e0a.68fd3778.js b/assets/js/b0067e0a.68fd3778.js new file mode 100644 index 0000000..faa2dd8 --- /dev/null +++ b/assets/js/b0067e0a.68fd3778.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1272],{2611:e=>{e.exports=JSON.parse('{"pluginId":"ib002","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"autogeneratedBar":[{"type":"link","label":"Introduction","href":"/ib002/","docId":"ib002-intro"},{"type":"category","label":"Algorithms and Correctness","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Vague postconditions and proving correctness of algorithms","href":"/ib002/algorithms-correctness/postcondition-ambiguity","docId":"algorithms-correctness/postcondition-ambiguity"}],"href":"/ib002/category/algorithms-and-correctness"},{"type":"category","label":"Asymptotic Notation and Time Complexity","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Time complexity of \u2039extend\u203a","href":"/ib002/time-complexity/extend","docId":"time-complexity/extend"}],"href":"/ib002/category/asymptotic-notation-and-time-complexity"},{"type":"category","label":"Recursion","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Recursion and backtracking with Robot Karel","href":"/ib002/recursion/karel-1","docId":"recursion/karel-1"},{"type":"link","label":"Introduction to dynamic programming","href":"/ib002/recursion/pyramid-slide-down","docId":"recursion/pyramid-slide-down"}],"href":"/ib002/category/recursion"},{"type":"category","label":"Red-Black Trees","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","href":"/ib002/rb-trees/applications","docId":"rb-trees/applications"},{"type":"link","label":"On the rules of the red-black tree","href":"/ib002/rb-trees/rules","docId":"rb-trees/rules"}],"href":"/ib002/category/red-black-trees"},{"type":"category","label":"Graphs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Iterative algorithms via iterators","href":"/ib002/graphs/iterative-and-iterators","docId":"graphs/iterative-and-iterators"},{"type":"link","label":"Distance boundaries from BFS tree on undirected graphs","href":"/ib002/graphs/bfs-tree","docId":"graphs/bfs-tree"}],"href":"/ib002/category/graphs"}]},"docs":{"algorithms-correctness/postcondition-ambiguity":{"id":"algorithms-correctness/postcondition-ambiguity","title":"Vague postconditions and proving correctness of algorithms","description":"Debugging and testing with precise postconditions.\\n","sidebar":"autogeneratedBar"},"graphs/bfs-tree":{"id":"graphs/bfs-tree","title":"Distance boundaries from BFS tree on undirected graphs","description":"Short explanation of distance boundaries deduced from a BFS tree.\\n","sidebar":"autogeneratedBar"},"graphs/iterative-and-iterators":{"id":"graphs/iterative-and-iterators","title":"Iterative algorithms via iterators","description":"Iterative DFS using iterators.\\n","sidebar":"autogeneratedBar"},"ib002-intro":{"id":"ib002-intro","title":"Introduction","description":"In this part you can find \u201crandom\u201d additional materials I have written over the","sidebar":"autogeneratedBar"},"rb-trees/applications":{"id":"rb-trees/applications","title":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","description":"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\\n","sidebar":"autogeneratedBar"},"rb-trees/rules":{"id":"rb-trees/rules","title":"On the rules of the red-black tree","description":"Shower thoughts on the rules of the red-black tree.\\n","sidebar":"autogeneratedBar"},"recursion/karel-1":{"id":"recursion/karel-1","title":"Recursion and backtracking with Robot Karel","description":"A problem with too many restrictions.\\n","sidebar":"autogeneratedBar"},"recursion/pyramid-slide-down":{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","sidebar":"autogeneratedBar"},"time-complexity/extend":{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","sidebar":"autogeneratedBar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b0291f37.5b91d377.js b/assets/js/b0291f37.5b91d377.js new file mode 100644 index 0000000..a304761 --- /dev/null +++ b/assets/js/b0291f37.5b91d377.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6097],{7085:e=>{e.exports=JSON.parse('{"name":"docusaurus-theme-search-algolia","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b25fbc58.c6b468d1.js b/assets/js/b25fbc58.c6b468d1.js new file mode 100644 index 0000000..3c20c03 --- /dev/null +++ b/assets/js/b25fbc58.c6b468d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9197],{5617:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/\ud83c\udfed","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2c263ce.01869630.js b/assets/js/b2c263ce.01869630.js new file mode 100644 index 0000000..17fe471 --- /dev/null +++ b/assets/js/b2c263ce.01869630.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6192],{8379:e=>{e.exports=JSON.parse('{"title":"Recursion","description":"Materials related to recursive algorithms and their time complexity.\\n","slug":"/category/recursion","permalink":"/ib002/category/recursion","navigation":{"previous":{"title":"Time complexity of \u2039extend\u203a","permalink":"/ib002/time-complexity/extend"},"next":{"title":"Recursion and backtracking with Robot Karel","permalink":"/ib002/recursion/karel-1"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b45dccf0.5fcb5182.js b/assets/js/b45dccf0.5fcb5182.js new file mode 100644 index 0000000..7857adc --- /dev/null +++ b/assets/js/b45dccf0.5fcb5182.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9679],{8296:a=>{a.exports=JSON.parse('{"label":"copr","permalink":"/blog/tags/copr","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b5a32f14.3c491fc9.js b/assets/js/b5a32f14.3c491fc9.js new file mode 100644 index 0000000..5ba6cdb --- /dev/null +++ b/assets/js/b5a32f14.3c491fc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2433],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),l=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(n),h=r,m=u["".concat(p,".").concat(h)]||u[h]||c[h]||a;return n?o.createElement(m,i(i({ref:t},d),{},{components:n})):o.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}h.displayName="MDXCreateElement"},9746:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=n(7462),r=(n(7294),n(3905));const a={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},i=void 0,s={permalink:"/blog/2023/08/02/copr",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},p={authorsImageUrls:[void 0]},l=[{value:"How does Copr repositories work?",id:"how-does-copr-repositories-work",level:2},{value:"My issue",id:"my-issue",level:2},{value:"How can Copr help?",id:"how-can-copr-help",level:2},{value:"Conclusion",id:"conclusion",level:2}],d={toc:l},u="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"),(0,r.kt)("p",null,"When I \u201creserved\u201d my VPS",(0,r.kt)("sup",{parentName:"p",id:"fnref-1-d4045e"},(0,r.kt)("a",{parentName:"sup",href:"#fn-1-d4045e",className:"footnote-ref"},"1"))," back in June '20, I slapped Fedora on it without\nthinking. I bet 99% of people would say that I'm crazy for doing such thing",(0,r.kt)("sup",{parentName:"p",id:"fnref-2-d4045e"},(0,r.kt)("a",{parentName:"sup",href:"#fn-2-d4045e",className:"footnote-ref"},"2")),",\n",(0,r.kt)("strong",{parentName:"p"},"BUT")," I've been using Fedora on my PCs for some time already and it felt very\nstable and natural to just use, even for VPS."),(0,r.kt)("p",null,"One of the first things I've done was setting up a mail server. You may guess\nwhat's the fun part about having a mail server\u2026 Yes, it's all the spam you\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\nservices. To battle this problem I chose to use\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/rspamd/rspamd"},"rspamd")," that had CentOS support, but someone\nhad a ",(0,r.kt)("a",{parentName:"p",href:"https://copr.fedorainfracloud.org/"},"Copr")," repository that I used to\ninstall it."),(0,r.kt)("h2",{id:"how-does-copr-repositories-work"},"How does Copr repositories work?"),(0,r.kt)("p",null,"If you have ever used Ubuntu, you might be familiar with the concept since it is\nvery close to ",(0,r.kt)("a",{parentName:"p",href:"https://help.ubuntu.com/community/PPA"},"PPAs"),"."),(0,r.kt)("p",null,"tl;dr of the whole process consists of"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"enabling the Copr repository, and"),(0,r.kt)("li",{parentName:"ol"},"installing the desired package.")),(0,r.kt)("p",null,"So in shell you would do"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"# dnf copr enable \u2039copr-repository\u203a\n# dnf install \u2039package-from-the-repository\u203a\n")),(0,r.kt)("p",null,"And\u2026 that's it! Nothing else needed! Simple, right? And literally same process\nas you would do for the PPA."),(0,r.kt)("admonition",{title:"AUR",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"On the other hand, if you are familiar with the archLinux, you definitely know\nAUR and what it can do for you. Copr repository is pretty similar, but the\npackages are prebuilt in Copr and Copr repositories can carry the required\ndependencies for said packages, which simplifies the distribution, and can even\nhelp with installing singular packages (when you just need the dependency, not\neverything).")),(0,r.kt)("h2",{id:"my-issue"},"My issue"),(0,r.kt)("p",null,"Now you might wonder how would I use it on my VPS. It's rather simple, once in\n6 months a new Fedora release comes out. And you need to upgrade to newer\nrelease\u2026 You don't need to do it right away and for such setup it probably isn't\neven recommended."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Fedora releases are supported for a year, i.e. they live 6 months till the next\nrelease and then another 6 months till another release."),(0,r.kt)("p",{parentName:"admonition"},"Some people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\nyour home server or in a similar setup, it might be a pretty good idea to\nfollow. I'm using the \u201clatest greatest\u201d, cause why not \ud83d\ude04"),(0,r.kt)("p",{parentName:"admonition"},"One way or another, you still need to bump the release every six months, unless\nyou'd bump 2 releases at once every year, which would be a decision, since, at\nleast I, cannot see any benefits in it\u2026 You don't go for \u201cstability\u201d, cause once\na year you switch to the latest release and then, before you bump, you use one\nyear old software, so you're not even using the latest.")),(0,r.kt)("p",null,"Fast-forward 2 years in the future, new Fedora release came out (October '22)\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026"),(0,r.kt)("h2",{id:"how-can-copr-help"},"How can Copr help?"),(0,r.kt)("p",null,"I have managed to find\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec"},"specfile")," for the\nrspamd package that they use for CentOS. There were some files apart from the\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\nto the Copr to\n",(0,r.kt)("a",{parentName:"p",href:"https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/"},"build"),"\nan RPM."),(0,r.kt)("p",null,"I have switched the previous Copr repository for rspamd with my own and happily\nproceeded with the upgrade."),(0,r.kt)("h2",{id:"conclusion"},"Conclusion"),(0,r.kt)("p",null,"Copr is heavily used for testing builds on the upstream with\n",(0,r.kt)("a",{parentName:"p",href:"https://packit.dev"},"Packit"),". However, as you can see, it is possible to use it\n",(0,r.kt)("strong",{parentName:"p"},"very well")," for packaging your own stuff and avoiding issues (such as the one\nI have described above), if need be."),(0,r.kt)("div",{className:"footnotes"},(0,r.kt)("hr",{parentName:"div"}),(0,r.kt)("ol",{parentName:"div"},(0,r.kt)("li",{parentName:"ol",id:"fn-1-d4045e"},(0,r.kt)("a",{parentName:"li",href:"https://vpsfree.cz"},"vpsFree.cz"),(0,r.kt)("a",{parentName:"li",href:"#fnref-1-d4045e",className:"footnote-backref"},"\u21a9")),(0,r.kt)("li",{parentName:"ol",id:"fn-2-d4045e"},"Even though I've been running archLinux on some Raspberry Pi's and also\non one of my \u201chome servers\u201d, before getting the VPS. You could say I like\nto live on the edge\u2026",(0,r.kt)("a",{parentName:"li",href:"#fnref-2-d4045e",className:"footnote-backref"},"\u21a9")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b9b1ccdc.859f8a18.js b/assets/js/b9b1ccdc.859f8a18.js new file mode 100644 index 0000000..3eb529c --- /dev/null +++ b/assets/js/b9b1ccdc.859f8a18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9044],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),m=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},s=function(e){var t=m(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=m(a),d=r,h=u["".concat(l,".").concat(d)]||u[d]||c[d]||o;return a?n.createElement(h,i(i({ref:t},s),{},{components:a})):n.createElement(h,i({ref:t},s))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[u]="string"==typeof e?e:r,i[1]=p;for(var m=2;m<o;m++)i[m]=a[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},284:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>p,toc:()=>m});var n=a(7462),r=(a(7294),a(3905));const o={slug:"cams",title:"Practice exam C",description:"Stalking cars\u2026\n",last_update:{date:new Date("2023-05-07T00:00:00.000Z")}},i="Watching Cams",p={unversionedId:"pexam/c-cams",id:"pexam/c-cams",title:"Practice exam C",description:"Stalking cars\u2026\n",source:"@site/pb071/pexam/c-cams.md",sourceDirName:"pexam",slug:"/pexam/cams",permalink:"/pb071/pexam/cams",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/pexam/c-cams.md",tags:[],version:"current",lastUpdatedAt:1683417600,formattedLastUpdatedAt:"May 7, 2023",frontMatter:{slug:"cams",title:"Practice exam C",description:"Stalking cars\u2026\n",last_update:{date:"2023-05-07T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Practice exam B",permalink:"/pb071/pexam/garbage_collect"},next:{title:"Submitting merge requests",permalink:"/pb071/mr"}},l={},m=[{value:"Format of the input file",id:"format-of-the-input-file",level:2},{value:"Examples",id:"examples",level:4},{value:"Format of the output",id:"format-of-the-output",level:2},{value:"Example usage",id:"example-usage",level:2},{value:"Requirements and notes",id:"requirements-and-notes",level:2}],s={toc:m},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"watching-cams"},"Watching Cams"),(0,r.kt)("admonition",{title:"Exam environment",type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"During the exam you will be provided with a barebone ",(0,r.kt)("em",{parentName:"li"},"exam session")," on the\n",(0,r.kt)("em",{parentName:"li"},"faculty computers"),"."),(0,r.kt)("li",{parentName:"ul"},"In browser you are only allowed to have the following tabs open:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.cppreference.com"},"C documentation")),(0,r.kt)("li",{parentName:"ul"},"page containing the assignment"))),(0,r.kt)("li",{parentName:"ul"},"You ",(0,r.kt)("strong",{parentName:"li"},"are not")," allowed to use your own source code, e.g. prepared beforehand\nor from the seminars."),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("strong",{parentName:"li"},"5 minutes")," to read through the assignment and ask any follow-up\nquestions should be there something unclear."),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("strong",{parentName:"li"},"60 minutes")," to work on the assignment, afterward your work will be\ndiscussed with your seminar tutor."))),(0,r.kt)("p",null,"Your task is to write a program ",(0,r.kt)("inlineCode",{parentName:"p"},"cams")," that will be processing input from the\ncams that are capable of identifying license plates on the cars and then\nprint out summary based on the input data. Your contributions to the society are\nvery much appreciated and may (or may not) be used for (each or none) of the\nfollowing purposes",(0,r.kt)("sup",{parentName:"p",id:"fnref-1"},(0,r.kt)("a",{parentName:"sup",href:"#fn-1",className:"footnote-ref"},"1")),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"stalking people leaving and coming back home,"),(0,r.kt)("li",{parentName:"ul"},"retroactively making people pay for the parking,"),(0,r.kt)("li",{parentName:"ul"},"providing evidence of people speeding on highways,"),(0,r.kt)("li",{parentName:"ul"},"tracking people that don't pay tolls, or"),(0,r.kt)("li",{parentName:"ul"},"convict employees leaving the work prematurely.")),(0,r.kt)("h2",{id:"format-of-the-input-file"},"Format of the input file"),(0,r.kt)("p",null,"Input for your program consists of the data from the cameras. You will be given\nthe data from the cameras as a path to a file and user should also be able to\nspecify ",(0,r.kt)("inlineCode",{parentName:"p"},"-")," (i.e. ",(0,r.kt)("inlineCode",{parentName:"p"},"stdin"),") as the path."),(0,r.kt)("p",null,"Each \u201cscan\u201d (i.e. reading) of the cameras consists of the following data:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("em",{parentName:"p"},"camera ID"),": non-negative integer identifying a camera")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("em",{parentName:"p"},"plate"),": string of unknown length that can consist of any characters apart\nfrom whitespace")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("em",{parentName:"p"},"timestamp"),": date and time of the scan as an unsigned integer (represented as\na UNIX time)"),(0,r.kt)("admonition",{parentName:"li",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"When programming on UN","*","X(-like) systems, you can assume that the ",(0,r.kt)("inlineCode",{parentName:"p"},"time_t"),"\nstructure from the system header ",(0,r.kt)("inlineCode",{parentName:"p"},"time.h")," ",(0,r.kt)("strong",{parentName:"p"},"is")," the ",(0,r.kt)("inlineCode",{parentName:"p"},"unsigned int")," that you\nare provided in the input file.")))),(0,r.kt)("p",null,"And they are compiled into one reading such as:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"camera_ID: plate timestamp\n")),(0,r.kt)("p",null,"There should be always ",(0,r.kt)("strong",{parentName:"p"},"at least one")," space in between each part of the\nreading. Readings are separated by the commas, which may, but don't have to, be\naccompanied by whitespace around."),(0,r.kt)("h4",{id:"examples"},"Examples"),(0,r.kt)("p",null,"Few examples of the data from the cameras follow"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"10: ABC-12-34 1664608712, 289: XYZ-98-76 1665416417,\n25: ABC-12-34 1633078256 , 42: TryToCatchMe 1671602419,\n11: EL9-987 1679541338 ,2 : Foo-666 1683170082,42: YourMum 1683170082,\n42: TryToCatchMe 1671602419 , 1234: TryToCatchMe 1671602419,\n19: ABC-12-34 1664659649, 69:YouShould-not-pLaCe-4ny-expectations%on^the(input 1680307994,\n9 : 9B9-161 1665416417 , 10: 1a1-999 1671602419,1:lmao 1633078256,\n16: ABC-12-34 1664609012\n")),(0,r.kt)("h2",{id:"format-of-the-output"},"Format of the output"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"All the examples consider using data from the example of the input.")),(0,r.kt)("p",null,"You are expected to print out the dates and cameras that has captured the\nlicense plate for each of them (in a sorted fashion)."),(0,r.kt)("p",null,"If there are multiple scans present and the timespan (i.e. time difference\nbetween the scans is bigger than 60 minutes, you should separate them by a\nnewline). For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"*** ABC-12-34 ***\n 25: Fri Oct 1 10:50:56 2021\n\n 10: Sat Oct 1 09:18:32 2022\n 16: Sat Oct 1 09:23:32 2022\n\n 19: Sat Oct 1 23:27:29 2022\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Since you are given the timestamp in a ",(0,r.kt)("inlineCode",{parentName:"p"},"time_t")," compatible type on UN","*","X, you\ncan safely use ",(0,r.kt)("inlineCode",{parentName:"p"},"ctime(3)")," for printing the timestamp as a ",(0,r.kt)("em",{parentName:"p"},"human readable")," time\nwhen outputting the date and time.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For a better readability you can include one more newline after the last line\nof the output.")),(0,r.kt)("h2",{id:"example-usage"},"Example usage"),(0,r.kt)("p",null,"You can also have a look at example usage of your program. We can run your\nprogram from the shell like"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ ./cams example_1.txt\n")),(0,r.kt)("p",null,"And it will produce an output:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"*** ABC-12-34 ***\n 25: Fri Oct 1 10:50:56 2021\n\n 10: Sat Oct 1 09:18:32 2022\n 16: Sat Oct 1 09:23:32 2022\n\n 19: Sat Oct 1 23:27:29 2022\n\n*** EL9-987 ***\n 11: Thu Mar 23 04:15:38 2023\n\n*** Foo-666 ***\n 2: Thu May 4 05:14:42 2023\n\n*** TryToCatchMe ***\n 42: Wed Dec 21 07:00:19 2022\n 42: Wed Dec 21 07:00:19 2022\n 1234: Wed Dec 21 07:00:19 2022\n\n*** XYZ-98-76 ***\n 289: Mon Oct 10 17:40:17 2022\n\n*** YouShould-not-pLaCe-4ny-expectations%on^the(input ***\n 69: Sat Apr 1 02:13:14 2023\n\n*** YourMum ***\n 42: Thu May 4 05:14:42 2023\n")),(0,r.kt)("h2",{id:"requirements-and-notes"},"Requirements and notes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Define ",(0,r.kt)("strong",{parentName:"li"},"structures")," (and ",(0,r.kt)("strong",{parentName:"li"},"enumerations"),", if applicable) for the parsed\ninformation from the files."),(0,r.kt)("li",{parentName:"ul"},"For keeping the \u201crecords\u201d, use some ",(0,r.kt)("strong",{parentName:"li"},"dynamic")," data structure.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Don't forget to consider pros and cons of using ",(0,r.kt)("em",{parentName:"li"},"specific")," data structures\nbefore going through implementing."))),(0,r.kt)("li",{parentName:"ul"},"You ",(0,r.kt)("strong",{parentName:"li"},"are not required")," to produce 1:1 output to the provided examples, they\nare just a hint to not waste your time tinkering with a user experience."),(0,r.kt)("li",{parentName:"ul"},"If any of the operations on the input files should fail,\n",(0,r.kt)("strong",{parentName:"li"},"you are expected to")," handle the situation ",(0,r.kt)("em",{parentName:"li"},"accordingly"),"."),(0,r.kt)("li",{parentName:"ul"},"Failures of any other common functions (e.g. functions used for memory\nmanagement) should be handled in ",(0,r.kt)("strong",{parentName:"li"},"the same way")," as they were in the\nhomeworks and seminars."),(0,r.kt)("li",{parentName:"ul"},"Your program ",(0,r.kt)("strong",{parentName:"li"},"must free")," all the resources before exiting.")),(0,r.kt)("div",{className:"footnotes"},(0,r.kt)("hr",{parentName:"div"}),(0,r.kt)("ol",{parentName:"div"},(0,r.kt)("li",{parentName:"ol",id:"fn-1"},"Subject to NDA.",(0,r.kt)("a",{parentName:"li",href:"#fnref-1",className:"footnote-backref"},"\u21a9")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb882650.671a659f.js b/assets/js/bb882650.671a659f.js new file mode 100644 index 0000000..798c168 --- /dev/null +++ b/assets/js/bb882650.671a659f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8091],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),f=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=f(e.components);return n.createElement(c.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=f(r),p=o,m=d["".concat(c,".").concat(p)]||d[p]||s[p]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=p;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var f=2;f<a;f++)i[f]=r[f];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},6974:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>f});var n=r(7462),o=(r(7294),r(3905));const a={title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00",slug:"aoc-2022/3rd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,l={permalink:"/blog/aoc-2022/3rd-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/03-week-3.md",source:"@site/blog/aoc-2022/03-week-3.md",title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00:00.000Z",formattedDate:"July 6, 2023",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:11.565,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00",slug:"aoc-2022/3rd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"},nextItem:{title:"Sort the matrix diagonally",permalink:"/blog/leetcode/sort-diagonally"}},c={authorsImageUrls:[void 0]},f=[],u={toc:f},d="wrapper";function s(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the third week of ","[",(0,o.kt)("em",{parentName:"p"},"Advent of Code"),"]"," in Rust."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/be4da062.4dfd3eed.js b/assets/js/be4da062.4dfd3eed.js new file mode 100644 index 0000000..47cd589 --- /dev/null +++ b/assets/js/be4da062.4dfd3eed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6498],{4436:e=>{e.exports=JSON.parse('{"label":"time complexity","permalink":"/ib002/tags/time-complexity","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","permalink":"/ib002/time-complexity/extend"}]}')}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.05fc7105.js b/assets/js/c4f5d8e4.05fc7105.js new file mode 100644 index 0000000..95ab034 --- /dev/null +++ b/assets/js/c4f5d8e4.05fc7105.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4195],{3261:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(7294),r=n(6010),l=n(2263),o=n(7452),c=n(7462);const i={features:"features_t9lD",featureSvg:"featureSvg_GfXr"},s=[{title:"About Me",description:a.createElement("p",null,"I'm working in Red Hat in the"," ",a.createElement("a",{href:"https://github.com/packit"},"Packit team")," and studying at"," ",a.createElement("a",{href:"https://fi.muni.cz"},"FI MUNI")," while also tutoring some courses there.")},{title:"Content",description:a.createElement(a.Fragment,null,"On this page you can find my blog or unofficial materials I have written over the course of teaching multiple courses at the FI.")},{title:"Mastodon",description:a.createElement(a.Fragment,null,"Feel free to contact me on any of the following Mastodon accounts:"," ",a.createElement("a",{rel:"me",href:"https://fosstodon.org/@m4tt_314"},"Fosstodon")," ","or"," ",a.createElement("a",{rel:"me",href:"https://hachyderm.io/@m4tt_314"},"Hachyderm.io"))}];function m(e){let{title:t,description:n}=e;return a.createElement("div",{className:(0,r.Z)("col col--4")},a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,t),a.createElement("p",null,n)))}function u(){return a.createElement("section",{className:i.features},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},s.map(((e,t)=>a.createElement(m,(0,c.Z)({key:t},e)))))))}const h={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function f(){const{siteConfig:e}=(0,l.Z)();return a.createElement("header",{className:(0,r.Z)("hero hero--primary",h.heroBanner)},a.createElement("div",{className:"container"},a.createElement("h1",{className:"hero__title"},e.title),a.createElement("p",{className:"hero__subtitle"},e.tagline)))}function d(){const{siteConfig:e}=(0,l.Z)();return a.createElement(o.Z,{title:`${e.title}`,description:"mf's blog and additional materials for courses at \u03c6"},a.createElement(f,null),a.createElement("main",null,a.createElement(u,null)))}}}]); \ No newline at end of file diff --git a/assets/js/c8cbffbd.a55be3a0.js b/assets/js/c8cbffbd.a55be3a0.js new file mode 100644 index 0000000..a33ba7d --- /dev/null +++ b/assets/js/c8cbffbd.a55be3a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9814],{4166:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"pb161"}')}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.6c86d4f9.js b/assets/js/ccc49370.6c86d4f9.js new file mode 100644 index 0000000..67c3598 --- /dev/null +++ b/assets/js/ccc49370.6c86d4f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6103],{5203:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(6010),r=n(833),o=n(5281),i=n(9460),c=n(9058),s=n(390),m=n(7462),d=n(5999),u=n(2244);function f(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function g(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(9407);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:g,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.Z,{toc:r,minHeadingLevel:g,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(f,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(g,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),r=n(6010),o=n(3743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(7462),l=n(7294),r=n(6668);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,r.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const f=l.memo(u);function g(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...g}=e;const v=(0,r.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(f,(0,a.Z)({toc:b,className:n,linkClassName:c},g))}}}]); \ No newline at end of file diff --git a/assets/js/cfa2b263.c19c407b.js b/assets/js/cfa2b263.c19c407b.js new file mode 100644 index 0000000..bfdac66 --- /dev/null +++ b/assets/js/cfa2b263.c19c407b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3086],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),d=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=d(n),u=i,h=m["".concat(l,".").concat(u)]||m[u]||c[u]||o;return n?a.createElement(h,r(r({ref:t},p),{},{components:n})):a.createElement(h,r({ref:t},p))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var d=2;d<o;d++)r[d]=n[d];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},6031:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var a=n(7462),i=(n(7294),n(3905));const o={title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15",slug:"leetcode/sort-diagonally",authors:"mf",tags:["cpp","leetcode","iterators"],hide_table_of_contents:!1},r=void 0,s={permalink:"/blog/leetcode/sort-diagonally",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/leetcode/sort-matrix-diagonally.md",source:"@site/blog/leetcode/sort-matrix-diagonally.md",title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15:00.000Z",formattedDate:"March 4, 2023",tags:[{label:"cpp",permalink:"/blog/tags/cpp"},{label:"leetcode",permalink:"/blog/tags/leetcode"},{label:"iterators",permalink:"/blog/tags/iterators"}],readingTime:16.99,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Sort the matrix diagonally",description:"Compiler assisted development.",date:"2023-03-04T23:15",slug:"leetcode/sort-diagonally",authors:"mf",tags:["cpp","leetcode","iterators"],hide_table_of_contents:!1},prevItem:{title:"3rd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/3rd-week"},nextItem:{title:"2nd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/2nd-week"}},l={authorsImageUrls:[void 0]},d=[{value:"Problem description",id:"problem-description",level:2},{value:"Example",id:"example",level:3},{value:"Skeleton and initial adjustments",id:"skeleton-and-initial-adjustments",level:2},{value:"Na\xefve solution",id:"na\xefve-solution",level:2},{value:"Implementing the <code>diagonals</code>",id:"implementing-the-diagonals",level:2},{value:"Iterating over diagonals",id:"iterating-over-diagonals",level:3},{value:"Implementing the iterator over diagonals",id:"implementing-the-iterator-over-diagonals",level:3},{value:"Implementing the <code>diagonal</code> itself",id:"implementing-the-diagonal-itself",level:2},{value:"Implementing <code>diagonal_iter</code>",id:"implementing-diagonal_iter",level:3}],p={toc:d},m="wrapper";function c(e){let{components:t,...n}=e;return(0,i.kt)(m,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Let's try to solve one of the LeetCode challenges in easy and hard mode at the\nsame time."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Link to the problem: ",(0,i.kt)("a",{parentName:"li",href:"https://leetcode.com/problems/sort-the-matrix-diagonally/"},"https://leetcode.com/problems/sort-the-matrix-diagonally/"))),(0,i.kt)("h2",{id:"problem-description"},"Problem description"),(0,i.kt)("p",null,"A ",(0,i.kt)("strong",{parentName:"p"},"matrix diagonal")," is a diagonal line of cells starting from some cell in\neither the topmost row or leftmost column and going in the bottom-right direction\nuntil reaching the matrix's end. For example, the ",(0,i.kt)("strong",{parentName:"p"},"matrix diagonal")," starting\nfrom ",(0,i.kt)("inlineCode",{parentName:"p"},"mat[2][0]"),", where ",(0,i.kt)("inlineCode",{parentName:"p"},"mat")," is a ",(0,i.kt)("inlineCode",{parentName:"p"},"6 x 3")," matrix, includes cells ",(0,i.kt)("inlineCode",{parentName:"p"},"mat[2][0]"),",\n",(0,i.kt)("inlineCode",{parentName:"p"},"mat[3][1]"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"mat[4][2]"),"."),(0,i.kt)("p",null,"Given an ",(0,i.kt)("inlineCode",{parentName:"p"},"m x n")," matrix ",(0,i.kt)("inlineCode",{parentName:"p"},"mat")," of integers, sort each matrix diagonal in ascending\norder and return the resulting matrix."),(0,i.kt)("h3",{id:"example"},"Example"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://assets.leetcode.com/uploads/2020/01/21/1482_example_1_2.png",alt:"Image describing the problem"})),(0,i.kt)("h2",{id:"skeleton-and-initial-adjustments"},"Skeleton and initial adjustments"),(0,i.kt)("p",null,"We are given the following skeleton for the C++ and the given challenge:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"class Solution {\npublic:\n vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {\n \n }\n};\n")),(0,i.kt)("p",null,"The task is to sort the passed matrix diagonally and then return it. First of all,\nI don't like to solve this in a web browser, so we'll need to adjust it accordingly\nfor running it locally. We'll start by including the ",(0,i.kt)("inlineCode",{parentName:"p"},"vector")," header and using\nfully-qualified namespaces",(0,i.kt)("sup",{parentName:"p",id:"fnref-1-b611be"},(0,i.kt)("a",{parentName:"sup",href:"#fn-1-b611be",className:"footnote-ref"},"1"))," and also adding few tests:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"#include <cassert>\n#include <vector>\n\nusing matrix = std::vector<std::vector<int>>;\n\nclass Solution {\npublic:\n matrix diagonalSort(matrix& mat)\n {\n }\n};\n\nstatic void test_case_1()\n{\n // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]\n // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]\n\n Solution s;\n assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },\n std::vector { 2, 2, 1, 2 },\n std::vector { 1, 1, 1, 2 } })\n == std::vector { std::vector { 1, 1, 1, 1 },\n std::vector { 1, 2, 2, 2 },\n std::vector { 1, 2, 3, 3 } }));\n}\n\nstatic void test_case_2()\n{\n // Input: mat =\n // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]\n // Output:\n // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]\n\n Solution s;\n assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },\n std::vector { 23, 55, 17, 45, 15, 52 },\n std::vector { 75, 31, 36, 44, 58, 8 },\n std::vector { 22, 27, 33, 25, 68, 4 },\n std::vector { 84, 28, 14, 11, 5, 50 } })\n == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },\n std::vector { 11, 11, 25, 45, 8, 69 },\n std::vector { 14, 23, 25, 44, 58, 15 },\n std::vector { 22, 27, 31, 36, 50, 66 },\n std::vector { 84, 28, 75, 33, 55, 68 } }));\n}\n\nint main()\n{\n test_case_1();\n test_case_2();\n\n return 0;\n}\n")),(0,i.kt)("p",null,"We need to return the matrix, but we're given a reference to the input matrix. We\ncan easily abuse the C++ here and just switch the reference to value, this way\nthe matrix will be copied when passed to the function, we can sort the copy and\njust return it back. And we also get yelled by the compiler for the fact that the\nmethod doesn't return anything yet, so to make it \u201cshut up\u201d we will just return\nthe input for now:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},"- matrix diagonalSort(matrix& mat)\n+ matrix diagonalSort(matrix mat)\n {\n+ return mat;\n }\n")),(0,i.kt)("p",null,"Now, we get the copy and we're good to go."),(0,i.kt)("h2",{id:"na\xefve-solution"},"Na\xefve solution"),(0,i.kt)("p",null,"As you may know, C++ offers a plethora of functions that can be used to your\nadvantage, given that you know how to \u201cbend\u201d the data structures accordingly."),(0,i.kt)("p",null,"What does that mean for us? Well, we have an ",(0,i.kt)("inlineCode",{parentName:"p"},"std::sort"),", we can use it, right?\nLet's have a look at it:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"template< class RandomIt >\nvoid sort( RandomIt first, RandomIt last );\n")),(0,i.kt)("p",null,"This overload is more than we need. What does it do? It just sorts the elements\nin the range ",(0,i.kt)("inlineCode",{parentName:"p"},"[first, last)")," using ",(0,i.kt)("inlineCode",{parentName:"p"},"operator<")," on them. We can't sort the whole\nmatrix using this, but\u2026 we can sort just \xbbone\xab diagonal without doing much work\non our end."),(0,i.kt)("p",null,"What is the ",(0,i.kt)("inlineCode",{parentName:"p"},"RandomIt")," type though? If we look more into the documentation, we\ncan easily find the requirements for it and also learn that it's a ",(0,i.kt)("em",{parentName:"p"},"random access"),"\n",(0,i.kt)("em",{parentName:"p"},"iterator")," and allows swapping its values at the same time."),(0,i.kt)("admonition",{title:"Random access iterator",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"What is the ",(0,i.kt)("em",{parentName:"p"},"random access iterator")," though? We can find it in a documentation\nand see the following description:"),(0,i.kt)("blockquote",{parentName:"admonition"},(0,i.kt)("p",{parentName:"blockquote"},"A ",(0,i.kt)("strong",{parentName:"p"},"LegacyRandomAccessIterator")," is a ",(0,i.kt)("a",{parentName:"p",href:"https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator"},"LegacyBidirectionalIterator"),"\nthat can be moved to point to any element in constant time.")),(0,i.kt)("p",{parentName:"admonition"},"After that we can see all the requirements for it being listed. I don't feel like\nreading them right now, so we will just use it and see where the compilation blows\nup, i.e. \u201c",(0,i.kt)("em",{parentName:"p"},"compiler-assisted development"),"\u201d",(0,i.kt)("sup",{parentName:"p",id:"fnref-2-b611be"},(0,i.kt)("a",{parentName:"sup",href:"#fn-2-b611be",className:"footnote-ref"},"2"))," if you will ;)")),(0,i.kt)("p",null,"Now we know that we can use ",(0,i.kt)("inlineCode",{parentName:"p"},"std::sort")," to sort the diagonal itself, but we also\nneed to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to\nsomeone else",(0,i.kt)("sup",{parentName:"p",id:"fnref-3-b611be"},(0,i.kt)("a",{parentName:"sup",href:"#fn-3-b611be",className:"footnote-ref"},"3")),". And that way we get"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"matrix diagonalSort(matrix mat)\n{\n // we iterate over the diagonals\n for (auto d : diagonals(mat)) {\n // and we sort each diagonal\n std::sort(d.begin(), d.end());\n }\n\n // we take the matrix by copy, so we can sort in-situ and return the copy\n // that we sorted\n return mat;\n}\n")),(0,i.kt)("p",null,"This solution looks very simple, doesn't it? Well, cause it is.\nLet's try compiling it:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]\n for (auto d : diagonals(mat)) {\n ^\nFound compiler error(s).\nmake: *** [makefile:14: tidy] Error 1\n")),(0,i.kt)("p",null,"OK, seems about right. We haven't implemented the ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals")," yet. And based on\nwhat we've written so far, we need a function or a class ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals")," that will\ngive us the diagonals we need."),(0,i.kt)("h2",{id:"implementing-the-diagonals"},"Implementing the ",(0,i.kt)("inlineCode",{parentName:"h2"},"diagonals")),(0,i.kt)("p",null,"Cool, so we need the function that will let us go through each and every diagonal\nin our matrix. We use the ",(0,i.kt)("em",{parentName:"p"},"for-range")," loop, so whatever we get back from the\n",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals")," must support ",(0,i.kt)("inlineCode",{parentName:"p"},".begin()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".end()"),". Since I am a masochist, we will\ndo such functionality for a matrix of any type, not just the ",(0,i.kt)("inlineCode",{parentName:"p"},"int")," from the challenge."),(0,i.kt)("p",null,"As I said, we need to be able to"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"construct the object"),(0,i.kt)("li",{parentName:"ul"},"get the beginning"),(0,i.kt)("li",{parentName:"ul"},"get the end (the \u201csentinel\u201d)")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"template <typename T>\nclass diagonals {\n using matrix_t = std::vector<std::vector<T>>;\n\n matrix_t& _matrix;\n\npublic:\n diagonals(matrix_t& m)\n : _matrix(m)\n {\n }\n diagonals_iter begin()\n {\n /* TODO */\n }\n diagonals_iter end()\n {\n /* TODO */\n }\n};\n")),(0,i.kt)("p",null,"Now we have a ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals")," that we can use to go through the diagonals. We haven't\nimplemented the core of it yet. Let's go through what we have for now."),(0,i.kt)("p",null,"We have a templated class with templated ",(0,i.kt)("inlineCode",{parentName:"p"},"T")," that is used as a placeholder for any\ntype we would store in the matrix. Because I'm lazy, I have defined the ",(0,i.kt)("inlineCode",{parentName:"p"},"matrix_t"),"\ntype that is a \u201cshortcut\u201d for ",(0,i.kt)("inlineCode",{parentName:"p"},"std::vector<std::vector<T>>"),", so I don't have to\ntype it out all the time. Of course, we need to store the matrix, we are given,\nas a private attribute. And then just have the constructor and the 2 methods we\nneed for the ",(0,i.kt)("em",{parentName:"p"},"for-range"),"."),(0,i.kt)("h3",{id:"iterating-over-diagonals"},"Iterating over diagonals"),(0,i.kt)("p",null,"Now that we have an object that will allow us to iterate through the diagonals,\nwe need to implement the iterating itself. We need to go through all of them, so\nwe have multiple options how to do so. I have decided to start from the \u201cmain\u201d\ndiagonal that starts at ",(0,i.kt)("inlineCode",{parentName:"p"},"(0, 0)")," index and then proceed with the diagonals starting\nin the first row, followed by the rest of the diagonals in the first column."),(0,i.kt)("p",null,"We need to be able to tell that we've iterated through all of them, and also we\nneed to know which diagonal is next. For that purpose we will pass the indices\nof the first cell on the diagonal. That way we can always tell how to move forward."),(0,i.kt)("p",null,"We will start by updating the ",(0,i.kt)("inlineCode",{parentName:"p"},"begin")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"end")," to reflect our choice accordingly."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }\ndiagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }\n")),(0,i.kt)("p",null,"For the ",(0,i.kt)("inlineCode",{parentName:"p"},"begin")," we return the first diagonal that starts at ",(0,i.kt)("inlineCode",{parentName:"p"},"(0, 0)"),". And because\nwe have decided to do the diagonals in the first column at the end, the first\ndiagonal that is not a valid one is the one at ",(0,i.kt)("inlineCode",{parentName:"p"},"(0, height)"),". Apart from the\nindices, we also need to pass reference to the matrix itself."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You may have noticed that we also include the diagonals that have length 1,\nspecifically the ones at ",(0,i.kt)("inlineCode",{parentName:"p"},"(0, height - 1)")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"(width - 1, 0)"),". We are implementing\nan iterator that ",(0,i.kt)("strong",{parentName:"p"},"should not")," care about the way it's being used. Therefore, we\ndon't care about the fact they don't need to be sorted.")),(0,i.kt)("p",null,"Cool, let's leave the iterator itself to someone else, right?",(0,i.kt)("sup",{parentName:"p",id:"fnref-4-b611be"},(0,i.kt)("a",{parentName:"sup",href:"#fn-4-b611be",className:"footnote-ref"},"4"))),(0,i.kt)("h3",{id:"implementing-the-iterator-over-diagonals"},"Implementing the iterator over diagonals"),(0,i.kt)("p",null,"We can start with a simple skeleton based on the information that we pass from\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals"),". Also to utilize the ",(0,i.kt)("inlineCode",{parentName:"p"},"matrix_t")," and also contain implementation\ndetails hidden away, we will put this code into the ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonals")," class."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"class diagonals_iter {\n matrix_t& m;\n std::size_t x;\n std::size_t y;\n\npublic:\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\n : m(matrix)\n , x(x)\n , y(y)\n {\n }\n};\n")),(0,i.kt)("p",null,"In this case we will be implementing a \u201csimple\u201d forward iterator, so we don't\nneed to implement a lot. Notably it will be:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"inequality operator (we need to know when we reach the end and have nothing to\niterate over)"),(0,i.kt)("li",{parentName:"ul"},"preincrementation operator (we need to be able to move around the iterable)"),(0,i.kt)("li",{parentName:"ul"},"dereference operator (we need to be able to retrieve the objects we iterate\nover)")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"class diagonals_iter {\n matrix_t& m;\n std::size_t x;\n std::size_t y;\n\npublic:\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\n : m(matrix)\n , x(x)\n , y(y)\n {\n }\n\n bool operator!=(const diagonals_iter& rhs) const\n {\n // iterators are not equal if they reference different matrices, or\n // their positions differ\n return m != rhs.m || x != rhs.x || y != rhs.y;\n }\n\n diagonals_iter& operator++()\n {\n if (y != 0) {\n // iterating through diagonals down the first column\n y++;\n return *this;\n }\n\n // iterating the diagonals along the first row\n x++;\n if (x == m.front().size()) {\n // switching to diagonals in the first column\n x = 0;\n y++;\n }\n\n return *this;\n }\n\n diagonal<T> operator*() const { return diagonal { m, x, y }; }\n};\n")),(0,i.kt)("p",null,"Let's go one-by-one. Inequality operator is rather simple, just compare iterator's\nattributes field-by-field. If you think about it, checking inequality of two 2D\nvectors may be a bit inefficient, therefore, we can swap around and check it as\na last thing."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},"- return m != rhs.m || x != rhs.x || y != rhs.y;\n+ return x != rhs.x || y != rhs.y || m != rhs.m;\n")),(0,i.kt)("p",null,"Preincrementation is where the magic happens. If you have a better look, you can\nsee two branches of this operation:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"y != 0")," (we're iterating over the diagonals in the first column)\nIn this case, we just bump the row and we're done."),(0,i.kt)("li",{parentName:"ol"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"y == 0")," (we're iterating over the diagonals in the first row)\nIn this case, we bump the column and check if we haven't gotten out of bounds,\ni.e. the end of the first row. If we get out of the bounds, we're continuing\nwith the second diagonal in the first column.")),(0,i.kt)("p",null,"Dereferencing the iterator must \u201cyield\u201d something. In our case it will be the\ndiagonal that we want to sort. For sorting we need just the iterators that can\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\nsomething else. In our case it will be a class called ",(0,i.kt)("inlineCode",{parentName:"p"},"diagonal"),"."),(0,i.kt)("h2",{id:"implementing-the-diagonal-itself"},"Implementing the ",(0,i.kt)("inlineCode",{parentName:"h2"},"diagonal")," itself"),(0,i.kt)("p",null,"After implementing the iterator over diagonals, we know that all we need to describe\na diagonal is the matrix itself and the \u201cstart\u201d of the diagonal (row and column).\nAnd we also know that the diagonal must provide some iterators for the ",(0,i.kt)("inlineCode",{parentName:"p"},"std::sort"),"\nfunction. We can start with the following skeleton:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"template <typename T>\nclass diagonal {\n using matrix_t = std::vector<std::vector<T>>;\n\n matrix_t& matrix;\n std::size_t x;\n std::size_t y;\n\npublic:\n diagonal(matrix_t& matrix, std::size_t x, std::size_t y)\n : matrix(matrix)\n , x(x)\n , y(y)\n {\n }\n\n diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }\n\n diagonal_iter end() const\n {\n auto max_x = matrix[y].size();\n auto max_y = matrix.size();\n\n // we need to find the distance in which we get out of bounds (either in\n // column or row)\n auto steps = std::min(max_x - x, max_y - y);\n\n return diagonal_iter { matrix, x + steps, y + steps };\n }\n};\n")),(0,i.kt)("p",null,"Initialization is rather simple, we just \u201ckeep\u201d the stuff we get, ",(0,i.kt)("inlineCode",{parentName:"p"},"begin")," is the\nsimplest, we just delegate."),(0,i.kt)("p",null,"In case of the ",(0,i.kt)("inlineCode",{parentName:"p"},"end"),", it gets more complicated. We need to know where is the \u201cend\u201d\nof the diagonal. Since ",(0,i.kt)("inlineCode",{parentName:"p"},"end")," should point to the first element \u201cafter\u201d the iterable,\nwe know that it's the first position of the iterator where either ",(0,i.kt)("inlineCode",{parentName:"p"},"y")," becomes\n",(0,i.kt)("inlineCode",{parentName:"p"},"matrix.size()")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"x")," becomes ",(0,i.kt)("inlineCode",{parentName:"p"},"matrix[y].size()"),". Also we are moving along diagonal,\nduh, therefore we can deduce the first \u201cposition\u201d afterwards by minimal amount of\nsteps to get out of the any column or row, hence ",(0,i.kt)("inlineCode",{parentName:"p"},"std::min(max_x - x, max_y - y)"),".\nFinal position is then computed simply by adding the steps to the beginning of\nthe diagonal."),(0,i.kt)("p",null,"Now we just need to finish the iterator for the diagonal itself and we're done."),(0,i.kt)("h3",{id:"implementing-diagonal_iter"},"Implementing ",(0,i.kt)("inlineCode",{parentName:"h3"},"diagonal_iter")),(0,i.kt)("p",null,"This part is the hardest from all we need to do. It's because of the requirements\nof the ",(0,i.kt)("inlineCode",{parentName:"p"},"std::sort")," that requires us to implement a ",(0,i.kt)("em",{parentName:"p"},"random access iterator"),". I have\nbriefly described it above, and \u201cin a nutshell\u201d it means that we need to implement\nan iterator that can move in constant time along the diagonal in any amount of\nsteps."),(0,i.kt)("p",null,"Let's go through all of the functionality that our iterator needs to support to\nbe used in ",(0,i.kt)("inlineCode",{parentName:"p"},"std::sort"),". We need the usual operations like:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"equality/inequality"),(0,i.kt)("li",{parentName:"ul"},"incrementation"),(0,i.kt)("li",{parentName:"ul"},"dereferencing")),(0,i.kt)("p",null,"We will also add all the types that our iterator uses with the category of the\niterator, i.e. what interface it supports:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"class diagonal_iter {\n // we need to keep reference to the matrix itself\n matrix_t& m;\n\n // we need to be able to tell our current position\n std::size_t x;\n std::size_t y;\n\npublic:\n using difference_type = std::ptrdiff_t;\n using value_type = T;\n using pointer = T*;\n using reference = T&;\n using iterator_category = std::random_access_iterator_tag;\n\n diagonal_iter(matrix_t& matrix,\n std::size_t x,\n std::size_t y)\n : m(matrix)\n , x(x)\n , y(y)\n {\n }\n\n bool operator==(const diagonal_iter& rhs) const\n {\n return x == rhs.x && y == rhs.y && m == rhs.m;\n }\n\n diagonal_iter& operator++()\n {\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\n // the same time\n x++;\n y++;\n return *this;\n }\n\n reference operator*() const { return m[y][x]; }\n};\n")),(0,i.kt)("p",null,"This is pretty similar to the previous iterator, but now we need to implement the\nremaining requirements of the ",(0,i.kt)("em",{parentName:"p"},"random access iterator"),". Let's see what those are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"decrementation - cause we need to be able to move backwards too, since ",(0,i.kt)("em",{parentName:"li"},"random "),(0,i.kt)("em",{parentName:"li"},"access iterator")," extends the interface of ",(0,i.kt)("em",{parentName:"li"},"bidirectional iterator")),(0,i.kt)("li",{parentName:"ul"},"moving the iterator in either direction by steps given as an integer"),(0,i.kt)("li",{parentName:"ul"},"being able to tell the distance between two iterators"),(0,i.kt)("li",{parentName:"ul"},"define an ordering on the iterators")),(0,i.kt)("p",null,"Let's fill them in:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"class diagonal_iter {\n // we need to keep reference to the matrix itself\n matrix_t& m;\n\n // we need to be able to tell our current position\n std::size_t x;\n std::size_t y;\n\npublic:\n using difference_type = std::ptrdiff_t;\n using value_type = T;\n using pointer = T*;\n using reference = T&;\n using iterator_category = std::random_access_iterator_tag;\n\n diagonal_iter(matrix_t& matrix,\n std::size_t x,\n std::size_t y)\n : m(matrix)\n , x(x)\n , y(y)\n {\n }\n\n bool operator==(const diagonal_iter& rhs) const\n {\n return x == rhs.x && y == rhs.y && m == rhs.m;\n }\n\n diagonal_iter& operator++()\n {\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\n // the same time\n x++;\n y++;\n return *this;\n }\n\n reference operator*() const { return m[y][x]; }\n\n // exactly opposite to the incrementation\n diagonal_iter operator--()\n {\n x--;\n y--;\n return *this;\n }\n\n // moving \u2039n\u203a steps back is same as calling decrementation \u2039n\u203a-times, so we\n // can just return a new iterator and subtract \u2039n\u203a from both coordinates in\n // the matrix\n diagonal_iter operator-(difference_type n) const\n {\n return diagonal_iter { m, x - n, y - n };\n }\n\n // here we assume that we are given two iterators on the same diagonal\n difference_type operator-(const diagonal_iter& rhs) const\n {\n assert(m == rhs.m);\n return x - rhs.x;\n }\n\n // counterpart of moving \u2039n\u203a steps backwards\n diagonal_iter operator+(difference_type n) const\n {\n return diagonal_iter { m, x + n, y + n };\n }\n\n // we compare the coordinates, and also assume that those 2 iterators are\n // lying on the same diagonal\n bool operator<(const diagonal_iter& rhs) const\n {\n assert(m == rhs.m);\n return x < rhs.x && y < rhs.y;\n }\n};\n")),(0,i.kt)("p",null,"At this point we could probably try and compile it, right? If we do so, we will\nget yelled at by a compiler for the following reasons:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\n __last = __next;\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here\n std::__unguarded_linear_insert(__i,\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__insertion_sort(__first, __first + int(_S_threshold), __comp);\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__final_insertion_sort(__first, __last, __comp);\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\n ^\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here\n std::sort(d.begin(), d.end());\n ^\nmatrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')\n matrix_t& m;\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]\n std::__unguarded_linear_insert(__i,\n ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__final_insertion_sort(__first, __last, __comp);\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\n ^\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here\n std::sort(d.begin(), d.end());\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]\n __unguarded_linear_insert(_RandomAccessIterator __last,\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\n __last = __cut;\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__introsort_loop(__first, __last,\n ^\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\n ^\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here\n std::sort(d.begin(), d.end());\n ^\nmatrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')\n matrix_t& m;\n ^\n")),(0,i.kt)("p",null,"That's a lot of noise, isn't it? Let's focus on the important parts:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\n\u2026\nmatrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')\n matrix_t& m;\n ^\n")),(0,i.kt)("p",null,"Ah! We have a reference in our iterator, and this prevents us from having a copy\nassignment operator (that is used \u201csomewhere\u201d in the sorting algorithm). Well\u2026\nLet's just wrap it!"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},"# we need to keep a different type than reference\n- matrix_t& m;\n+ std::reference_wrapper<matrix_t> m;\n\n# in comparison we need to get the reference out of the wrapper first\n- return x == rhs.x && y == rhs.y && m == rhs.m;\n+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();\n\n# same when we return a reference to the \u201ccell\u201d in the matrix\n- reference operator*() const { return m[y][x]; }\n+ reference operator*() const { return m.get()[y][x]; }\n\n# and finally in the assertions that we set for the \u201cdistance\u201d and \u201cless than\u201d\n- assert(m == rhs.m);\n+ assert(m.get() == rhs.m.get());\n")),(0,i.kt)("p",null,"We're done now! We have written an iterator over diagonals for a 2D ",(0,i.kt)("inlineCode",{parentName:"p"},"vector"),". You can have a look at the final result ",(0,i.kt)("a",{parentName:"p",href:"pathname:///files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp"},"here"),"."),(0,i.kt)("div",{className:"footnotes"},(0,i.kt)("hr",{parentName:"div"}),(0,i.kt)("ol",{parentName:"div"},(0,i.kt)("li",{parentName:"ol",id:"fn-1-b611be"},"just because I'm used to it and don't care about your opinion ;)",(0,i.kt)("a",{parentName:"li",href:"#fnref-1-b611be",className:"footnote-backref"},"\u21a9")),(0,i.kt)("li",{parentName:"ol",id:"fn-2-b611be"},"exercise at your own risk",(0,i.kt)("a",{parentName:"li",href:"#fnref-2-b611be",className:"footnote-backref"},"\u21a9")),(0,i.kt)("li",{parentName:"ol",id:"fn-3-b611be"},"me in 5 minutes in fact, but don't make me scared",(0,i.kt)("a",{parentName:"li",href:"#fnref-3-b611be",className:"footnote-backref"},"\u21a9")),(0,i.kt)("li",{parentName:"ol",id:"fn-4-b611be"},"me in the next section\u2026",(0,i.kt)("a",{parentName:"li",href:"#fnref-4-b611be",className:"footnote-backref"},"\u21a9")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d02d148d.0cb68506.js b/assets/js/d02d148d.0cb68506.js new file mode 100644 index 0000000..6da0c36 --- /dev/null +++ b/assets/js/d02d148d.0cb68506.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7780],{9221:i=>{i.exports=JSON.parse('{"label":"testing","permalink":"/ib002/tags/testing","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"algorithms-correctness/postcondition-ambiguity","title":"Vague postconditions and proving correctness of algorithms","description":"Debugging and testing with precise postconditions.\\n","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"}]}')}}]); \ No newline at end of file diff --git a/assets/js/d5ca4423.c7f8ab3b.js b/assets/js/d5ca4423.c7f8ab3b.js new file mode 100644 index 0000000..914a82f --- /dev/null +++ b/assets/js/d5ca4423.c7f8ab3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5126],{1032:i=>{i.exports=JSON.parse('{"label":"sorting","permalink":"/ib002/tags/sorting","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"algorithms-correctness/postcondition-ambiguity","title":"Vague postconditions and proving correctness of algorithms","description":"Debugging and testing with precise postconditions.\\n","permalink":"/ib002/algorithms-correctness/postcondition-ambiguity"}]}')}}]); \ No newline at end of file diff --git a/assets/js/d661cf04.70911e61.js b/assets/js/d661cf04.70911e61.js new file mode 100644 index 0000000..15fda6a --- /dev/null +++ b/assets/js/d661cf04.70911e61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6112],{8194:e=>{e.exports=JSON.parse('{"title":"Practice Exams","description":"Practice exams for training for the final exam.\\n","slug":"/category/practice-exams","permalink":"/pb071/category/practice-exams","navigation":{"previous":{"title":"10th seminar","permalink":"/pb071/bonuses/seminar-10"},"next":{"title":"Practice exam B","permalink":"/pb071/pexam/garbage_collect"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d675395f.567b4609.js b/assets/js/d675395f.567b4609.js new file mode 100644 index 0000000..b3d716e --- /dev/null +++ b/assets/js/d675395f.567b4609.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2741],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/d74d369f.ab677fcf.js b/assets/js/d74d369f.ab677fcf.js new file mode 100644 index 0000000..e6e0a31 --- /dev/null +++ b/assets/js/d74d369f.ab677fcf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9479],{2231:e=>{e.exports=JSON.parse('{"title":"Red-Black Trees","description":"Materials related to red-black trees.\\n","slug":"/category/red-black-trees","permalink":"/ib002/category/red-black-trees","navigation":{"previous":{"title":"Introduction to dynamic programming","permalink":"/ib002/recursion/pyramid-slide-down"},"next":{"title":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","permalink":"/ib002/rb-trees/applications"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d79dd549.ee10504b.js b/assets/js/d79dd549.ee10504b.js new file mode 100644 index 0000000..8206e63 --- /dev/null +++ b/assets/js/d79dd549.ee10504b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5169],{9261:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/red-hat","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/d7f7fb17.fd985da7.js b/assets/js/d7f7fb17.fd985da7.js new file mode 100644 index 0000000..d1205bd --- /dev/null +++ b/assets/js/d7f7fb17.fd985da7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1171],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),f=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=f(e.components);return o.createElement(l.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=f(r),d=n,m=s["".concat(l,".").concat(d)]||s[d]||u[d]||a;return r?o.createElement(m,i(i({ref:t},p),{},{components:r})):o.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:n,i[1]=c;for(var f=2;f<a;f++)i[f]=r[f];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}d.displayName="MDXCreateElement"},8049:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>f});var o=r(7462),n=(r(7294),r(3905));const a={title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45",slug:"aoc-2022/intro",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},i=void 0,c={permalink:"/blog/aoc-2022/intro",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/00-intro.md",source:"@site/blog/aoc-2022/00-intro.md",title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45:00.000Z",formattedDate:"December 14, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:8.665,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Advent of Code '22 in Rust",description:"Preparing for Advent of Code '22.",date:"2022-12-14T21:45",slug:"aoc-2022/intro",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"1st week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/1st-week"}},l={authorsImageUrls:[void 0]},f=[],p={toc:f},s="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(s,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Let's talk about the preparations for this year's ","[",(0,n.kt)("em",{parentName:"p"},"Advent of Code"),"]","."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d9adc206.4d3c59b2.js b/assets/js/d9adc206.4d3c59b2.js new file mode 100644 index 0000000..53bfd46 --- /dev/null +++ b/assets/js/d9adc206.4d3c59b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4252],{6297:e=>{e.exports=JSON.parse('{"label":"dynamic array","permalink":"/ib002/tags/dynamic-array","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"time-complexity/extend","title":"Time complexity of \u2039extend\u203a","description":"How to make inefficient algorithm unknowingly.\\n","permalink":"/ib002/time-complexity/extend"}]}')}}]); \ No newline at end of file diff --git a/assets/js/dadfcff0.3cd22a72.js b/assets/js/dadfcff0.3cd22a72.js new file mode 100644 index 0000000..e88cd3a --- /dev/null +++ b/assets/js/dadfcff0.3cd22a72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7624],{3095:e=>{e.exports=JSON.parse('{"label":"graphs","permalink":"/ib002/tags/graphs","allTagsPath":"/ib002/tags","count":2,"items":[{"id":"graphs/bfs-tree","title":"Distance boundaries from BFS tree on undirected graphs","description":"Short explanation of distance boundaries deduced from a BFS tree.\\n","permalink":"/ib002/graphs/bfs-tree"},{"id":"graphs/iterative-and-iterators","title":"Iterative algorithms via iterators","description":"Iterative DFS using iterators.\\n","permalink":"/ib002/graphs/iterative-and-iterators"}]}')}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.1c48be56.js b/assets/js/df203c0f.1c48be56.js new file mode 100644 index 0000000..53aae18 --- /dev/null +++ b/assets/js/df203c0f.1c48be56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9924],{1298:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var a=l(7294),n=l(6010),r=l(9960),s=l(8824),c=l(833),o=l(5281),i=l(5999),u=l(7452),g=l(197);function m(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.Z,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function d(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,i.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),d=(0,i.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(c.FG,{className:(0,n.Z)(o.k.wrapper.docsPages,o.k.page.docsTagDocListPage)},a.createElement(c.d,{title:d}),a.createElement(g.Z,{tag:"doc_tag_doc_list"}),a.createElement(u.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,d),a.createElement(r.Z,{href:t.allTagsPath},a.createElement(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(m,{key:e.id,doc:e})))))))))}},8824:(e,t,l)=>{l.d(t,{c:()=>i});var a=l(7294),n=l(2263);const r=["zero","one","two","few","many","other"];function s(e){return r.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.Z)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function i(){const e=o();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/dff2ebad.0c0a899d.js b/assets/js/dff2ebad.0c0a899d.js new file mode 100644 index 0000000..451cd7c --- /dev/null +++ b/assets/js/dff2ebad.0c0a899d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[146],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),m=p(n),u=o,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,l=new Array(i);l[0]=u;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[m]="string"==typeof e?e:o,l[1]=r;for(var p=2;p<i;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},577:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const i={title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15",slug:"aoc-2022/1st-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},l=void 0,r={permalink:"/blog/aoc-2022/1st-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/01-week-1.md",source:"@site/blog/aoc-2022/01-week-1.md",title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15:00.000Z",formattedDate:"December 15, 2022",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:12.4,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"1st week of Advent of Code '22 in Rust",description:"Surviving first week in Rust.",date:"2022-12-15T01:15",slug:"aoc-2022/1st-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"2nd week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/2nd-week"},nextItem:{title:"Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/intro"}},s={authorsImageUrls:[void 0]},p=[{value:"Day 1: Calorie Counting",id:"day-1-calorie-counting",level:2},{value:"Solution",id:"solution",level:3},{value:"Day 2: Rock Paper Scissors",id:"day-2-rock-paper-scissors",level:2},{value:"Solution",id:"solution-1",level:3},{value:"Day 3: Rucksack Reorganization",id:"day-3-rucksack-reorganization",level:2},{value:"Solution",id:"solution-2",level:3},{value:"Day 4: Camp Cleanup",id:"day-4-camp-cleanup",level:2},{value:"Solution",id:"solution-3",level:3},{value:"Day 5: Supply Stacks",id:"day-5-supply-stacks",level:2},{value:"Solution",id:"solution-4",level:3},{value:"Day 6: Tuning Trouble",id:"day-6-tuning-trouble",level:2},{value:"Solution",id:"solution-5",level:3},{value:"Day 7: No Space Left On Device",id:"day-7-no-space-left-on-device",level:2},{value:"Solution",id:"solution-6",level:3},{value:"Post Mortem",id:"post-mortem",level:2},{value:"<code>Rc<T></code> vs <code>Rc<RefCell<T>></code>",id:"rct-vs-rcrefcellt",level:3}],c={toc:p},m="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(m,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the first week of ",(0,o.kt)("a",{parentName:"p",href:"https://adventofcode.com"},(0,o.kt)("em",{parentName:"a"},"Advent of Code"))," in Rust."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you wish to have a look at the solutions, you can follow them on my ",(0,o.kt)("a",{parentName:"p",href:"https://gitlab.com/mfocko/advent-of-code-2022"},"GitLab"),".\nMore specifically in the ",(0,o.kt)("a",{parentName:"p",href:"https://gitlab.com/mfocko/advent-of-code-2022/-/tree/main/src/bin"},(0,o.kt)("inlineCode",{parentName:"a"},"/src/bin/")),".")),(0,o.kt)("p",null,"I will try to summarize my experience with using Rust for the AoC. Trying it out\nages ago, I believe it will be ",(0,o.kt)("em",{parentName:"p"},"pain and suffering"),", but we will see. For each\nday I will also try to give a tl;dr of the problem, so that you can better imagine\nthe relation to my woes or \ud83d\udc4d moments."),(0,o.kt)("h2",{id:"day-1-calorie-counting"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/1"},"Day 1: Calorie Counting")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"As the name suggests, we get the calories of the food contained in the elves\nbackpacks and we want to choose the elf that has the most food ;)")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Wakey wakey!")),(0,o.kt)("p",null,"Programming in Rust at 6am definitely hits. I've also forgotten to mention how I\nhandle samples. With each puzzle you usually get a sample input and expected\noutput. You can use them to verify that your solution works, or usually doesn't."),(0,o.kt)("p",null,"At first I've decided to put asserts into my ",(0,o.kt)("inlineCode",{parentName:"p"},"main"),", something like"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'assert_eq!(part_1(&sample), 24000);\ninfo!("Part 1: {}", part_1(&input));\n\nassert_eq!(part_2(&sample), 45000);\ninfo!("Part 2: {}", part_2(&input));\n')),(0,o.kt)("p",null,"However, once you get further, the sample input may take some time to run itself.\nSo in the end, I have decided to turn them into unit tests:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[cfg(test)]\nmod tests {\n use super::*;\n\n #[test]\n fn test_part_1() {\n let sample = parse_input("samples/day01.txt");\n assert_eq!(part_1(&sample), 24000);\n }\n\n #[test]\n fn test_part_2() {\n let sample = parse_input("samples/day01.txt");\n assert_eq!(part_2(&sample), 45000);\n }\n}\n')),(0,o.kt)("p",null,"And later on I have noticed, it's hard to tell the difference between the days,\nso I further renamed the ",(0,o.kt)("inlineCode",{parentName:"p"},"mod")," from generic ",(0,o.kt)("inlineCode",{parentName:"p"},"tests")," to reflect the days."),(0,o.kt)("p",null,"Also after finishing the first day puzzle, I have installed an ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mozilla/sccache"},(0,o.kt)("inlineCode",{parentName:"a"},"sccache"))," to\ncache the builds, so that the build time is lower, cause it was kinda unbearable."),(0,o.kt)("h3",{id:"solution"},"Solution"),(0,o.kt)("p",null,"Well, it's a pretty simple problem. You just take the input, sum the calories and\nfind the biggest one. However, if we try to generalize to more than the biggest\none, the fun appears. We have few options:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"keep all the calories, sort them, take what we need"),(0,o.kt)("li",{parentName:"ul"},"keep all the calories and use max heap"),(0,o.kt)("li",{parentName:"ul"},"use min heap and maintain at most N calories that we need")),(0,o.kt)("h2",{id:"day-2-rock-paper-scissors"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/2"},"Day 2: Rock Paper Scissors")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You want to know what score did you achieve while playing ",(0,o.kt)("em",{parentName:"p"},"Rock Paper Scissors"),".\nAnd then you want to be strategic about it.")),(0,o.kt)("p",null,"Apart from the technical details of the puzzle, it went relatively smooth."),(0,o.kt)("h3",{id:"solution-1"},"Solution"),(0,o.kt)("p",null,"I took relatively na\xefve approach and then tried to simplify it."),(0,o.kt)("h2",{id:"day-3-rucksack-reorganization"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/3"},"Day 3: Rucksack Reorganization")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Let's go reorganize elves' backpacks! Each backpacks has 2 compartments and you\nwant to find the common item among those compartments. Each of them has priority,\nyou care only about the sum.")),(0,o.kt)("p",null,"This is the day where I started to fight the compiler and neither of us decided\nto give up. Let's dive into it \\o/"),(0,o.kt)("admonition",{title:"Fun fact",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Fighting the compiler took me 30 minutes.")),(0,o.kt)("p",null,"We need to find a common item among 2 collections, that's an easy task, right?\nWe can construct 2 sets and find an intersection:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let top: HashSet<i32> = [1, 2, 3].iter().collect();\nlet bottom: HashSet<i32> = [3, 4, 5].iter().collect();\n")),(0,o.kt)("p",null,"Now, the first issue that we encounter is caused by the fact that we are using\na slice (the ",(0,o.kt)("inlineCode",{parentName:"p"},"[\u2026]"),"), iterator of that returns ",(0,o.kt)("strong",{parentName:"p"},"references")," to the numbers.\nAnd we get immediately yelled at by the compiler, because the numbers are discarded\nafter running the ",(0,o.kt)("inlineCode",{parentName:"p"},".collect"),". To fix this, we can use ",(0,o.kt)("inlineCode",{parentName:"p"},".into_iter"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let top: HashSet<i32> = [1, 2, 3].into_iter().collect();\nlet bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();\n")),(0,o.kt)("p",null,"This way the numbers will get copied instead of referenced. OK, let's find the\nintersection of those 2 collections:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'println!("Common elements: {:?}", top.intersection(&bottom));\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Common elements: [3]\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Notice that we need to do ",(0,o.kt)("inlineCode",{parentName:"p"},"&bottom"),". It explicitly specifies that ",(0,o.kt)("inlineCode",{parentName:"p"},".intersection"),"\n",(0,o.kt)("strong",{parentName:"p"},"borrows")," the ",(0,o.kt)("inlineCode",{parentName:"p"},"bottom"),", i.e. takes an immutable reference to it.")),(0,o.kt)("p",null,"That's what we want, right? Looks like it! \\o/"),(0,o.kt)("p",null,"Next part wants us to find the common element among all of the backpacks. OK, so\nthat should be fairly easy, we have an intersection and we want to find intersection\nover all of them."),(0,o.kt)("p",null,"Let's have a look at the type of the ",(0,o.kt)("inlineCode",{parentName:"p"},".intersection")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"pub fn intersection<'a>(\n\xa0\xa0\xa0\xa0&'a self,\n\xa0\xa0\xa0\xa0other: &'a HashSet<T, S>\n) -> Intersection<'a, T, S>\n")),(0,o.kt)("p",null,"OK\u2026 Huh\u2026 But we have an example there!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let intersection: HashSet<_> = a.intersection(&b).collect();\n")),(0,o.kt)("p",null,"Cool, that's all we need."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\n\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\nprintln!("Intersection: {:?}", intersection);\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Intersection: {3, 4}\n")),(0,o.kt)("p",null,"Cool, so let's do the intersection with the ",(0,o.kt)("inlineCode",{parentName:"p"},"top_2"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\n\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\nlet intersection: HashSet<_> = intersection.intersection(&top_2).collect();\nprintln!("Intersection: {:?}", intersection);\n')),(0,o.kt)("p",null,"And we get yelled at by the compiler:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"error[E0308]: mismatched types\n --\x3e src/main.rs:10:58\n |\n10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();\n | ------------ ^^^^^^ expected `&i32`, found `i32`\n | |\n | arguments to this function are incorrect\n |\n = note: expected reference `&HashSet<&i32>`\n found reference `&HashSet<i32>`\n")),(0,o.kt)("p",null,"/o\\ What the hell is going on here? Well, the funny thing is, that this operation\ndoesn't return the elements themselves, but the references to them and when we pass\nthe third set, it has just the values themselves, without any references."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"It may seem as a very weird decision, but in fact it makes some sense\u2026 It allows\nyou to do intersection of items that may not be possible to copy. Overall this is\na \u201ctax\u201d for having a borrow checker ",(0,o.kt)("del",{parentName:"p"},"drilling your ass")," having your back and\nmaking sure you're not doing something naughty that may cause an ",(0,o.kt)("strong",{parentName:"p"},"undefined"),"\n",(0,o.kt)("strong",{parentName:"p"},"behavior"),".")),(0,o.kt)("p",null,"To resolve this we need to get an iterator that ",(0,o.kt)("strong",{parentName:"p"},"clones")," the elements:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\n\nlet intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();\nlet intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();\nlet intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();\nprintln!("Intersection: {:?}", intersection);\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Intersection: {4}\n")),(0,o.kt)("h3",{id:"solution-2"},"Solution"),(0,o.kt)("p",null,"The approach is pretty simple, if you omit the ",(0,o.kt)("em",{parentName:"p"},"1on1 with the compiler"),". You just\nhave some fun with the set operations :)"),(0,o.kt)("h2",{id:"day-4-camp-cleanup"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/4"},"Day 4: Camp Cleanup")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Elves are cleaning up the camp and they got overlapping sections to clean up.\nFind how many overlap and can take the day off.")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html"},(0,o.kt)("inlineCode",{parentName:"a"},"RangeInclusive"))," is your friend not an enemy :)"),(0,o.kt)("h3",{id:"solution-3"},"Solution"),(0,o.kt)("p",null,"Relatively easy, you just need to parse the input and know what you want. Rust's\n",(0,o.kt)("inlineCode",{parentName:"p"},"RangeInclusive")," type helped a lot, cause it took care of all abstractions."),(0,o.kt)("h2",{id:"day-5-supply-stacks"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/5"},"Day 5: Supply Stacks")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Let's play with stacks of crates.")),(0,o.kt)("p",null,"Very easy problem with very annoying input. You can judge yourself:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," [D] \n[N] [C] \n[Z] [M] [P]\n 1 2 3 \n\nmove 1 from 2 to 1\nmove 3 from 1 to 3\nmove 2 from 2 to 1\nmove 1 from 1 to 2\n")),(0,o.kt)("p",null,"Good luck transforming that into something reasonable :)"),(0,o.kt)("admonition",{title:"Fun fact",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Took me 40 minutes to parse this reasonably, including fighting the compiler.")),(0,o.kt)("h3",{id:"solution-4"},"Solution"),(0,o.kt)("p",null,"For the initial solution I went with a manual solution (as in ",(0,o.kt)("em",{parentName:"p"},"I have done all"),"\n",(0,o.kt)("em",{parentName:"p"},"the work"),". Later on I have decided to explore the ",(0,o.kt)("inlineCode",{parentName:"p"},"std")," and interface of the\n",(0,o.kt)("inlineCode",{parentName:"p"},"std::vec::Vec")," and found ",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/vec/struct.Vec.html#method.split_off"},(0,o.kt)("inlineCode",{parentName:"a"},"split_off"))," which takes an index and splits (duh)\nthe vector:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let mut vec = vec![1, 2, 3];\nlet vec2 = vec.split_off(1);\nassert_eq!(vec, [1]);\nassert_eq!(vec2, [2, 3]);\n")),(0,o.kt)("p",null,"This helped me simplify my solution a lot and also get rid of some ",(0,o.kt)("em",{parentName:"p"},"edge cases"),"."),(0,o.kt)("h2",{id:"day-6-tuning-trouble"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/6"},"Day 6: Tuning Trouble")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Finding start of the message in a very weird protocol. Start of the message is\ndenoted by ",(0,o.kt)("span",{parentName:"p",className:"math math-inline"},(0,o.kt)("span",{parentName:"span",className:"katex"},(0,o.kt)("span",{parentName:"span",className:"katex-mathml"},(0,o.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,o.kt)("semantics",{parentName:"math"},(0,o.kt)("mrow",{parentName:"semantics"},(0,o.kt)("mi",{parentName:"mrow"},"N")),(0,o.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N")))),(0,o.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,o.kt)("span",{parentName:"span",className:"base"},(0,o.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,o.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N")))))," unique consecutive characters.")),(0,o.kt)("h3",{id:"solution-5"},"Solution"),(0,o.kt)("p",null,"A lot of different approaches, knowing that we are dealing with input consisting\nsolely of ASCII letters, I bit the bullet and went with sliding window and\nconstructing sets from that window, checking if the set is as big as the window."),(0,o.kt)("p",null,"One possible optimization could consist of keeping a bit-vector (i.e. ",(0,o.kt)("inlineCode",{parentName:"p"},"usize"),"\nvariable) of encountered characters and updating it as we go. However this has\na different issue and that is removal of the characters from the left side of the\nwindow. We don't know if the same character is not included later on."),(0,o.kt)("p",null,"Other option is to do similar thing, but keeping the frequencies of the letters,\nand again knowing we have only ASCII letters we can optimize by having a vector\nof 26 elements that keeps count for each lowercase letter."),(0,o.kt)("h2",{id:"day-7-no-space-left-on-device"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/7"},"Day 7: No Space Left On Device")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Let's simulate ",(0,o.kt)("a",{parentName:"p",href:"https://www.man7.org/linux/man-pages/man1/du.1.html"},(0,o.kt)("inlineCode",{parentName:"a"},"du"))," to get some stats about our file system and then pinpoint\ndirectories that take a lot of space and should be deleted.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"I was waiting for this moment, and yet it got me!\n",(0,o.kt)("em",{parentName:"p"},"imagine me swearing for hours"))),(0,o.kt)("h3",{id:"solution-6"},"Solution"),(0,o.kt)("p",null,"We need to \u201c",(0,o.kt)("em",{parentName:"p"},"build"),"\u201d a file system from the input that is given in a following form:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"$ cd /\n$ ls\ndir a\n14848514 b.txt\n8504156 c.dat\ndir d\n$ cd a\n$ ls\ndir e\n29116 f\n2557 g\n62596 h.lst\n$ cd e\n$ ls\n584 i\n$ cd ..\n$ cd ..\n$ cd d\n$ ls\n4060174 j\n8033020 d.log\n5626152 d.ext\n7214296 k\n")),(0,o.kt)("p",null,"There are few ways in which you can achieve this and also you can assume some\npreconditions, but why would we do that, right? :)"),(0,o.kt)("p",null,"You can \u201cslap\u201d this in either ",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/collections/struct.HashMap.html"},(0,o.kt)("inlineCode",{parentName:"a"},"HashMap"))," or ",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/collections/struct.BTreeMap.html"},(0,o.kt)("inlineCode",{parentName:"a"},"BTreeMap"))," and call it a day.\nAnd that would be boring\u2026"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"BTreeMap")," is quite fitting for this, don't you think?")),(0,o.kt)("p",null,"I always wanted to try allocation on heap in Rust, so I chose to implement a tree.\nI fought with the ",(0,o.kt)("inlineCode",{parentName:"p"},"Box<T>")," for some time and was losing\u2026"),(0,o.kt)("p",null,"Then I looked up some implementations of trees or linked lists and decided to try\n",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<Cell<T>>"),". And I got my ",(0,o.kt)("em",{parentName:"p"},"ass whopped")," by the compiler once again. /o\\"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Box<T>")," represents a dynamically allocated memory on heap. It is a single pointer,\nyou can imagine this as ",(0,o.kt)("inlineCode",{parentName:"p"},"std::unique_ptr<T>")," in C++."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Rc<T>")," represents a dynamically allocated memory on heap. On top of that it is\n",(0,o.kt)("em",{parentName:"p"},"reference counted")," (that's what the ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc")," stands for). You can imagine this as\n",(0,o.kt)("inlineCode",{parentName:"p"},"std::shared_ptr<T>")," in C++."),(0,o.kt)("p",{parentName:"admonition"},"Now the fun stuff. Neither of them lets you ",(0,o.kt)("strong",{parentName:"p"},"mutate")," the contents of the memory."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Cell<T>")," allows you to mutate the memory. Can be used reasonably with types that\ncan be copied, because the memory safety is guaranteed by copying the contents\nwhen there is more than one ",(0,o.kt)("strong",{parentName:"p"},"mutable")," reference to the memory."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>")," is similar to the ",(0,o.kt)("inlineCode",{parentName:"p"},"Cell<T>"),", but the borrowing rules (how many mutable\nreferences are present) are checked dynamically."),(0,o.kt)("p",{parentName:"admonition"},"So in the end, if you want something like ",(0,o.kt)("inlineCode",{parentName:"p"},"std::shared_ptr<T>")," in Rust, you want\nto have ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>"),".")),(0,o.kt)("p",null,"So, how are we going to represent the file system then? We will use an enumeration,\nhehe, which is an algebraic data type that can store some stuff in itself \ud83d\ude29"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"type FileHandle = Rc<RefCell<AocFile>>;\n\n#[derive(Debug)]\nenum AocFile {\n File(usize),\n Directory(BTreeMap<String, FileHandle>),\n}\n")),(0,o.kt)("p",null,"Let's go over it! ",(0,o.kt)("inlineCode",{parentName:"p"},"FileHandle")," represents dynamically allocated ",(0,o.kt)("inlineCode",{parentName:"p"},"AocFile"),", not\nmuch to discuss. What does the ",(0,o.kt)("inlineCode",{parentName:"p"},"#[derive(Debug)]")," do though? It lets us to print\nout the value of that enumeration, it's derived, so it's not as good as if we had\nimplemented it ourselves, but it's good enough for debugging, hence the name."),(0,o.kt)("p",null,"Now to the fun part! ",(0,o.kt)("inlineCode",{parentName:"p"},"AocFile")," value can be represented in two ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"File(usize)"),", e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"AocFile::File(123)")," and we can pattern match it, if we\nneed to"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Directory(BTreeMap<String, FileHandle>)")," will represent the directory and will\ncontain map matching the name of the files (or directories) within to their\nrespective file handles")),(0,o.kt)("p",null,"I will omit the details about constructing this file system, cause there are a lot\nof technicalities introduced by the nature of the input. However if you are\ninterested, you can have a look at my solution."),(0,o.kt)("p",null,"We need to find small enough directories and also find the smallest directory that\nwill free enough space. Now the question is, how could we do that. And there are\nmultiple ways I will describe."),(0,o.kt)("p",null,"I have chosen to implement ",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Catamorphism#Tree_fold"},(0,o.kt)("em",{parentName:"a"},"tree catamorphism"))," \ud83d\ude29. It is basically a fold\nover a tree data structure. We descent down into the leaves and propagate computed\nresults all the way to the root. You can also notice that this approach is very\nsimilar to ",(0,o.kt)("em",{parentName:"p"},"dynamic programming"),", we find overlapping sections of the computation\nand try to minimize the additional work (in this case: we need to know sizes of\nour descendants, but we have already been there)."),(0,o.kt)("p",null,"Another approach that has been suggested to me few days later is running DFS on\nthe graph. And, funnily enough, we would still need to combine what we found in\nthe branches where we descent. So in the end, it would work very similarly to my\nsolution."),(0,o.kt)("p",null,"One of the more exotic options would be precomputing the required information at\nthe same time as parsing. That could be done by adding additional fields to the\nnodes which would allow storing such information and updating it as we construct\nthe file system."),(0,o.kt)("h2",{id:"post-mortem"},"Post Mortem"),(0,o.kt)("p",null,"Things that have been brought up in the discussion later on."),(0,o.kt)("h3",{id:"rct-vs-rcrefcellt"},(0,o.kt)("inlineCode",{parentName:"h3"},"Rc<T>")," vs ",(0,o.kt)("inlineCode",{parentName:"h3"},"Rc<RefCell<T>>")),(0,o.kt)("p",null,"It has been brought up that I have a contradicting statement regarding the\ndynamically allocated memory. Specifically:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"You can imagine ",(0,o.kt)("inlineCode",{parentName:"li"},"Rc<T>")," as an ",(0,o.kt)("inlineCode",{parentName:"li"},"std::shared_ptr<T>")," (in C++)"),(0,o.kt)("li",{parentName:"ul"},"When you want an equivalent of ",(0,o.kt)("inlineCode",{parentName:"li"},"std::shared_ptr<T>"),", you want to use\n",(0,o.kt)("inlineCode",{parentName:"li"},"Rc<RefCell<T>>"))),(0,o.kt)("p",null,"Now, in Rust it is a bit more complicated, because the type that represents the\n\u201cshared pointer\u201d is ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<T>"),". What ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>")," does is making sure that there is\nonly one \u201cowner\u201d of a mutable reference at a time (and dynamically, as opposed\nto the ",(0,o.kt)("inlineCode",{parentName:"p"},"Cell<T>"),")."),(0,o.kt)("p",null,"Therefore to be precise and correct about the equivalents of ",(0,o.kt)("inlineCode",{parentName:"p"},"std::shared_ptr<T>"),"\nin Rust, we can say that"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Rc<T>")," is an equivalent of a ",(0,o.kt)("inlineCode",{parentName:"li"},"const std::shared_ptr<T>"),","),(0,o.kt)("li",{parentName:"ul"},"and ",(0,o.kt)("inlineCode",{parentName:"li"},"Rc<RefCell<T>>")," is an equivalent of a ",(0,o.kt)("inlineCode",{parentName:"li"},"std::shared_ptr<T>"),".")),(0,o.kt)("p",null,"You can easily see that they only differ in the mutability. (And even that is not\nas simple as it seems, because there is also ",(0,o.kt)("inlineCode",{parentName:"p"},"Cell<T>"),")"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e25b3183.1c50e16b.js b/assets/js/e25b3183.1c50e16b.js new file mode 100644 index 0000000..347c500 --- /dev/null +++ b/assets/js/e25b3183.1c50e16b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6],{5934:i=>{i.exports=JSON.parse('{"label":"top-down-dp","permalink":"/ib002/tags/top-down-dp","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/e89da83e.a63c019a.js b/assets/js/e89da83e.a63c019a.js new file mode 100644 index 0000000..02612b9 --- /dev/null +++ b/assets/js/e89da83e.a63c019a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8757],{7416:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/leetcode","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/eb7cc117.55f4bd7d.js b/assets/js/eb7cc117.55f4bd7d.js new file mode 100644 index 0000000..6b81567 --- /dev/null +++ b/assets/js/eb7cc117.55f4bd7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[143],{3635:e=>{e.exports=JSON.parse('{"label":"red-black trees","permalink":"/ib002/tags/red-black-trees","allTagsPath":"/ib002/tags","count":2,"items":[{"id":"rb-trees/rules","title":"On the rules of the red-black tree","description":"Shower thoughts on the rules of the red-black tree.\\n","permalink":"/ib002/rb-trees/rules"},{"id":"rb-trees/applications","title":"Pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f","description":"Uk\xe1zka pou\u017eit\xed \u010derveno-\u010dern\xfdch strom\u016f v standardn\xedch kni\u017enic\xedch zn\xe1m\xfdch jazyk\u016f.\\n","permalink":"/ib002/rb-trees/applications"}]}')}}]); \ No newline at end of file diff --git a/assets/js/edfd2a45.1bede75c.js b/assets/js/edfd2a45.1bede75c.js new file mode 100644 index 0000000..9f23acf --- /dev/null +++ b/assets/js/edfd2a45.1bede75c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7248],{1955:e=>{e.exports=JSON.parse('{"label":"karel","permalink":"/ib002/tags/karel","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/karel-1","title":"Recursion and backtracking with Robot Karel","description":"A problem with too many restrictions.\\n","permalink":"/ib002/recursion/karel-1"}]}')}}]); \ No newline at end of file diff --git a/assets/js/f48be158.eaa96907.js b/assets/js/f48be158.eaa96907.js new file mode 100644 index 0000000..cc4fa37 --- /dev/null +++ b/assets/js/f48be158.eaa96907.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4064],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>c});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(n),h=o,c=d["".concat(s,".").concat(h)]||d[h]||m[h]||i;return n?a.createElement(c,r(r({ref:t},p),{},{components:n})):a.createElement(c,r({ref:t},p))}));function c(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var u=2;u<i;u++)r[u]=n[u];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},9859:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=n(7462),o=(n(7294),n(3905));const i={title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00",slug:"aoc-2022/3rd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},r=void 0,l={permalink:"/blog/aoc-2022/3rd-week",editUrl:"https://gitlab.com/mfocko/blog/tree/main/blog/aoc-2022/03-week-3.md",source:"@site/blog/aoc-2022/03-week-3.md",title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00:00.000Z",formattedDate:"July 6, 2023",tags:[{label:"advent-of-code",permalink:"/blog/tags/advent-of-code"},{label:"advent-of-code-2022",permalink:"/blog/tags/advent-of-code-2022"},{label:"rust",permalink:"/blog/tags/rust"}],readingTime:11.565,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. @mf",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"3rd week of Advent of Code '22 in Rust",description:"Surviving third week in Rust.",date:"2023-07-06T21:00",slug:"aoc-2022/3rd-week",authors:"mf",tags:["advent-of-code","advent-of-code-2022","rust"],hide_table_of_contents:!1},prevItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"},nextItem:{title:"Sort the matrix diagonally",permalink:"/blog/leetcode/sort-diagonally"}},s={authorsImageUrls:[void 0]},u=[{value:"Day 15: Beacon Exclusion Zone",id:"day-15-beacon-exclusion-zone",level:2},{value:"Solution",id:"solution",level:3},{value:"Day 16: Proboscidea Volcanium",id:"day-16-proboscidea-volcanium",level:2},{value:"Solution",id:"solution-1",level:3},{value:"Indexing in graph",id:"indexing-in-graph",level:4},{value:"Cartesian product",id:"cartesian-product",level:4},{value:"\u201cImplementing\u201d an iterator",id:"implementing-an-iterator",level:4},{value:"Day 17: Pyroclastic Flow",id:"day-17-pyroclastic-flow",level:2},{value:"Solution",id:"solution-2",level:3},{value:"Collision detection",id:"collision-detection",level:4},{value:"Infinite iterator",id:"infinite-iterator",level:4},{value:"Day 18: Boiling Boulders",id:"day-18-boiling-boulders",level:2},{value:"Solution",id:"solution-3",level:3},{value:"Day 19: Not Enough Minerals",id:"day-19-not-enough-minerals",level:2},{value:"Solution",id:"solution-4",level:3},{value:"Day 20: Grove Positioning System",id:"day-20-grove-positioning-system",level:2},{value:"Solution",id:"solution-5",level:3},{value:"<code>.borrow_mut()</code>",id:"borrow_mut",level:4},{value:"<code>.borrow_mut()</code> on <code>Rc<RefCell<T>></code>",id:"borrow_mut-on-rcrefcellt",level:5},{value:"<code>BorrowMut</code> trait",id:"borrowmut-trait",level:5},{value:"Conflict",id:"conflict",level:5},{value:"Day 21: Monkey Math",id:"day-21-monkey-math",level:2},{value:"Solution",id:"solution-6",level:3},{value:"<code>Default</code> trait",id:"default-trait",level:4},{value:"Abusing negation",id:"abusing-negation",level:4}],p={toc:u},d="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Let's go through the third week of ",(0,o.kt)("a",{parentName:"p",href:"https://adventofcode.com"},(0,o.kt)("em",{parentName:"a"},"Advent of Code"))," in Rust."),(0,o.kt)("h2",{id:"day-15-beacon-exclusion-zone"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/15"},"Day 15: Beacon Exclusion Zone")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Triangulating a distress beacon based on the information from the sensors.")),(0,o.kt)("h3",{id:"solution"},"Solution"),(0,o.kt)("p",null,"Relatively easy thing to implement, no major Rust issues hit."),(0,o.kt)("h2",{id:"day-16-proboscidea-volcanium"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/16"},"Day 16: Proboscidea Volcanium")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Finding a max flow in a graph given some time constraints.")),(0,o.kt)("h3",{id:"solution-1"},"Solution"),(0,o.kt)("p",null,"I have used some interesting things to implement this and make it easier for me."),(0,o.kt)("h4",{id:"indexing-in-graph"},"Indexing in graph"),(0,o.kt)("p",null,"I have come across a situation where I needed to keep more information regarding\nthe graph\u2026 In that case you can, of course, create a structure and keep it in,\nbut once you have multiple members in the structure it gets harder to work with\nsince you need to address the fields in the structure. When you work with graph,\nyou frequently need to access the vertices and in this case it felt a lot easier\nto implement the indexing in a graph, rather than explicitly access the\nunderlying data structure."),(0,o.kt)("p",null,"Here you can see a rather short snippet from the solution that allows you to\n\u201cindex\u201d the graph:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"impl Index<&str> for Graph {\n type Output = Vertex;\n\n fn index(&self, index: &str) -> &Self::Output {\n &self.g[index]\n }\n}\n")),(0,o.kt)("h4",{id:"cartesian-product"},"Cartesian product"),(0,o.kt)("p",null,"During the implementation I had to utilize Floyd-Warshall algorithm for finding\nthe shortest path between pairs of vertices and utilized the ",(0,o.kt)("inlineCode",{parentName:"p"},"iproduct!")," macro\nfrom the ",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/itertools"},(0,o.kt)("inlineCode",{parentName:"a"},"itertools")),". It is a very useful higher-order function that allows\nyou to keep the nesting of the loops at a minimum level while still maintaining\nthe same functionality."),(0,o.kt)("h4",{id:"implementing-an-iterator"},"\u201cImplementing\u201d an iterator"),(0,o.kt)("p",null,"For the second part, you get to split the work between 2 actors. That way you\ncan achieve higher efficiency of the whole process that you're planning, but it\nalso makes it harder to evaluate algorithmically, since you need to check the\ndifferent ways the work can be split."),(0,o.kt)("p",null,"Being affected by ",(0,o.kt)("em",{parentName:"p"},"functional programming brain damage"),"\u2122\ufe0f, I have chosen to\ndo this part by function that returns an iterator over the possible ways:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"fn pairings(\n valves: &BTreeSet<String>,\n) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + '_ {\n let mapping = valves.iter().collect_vec();\n\n let max_mask = 1 << (valves.len() - 1);\n\n (0..max_mask).map(move |mask| {\n let mut elephant = BTreeSet::new();\n let mut human = BTreeSet::new();\n\n for (i, &v) in mapping.iter().enumerate() {\n if (mask & (1 << i)) == 0 {\n human.insert(v.clone());\n } else {\n elephant.insert(v.clone());\n }\n }\n\n (human, elephant)\n })\n}\n")),(0,o.kt)("h2",{id:"day-17-pyroclastic-flow"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/17"},"Day 17: Pyroclastic Flow")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Simulating an autonomous Tetris where pieces get affected by a series of jets of\nhot gas.")),(0,o.kt)("h3",{id:"solution-2"},"Solution"),(0,o.kt)("p",null,"Similarly to the previous day I have created some iterators \ud83d\ude04"),(0,o.kt)("h4",{id:"collision-detection"},"Collision detection"),(0,o.kt)("p",null,"Once you need to check for collisions it is very helpful to be able to just\niterate through the positions that can actually collide with the wall or other\npiece."),(0,o.kt)("p",null,"To get the desired behaviour, you can just compose few smaller functions:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"fn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + '_ {\n shape.iter().enumerate().flat_map(|(y, row)| {\n row.iter().enumerate().filter_map(move |(x, c)| {\n if c == &'#' {\n Some(Vector2D::new(x as isize, y as isize))\n } else {\n None\n }\n })\n })\n}\n")),(0,o.kt)("p",null,"In the end, we get relative positions which we can adjust later when given the\nspecific positions from iterator. You can see some interesting parts in this:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},".enumerate()")," allows us to get both the indices (coordinates) and the line\nor, later on, the character itself,"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},".flat_map()")," flattens the iterator, i.e. when we return another iterator,\nthey just get chained instead of iterating over iterators (which sounds pretty\ndisturbing, doesn't it?),"),(0,o.kt)("li",{parentName:"ul"},"and finally ",(0,o.kt)("inlineCode",{parentName:"li"},".filter_map()")," which is pretty similar to the \u201cbasic\u201d ",(0,o.kt)("inlineCode",{parentName:"li"},".map()"),"\nwith a one, key, difference that it expects the items of an iterator to be\nmapped to an ",(0,o.kt)("inlineCode",{parentName:"li"},"Option<T>")," from which it ignores nothing (as in ",(0,o.kt)("inlineCode",{parentName:"li"},"None")," \ud83d\ude09)\nand also unwraps the values from ",(0,o.kt)("inlineCode",{parentName:"li"},"Some(\u2026)"),".")),(0,o.kt)("h4",{id:"infinite-iterator"},"Infinite iterator"),(0,o.kt)("p",null,"In the solution we cycle through both Tetris-like shapes that fall down and the\njets that move our pieces around. Initially I have implemented my own infinite\niterator that just yields the indices. It is a very simple, yet powerful, piece\nof code:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"struct InfiniteIndex {\n size: usize,\n i: usize,\n}\n\nimpl InfiniteIndex {\n fn new(size: usize) -> InfiniteIndex {\n InfiniteIndex { size, i: size - 1 }\n }\n}\n\nimpl Iterator for InfiniteIndex {\n type Item = usize;\n\n fn next(&mut self) -> Option<Self::Item> {\n self.i = (self.i + 1) % self.size;\n Some(self.i)\n }\n}\n")),(0,o.kt)("p",null,"However when I'm looking at the code now, it doesn't really make much sense\u2026\nGuess what, we can use a built-in function that is implemented on iterators for\nthat! The function is called ",(0,o.kt)("inlineCode",{parentName:"p"},".cycle()")),(0,o.kt)("p",null,"On the other hand, I am not going to switch to that function, since it would\nintroduce an another myriad of issues caused by the fact that I create iterators\nright away in the constructor of my structure and the iterators would borrow\nboth the jets and shapes which would introduce a lifetime dependency into the\nstructure."),(0,o.kt)("h2",{id:"day-18-boiling-boulders"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/18"},"Day 18: Boiling Boulders")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Let's compute a surface area of some obsidian approximated via coordinates of\ncubes.")),(0,o.kt)("h3",{id:"solution-3"},"Solution"),(0,o.kt)("p",null,"This day is kinda interesting, because it shows how easily you can complicate the\nproblem and also how much can you screw yourself over with the optimization and\n\u201csmart\u201d approach."),(0,o.kt)("p",null,"For the first part you need to find the surface area of an obsidian that is\napproximated by cubes. Now, that is a very easy thing to do, just keep the track\nof already added cubes, and check if the newly added cube touches any face of any\nother cube. Simple, and with a ",(0,o.kt)("inlineCode",{parentName:"p"},"BTreeSet")," relatively efficient way to do it."),(0,o.kt)("p",null,"However the second part lets you on a secret that there may be some surface area\nfrom the \u201cinside\u201d too and you want to know only the one from the outside of the\nobsidian. I have seen some solutions later, but if you check your data, you might\nnotice that the bounding box of all the cubes isn't that big at all. Therefore I\nchose to pre-construct the box beforehand, fill in the cubes and then just run a\nBFS turning all the lava on the outside into the air. Now you just need to check\ncubes and count how many of their faces touch the air."),(0,o.kt)("h2",{id:"day-19-not-enough-minerals"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/19"},"Day 19: Not Enough Minerals")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Finding out the best strategy for building robots to collect geodes.")),(0,o.kt)("h3",{id:"solution-4"},"Solution"),(0,o.kt)("p",null,"Not much interesting stuff to mention apart from the suggestion to never believe\nthat the default implementation given by ",(0,o.kt)("inlineCode",{parentName:"p"},"derive")," macro is what you want, it\ndoesn't have to be. \ud83d\ude04"),(0,o.kt)("h2",{id:"day-20-grove-positioning-system"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/20"},"Day 20: Grove Positioning System")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Shuffling around the ",(0,o.kt)("em",{parentName:"p"},"circular linked list")," to find the coordinates.")),(0,o.kt)("p",null,"Now, small rant for this day is in place. They've never mentioned that coordinates\ncan repeat and therefore the values are non-unique. This is something that did\nnot happen in the given sample, but was present in the user input. It took \xbba lot\xab\nto realize that this is the issue."),(0,o.kt)("h3",{id:"solution-5"},"Solution"),(0,o.kt)("p",null,"I have tried implementing a circular linked list for this\u2026 and I have failed\nmiserably. To be fair, I still have no clue why. It was \u201cfun\u201d to play around with\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>"),". In the end I failed on ",(0,o.kt)("em",{parentName:"p"},"wrong answer"),". I have also encountered\na rather interesting issue with ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," method being used on ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>"),"."),(0,o.kt)("h4",{id:"borrow_mut"},(0,o.kt)("inlineCode",{parentName:"h4"},".borrow_mut()")),(0,o.kt)("p",null,"Consider the following snippet of the code (taken from the documentation):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'use std::cell::{RefCell, RefMut};\nuse std::collections::HashMap;\nuse std::rc::Rc;\n// use std::borrow::BorrowMut;\n\nfn main() {\n let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));\n // Create a new block to limit the scope of the dynamic borrow\n {\n let mut map: RefMut<_> = shared_map.borrow_mut();\n map.insert("africa", 92388);\n map.insert("kyoto", 11837);\n map.insert("piccadilly", 11826);\n map.insert("marbles", 38);\n }\n\n // Note that if we had not let the previous borrow of the cache fall out\n // of scope then the subsequent borrow would cause a dynamic thread panic.\n // This is the major hazard of using `RefCell`.\n let total: i32 = shared_map.borrow().values().sum();\n println!("{total}");\n}\n')),(0,o.kt)("p",null,"We allocate a hash map on the heap and then in the inner block, we borrow it as\na mutable reference, so that we can use it."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"It is a very primitive example for ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>")," and mutable borrow.")),(0,o.kt)("p",null,"If you uncomment the 4th line with ",(0,o.kt)("inlineCode",{parentName:"p"},"use std::borrow::BorrowMut;"),", you cannot\ncompile the code anymore, because of"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," Compiling playground v0.0.1 (/playground)\nerror[E0308]: mismatched types\n --\x3e src/main.rs:10:34\n |\n10 | let mut map: RefMut<_> = shared_map.borrow_mut();\n | --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference\n | |\n | expected due to this\n |\n = note: expected struct `RefMut<'_, _>`\n found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`\n\nerror[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope\n --\x3e src/main.rs:11:13\n |\n11 | map.insert(\"africa\", 92388);\n | ^^^^^^ method not found in `RefMut<'_, _>`\n\nerror[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope\n --\x3e src/main.rs:12:13\n |\n12 | map.insert(\"kyoto\", 11837);\n | ^^^^^^ method not found in `RefMut<'_, _>`\n\nerror[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope\n --\x3e src/main.rs:13:13\n |\n13 | map.insert(\"piccadilly\", 11826);\n | ^^^^^^ method not found in `RefMut<'_, _>`\n\nerror[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope\n --\x3e src/main.rs:14:13\n |\n14 | map.insert(\"marbles\", 38);\n | ^^^^^^ method not found in `RefMut<'_, _>`\n\nSome errors have detailed explanations: E0308, E0599.\nFor more information about an error, try `rustc --explain E0308`.\nerror: could not compile `playground` due to 5 previous errors\n")),(0,o.kt)("p",null,"It might seem ",(0,o.kt)("strong",{parentName:"p"},"a bit")," ridiculous. However, I got to a point where the compiler\nsuggested ",(0,o.kt)("inlineCode",{parentName:"p"},"use std::borrow::BorrowMut;")," and it resulted in breaking parts of the\ncode that worked previously. I think it may be a good idea to go over what is\nhappening here."),(0,o.kt)("h5",{id:"borrow_mut-on-rcrefcellt"},(0,o.kt)("inlineCode",{parentName:"h5"},".borrow_mut()")," on ",(0,o.kt)("inlineCode",{parentName:"h5"},"Rc<RefCell<T>>")),(0,o.kt)("p",null,"Let's consider a variable ",(0,o.kt)("inlineCode",{parentName:"p"},"x")," of type ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>"),". What happens when you\ncall ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," on it? We can look at the ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc")," type, and\u2026 hang on! There is\nneither ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," method or ",(0,o.kt)("inlineCode",{parentName:"p"},"BorrowMut")," trait implemented. How can we do it\nthen?"),(0,o.kt)("p",null,"Let's go further and we can see that ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>")," implements a ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()"),"\nmethod. OK, but how can we call it on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<T>"),"? Easily! ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<T>")," implements\n",(0,o.kt)("inlineCode",{parentName:"p"},"Deref<T>")," and therefore you can call methods on ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<T>")," objects as if they were\n",(0,o.kt)("inlineCode",{parentName:"p"},"T")," objects. If we read on ",(0,o.kt)("em",{parentName:"p"},(0,o.kt)("inlineCode",{parentName:"em"},"Deref")," coercion"),", we can see the following:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"If ",(0,o.kt)("inlineCode",{parentName:"p"},"T")," implements ",(0,o.kt)("inlineCode",{parentName:"p"},"Deref<Target = U>"),", \u2026:"),(0,o.kt)("ul",{parentName:"blockquote"},(0,o.kt)("li",{parentName:"ul"},"\u2026"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"T")," implicitly implements all the (immutable) methods of the type ",(0,o.kt)("inlineCode",{parentName:"li"},"U"),"."))),(0,o.kt)("p",null,"What is the requirement for the ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," on ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>"),"? Well, it needs\n",(0,o.kt)("inlineCode",{parentName:"p"},"&self"),", so the ",(0,o.kt)("inlineCode",{parentName:"p"},"Deref")," implements the ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," for the ",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>"),"."),(0,o.kt)("h5",{id:"borrowmut-trait"},(0,o.kt)("inlineCode",{parentName:"h5"},"BorrowMut")," trait"),(0,o.kt)("p",null,"I have not been able to find a lot on this trait. My guess is that it provides a\nmethod instead of a syntactic sugar (",(0,o.kt)("inlineCode",{parentName:"p"},"&mut x"),") for the mutable borrow. And also\nit provides default implementations for the types:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"impl BorrowMut<str> for String\n\nimpl<T> BorrowMut<T> for &mut T\nwhere\n T: ?Sized,\n\nimpl<T> BorrowMut<T> for T\nwhere\n T: ?Sized,\n\nimpl<T, A> BorrowMut<[T]> for Vec<T, A>\nwhere\n A: Allocator,\n\nimpl<T, A> BorrowMut<T> for Box<T, A>\nwhere\n A: Allocator,\n T: ?Sized,\n\nimpl<T, const N: usize> BorrowMut<[T]> for [T; N]\n")),(0,o.kt)("h5",{id:"conflict"},"Conflict"),(0,o.kt)("p",null,"Now the question is why did it break the code\u2026 My first take was that the type\n",(0,o.kt)("inlineCode",{parentName:"p"},"Rc<RefCell<T>>")," has some ",(0,o.kt)("em",{parentName:"p"},"specialized")," implementation of the ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," and\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"use")," overrides it with the default, which is true ",(0,o.kt)("strong",{parentName:"p"},"in a sense"),". However\nthere is no ",(0,o.kt)("em",{parentName:"p"},"specialized")," implementation. Let's have a look at the trait and the\ntype signature on the ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"// trait\npub trait BorrowMut<Borrowed>: Borrow<Borrowed>\nwhere\n Borrowed: ?Sized,\n{\n fn borrow_mut(&mut self) -> &mut Borrowed;\n}\n\n// \u2039RefCell<T>.borrow_mut()\u203a type signature\npub fn borrow_mut(&self) -> RefMut<'_, T>\n")),(0,o.kt)("p",null,"I think that we can definitely agree on the fact that ",(0,o.kt)("inlineCode",{parentName:"p"},"RefMut<'_, T>")," is not the\n",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"In my opinion"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>")," implements a ",(0,o.kt)("strong",{parentName:"p"},"separate")," ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," rather\nthan implementing the interface, because it ",(0,o.kt)("strong",{parentName:"p"},"cannot")," satisfy the type requirements\nof the trait."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"I wonder how are we expected to deal with this conflict, if and when, we need\nboth the ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," of the trait and ",(0,o.kt)("inlineCode",{parentName:"p"},".borrow_mut()")," of the ",(0,o.kt)("inlineCode",{parentName:"p"},"RefCell<T>"),".")),(0,o.kt)("admonition",{title:"Fun fact",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"I was suggested by the compiler to do ",(0,o.kt)("inlineCode",{parentName:"p"},"use std::borrow::BorrowMut;")," and break the\ncode."),(0,o.kt)("p",{parentName:"admonition"},"So much for the ",(0,o.kt)("em",{parentName:"p"},"almighty")," and ",(0,o.kt)("em",{parentName:"p"},"helpful")," compiler\u2026")),(0,o.kt)("h2",{id:"day-21-monkey-math"},(0,o.kt)("a",{parentName:"h2",href:"https://adventofcode.com/2022/day/21"},"Day 21: Monkey Math")),(0,o.kt)("admonition",{title:"tl;dr",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Computing an expression tree and then also finding ideal value for a node.")),(0,o.kt)("h3",{id:"solution-6"},"Solution"),(0,o.kt)("p",null,"Relatively simple, until you get to the 2nd part where you start to practice\na lot of the copy-paste. I have managed to sneak some perverted stuff in there\nthough :) Let's go through the details."),(0,o.kt)("h4",{id:"default-trait"},(0,o.kt)("inlineCode",{parentName:"h4"},"Default")," trait"),(0,o.kt)("p",null,"For the first time and twice I had a need to have a default value for my types,\nenumerations in this case. Rust offers a very nice trait",(0,o.kt)("sup",{parentName:"p",id:"fnref-1-990909"},(0,o.kt)("a",{parentName:"sup",href:"#fn-1-990909",className:"footnote-ref"},"1"))," that is described\nas:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"A trait for giving a type a useful default value.")),(0,o.kt)("p",null,"I guess it sums it up nicely. The more interesting part about this is the fact\nthat you can use the ",(0,o.kt)("em",{parentName:"p"},"macro machinery")," to save yourself some typing. If you have\nenumeration of which the default value doesn't bear any parameter, you can just\ndo",(0,o.kt)("sup",{parentName:"p",id:"fnref-2-990909"},(0,o.kt)("a",{parentName:"sup",href:"#fn-2-990909",className:"footnote-ref"},"2")),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"#[derive(Default)]\nenum Color {\n #[default]\n White,\n Gray,\n Black,\n}\n")),(0,o.kt)("h4",{id:"abusing-negation"},"Abusing negation"),(0,o.kt)("p",null,"If you want to use a ",(0,o.kt)("em",{parentName:"p"},"unary minus")," operator on your own type, you can implement\na ",(0,o.kt)("inlineCode",{parentName:"p"},"Neg")," trait",(0,o.kt)("sup",{parentName:"p",id:"fnref-3-990909"},(0,o.kt)("a",{parentName:"sup",href:"#fn-3-990909",className:"footnote-ref"},"3")),". I was dealing with a binary tree and needed a way how to look\nat the other side, so I have just implemented the negation for flipping between\nleft and right \ud83d\ude04"),(0,o.kt)("div",{className:"footnotes"},(0,o.kt)("hr",{parentName:"div"}),(0,o.kt)("ol",{parentName:"div"},(0,o.kt)("li",{parentName:"ol",id:"fn-1-990909"},(0,o.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/default/trait.Default.html"},(0,o.kt)("inlineCode",{parentName:"a"},"Default"))," docs",(0,o.kt)("a",{parentName:"li",href:"#fnref-1-990909",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-2-990909"},"Pardon my example from the graph algorithms ;)",(0,o.kt)("a",{parentName:"li",href:"#fnref-2-990909",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-3-990909"},(0,o.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/ops/trait.Neg.html"},(0,o.kt)("inlineCode",{parentName:"a"},"Neg"))," docs",(0,o.kt)("a",{parentName:"li",href:"#fnref-3-990909",className:"footnote-backref"},"\u21a9")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f533ef4a.13c50ab8.js b/assets/js/f533ef4a.13c50ab8.js new file mode 100644 index 0000000..1cc3c85 --- /dev/null +++ b/assets/js/f533ef4a.13c50ab8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2160],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(h,o(o({ref:t},c),{},{components:n})):r.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},6489:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},o=void 0,l={unversionedId:"bonuses/seminar-05-06",id:"bonuses/seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n",source:"@site/pb071/bonuses/05-06.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-05-06",permalink:"/pb071/bonuses/seminar-05-06",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/bonuses/05-06.md",tags:[],version:"current",lastUpdatedAt:1694108971,formattedLastUpdatedAt:"Sep 7, 2023",frontMatter:{id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},sidebar:"autogeneratedBar",previous:{title:"4th seminar",permalink:"/pb071/bonuses/seminar-04"},next:{title:"8th seminar",permalink:"/pb071/bonuses/seminar-08"}},s={},p=[{value:"Introduction",id:"introduction",level:2},{value:"Task no. 1: Reverse (0.5 K\u20a1)",id:"task-no-1-reverse-05-k",level:3},{value:"Task no. 2: Vigen\xe8re (0.5 K\u20a1)",id:"task-no-2-vigen\xe8re-05-k",level:3},{value:"Bonus part (0.5 K\u20a1)",id:"bonus-part-05-k",level:4},{value:"Task no. 3: Bit madness (0.5 K\u20a1)",id:"task-no-3-bit-madness-05-k",level:3},{value:"Task no. 4: All combined to BMP (0.5 K\u20a1)",id:"task-no-4-all-combined-to-bmp-05-k",level:3},{value:"Submitting",id:"submitting",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"For this bonus you can get at maximum 2.5 K\u20a1."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"pathname:///files/pb071/bonuses/05-06.tar.gz"},"Source")),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"In this bonus you will implement few functions that will be used together for\nimplementing a very special cipher."),(0,a.kt)("h3",{id:"task-no-1-reverse-05-k"},"Task no. 1: Reverse (0.5 K\u20a1)"),(0,a.kt)("p",null,"Write a function ",(0,a.kt)("inlineCode",{parentName:"p"},"char* reverse(const char* text)")," that returns copy of the input\nstring in reversed order (also uppercase)."),(0,a.kt)("p",null,"In case you are given ",(0,a.kt)("inlineCode",{parentName:"p"},"NULL"),", return ",(0,a.kt)("inlineCode",{parentName:"p"},"NULL"),"."),(0,a.kt)("p",null,"Example (more in tests):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c"},'char* reversed = reverse("Hello world!");\n\nprintf("%s\\n", reversed);\n// "!DLROW OLLEH"\n\nif (reversed != NULL) {\n free(reversed);\n}\n')),(0,a.kt)("h3",{id:"task-no-2-vigen\xe8re-05-k"},"Task no. 2: Vigen\xe8re (0.5 K\u20a1)"),(0,a.kt)("p",null,"Vigen\xe8re cipher is similar to the Caesar cipher, but you also have a key that is\nused for encrypting (or decrypting)."),(0,a.kt)("p",null,"Your task is to write two functions:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"char* vigenere_encrypt(const char* key, const char* text)")," for encrypting"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"char* vigenere_decrypt(const char* key, const char* text)")," for decrypting")),(0,a.kt)("p",null,"In both of those you should return uppercase characters."),(0,a.kt)("p",null,"Meaning of the parameters you are given:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"key")," - String that represents key that is used for ","*","crypting. It consists of\none word and can have only characters of the alphabet. Does not matter if they\nare uppercase or lowercase."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"text")," - String that is to be ","*","crypted.")),(0,a.kt)("p",null,"Function returns address of the encrypted (or decrypted) string. Or ",(0,a.kt)("inlineCode",{parentName:"p"},"NULL")," in case\nerror occurs."),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c"},'char *encrypted = vigenere_encrypt("CoMPuTeR", "Hello world!");\n\nprintf("%s\\n", encrypted);\n// "JSXAI PSINR!"\n\nif (encrypted != NULL) {\n free(encrypted)\n}\n')),(0,a.kt)("h4",{id:"bonus-part-05-k"},"Bonus part (0.5 K\u20a1)"),(0,a.kt)("p",null,"If you can utilize helper function that would do both encrypting and decrypting,\nyou can gain 0.5 K\u20a1."),(0,a.kt)("p",null,"Usage of ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"/",(0,a.kt)("inlineCode",{parentName:"p"},"false")," to decide path in code is prohibited. It leads to merging\nof both functions into one. Point of this part is to discover a way to do this\ngenerically in such way that there are no separate paths for one or the other. One\nfunction with no branching for both of them, parametrization is your friend :)"),(0,a.kt)("h3",{id:"task-no-3-bit-madness-05-k"},"Task no. 3: Bit madness (0.5 K\u20a1)"),(0,a.kt)("p",null,"This is a state of the art crypto. Please do not share :)"),(0,a.kt)("p",null,"For encrypting:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Split the character that is to be encrypted in halves (4 and 4 bits each)."),(0,a.kt)("li",{parentName:"ol"},"Bits in 1st half are to be split into pairs. Swap bits in those pairs."),(0,a.kt)("li",{parentName:"ol"},"Then use the 4 bits that you created in the 2nd step for ",(0,a.kt)("inlineCode",{parentName:"li"},"XOR")," with the other\n4 bits.")),(0,a.kt)("p",null,"This simple and ingenious principle will be illustrated on the following example.\nString we want to encrypt is ",(0,a.kt)("inlineCode",{parentName:"p"},"Hello world!"),". We need to encrypt each letter separately,\nso we will demonstrate on letter ",(0,a.kt)("inlineCode",{parentName:"p"},"H"),":"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Letter ",(0,a.kt)("inlineCode",{parentName:"p"},"H")," is represented in ASCII as ",(0,a.kt)("inlineCode",{parentName:"p"},"72"),"."),(0,a.kt)("p",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"p"},"72")," represented in binary is: ",(0,a.kt)("inlineCode",{parentName:"p"},"01001000"),". So first 4 bits are: ",(0,a.kt)("inlineCode",{parentName:"p"},"0100")," and last\n4 bits are ",(0,a.kt)("inlineCode",{parentName:"p"},"1000"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"First half of bits (",(0,a.kt)("inlineCode",{parentName:"p"},"0100"),") consists of 2 pairs (",(0,a.kt)("inlineCode",{parentName:"p"},"01")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"00"),") which we swap\n(",(0,a.kt)("inlineCode",{parentName:"p"},"01 ~> 10")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"00 ~> 00"),"). That way we get ",(0,a.kt)("inlineCode",{parentName:"p"},"1000"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"That half is used for xor with the other 4 bits:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"}," 1000 // second half\nXOR 1000 // first half after 2nd step\n--------\n 0000\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Now we combine both halves (first one is ",(0,a.kt)("inlineCode",{parentName:"p"},"1000"),", which we got from the 2nd step\nand second one is ",(0,a.kt)("inlineCode",{parentName:"p"},"0000"),", which we got from the 3rd step) and get ",(0,a.kt)("inlineCode",{parentName:"p"},"10000000"),",\nwhich is encrypted character ",(0,a.kt)("inlineCode",{parentName:"p"},"H")," using this method."))),(0,a.kt)("p",null,"In case of decryption, reverse those steps."),(0,a.kt)("p",null,"Your task is to implement functions:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"unsigned char* bit_encrypt(const char* text)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"char* bit_decrypt(const unsigned char* text)"))),(0,a.kt)("p",null,"Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c"},'unsigned char* encrypted = bit_encrypt("Hello world!");\n\nfor (int i = 0; i < 12;i++) {\n printf("%x ", encrypted[i]);\n //80 9c 95 95 96 11 bc 96 b9 95 9d 10\n}\n\nif (encrypted != NULL) {\n free(encrypted);\n}\n')),(0,a.kt)("h3",{id:"task-no-4-all-combined-to-bmp-05-k"},"Task no. 4: All combined to BMP (0.5 K\u20a1)"),(0,a.kt)("p",null,"Authors of the BMP cipher are non-disclosed :)"),(0,a.kt)("p",null,"Create pair of functions:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"unsigned char* bmp_encrypt(const char* key, const char* text)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"char* bmp_decrypt(const char* key, const unsigned char* text)"))),(0,a.kt)("p",null,"BMP cipher consists of following steps for encrypting:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Reverse the input string"),(0,a.kt)("li",{parentName:"ol"},"Use Vigenere on the string you got from step #1"),(0,a.kt)("li",{parentName:"ol"},"Use bit madness on the string you got from step #2")),(0,a.kt)("p",null,"For decrypting, reverse the steps."),(0,a.kt)("h2",{id:"submitting"},"Submitting"),(0,a.kt)("p",null,"In case you have any questions, feel free to reach out to me."),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Ideally submit the assignment through the merge request. Step-by-step tutorial is\npresent ",(0,a.kt)("a",{parentName:"p",href:"../mr"},"here"),". For setting assignee my xlogin is ",(0,a.kt)("inlineCode",{parentName:"p"},"xfocko"),"."),(0,a.kt)("p",null,"In case you do not want to experiment on GitLab, send me the source code via email,\nbut please prefix subject with: ",(0,a.kt)("inlineCode",{parentName:"p"},"[PB071/14][seminar-05-06]")),(0,a.kt)("p",null,"Deadline for the submission of the bonus is ",(0,a.kt)("strong",{parentName:"p"},"April 21th 24:00"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f60c832f.d6dc7ae0.js b/assets/js/f60c832f.d6dc7ae0.js new file mode 100644 index 0000000..b92731e --- /dev/null +++ b/assets/js/f60c832f.d6dc7ae0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9611],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function m(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),l=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=m(e,["components","mdxType","originalType","parentName"]),u=l(a),d=r,h=u["".concat(s,".").concat(d)]||u[d]||c[d]||i;return a?n.createElement(h,o(o({ref:t},p),{},{components:a})):n.createElement(h,o({ref:t},p))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=d;var m={};for(var s in t)hasOwnProperty.call(t,s)&&(m[s]=t[s]);m.originalType=e,m[u]="string"==typeof e?e:r,o[1]=m;for(var l=2;l<i;l++)o[l]=a[l];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},2490:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>m,toc:()=>l});var n=a(7462),r=(a(7294),a(3905));const i={slug:"garbage_collect",title:"Practice exam B",description:"Garbage everywhere\u2026\n",last_update:{date:new Date("2023-05-08T00:00:00.000Z")}},o="Garbage Collection",m={unversionedId:"pexam/b-garbage_collect",id:"pexam/b-garbage_collect",title:"Practice exam B",description:"Garbage everywhere\u2026\n",source:"@site/pb071/pexam/b-garbage_collect.md",sourceDirName:"pexam",slug:"/pexam/garbage_collect",permalink:"/pb071/pexam/garbage_collect",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/pb071/pexam/b-garbage_collect.md",tags:[],version:"current",lastUpdatedAt:1683504e3,formattedLastUpdatedAt:"May 8, 2023",frontMatter:{slug:"garbage_collect",title:"Practice exam B",description:"Garbage everywhere\u2026\n",last_update:{date:"2023-05-08T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Practice Exams",permalink:"/pb071/category/practice-exams"},next:{title:"Practice exam C",permalink:"/pb071/pexam/cams"}},s={},l=[{value:"Format of the shell history",id:"format-of-the-shell-history",level:2},{value:"Format of the output",id:"format-of-the-output",level:2},{value:"<code>-gt \u2039min_size\u203a</code>",id:"-gt-min_size",level:3},{value:"<code>-f \u2039total_size\u203a \u2039min_unused\u203a</code>",id:"-f-total_size-min_unused",level:3},{value:"Example usage",id:"example-usage",level:2},{value:"Requirements and notes",id:"requirements-and-notes",level:2}],p={toc:l},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"garbage-collection"},"Garbage Collection"),(0,r.kt)("admonition",{title:"Exam environment",type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"During the exam you will be provided with a barebone ",(0,r.kt)("em",{parentName:"li"},"exam session")," on the\n",(0,r.kt)("em",{parentName:"li"},"faculty computers"),"."),(0,r.kt)("li",{parentName:"ul"},"In browser you are only allowed to have the following tabs open:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.cppreference.com"},"C documentation")),(0,r.kt)("li",{parentName:"ul"},"page containing the assignment"))),(0,r.kt)("li",{parentName:"ul"},"You ",(0,r.kt)("strong",{parentName:"li"},"are not")," allowed to use your own source code, e.g. prepared beforehand\nor from the seminars."),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("strong",{parentName:"li"},"5 minutes")," to read through the assignment and ask any follow-up\nquestions should be there something unclear."),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("strong",{parentName:"li"},"60 minutes")," to work on the assignment, afterward your work will be\ndiscussed with your seminar tutor."))),(0,r.kt)("p",null,"You have gotten into a trouble during your regular upgrade of your archLinux",(0,r.kt)("sup",{parentName:"p",id:"fnref-1"},(0,r.kt)("a",{parentName:"sup",href:"#fn-1",className:"footnote-ref"},"1")),"\ninstallation\u2026 You've been carelessly running the upgrades for months and forgot\nabout clearing up the caches."),(0,r.kt)("p",null,"Your task is to write a program ",(0,r.kt)("inlineCode",{parentName:"p"},"garbage_collect")," that will evaluate the shell\nhistory provided as a file and will try to find files or directories that are\nsuspiciously big and decide which of them should be deleted to free some space."),(0,r.kt)("h2",{id:"format-of-the-shell-history"},"Format of the shell history"),(0,r.kt)("p",null,"You are provided one file consisting of the captured buffer of the terminal. You\ncan see only two commands being used:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"cd \u2039somewhere\u203a")," that changes the current working directory."),(0,r.kt)("p",{parentName:"li"},"At the beginning you start in the root of the filesystem (i.e. ",(0,r.kt)("inlineCode",{parentName:"p"},"/"),")."),(0,r.kt)("p",{parentName:"li"},"You are ",(0,r.kt)("strong",{parentName:"p"},"guaranteed")," that ",(0,r.kt)("inlineCode",{parentName:"p"},"\u2039somewhere\u203a")," is:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".")," that is a current working directory (i.e. does nothing),"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"..")," that moves you up one level (in case you are in ",(0,r.kt)("inlineCode",{parentName:"li"},"/"),", does nothing), or"),(0,r.kt)("li",{parentName:"ul"},"is a valid directory in the current working directory.")),(0,r.kt)("admonition",{parentName:"li",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"There are no guarantees or restrictions on the names of the files or\ndirectories!"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"ls")," that will list files in the current working directory and their\nrespective sizes. If there is a directory in the current working it has ",(0,r.kt)("inlineCode",{parentName:"p"},"dir"),"\ninstead of the size."))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ ls\ndir a\n14848514 b.txt\n8504156 c.dat\ndir d\n$ cd a\n$ cd .\n$ cd .\n$ cd .\n$ ls\ndir e\n29116 f\n2557 g\n62596 h.lst\n$ cd e\n$ ls\n584 i\n$ cd ..\n$ cd ..\n$ cd d\n$ ls\n4060174 j\n8033020 d.log\n5626152 d.ext\n7214296 k\n")),(0,r.kt)("p",null,"For this input, you will get following file system:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"- / (dir, size=48381165)\n - a (dir, size=94853)\n - e (dir, size=584)\n - i (file, size=584)\n - f (file, size=29116)\n - g (file, size=2557)\n - h.lst (file, size=62596)\n - b.txt (file, size=14848514)\n - c.dat (file, size=8504156)\n - d (dir, size=24933642)\n - j (file, size=4060174)\n - d.log (file, size=8033020)\n - d.ext (file, size=5626152)\n - k (file, size=7214296)\n")),(0,r.kt)("h2",{id:"format-of-the-output"},"Format of the output"),(0,r.kt)("p",null,"Your program should support 2 switches:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-gt \u2039min_size\u203a")," that will print out suspiciously big files."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-f \u2039total_size\u203a \u2039min_unused\u203a")," that will print out a file to be deleted.")),(0,r.kt)("h3",{id:"-gt-min_size"},(0,r.kt)("inlineCode",{parentName:"h3"},"-gt \u2039min_size\u203a")),(0,r.kt)("p",null,"With this switch you are provided one additional argument:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"min_size")," that is the lower bound (inclusive) for size of any file or\ndirectory that is supposed to be listed.")),(0,r.kt)("p",null,"When your program is being run with this switch, it is is supposed to print out\nall files ",(0,r.kt)("strong",{parentName:"p"},"and")," directories that are bigger than the provided ",(0,r.kt)("inlineCode",{parentName:"p"},"min_size"),"."),(0,r.kt)("h3",{id:"-f-total_size-min_unused"},(0,r.kt)("inlineCode",{parentName:"h3"},"-f \u2039total_size\u203a \u2039min_unused\u203a")),(0,r.kt)("p",null,"With this switch you are provided two additional arguments:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"total_size")," that is a total size of the filesystem",(0,r.kt)("sup",{parentName:"li",id:"fnref-2"},(0,r.kt)("a",{parentName:"sup",href:"#fn-2",className:"footnote-ref"},"2")),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"min_unused")," that is a minimum of free space required for an upgrade.")),(0,r.kt)("p",null,"Your program should find ",(0,r.kt)("strong",{parentName:"p"},"exactly one")," file or a directory that is of the\nsmallest size, but big enough to free enough space for the upgrade to proceed."),(0,r.kt)("p",null,"In other words, if that file or directory is deleted, following should hold:"),(0,r.kt)("div",{className:"math math-display"},(0,r.kt)("span",{parentName:"div",className:"katex-display"},(0,r.kt)("span",{parentName:"span",className:"katex"},(0,r.kt)("span",{parentName:"span",className:"katex-mathml"},(0,r.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,r.kt)("semantics",{parentName:"math"},(0,r.kt)("mrow",{parentName:"semantics"},(0,r.kt)("mrow",{parentName:"mrow"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"t"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"o"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"t"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"a"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"l"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"_"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"s"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"i"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"z"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"e")),(0,r.kt)("mo",{parentName:"mrow"},"\u2212"),(0,r.kt)("mrow",{parentName:"mrow"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"u"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"s"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"e"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"d")),(0,r.kt)("mo",{parentName:"mrow"},"\u2265"),(0,r.kt)("mrow",{parentName:"mrow"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"m"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"i"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"n"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"_"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"u"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"n"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"u"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"s"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"e"),(0,r.kt)("mi",{parentName:"mrow",mathvariant:"monospace"},"d"))),(0,r.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathtt{total\\_size} - \\mathtt{used} \\geq \\mathtt{min\\_unused}")))),(0,r.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7063em",verticalAlign:"-0.0951em"}}),(0,r.kt)("span",{parentName:"span",className:"mord"},(0,r.kt)("span",{parentName:"span",className:"mord mathtt"},"total_size")),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,r.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7719em",verticalAlign:"-0.136em"}}),(0,r.kt)("span",{parentName:"span",className:"mord"},(0,r.kt)("span",{parentName:"span",className:"mord mathtt"},"used")),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,r.kt)("span",{parentName:"span",className:"mrel"},"\u2265"),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7063em",verticalAlign:"-0.0951em"}}),(0,r.kt)("span",{parentName:"span",className:"mord"},(0,r.kt)("span",{parentName:"span",className:"mord mathtt"},"min_unused"))))))),(0,r.kt)("h2",{id:"example-usage"},"Example usage"),(0,r.kt)("p",null,"You can have a look at the example usage of your program. We can run your\nprogram from the shell like"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ ./garbage_collect shell_history.txt -gt 10000000\n24933642 /d\n14848514 /b.txt\n48381165 /\n\n$ ./garbage_collect shell_history.txt -f 70000000 30000000\n24933642 /d\n")),(0,r.kt)("h2",{id:"requirements-and-notes"},"Requirements and notes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Define ",(0,r.kt)("strong",{parentName:"li"},"structures")," (and ",(0,r.kt)("strong",{parentName:"li"},"enumerations"),", if applicable) for the parsed\ninformation from the files."),(0,r.kt)("li",{parentName:"ul"},"For keeping the \u201crecords\u201d, use some ",(0,r.kt)("strong",{parentName:"li"},"dynamic")," data structure.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Don't forget to consider pros and cons of using ",(0,r.kt)("em",{parentName:"li"},"specific")," data structures\nbefore going through implementing."))),(0,r.kt)("li",{parentName:"ul"},"You ",(0,r.kt)("strong",{parentName:"li"},"are not required")," to produce 1:1 output to the provided examples, they\nare just a hint to not waste your time tinkering with a user experience."),(0,r.kt)("li",{parentName:"ul"},"If any of the operations on the input files should fail,\n",(0,r.kt)("strong",{parentName:"li"},"you are expected to")," handle the situation ",(0,r.kt)("em",{parentName:"li"},"accordingly"),"."),(0,r.kt)("li",{parentName:"ul"},"Failures of any other common functions (e.g. functions used for memory\nmanagement) should be handled in ",(0,r.kt)("strong",{parentName:"li"},"the same way")," as they were in the\nhomeworks and seminars."),(0,r.kt)("li",{parentName:"ul"},"Your program ",(0,r.kt)("strong",{parentName:"li"},"must free")," all the resources before exiting.")),(0,r.kt)("div",{className:"footnotes"},(0,r.kt)("hr",{parentName:"div"}),(0,r.kt)("ol",{parentName:"div"},(0,r.kt)("li",{parentName:"ol",id:"fn-1"},"Also applies to Fedora, but\u2026 we use arch btw \ud83d\ude09",(0,r.kt)("a",{parentName:"li",href:"#fnref-1",className:"footnote-backref"},"\u21a9")),(0,r.kt)("li",{parentName:"ol",id:"fn-2"},"duh!",(0,r.kt)("a",{parentName:"li",href:"#fnref-2",className:"footnote-backref"},"\u21a9")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fcc91f97.acb581ec.js b/assets/js/fcc91f97.acb581ec.js new file mode 100644 index 0000000..cae1f66 --- /dev/null +++ b/assets/js/fcc91f97.acb581ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6234],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var m=n.createContext({}),l=function(e){var t=n.useContext(m),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},p=function(e){var t=l(e.components);return n.createElement(m.Provider,{value:t},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,m=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),c=l(a),u=r,d=c["".concat(m,".").concat(u)]||c[u]||h[u]||i;return a?n.createElement(d,s(s({ref:t},p),{},{components:a})):n.createElement(d,s({ref:t},p))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,s=new Array(i);s[0]=u;var o={};for(var m in t)hasOwnProperty.call(t,m)&&(o[m]=t[m]);o.originalType=e,o[c]="string"==typeof e?e:r,s[1]=o;for(var l=2;l<i;l++)s[l]=a[l];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},4507:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=a(7462),r=(a(7294),a(3905));const i={id:"iterative-and-iterators",title:"Iterative algorithms via iterators",description:"Iterative DFS using iterators.\n",tags:["csharp","graphs","iterators","iterative"],last_update:{date:new Date("2021-05-18T00:00:00.000Z")}},s=void 0,o={unversionedId:"graphs/iterative-and-iterators",id:"graphs/iterative-and-iterators",title:"Iterative algorithms via iterators",description:"Iterative DFS using iterators.\n",source:"@site/ib002/10-graphs/2021-05-18-iterative-and-iterators.md",sourceDirName:"10-graphs",slug:"/graphs/iterative-and-iterators",permalink:"/ib002/graphs/iterative-and-iterators",draft:!1,editUrl:"https://gitlab.com/mfocko/blog/tree/main/ib002/10-graphs/2021-05-18-iterative-and-iterators.md",tags:[{label:"csharp",permalink:"/ib002/tags/csharp"},{label:"graphs",permalink:"/ib002/tags/graphs"},{label:"iterators",permalink:"/ib002/tags/iterators"},{label:"iterative",permalink:"/ib002/tags/iterative"}],version:"current",lastUpdatedAt:1621296e3,formattedLastUpdatedAt:"May 18, 2021",frontMatter:{id:"iterative-and-iterators",title:"Iterative algorithms via iterators",description:"Iterative DFS using iterators.\n",tags:["csharp","graphs","iterators","iterative"],last_update:{date:"2021-05-18T00:00:00.000Z"}},sidebar:"autogeneratedBar",previous:{title:"Graphs",permalink:"/ib002/category/graphs"},next:{title:"Distance boundaries from BFS tree on undirected graphs",permalink:"/ib002/graphs/bfs-tree"}},m={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Different implementations",id:"different-implementations",level:2},{value:"Recursive DFS implementation from exercises without colors",id:"recursive-dfs-implementation-from-exercises-without-colors",level:3},{value:"Iterative DFS from the exercises",id:"iterative-dfs-from-the-exercises",level:3},{value:"My iterative with path in stack",id:"my-iterative-with-path-in-stack",level:3},{value:"My iterative solution with iterators",id:"my-iterative-solution-with-iterators",level:3},{value:"Implementation",id:"implementation",level:2}],p={toc:l},c="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"pathname:///files/ib002/graphs/iterative-and-iterators.tar.gz"},"Source code used later on."))),(0,r.kt)("p",null,"As we have talked on the seminar, iterative approach to implementing DFS is not very intuitive and is a very easy way how to create an incorrect implementation."),(0,r.kt)("p",null,"On the other hand, we have seen iterative implementation in the exercises and I have also prepared two from which one was similar to recursive implementation without colors from exercises and the other one used features of high-level languages."),(0,r.kt)("h2",{id:"different-implementations"},"Different implementations"),(0,r.kt)("h3",{id:"recursive-dfs-implementation-from-exercises-without-colors"},"Recursive DFS implementation from exercises without colors"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ada",metastring:"showLineNumbers",showLineNumbers:!0},"function VisitedDFS(u: Vertex, visited: VertexSet) return VertexSet is\n v: Vertex;\nbegin\n visited.Union(To_Set(u));\n\n for v in u.successors loop\n if not Contains(visited, v) then\n visited := visitedDFS(v, Visited);\n end if;\n end loop;\n\n return visited;\nend VisitedDFS;\n")),(0,r.kt)("p",null,"This implementation is correct, does the DFS traversal as it should, however it has one \u201csmallish\u201d downside and that is the time complexity. The usage of set raises the time complexity, of course it is implementation dependant. However in case of either RB-tree or hash-table implementation, we get look-up in time ",(0,r.kt)("span",{parentName:"p",className:"math math-inline"},(0,r.kt)("span",{parentName:"span",className:"katex"},(0,r.kt)("span",{parentName:"span",className:"katex-mathml"},(0,r.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,r.kt)("semantics",{parentName:"math"},(0,r.kt)("mrow",{parentName:"semantics"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,r.kt)("mi",{parentName:"mrow"},"n"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,r.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(n)")))),(0,r.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,r.kt)("span",{parentName:"span",className:"mopen"},"("),(0,r.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,r.kt)("span",{parentName:"span",className:"mclose"},")")))))," for hash-table in worst-case or ",(0,r.kt)("span",{parentName:"p",className:"math math-inline"},(0,r.kt)("span",{parentName:"span",className:"katex"},(0,r.kt)("span",{parentName:"span",className:"katex-mathml"},(0,r.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,r.kt)("semantics",{parentName:"math"},(0,r.kt)("mrow",{parentName:"semantics"},(0,r.kt)("mi",{parentName:"mrow",mathvariant:"script"},"O"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,r.kt)("mi",{parentName:"mrow"},"log"),(0,r.kt)("mo",{parentName:"mrow"},"\u2061"),(0,r.kt)("mi",{parentName:"mrow"},"n"),(0,r.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,r.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathcal{O}(\\log n)")))),(0,r.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,r.kt)("span",{parentName:"span",className:"base"},(0,r.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathcal",style:{marginRight:"0.02778em"}},"O"),(0,r.kt)("span",{parentName:"span",className:"mopen"},"("),(0,r.kt)("span",{parentName:"span",className:"mop"},"lo",(0,r.kt)("span",{parentName:"span",style:{marginRight:"0.01389em"}},"g")),(0,r.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,r.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,r.kt)("span",{parentName:"span",className:"mclose"},")")))))," for the other in the worst-case. Both are not ideal compared to checking color on vertex."),(0,r.kt)("h3",{id:"iterative-dfs-from-the-exercises"},"Iterative DFS from the exercises"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ada",metastring:"showLineNumbers",showLineNumbers:!0},"procedure IterDFS(u: Vertex) is\n stack: StateVector;\n i, time: Integer;\n v: Vertex;\nbegin\n stack.Append(VertexState(u, 0));\n u.color := Gray;\n time := 1;\n u.d := time;\n\n while not stack.Is_Empty loop\n u := stack.Last_Element.Vertex;\n i := stack.Last_Element.NextIndex;\n stack.Delete_Last;\n\n if i < u.successors.Length then\n -- search is not finished, is pushed back to stack\n stack.Append(VertexState(u, k + 1));\n\n v := u.successors.Element(i);\n if v.color = White then\n stack.Append(VertexState(v, 0));\n v.color := Gray;\n time := time + 1;\n v.d := time;\n end if;\n else\n -- u has no other successors, we can finish the search\n time := time + 1;\n u.f := time;\n u.color := Black;\n end if;\n end loop;\n\nend IterDFS;\n")),(0,r.kt)("p",null,"As we can see, there is some ordering in which we search through the successors. Time complexity is OK, stack holds at most all vertices (they must be on the current path)."),(0,r.kt)("h3",{id:"my-iterative-with-path-in-stack"},"My iterative with path in stack"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ada",metastring:"showLineNumbers",showLineNumbers:!0},"procedure DFS(start: Vertex) is\n path: VertexVector;\n time: Integer;\n hasSuccessor: Bool;\n successor: Vertex;\nbegin\n path.Append(start);\n time := 1;\n\n start.d := time;\n start.color := Gray;\n\n while not path.Is_Empty loop\n hasSuccessor := false;\n\n for successor in path.Last_Element.successors loop\n if successor.color = White then\n hasSuccessor := true;\n\n successor.d := time + 1;\n successor.color := Gray;\n time := time + 1;\n\n path.Append(successor);\n\n exit;\n end if;\n end loop;\n\n if not hasSuccessor then\n path.Last_Element.f := time + 1;\n path.Last_Element.color := Black;\n\n time := time + 1;\n path.Delete_Last;\n end if;\n\n end loop;\nend DFS;\n")),(0,r.kt)("p",null,"This approach is similar to the iterative solution from the exercises, but it does not keep the index of the next successor, therefore it always iterates through all of them, which raises the time complexity."),(0,r.kt)("h3",{id:"my-iterative-solution-with-iterators"},"My iterative solution with iterators"),(0,r.kt)("p",null,"On the other hand, we do not actually have to depend on the representation of the graph. In this case, we just ",(0,r.kt)("em",{parentName:"p"},"somehow")," obtain the iterator (which yields all of the succesors) and keep it in the stack."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ada",metastring:"showLineNumbers",showLineNumbers:!0},"procedure DFS(start: Vertex) is\n path: StateVector;\n time: Integer;\n current: State;\n nextVertex: Vertex;\nbegin\n path.Append(State(start));\n time := 1;\n\n start.d := time;\n start.color := Gray;\n\n while not path.Is_Empty loop\n current := path.Last_Element;\n\n if not Move_Next(current.successors) then\n path.Delete_Last;\n\n time := time + 1;\n current.vertex.f := time;\n\n current.vertex.color := Black;\n else if current.successors.Value.color = white then\n nextVertex := current.successors.Value;\n\n time := time + 1;\n nextVertex.d := time;\n\n nextVertex.color := Gray;\n\n path.Append(State(nextVertex));\n end if;\n end loop;\nend DFS;\n")),(0,r.kt)("p",null,"( The way we manipulate with the iterators is closest to the C# implementation. Apart from the ",(0,r.kt)("inlineCode",{parentName:"p"},"Iterator")," thing :) In case you tried to implement it in C++, you would more than likely need to change the check, since you would get first successor right at the beginning )"),(0,r.kt)("p",null,"So here we don't keep indices, but the iterators. We can also check existence of other successors easily: by the iterator moving after the last successor."),(0,r.kt)("p",null,"Closer explanation of the ",(0,r.kt)("em",{parentName:"p"},"iterator shenanigans")," follows. In the beginning, either ",(0,r.kt)("inlineCode",{parentName:"p"},"start")," or when pushing new vertex, we are pushing an iterator that points ",(0,r.kt)("em",{parentName:"p"},"just before")," the first successor. When populating ",(0,r.kt)("inlineCode",{parentName:"p"},"lastVertex")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"successors")," in the ",(0,r.kt)("inlineCode",{parentName:"p"},"while"),"-loop, we take the element from the top of the stack. ",(0,r.kt)("inlineCode",{parentName:"p"},"MoveNext")," returns ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," if there is an element, i.e. successor in this case. If it returns ",(0,r.kt)("inlineCode",{parentName:"p"},"false")," we have nothing to do and we pop the vertex from the stack (also set finishing time and color). If we have successor we check if it has been already visited or not. If has not, we set discovery time and color accordingly, also we add it to stack."),(0,r.kt)("h2",{id:"implementation"},"Implementation"),(0,r.kt)("p",null,"In case you want to play around with the code. At the beginning there is a link to the C# implementation that can be used. It has a basic representation of graph and includes BFS/DFS implementation in classes."),(0,r.kt)("p",null,"In ",(0,r.kt)("inlineCode",{parentName:"p"},"Program.cs")," you can also find a method that returns graph we used on the seminar."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fd0b1e16.7f8a8c44.js b/assets/js/fd0b1e16.7f8a8c44.js new file mode 100644 index 0000000..586ec36 --- /dev/null +++ b/assets/js/fd0b1e16.7f8a8c44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5388],{955:i=>{i.exports=JSON.parse('{"label":"bottom-up-dp","permalink":"/ib002/tags/bottom-up-dp","allTagsPath":"/ib002/tags","count":1,"items":[{"id":"recursion/pyramid-slide-down","title":"Introduction to dynamic programming","description":"Solving a problem in different ways.\\n","permalink":"/ib002/recursion/pyramid-slide-down"}]}')}}]); \ No newline at end of file diff --git a/assets/js/ff472cd9.4ff57c91.js b/assets/js/ff472cd9.4ff57c91.js new file mode 100644 index 0000000..cf8216a --- /dev/null +++ b/assets/js/ff472cd9.4ff57c91.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8643],{7122:a=>{a.exports=JSON.parse('{"label":"iterators","permalink":"/blog/tags/iterators","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/main.9283b308.js b/assets/js/main.9283b308.js new file mode 100644 index 0000000..faea5e5 --- /dev/null +++ b/assets/js/main.9283b308.js @@ -0,0 +1,2 @@ +/*! For license information please see main.9283b308.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,4524)),"@theme/BlogTagsListPage",4524],"0220f5fc":[()=>n.e(1378).then(n.t.bind(n,5804,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-blog/blog/plugin-route-context-module-100.json",5804],"0608d96f":[()=>n.e(7568).then(n.t.bind(n,7158,19)),"~blog/blog/blog-tags-vps-843-list.json",7158],"09bc59e7":[()=>n.e(4932).then(n.t.bind(n,3649,19)),"~docs/ib002/category-ib-002-autogeneratedbar-category-graphs-387.json",3649],"0bfe45d5":[()=>n.e(4269).then(n.t.bind(n,3847,19)),"~blog/blog/blog-tags-rust-0c9-list.json",3847],"0fcbc6ca":[()=>Promise.all([n.e(532),n.e(1851)]).then(n.bind(n,9900)),"@site/src/pages/talks.tsx",9900],"146d9b84":[()=>n.e(9300).then(n.t.bind(n,6671,19)),"~blog/blog/blog-tags-admin-b05-list.json",6671],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(8954),n.e(7918)]).then(n.bind(n,5154)),"@theme/DocItem",5154],"18f481e4":[()=>n.e(6057).then(n.t.bind(n,1738,19)),"~docs/ib002/tag-ib-002-tags-java-086.json",1738],"19d7c045":[()=>n.e(4637).then(n.t.bind(n,7772,19)),"~blog/blog/blog-tags-advent-of-code-49f.json",7772],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,9172)),"@theme/SearchPage",9172],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1bebd4ed":[()=>n.e(404).then(n.t.bind(n,9623,19)),"~docs/pb071/version-current-metadata-prop-751.json",9623],"1e2009d3":[()=>n.e(3906).then(n.bind(n,2131)),"@site/ib002/08-rb-trees/2022-04-05-applications.md",2131],"1e298f0c":[()=>n.e(2732).then(n.t.bind(n,3467,19)),"~docs/ib002/tag-ib-002-tags-bfs-346.json",3467],"22a175ec":[()=>Promise.all([n.e(532),n.e(6890)]).then(n.bind(n,707)),"@site/src/pages/contributions.tsx",707],"2523321d":[()=>n.e(9193).then(n.bind(n,5998)),"@site/pb071/bonuses/08.md",5998],27470891:[()=>n.e(4972).then(n.t.bind(n,9249,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/pb071/plugin-route-context-module-100.json",9249],"280c26e1":[()=>n.e(5529).then(n.t.bind(n,3272,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/ib002/plugin-route-context-module-100.json",3272],29694455:[()=>n.e(3388).then(n.t.bind(n,9828,19)),"~blog/blog/blog-tags-iterators-977-list.json",9828],"2a09abcd":[()=>n.e(1246).then(n.bind(n,3903)),"@site/ib002/10-graphs/2022-04-30-bfs-tree.md",3903],"3011a4c0":[()=>n.e(7926).then(n.t.bind(n,1670,19)),"~blog/blog/blog-tags-copr-70b-list.json",1670],"337bc122":[()=>n.e(1731).then(n.bind(n,8378)),"@site/pb071/00-intro-pb071.md",8378],"3593220c":[()=>n.e(8167).then(n.t.bind(n,2947,19)),"~docs/ib002/tag-ib-002-tags-greedy-99b.json",2947],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,727)),"@theme/DocTagsListPage",727],"377f3aa1":[()=>n.e(1011).then(n.bind(n,3248)),"@site/blog/aoc-2022/02-week-2.md",3248],"37cf4872":[()=>n.e(7979).then(n.t.bind(n,821,19)),"~docs/ib002/tag-ib-002-tags-postconditions-162.json",821],"3aef4518":[()=>n.e(1505).then(n.t.bind(n,1921,19)),"~docs/ib002/tag-ib-002-tags-iterative-678.json",1921],"3da4b779":[()=>n.e(2177).then(n.bind(n,8180)),"@site/blog/aoc-2022/04-week-4.md",8180],"3de247b5":[()=>Promise.all([n.e(532),n.e(3184)]).then(n.bind(n,5306)),"@site/ib002/08-rb-trees/2023-06-10-rules.md",5306],"4200b1a9":[()=>n.e(866).then(n.t.bind(n,4612,19)),"~blog/blog/blog-archive-80c.json",4612],"4621632b":[()=>n.e(3519).then(n.t.bind(n,9760,19)),"~blog/blog/blog-tags-cpp-7c7-list.json",9760],"4688cd57":[()=>n.e(932).then(n.t.bind(n,2647,19)),"~docs/pb071/category-pb-071-autogeneratedbar-category-bonuses-855.json",2647],"470a9204":[()=>n.e(3936).then(n.t.bind(n,4439,19)),"~docs/ib002/tag-ib-002-tags-applications-a68.json",4439],"4c4e9f30":[()=>n.e(7883).then(n.t.bind(n,7803,19)),"~docs/ib002/tag-ib-002-tags-exponential-5c3.json",7803],"4e286f4e":[()=>n.e(1501).then(n.bind(n,6038)),"@site/ib002/04-recursion/2022-11-29-karel-1.md",6038],"4edd2021":[()=>n.e(5975).then(n.t.bind(n,1705,19)),"~blog/blog/blog-tags-cpp-7c7.json",1705],"4ee12fa2":[()=>n.e(7963).then(n.bind(n,9258)),"@site/pb161/00-intro-pb161.md",9258],51624505:[()=>n.e(3731).then(n.bind(n,905)),"@site/blog/aoc-2022/00-intro.md",905],"52bff962":[()=>n.e(9710).then(n.t.bind(n,1193,19)),"~docs/ib002/tags-list-current-prop-15a.json",1193],"52f2a5bf":[()=>n.e(5430).then(n.t.bind(n,1387,19)),"~blog/blog/blog-tags-red-hat-df4.json",1387],"58dd4fbd":[()=>n.e(3340).then(n.t.bind(n,3047,19)),"~docs/ib002/tag-ib-002-tags-c-d4e.json",3047],"5af27364":[()=>n.e(3502).then(n.t.bind(n,3162,19)),"~docs/ib002/tag-ib-002-tags-balanced-trees-896.json",3162],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"62d847b3":[()=>n.e(8520).then(n.t.bind(n,1901,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db-list.json",1901],"66d5ef6c":[()=>n.e(9228).then(n.t.bind(n,4087,19)),"~blog/blog/blog-tags-tags-4c2.json",4087],"6875c492":[()=>Promise.all([n.e(532),n.e(8954),n.e(6048),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"713b7838":[()=>n.e(2167).then(n.bind(n,6652)),"@site/pb071/bonuses/04.md",6652],"73d5f13d":[()=>n.e(7555).then(n.t.bind(n,3974,19)),"~docs/ib002/tag-ib-002-tags-iterators-e30.json",3974],"74c2e0e9":[()=>n.e(3528).then(n.t.bind(n,2235,19)),"~docs/ib002/tag-ib-002-tags-backtracking-737.json",2235],"75316eff":[()=>n.e(4287).then(n.t.bind(n,5603,19)),"~docs/ib002/tag-ib-002-tags-python-65c.json",5603],"75cccf44":[()=>n.e(4256).then(n.bind(n,634)),"@site/blog/leetcode/sort-matrix-diagonally.md?truncated=true",634],"765ea78b":[()=>n.e(3039).then(n.t.bind(n,3010,19)),"~blog/blog/blog-tags-\ud83c\udfed-551.json",3010],"788cc978":[()=>n.e(9157).then(n.bind(n,3506)),"@site/ib002/03-time-complexity/2021-03-31-extend.md",3506],"7cf94373":[()=>n.e(3095).then(n.bind(n,1010)),"@site/pb071/bonuses/10.md",1010],"7d580cdb":[()=>n.e(8442).then(n.bind(n,7527)),"@site/ib002/04-recursion/2023-08-17-pyramid-slide-down.md",7527],"82b3b723":[()=>n.e(5787).then(n.t.bind(n,6564,19)),"~docs/ib002/tag-ib-002-tags-dynamic-programming-5f1.json",6564],"834ed470":[()=>n.e(3223).then(n.bind(n,6454)),"@site/ib002/00-intro-ib002.md",6454],"83bf91d3":[()=>n.e(7823).then(n.bind(n,1187)),"@site/pb071/mr.md",1187],"8418981c":[()=>n.e(5383).then(n.t.bind(n,1930,19)),"~docs/ib002/tag-ib-002-tags-recursion-36f.json",1930],"86cd1460":[()=>n.e(1235).then(n.t.bind(n,8968,19)),"~blog/blog/blog-tags-leetcode-042.json",8968],"8b1802c5":[()=>n.e(8480).then(n.t.bind(n,832,19)),"~blog/blog/blog-tags-advent-of-code-49f-list.json",832],"8c0e532b":[()=>n.e(822).then(n.t.bind(n,3968,19)),"~blog/blog/blog-tags-vps-843.json",3968],"8e1fadd0":[()=>n.e(6554).then(n.t.bind(n,9278,19)),"~docs/ib002/category-ib-002-autogeneratedbar-category-algorithms-and-correctness-947.json",9278],"90425ffc":[()=>n.e(8769).then(n.bind(n,3167)),"@site/pb071/bonuses/03.md",3167],"9287eafd":[()=>n.e(5521).then(n.t.bind(n,716,19)),"~blog/blog/blog-tags-rust-0c9.json",716],"94036ea2":[()=>n.e(4477).then(n.t.bind(n,6996,19)),"~docs/pb161/version-current-metadata-prop-751.json",6996],"95b96bb9":[()=>n.e(3561).then(n.t.bind(n,4577,19)),"~blog/blog/blog-post-list-prop-blog.json",4577],"95be84b6":[()=>n.e(3835).then(n.t.bind(n,1820,19)),"~docs/ib002/tag-ib-002-tags-csharp-684.json",1820],"95f41f0b":[()=>n.e(9385).then(n.bind(n,6534)),"@site/blog/aoc-2022/01-week-1.md?truncated=true",6534],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],"9eb50c57":[()=>n.e(7509).then(n.bind(n,6239)),"@site/ib002/02-algorithms-correctness/2021-03-18-postcondition-ambiguity.md",6239],a082abd3:[()=>n.e(8786).then(n.t.bind(n,3276,19)),"~blog/blog/blog-tags-admin-b05.json",3276],a2be6ffb:[()=>n.e(4800).then(n.bind(n,5185)),"@site/pb161/environment.md",5185],a6a48ea2:[()=>n.e(3618).then(n.bind(n,8763)),"@site/blog/aoc-2022/02-week-2.md?truncated=true",8763],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(8954),n.e(6048),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7098721:[()=>n.e(1050).then(n.t.bind(n,6615,19)),"~blog/blog/blog-c06.json",6615],a7d8226e:[()=>n.e(516).then(n.t.bind(n,4475,19)),"~docs/ib002/category-ib-002-autogeneratedbar-category-asymptotic-notation-and-time-complexity-5a5.json",4475],a80747a0:[()=>n.e(5824).then(n.t.bind(n,4464,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db.json",4464],ab2721d4:[()=>n.e(7755).then(n.bind(n,861)),"@site/blog/aoc-2022/04-week-4.md?truncated=true",861],af8b72a7:[()=>n.e(5658).then(n.bind(n,3650)),"@site/blog/2023-08-02-copr.md?truncated=true",3650],b0067e0a:[()=>n.e(1272).then(n.t.bind(n,2611,19)),"~docs/ib002/version-current-metadata-prop-751.json",2611],b0291f37:[()=>n.e(6097).then(n.t.bind(n,7085,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],b25fbc58:[()=>n.e(9197).then(n.t.bind(n,5617,19)),"~blog/blog/blog-tags-\ud83c\udfed-551-list.json",5617],b2c263ce:[()=>n.e(6192).then(n.t.bind(n,8379,19)),"~docs/ib002/category-ib-002-autogeneratedbar-category-recursion-061.json",8379],b45dccf0:[()=>n.e(9679).then(n.t.bind(n,8296,19)),"~blog/blog/blog-tags-copr-70b.json",8296],b5a32f14:[()=>n.e(2433).then(n.bind(n,9746)),"@site/blog/2023-08-02-copr.md",9746],b9b1ccdc:[()=>n.e(9044).then(n.bind(n,284)),"@site/pb071/pexam/c-cams.md",284],bb882650:[()=>n.e(8091).then(n.bind(n,6974)),"@site/blog/aoc-2022/03-week-3.md?truncated=true",6974],be4da062:[()=>n.e(6498).then(n.t.bind(n,4436,19)),"~docs/ib002/tag-ib-002-tags-time-complexity-7a0.json",4436],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,3261)),"@site/src/pages/index.js",3261],c8cbffbd:[()=>n.e(9814).then(n.t.bind(n,4166,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/pb161/plugin-route-context-module-100.json",4166],ccc49370:[()=>Promise.all([n.e(532),n.e(8954),n.e(6048),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],cfa2b263:[()=>n.e(3086).then(n.bind(n,6031)),"@site/blog/leetcode/sort-matrix-diagonally.md",6031],d02d148d:[()=>n.e(7780).then(n.t.bind(n,9221,19)),"~docs/ib002/tag-ib-002-tags-testing-4cc.json",9221],d5ca4423:[()=>n.e(5126).then(n.t.bind(n,1032,19)),"~docs/ib002/tag-ib-002-tags-sorting-23e.json",1032],d661cf04:[()=>n.e(6112).then(n.t.bind(n,8194,19)),"~docs/pb071/category-pb-071-autogeneratedbar-category-practice-exams-a48.json",8194],d675395f:[()=>n.e(2741).then(n.t.bind(n,5745,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],d74d369f:[()=>n.e(9479).then(n.t.bind(n,2231,19)),"~docs/ib002/category-ib-002-autogeneratedbar-category-red-black-trees-6b6.json",2231],d79dd549:[()=>n.e(5169).then(n.t.bind(n,9261,19)),"~blog/blog/blog-tags-red-hat-df4-list.json",9261],d7f7fb17:[()=>n.e(1171).then(n.bind(n,8049)),"@site/blog/aoc-2022/00-intro.md?truncated=true",8049],d9adc206:[()=>n.e(4252).then(n.t.bind(n,6297,19)),"~docs/ib002/tag-ib-002-tags-dynamic-array-119.json",6297],dadfcff0:[()=>n.e(7624).then(n.t.bind(n,3095,19)),"~docs/ib002/tag-ib-002-tags-graphs-c81.json",3095],df203c0f:[()=>n.e(9924).then(n.bind(n,1298)),"@theme/DocTagDocListPage",1298],dff2ebad:[()=>n.e(146).then(n.bind(n,577)),"@site/blog/aoc-2022/01-week-1.md",577],e25b3183:[()=>n.e(6).then(n.t.bind(n,5934,19)),"~docs/ib002/tag-ib-002-tags-top-down-dp-cc1.json",5934],e89da83e:[()=>n.e(8757).then(n.t.bind(n,7416,19)),"~blog/blog/blog-tags-leetcode-042-list.json",7416],eb7cc117:[()=>n.e(143).then(n.t.bind(n,3635,19)),"~docs/ib002/tag-ib-002-tags-red-black-trees-22f.json",3635],edfd2a45:[()=>n.e(7248).then(n.t.bind(n,1955,19)),"~docs/ib002/tag-ib-002-tags-karel-bbc.json",1955],f48be158:[()=>n.e(4064).then(n.bind(n,9859)),"@site/blog/aoc-2022/03-week-3.md",9859],f533ef4a:[()=>n.e(2160).then(n.bind(n,6489)),"@site/pb071/bonuses/05-06.md",6489],f60c832f:[()=>n.e(9611).then(n.bind(n,2490)),"@site/pb071/pexam/b-garbage_collect.md",2490],fcc91f97:[()=>n.e(6234).then(n.bind(n,4507)),"@site/ib002/10-graphs/2021-05-18-iterative-and-iterators.md",4507],fd0b1e16:[()=>n.e(5388).then(n.t.bind(n,955,19)),"~docs/ib002/tag-ib-002-tags-bottom-up-dp-3a4.json",955],ff472cd9:[()=>n.e(8643).then(n.t.bind(n,7122,19)),"~blog/blog/blog-tags-iterators-977.json",7122]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(7515).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","a0e"),exact:!0},{path:"/blog/2023/08/02/copr",component:f("/blog/2023/08/02/copr","75c"),exact:!0},{path:"/blog/aoc-2022/1st-week",component:f("/blog/aoc-2022/1st-week","0fa"),exact:!0},{path:"/blog/aoc-2022/2nd-week",component:f("/blog/aoc-2022/2nd-week","0be"),exact:!0},{path:"/blog/aoc-2022/3rd-week",component:f("/blog/aoc-2022/3rd-week","2f7"),exact:!0},{path:"/blog/aoc-2022/4th-week",component:f("/blog/aoc-2022/4th-week","9fd"),exact:!0},{path:"/blog/aoc-2022/intro",component:f("/blog/aoc-2022/intro","645"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","db3"),exact:!0},{path:"/blog/leetcode/sort-diagonally",component:f("/blog/leetcode/sort-diagonally","819"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","726"),exact:!0},{path:"/blog/tags/\ud83c\udfed",component:f("/blog/tags/\ud83c\udfed","fa9"),exact:!0},{path:"/blog/tags/admin",component:f("/blog/tags/admin","3a8"),exact:!0},{path:"/blog/tags/advent-of-code",component:f("/blog/tags/advent-of-code","3ce"),exact:!0},{path:"/blog/tags/advent-of-code-2022",component:f("/blog/tags/advent-of-code-2022","a9b"),exact:!0},{path:"/blog/tags/copr",component:f("/blog/tags/copr","dd4"),exact:!0},{path:"/blog/tags/cpp",component:f("/blog/tags/cpp","d2e"),exact:!0},{path:"/blog/tags/iterators",component:f("/blog/tags/iterators","f8b"),exact:!0},{path:"/blog/tags/leetcode",component:f("/blog/tags/leetcode","238"),exact:!0},{path:"/blog/tags/red-hat",component:f("/blog/tags/red-hat","06b"),exact:!0},{path:"/blog/tags/rust",component:f("/blog/tags/rust","576"),exact:!0},{path:"/blog/tags/vps",component:f("/blog/tags/vps","afb"),exact:!0},{path:"/contributions",component:f("/contributions","c6e"),exact:!0},{path:"/ib002/tags",component:f("/ib002/tags","139"),exact:!0},{path:"/ib002/tags/applications",component:f("/ib002/tags/applications","bd0"),exact:!0},{path:"/ib002/tags/backtracking",component:f("/ib002/tags/backtracking","e79"),exact:!0},{path:"/ib002/tags/balanced-trees",component:f("/ib002/tags/balanced-trees","633"),exact:!0},{path:"/ib002/tags/bfs",component:f("/ib002/tags/bfs","2b0"),exact:!0},{path:"/ib002/tags/bottom-up-dp",component:f("/ib002/tags/bottom-up-dp","bfd"),exact:!0},{path:"/ib002/tags/c",component:f("/ib002/tags/c","41d"),exact:!0},{path:"/ib002/tags/csharp",component:f("/ib002/tags/csharp","e02"),exact:!0},{path:"/ib002/tags/dynamic-array",component:f("/ib002/tags/dynamic-array","a76"),exact:!0},{path:"/ib002/tags/dynamic-programming",component:f("/ib002/tags/dynamic-programming","5f1"),exact:!0},{path:"/ib002/tags/exponential",component:f("/ib002/tags/exponential","3dd"),exact:!0},{path:"/ib002/tags/graphs",component:f("/ib002/tags/graphs","b40"),exact:!0},{path:"/ib002/tags/greedy",component:f("/ib002/tags/greedy","f4e"),exact:!0},{path:"/ib002/tags/iterative",component:f("/ib002/tags/iterative","81e"),exact:!0},{path:"/ib002/tags/iterators",component:f("/ib002/tags/iterators","a31"),exact:!0},{path:"/ib002/tags/java",component:f("/ib002/tags/java","99a"),exact:!0},{path:"/ib002/tags/karel",component:f("/ib002/tags/karel","a44"),exact:!0},{path:"/ib002/tags/postconditions",component:f("/ib002/tags/postconditions","5a4"),exact:!0},{path:"/ib002/tags/python",component:f("/ib002/tags/python","2cd"),exact:!0},{path:"/ib002/tags/recursion",component:f("/ib002/tags/recursion","1ae"),exact:!0},{path:"/ib002/tags/red-black-trees",component:f("/ib002/tags/red-black-trees","2b4"),exact:!0},{path:"/ib002/tags/sorting",component:f("/ib002/tags/sorting","90a"),exact:!0},{path:"/ib002/tags/testing",component:f("/ib002/tags/testing","b13"),exact:!0},{path:"/ib002/tags/time-complexity",component:f("/ib002/tags/time-complexity","01e"),exact:!0},{path:"/ib002/tags/top-down-dp",component:f("/ib002/tags/top-down-dp","e81"),exact:!0},{path:"/search",component:f("/search","49e"),exact:!0},{path:"/talks",component:f("/talks","cdf"),exact:!0},{path:"/ib002",component:f("/ib002","092"),routes:[{path:"/ib002/",component:f("/ib002/","e66"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/algorithms-correctness/postcondition-ambiguity",component:f("/ib002/algorithms-correctness/postcondition-ambiguity","760"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/category/algorithms-and-correctness",component:f("/ib002/category/algorithms-and-correctness","cde"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/category/asymptotic-notation-and-time-complexity",component:f("/ib002/category/asymptotic-notation-and-time-complexity","b3d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/category/graphs",component:f("/ib002/category/graphs","eb5"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/category/recursion",component:f("/ib002/category/recursion","39b"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/category/red-black-trees",component:f("/ib002/category/red-black-trees","e0c"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/graphs/bfs-tree",component:f("/ib002/graphs/bfs-tree","aaa"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/graphs/iterative-and-iterators",component:f("/ib002/graphs/iterative-and-iterators","489"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/rb-trees/applications",component:f("/ib002/rb-trees/applications","cfb"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/rb-trees/rules",component:f("/ib002/rb-trees/rules","35f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/recursion/karel-1",component:f("/ib002/recursion/karel-1","11c"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/recursion/pyramid-slide-down",component:f("/ib002/recursion/pyramid-slide-down","73a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/ib002/time-complexity/extend",component:f("/ib002/time-complexity/extend","712"),exact:!0,sidebar:"autogeneratedBar"}]},{path:"/pb071",component:f("/pb071","f28"),routes:[{path:"/pb071/",component:f("/pb071/","66f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/bonuses/seminar-03",component:f("/pb071/bonuses/seminar-03","86d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/bonuses/seminar-04",component:f("/pb071/bonuses/seminar-04","7d6"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/bonuses/seminar-05-06",component:f("/pb071/bonuses/seminar-05-06","c41"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/bonuses/seminar-08",component:f("/pb071/bonuses/seminar-08","487"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/bonuses/seminar-10",component:f("/pb071/bonuses/seminar-10","8b8"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/category/bonuses",component:f("/pb071/category/bonuses","995"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/category/practice-exams",component:f("/pb071/category/practice-exams","066"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/mr",component:f("/pb071/mr","a43"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/pexam/cams",component:f("/pb071/pexam/cams","a0c"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb071/pexam/garbage_collect",component:f("/pb071/pexam/garbage_collect","0af"),exact:!0,sidebar:"autogeneratedBar"}]},{path:"/pb161",component:f("/pb161","bca"),routes:[{path:"/pb161/",component:f("/pb161/","726"),exact:!0,sidebar:"autogeneratedBar"},{path:"/pb161/environment",component:f("/pb161/environment","a0b"),exact:!0,sidebar:"autogeneratedBar"}]},{path:"/",component:f("/","dfb"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(7439),n(7800)];var c=n(723),u=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(833),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,u.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function x(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const T=new Map;function C(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),P("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const R=O,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function j(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,$(e))),r.createElement("div",{id:M}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(j,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763);function H(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(Z.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(U,null),r.createElement(x,null),r.createElement(z,null),r.createElement(R,{location:C(t)},e)))))}var G=n(6887);const V=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var W=n(9670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,W.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?V(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),I(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;I(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"pb071":{"path":"/pb071","versions":[{"name":"current","label":"Next","isLast":true,"path":"/pb071","mainDocId":"pb071-intro","docs":[{"id":"bonuses/seminar-03","path":"/pb071/bonuses/seminar-03","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-04","path":"/pb071/bonuses/seminar-04","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-05-06","path":"/pb071/bonuses/seminar-05-06","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-08","path":"/pb071/bonuses/seminar-08","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-10","path":"/pb071/bonuses/seminar-10","sidebar":"autogeneratedBar"},{"id":"mr","path":"/pb071/mr","sidebar":"autogeneratedBar"},{"id":"pb071-intro","path":"/pb071/","sidebar":"autogeneratedBar"},{"id":"pexam/b-garbage_collect","path":"/pb071/pexam/garbage_collect","sidebar":"autogeneratedBar"},{"id":"pexam/c-cams","path":"/pb071/pexam/cams","sidebar":"autogeneratedBar"},{"id":"/category/bonuses","path":"/pb071/category/bonuses","sidebar":"autogeneratedBar"},{"id":"/category/practice-exams","path":"/pb071/category/practice-exams","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/pb071/","label":"pb071-intro"}}}}],"breadcrumbs":true},"pb161":{"path":"/pb161","versions":[{"name":"current","label":"Next","isLast":true,"path":"/pb161","mainDocId":"pb161-intro","docs":[{"id":"environment","path":"/pb161/environment","sidebar":"autogeneratedBar"},{"id":"pb161-intro","path":"/pb161/","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/pb161/","label":"pb161-intro"}}}}],"breadcrumbs":true},"ib002":{"path":"/ib002","versions":[{"name":"current","label":"Next","isLast":true,"path":"/ib002","mainDocId":"ib002-intro","docs":[{"id":"algorithms-correctness/postcondition-ambiguity","path":"/ib002/algorithms-correctness/postcondition-ambiguity","sidebar":"autogeneratedBar"},{"id":"graphs/bfs-tree","path":"/ib002/graphs/bfs-tree","sidebar":"autogeneratedBar"},{"id":"graphs/iterative-and-iterators","path":"/ib002/graphs/iterative-and-iterators","sidebar":"autogeneratedBar"},{"id":"ib002-intro","path":"/ib002/","sidebar":"autogeneratedBar"},{"id":"rb-trees/applications","path":"/ib002/rb-trees/applications","sidebar":"autogeneratedBar"},{"id":"rb-trees/rules","path":"/ib002/rb-trees/rules","sidebar":"autogeneratedBar"},{"id":"recursion/karel-1","path":"/ib002/recursion/karel-1","sidebar":"autogeneratedBar"},{"id":"recursion/pyramid-slide-down","path":"/ib002/recursion/pyramid-slide-down","sidebar":"autogeneratedBar"},{"id":"time-complexity/extend","path":"/ib002/time-complexity/extend","sidebar":"autogeneratedBar"},{"id":"/category/algorithms-and-correctness","path":"/ib002/category/algorithms-and-correctness","sidebar":"autogeneratedBar"},{"id":"/category/asymptotic-notation-and-time-complexity","path":"/ib002/category/asymptotic-notation-and-time-complexity","sidebar":"autogeneratedBar"},{"id":"/category/recursion","path":"/ib002/category/recursion","sidebar":"autogeneratedBar"},{"id":"/category/red-black-trees","path":"/ib002/category/red-black-trees","sidebar":"autogeneratedBar"},{"id":"/category/graphs","path":"/ib002/category/graphs","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/ib002/","label":"ib002-intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.1"},"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.5"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.1"}}}'),c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7452);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const _=f||p;const x=(0,s.Z)(_),T=_?.replace("pathname://","");let C=void 0!==T?(A=T,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;C&&x&&(C=(0,i.applyTrailingSlash)(C,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),P=n?o.OL:o.rU,N=c.Z.canUseIntersectionObserver,I=(0,a.useRef)(),O=()=>{L.current||null==C||(window.docusaurus.preload(C),L.current=!0)};(0,a.useEffect)((()=>(!N&&x&&null!=C&&window.docusaurus.prefetch(C),()=>{N&&I.current&&I.current.disconnect()})),[I,C,N,x]);const R=C?.startsWith("#")??!1,M=!C||!x||R;return M||h||E.collectLink(C),M?a.createElement("a",(0,r.Z)({ref:S,href:C},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(P,(0,r.Z)({},v,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,N&&e&&x&&(I.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(I.current.unobserve(e),I.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),I.current.observe(e))},to:C},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>p,WS:()=>m,_r:()=>d,Jo:()=>v,zh:()=>f,yW:()=>h,gB:()=>g});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=s(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,f=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function g(e){return f(e).versions}function h(e){const t=f(e);return l(t)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return c(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(9462)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7452:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Pt});var r=n(7294),a=n(6010),o=n(4763),i=n(833),l=n(7462),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function T(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const C={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:C.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:C.announcementBarPlaceholder}),r.createElement(T,{className:C.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:C.announcementBarClose}))}var L=n(3163),P=n(2466);var N=n(902),I=n(3102);const O=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,I.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,N.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(O.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(O);if(!e)throw new N.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,I.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function B(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var F=n(2949),$=n(2389);function j(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,$.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(U.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(j,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(z,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})))}const H=r.memo(Z),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,F.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var W=n(1327);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919),ee=n(8022),te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:u?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Ze,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),p()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Ze,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";function he(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var be=n(830),ve=["translations"];function ye(){return ye=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ye.apply(this,arguments)}function we(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(s){l=!0,a=s}finally{try{i||null==n.return||n.return()}finally{if(l)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ke(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ke(e,t)}(e,t)||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.")}()}function ke(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}function Ee(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Se="Ctrl";var _e=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ee(e,ve),i=a.buttonText,l=void 0===i?"Search":i,s=a.buttonAriaLabel,c=void 0===s?"Search":s,u=we((0,r.useState)(null),2),d=u[0],f=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(Se))}),[]),r.createElement("button",ye({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(be.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Se?r.createElement(he,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),xe=n(5742),Te=n(6177),Ce=n(239),Ae=n(3320);var Le=n(3935);const Pe={button:{buttonText:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,c.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,c.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,c.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,c.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,c.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,c.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,c.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,c.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ne=null;function Ie(e){let{hit:t,children:n}=e;return r.createElement(X.Z,{to:t.url},n)}function Oe(e){let{state:t,onClose:n}=e;const a=(0,Te.M)();return r.createElement(X.Z,{to:a(t.query),onClick:n},r.createElement(c.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Re(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,se.Z)(),c=(0,Ce.l)(),u=function(){const{locale:e,tags:t}=(0,Ae._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],f=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(u,d):d,p={...o.searchParameters,facetFilters:f},m=(0,s.k6)(),g=(0,r.useRef)(null),h=(0,r.useRef)(null),[b,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>Ne?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,1426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,8894))]).then((e=>{let[{DocSearchModal:t}]=e;Ne=t}))),[]),E=(0,r.useCallback)((()=>{k().then((()=>{g.current=document.createElement("div"),document.body.insertBefore(g.current,document.body.firstChild),v(!0)}))}),[k,v]),S=(0,r.useCallback)((()=>{v(!1),g.current?.remove()}),[v]),_=(0,r.useCallback)((e=>{k().then((()=>{v(!0),w(e.key)}))}),[k,v,w]),x=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:m.push(t)}}).current,T=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:c(e.url)}))))).current,C=(0,r.useMemo)((()=>e=>r.createElement(Oe,(0,l.Z)({},e,{onClose:S}))),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:b,onOpen:E,onClose:S,onInput:_,searchButtonRef:h}),r.createElement(r.Fragment,null,r.createElement(xe.Z,null,r.createElement("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),r.createElement(_e,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:E,ref:h,translations:Pe.button}),b&&Ne&&g.current&&(0,Le.createPortal)(r.createElement(Ne,(0,l.Z)({onClose:S,initialScrollY:window.scrollY,initialQuery:y,navigator:x,transformItems:T,hitComponent:Ie,transformSearchClient:A},o.searchPagePath&&{resultsFooterComponent:C},o,{searchParameters:p,placeholder:Pe.placeholder,translations:Pe.modal})),g.current))}function Me(){const{siteConfig:e}=(0,se.Z)();return r.createElement(Re,e.themeConfig.algolia)}const De={searchBox:"searchBox_ZlJk"};function Be(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,De.searchBox)},t)}var Fe=n(143),$e=n(3438);var je=n(373);const ze=e=>e.docs.find((t=>t.id===e.mainDocId));const Ue={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Be,{className:n},r.createElement(Me,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Fe.Iw)(a),s=(0,$e.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Fe.Iw)(a),s=(0,$e.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,$e.lO)(a)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,Fe.Iw)(n),m=(0,Fe.gB)(n),{savePreferredVersionName:g}=(0,je.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ze(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,$e.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ze(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function Ze(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ue[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function He(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ze,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ge(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ve(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ge,{onClick:()=>t.hide()}),t.content)}function We(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(B,{header:r.createElement(K,null),primaryMenu:r.createElement(He,null),secondaryMenu:r.createElement(Ve,null)}):null}const qe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ye(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ke(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-o.current,c=window.innerHeight;l&&i>=l?n(!1):i+c<s&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[qe.navbarHideable,!s&&qe.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ye,{onClick:i.toggle}),r.createElement(We,null))}var Xe=n(8780);const Qe={errorBoundaryError:"errorBoundaryError_a6uf"};function Je(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function et(e){let{error:t}=e;const n=(0,Xe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Qe.errorBoundaryError},n)}class tt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const nt="right";function rt(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function at(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(rt,null))}const ot={colorModeToggle:"colorModeToggle_DEke"};function it(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(tt,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(Ze,e)))))}function lt(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function st(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??nt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(lt,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(at,null),r.createElement(q,null),r.createElement(it,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(it,{items:a}),r.createElement(V,{className:ot.colorModeToggle}),!o&&r.createElement(Be,null,r.createElement(Me,null)))})}function ct(){return r.createElement(Ke,null,r.createElement(st,null))}function ut(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,c=(0,Q.Z)(n),u=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function dt(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(ut,{item:t}))}function ft(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(dt,{key:t,item:e})))))}function pt(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(ft,{key:t,column:e}))))}function mt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function gt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ut,{item:t})}function ht(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(gt,{item:e}),t.length!==n+1&&r.createElement(mt,null))))))}function bt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(pt,{columns:t}):r.createElement(ht,{links:t})}var vt=n(941);const yt={footerLogoLink:"footerLogoLink_BH7S"};function wt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(vt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function kt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:yt.footerLogoLink,target:t.target},r.createElement(wt,{logo:t})):r.createElement(wt,{logo:t})}function Et(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function St(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function _t(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(St,{style:o,links:n&&n.length>0&&r.createElement(bt,{links:n}),logo:a&&r.createElement(kt,{logo:a}),copyright:t&&r.createElement(Et,{copyright:t})})}const xt=r.memo(_t),Tt=(0,N.Qc)([F.S,k.pl,P.OC,je.L5,i.VC,function(e){let{children:t}=e;return r.createElement(I.n2,null,r.createElement(L.M,null,r.createElement(R,null,t)))}]);function Ct(e){let{children:t}=e;return r.createElement(Tt,null,t)}function At(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Je,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(et,{error:t})))))}const Lt={mainWrapper:"mainWrapper_z2l0"};function Pt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(Ct,null,r.createElement(i.d,{title:s,description:c}),r.createElement(y,null),r.createElement(A,null),r.createElement(ct,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,Lt.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(At,e)},t)),!n&&r.createElement(xt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,a.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{u.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h,Oh:()=>y});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,a._r)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},6177:(e,t,n)=>{"use strict";n.d(t,{K:()=>l,M:()=>s});var r=n(7294),a=n(2263),o=n(1980);const i="q";function l(){return(0,o.Nc)(i)}function s(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>v,cE:()=>f,hI:()=>_,jA:()=>g,lO:()=>k,oz:()=>E,s1:()=>w,vY:()=>S,xz:()=>p});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),c=n(1116),u=n(7392),d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:c}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},2128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(2263);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},1980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>c,Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){const t=s(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2128);function u(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const u=(0,c.p)(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(143),a=n(2263),o=n(373);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,o.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=s[e],o=t[e].versions.find((e=>e.isLast));return l(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(7294),a=n(8022),o=n(4996),i=n(6278);function l(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>T,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&a(e),s=t&&a(t),c=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).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&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,E=void 0===k?h:k,S=i.keyLength,_=void 0===S?6:S,x=e.basename?d(s(e.basename)):"";function T(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return x&&(o=u(o,x)),p(o,r,n)}function C(){return Math.random().toString(36).substr(2,_)}var A=m();function L(e){(0,r.Z)(z,e),z.length=n.length,A.notifyListeners(z.location,z.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||O(T(e.state))}function N(){O(T(y()))}var I=!1;function O(e){if(I)I=!1,L();else{A.confirmTransitionTo(e,"POP",E,(function(t){t?L({action:"POP",location:e}):function(e){var t=z.location,n=M.indexOf(t.key);-1===n&&(n=0);var r=M.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(I=!0,B(a))}(e)}))}}var R=T(y()),M=[R.key];function D(e){return x+f(e)}function B(e){n.go(e)}var F=0;function $(e){1===(F+=e)&&1===e?(window.addEventListener(b,P),o&&window.addEventListener(v,N)):0===F&&(window.removeEventListener(b,P),o&&window.removeEventListener(v,N))}var j=!1;var z={length:n.length,action:"POP",location:R,createHref:D,push:function(e,t){var r="PUSH",o=p(e,t,C(),z.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=M.indexOf(z.location.key),c=M.slice(0,s+1);c.push(o.key),M=c,L({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,C(),z.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=M.indexOf(z.location.key);-1!==s&&(M[s]=o.key),L({action:r,location:o})}else window.location.replace(t)}}))},go:B,goBack:function(){B(-1)},goForward:function(){B(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return j||($(1),j=!0),function(){return j&&(j=!1,$(-1)),t()}},listen:function(e){var t=A.appendListener(e);return $(1),function(){$(-1),t()}}};return z}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:s},slash:{encodePath:s,decodePath:s}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(S(window.location.href)+"#"+e)}function T(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",v=E[c],y=v.encodePath,w=v.decodePath;function T(){var e=w(_());return b&&(e=u(e,b)),p(e)}var C=m();function A(e){(0,r.Z)(j,e),j.length=t.length,C.notifyListeners(j.location,j.action)}var L=!1,P=null;function N(){var e,t,n=_(),r=y(n);if(n!==r)x(r);else{var a=T(),i=j.location;if(!L&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===f(a))return;P=null,function(e){if(L)L=!1,A();else{var t="POP";C.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=j.location,n=M.lastIndexOf(f(t));-1===n&&(n=0);var r=M.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(L=!0,D(a))}(e)}))}}(a)}}var I=_(),O=y(I);I!==O&&x(O);var R=T(),M=[f(R)];function D(e){t.go(e)}var B=0;function F(e){1===(B+=e)&&1===e?window.addEventListener(k,N):0===B&&window.removeEventListener(k,N)}var $=!1;var j={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);if(_()!==a){P=t,function(e){window.location.hash=e}(a);var o=M.lastIndexOf(f(j.location)),i=M.slice(0,o+1);i.push(t),M=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);_()!==a&&(P=t,x(a));var o=M.indexOf(f(j.location));-1!==o&&(M[o]=t),A({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return $||(F(1),$=!0),function(){return $&&($=!1,F(-1)),t()}},listen:function(e){var t=C.appendListener(e);return F(1),function(){F(-1),t()}}};return j}function C(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,c=void 0===s?6:s,u=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,c)}var h=C(l,0,o.length-1),b=o.map((function(e){return p(e,void 0,"string"==typeof e?g():e.key||g())})),v=f;function y(e){var t=C(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=p(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||l&&l[b])){var v=f(n,b);try{c(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},7439:(e,t,n)=>{"use strict";n.r(t)},2497:(e,t,n)=>{"use strict";n.r(t)},7800:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var c in o=Object(arguments[s]))n.call(o,c)&&(l[c]=o[c]);if(t){i=t(o);for(var u=0;u<i.length;u++)r.call(o,i[u])&&(l[i[u]]=o[i[u]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var c=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],c=r.util.type(s);"Object"!==c||o[i(s)]?"Array"!==c||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new l;return s(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,l,u,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var g=p[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var k=g.pattern||g,E=l.next,S=u;E!==t.tail&&!(d&&S>=d.reach);S+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,T=1;if(v){if(!(x=o(k,S,e,b))||x.index>=e.length)break;var C=x.index,A=x.index+x[0].length,L=S;for(L+=E.value.length;C>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var P=E;P!==t.tail&&(L<A||"string"==typeof P.value);P=P.next)T++,L+=P.value.length;T--,_=e.slice(S,L),x.index-=S}else if(!(x=o(k,0,_,b)))continue;C=x.index;var N=x[0],I=_.slice(0,C),O=_.slice(C+N.length),R=S+_.length;d&&R>d.reach&&(d.reach=R);var M=E.prev;if(I&&(M=s(t,M,I),S+=I.length),c(t,M,T),E=s(t,M,new a(f,h?r.tokenize(N,h):N,y,N)),O&&s(t,E,O),T>1){var D={cause:f+","+m,reach:R};i(e,t,n,E.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|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|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],c=/language-(.+)/.exec(o);if(c){n=c[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=u(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,p(u(0),"property-mutation"),a.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var c=t[s];"variable"===c.type&&a.indexOf(c.content)>=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return u[n]=a,n})).join(""),n,r),f=Object.keys(u);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=c(u[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),c=l.alias,d=Array.isArray(c)?c[0]:c,p=e.languages[d];if(!p)continue;i[1]=u(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|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|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},5795:()=>{Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}},7874:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},9016:()=>{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n<t;n++)e=e.replace(/<<self>>/g,(function(){return"(?:"+e+")"}));return e.replace(/<<self>>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",l="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function s(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var c=s(o),u=RegExp(s(a+" "+o+" "+i+" "+l)),d=s(o+" "+i+" "+l),f=s(a+" "+o+" "+l),p=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),m=r(/\((?:[^()]|<<self>>)*\)/.source,2),g=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[g,p]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),v=/\[\s*(?:,\s*)*\]/.source,y=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,v]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,m,v]),k=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),E=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,b,v]),S={keyword:u,punctuation:/[<>()?,.:[\]]/},_=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,x=/"(?:\\.|[^\\"\r\n])*"/.source,T=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[T]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[x]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[g,E]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[g]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[c,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[g]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[y]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[E,f,g]),inside:S}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[g]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[g]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[E,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[E]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[g,p]),inside:{function:n(/^<<0>>/.source,[g]),generic:{pattern:RegExp(p),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[c,h,g,E,u.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:u,"class-name":{pattern:RegExp(E),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var C=x+"|"+_,A=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[C]),L=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),P=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,N=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,L]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[P,N]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[P]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[L]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var I=/:[^}\r\n]+/.source,O=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),R=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,I]),M=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[C]),2),D=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[M,I]);function B(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,I]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[R]),lookbehind:!0,greedy:!0,inside:B(R,O)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[D]),lookbehind:!0,greedy:!0,inside:B(D,M)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},397:()=>{!function(e){var t="(?:"+[/[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,/-?(?:\.\d+|\d+(?:\.\d*)?)/.source,/"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,/<(?:[^<>]|(?!<!--)<(?:[^<>"']|"[^"]*"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/.source].join("|")+")",n={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:e.languages.markup}};function r(e,n){return RegExp(e.replace(/<ID>/g,(function(){return t})),n)}e.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:r(/(\b(?:digraph|graph|subgraph)[ \t\r\n]+)<ID>/.source,"i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:n},"attr-value":{pattern:r(/(=[ \t\r\n]*)<ID>/.source),lookbehind:!0,greedy:!0,inside:n},"attr-name":{pattern:r(/([\[;, \t\r\n])<ID>(?=[ \t\r\n]*=)/.source),lookbehind:!0,greedy:!0,inside:n},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:r(/(^|[^-.\w\x80-\uFFFF\\])<ID>/.source),lookbehind:!0,greedy:!0,inside:n},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},e.languages.gv=e.languages.dot}(Prism)},1295:()=>{Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell},2503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},8704:()=>{Prism.languages.nix={comment:{pattern:/\/\*[\s\S]*?\*\/|#.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,lookbehind:!0,inside:null}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"important"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:false|true)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside=Prism.languages.nix},3210:()=>{Prism.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal},9385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)},767:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},9462:(e,t,n)=>{var r={"./prism-ada":5795,"./prism-bash":7874,"./prism-csharp":9016,"./prism-dot":397,"./prism-haskell":1295,"./prism-java":2503,"./prism-nix":8704,"./prism-pascal":3210,"./prism-ruby":9385,"./prism-rust":767};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=9462},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function c(e,t){u(e,t),u(e+"Capture",t)}function u(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!p.call(g,e)||!p.call(m,e)&&(f.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var k=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,S=60106,_=60107,x=60108,T=60114,C=60109,A=60110,L=60112,P=60113,N=60120,I=60115,O=60116,R=60121,M=60128,D=60129,B=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var $=Symbol.for;E=$("react.element"),S=$("react.portal"),_=$("react.fragment"),x=$("react.strict_mode"),T=$("react.profiler"),C=$("react.provider"),A=$("react.context"),L=$("react.forward_ref"),P=$("react.suspense"),N=$("react.suspense_list"),I=$("react.memo"),O=$("react.lazy"),R=$("react.block"),$("react.scope"),M=$("react.opaque.id"),D=$("react.debug_trace_mode"),B=$("react.offscreen"),F=$("react.legacy_hidden")}var j,z="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=z&&e[z]||e["@@iterator"])?e:null}function Z(e){if(void 0===j)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);j=t&&t[1]||""}return"\n"+j+e}var H=!1;function G(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function V(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("SuspenseList");case 0:case 2:case 15:return e=G(e.type,!1);case 11:return e=G(e.type.render,!1);case 22:return e=G(e.type._render,!1);case 1:return e=G(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case S:return"Portal";case T:return"Profiler";case x:return"StrictMode";case P:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case A:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case L:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case I:return W(e.type);case R:return W(e._render);case O:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&Q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ce(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ue(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,he=(ge=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function ke(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ve).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var Ee=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(Ee[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Ce=null,Ae=null;function Le(e){if(e=na(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=aa(t),Te(e.stateNode,e.type,t))}}function Pe(e){Ce?Ae?Ae.push(e):Ae=[e]:Ce=e}function Ne(){if(Ce){var e=Ce,t=Ae;if(Ae=Ce=null,Le(e),t)for(e=0;e<t.length;e++)Le(t[e])}}function Ie(e,t){return e(t)}function Oe(e,t,n,r,a){return e(t,n,r,a)}function Re(){}var Me=Ie,De=!1,Be=!1;function Fe(){null===Ce&&null===Ae||(Re(),Ne())}function $e(e,t){var n=e.stateNode;if(null===n)return null;var r=aa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var je=!1;if(d)try{var ze={};Object.defineProperty(ze,"passive",{get:function(){je=!0}}),window.addEventListener("test",ze,ze),window.removeEventListener("test",ze,ze)}catch(ge){je=!1}function Ue(e,t,n,r,a,o,i,l,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Ze=!1,He=null,Ge=!1,Ve=null,We={onError:function(e){Ze=!0,He=e}};function qe(e,t,n,r,a,o,i,l,s){Ze=!1,He=null,Ue.apply(We,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ke(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ye(e)!==e)throw Error(i(188))}function Qe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,at=!1,ot=[],it=null,lt=null,st=null,ct=new Map,ut=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ut.delete(t.pointerId)}}function gt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=pt(t,n,r,a,o),null!==t&&(null!==(t=na(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function ht(e){var t=ta(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ke(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=na(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){bt(e)&&n.delete(t)}function yt(){for(at=!1;0<ot.length;){var e=ot[0];if(null!==e.blockedOn){null!==(e=na(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&ot.shift()}null!==it&&bt(it)&&(it=null),null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),ct.forEach(vt),ut.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,yt)))}function kt(e){function t(t){return wt(t,e)}if(0<ot.length){wt(ot[0],e);for(var n=1;n<ot.length;n++){var r=ot[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ct.forEach(t),ut.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)ht(n),null===n.blockedOn&&dt.shift()}function Et(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:Et("Animation","AnimationEnd"),animationiteration:Et("Animation","AnimationIteration"),animationstart:Et("Animation","AnimationStart"),transitionend:Et("Transition","TransitionEnd")},_t={},xt={};function Tt(e){if(_t[e])return _t[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Ct=Tt("animationend"),At=Tt("animationiteration"),Lt=Tt("animationstart"),Pt=Tt("transitionend"),Nt=new Map,It=new Map,Ot=["abort","abort",Ct,"animationEnd",At,"animationIteration",Lt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Pt,"transitionEnd","waiting","waiting"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),It.set(r,t),Nt.set(r,a),c(a,[r])}}(0,o.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Bt(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Mt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Dt(s),a=Mt):0!==(l&=o)&&(r=Dt(l),a=Mt)}else 0!==(o=n&~i)?(r=Dt(o),a=Mt):0!==l&&(r=Dt(l),a=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Zt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),a<=Mt)return t;Mt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-Zt(t)),r|=e[n],t&=~a;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function $t(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=jt(24&~t))?$t(10,t):e;case 10:return 0===(e=jt(192&~t))?$t(8,t):e;case 8:return 0===(e=jt(3584&~t))&&(0===(e=jt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=jt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function jt(e){return e&-e}function zt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Zt(t)]=n}var Zt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Gt|0)|0},Ht=Math.log,Gt=Math.LN2;var Vt=o.unstable_UserBlockingPriority,Wt=o.unstable_runWithPriority,qt=!0;function Yt(e,t,n,r){De||Re();var a=Xt,o=De;De=!0;try{Oe(a,e,t,n,r)}finally{(De=o)||Fe()}}function Kt(e,t,n,r){Wt(Vt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(qt)if((a=0==(4&t))&&0<ot.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),ot.push(e);else{var o=Qt(e,t,n,r);if(null===o)a&&mt(e,r);else{if(a){if(-1<ft.indexOf(e))return e=pt(o,e,t,n,r),void ot.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return it=gt(it,e,t,n,r,a),!0;case"dragenter":return lt=gt(lt,e,t,n,r,a),!0;case"mouseover":return st=gt(st,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ct.set(o,gt(ct.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,ut.set(o,gt(ut.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;mt(e,r)}Rr(e,t,r,null,n)}}}function Qt(e,t,n,r){var a=xe(r);if(null!==(a=ta(a))){var o=Ye(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Ke(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Rr(e,t,r,a,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,a="value"in Jt?Jt.value:Jt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return tn=a.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function on(){return!1}function ln(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?an:on,this.isPropagationStopped=on,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var sn,cn,un,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=a({},dn,{view:0,detail:0}),mn=ln(pn),gn=a({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Cn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==un&&(un&&"mousemove"===e.type?(sn=e.screenX-un.screenX,cn=e.screenY-un.screenY):cn=sn=0,un=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),hn=ln(gn),bn=ln(a({},gn,{dataTransfer:0})),vn=ln(a({},pn,{relatedTarget:0})),yn=ln(a({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=a({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),kn=ln(wn),En=ln(a({},dn,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Cn(){return Tn}var An=a({},pn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Cn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Ln=ln(An),Pn=ln(a({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=ln(a({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Cn})),In=ln(a({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=a({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=ln(On),Mn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Bn=null;d&&"documentMode"in document&&(Bn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Bn,$n=d&&(!Dn||Bn&&8<Bn&&11>=Bn),jn=String.fromCharCode(32),zn=!1;function Un(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Zn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Wn(e,t,n,r){Pe(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Yn=null;function Kn(e){Ar(e,0)}function Xn(e){if(X(ra(e)))return e}function Qn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",ar),Yn=qn=null)}function ar(e){if("value"===e.propertyName&&Xn(Yn)){var t=[];if(Wn(t,Yn,e,xe(e)),e=Kn,De)e(t);else{De=!0;try{Ie(e,t)}finally{De=!1,Fe()}}}}function or(e,t,n){"focusin"===e?(rr(),Yn=n,(qn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Yn)}function lr(e,t){if("click"===e)return Xn(t)}function sr(e,t){if("input"===e||"change"===e)return Xn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ur=Object.prototype.hasOwnProperty;function dr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!ur.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=Q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Q((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,vr=null,yr=null,wr=null,kr=!1;function Er(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;kr||null==vr||vr!==Q(r)||("selectionStart"in(r=vr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(yr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}Rt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rt(Ot,2);for(var Sr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<Sr.length;_r++)It.set(Sr[_r],0);u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Cr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,c){if(qe.apply(this,arguments),Ze){if(!Ze)throw Error(i(198));var u=He;Ze=!1,He=null,Ge||(Ge=!0,Ve=u)}}(r,t,void 0,e),e.currentTarget=null}function Ar(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Cr(a,l,c),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Cr(a,l,c),o=s}}}if(Ge)throw e=Ve,Ge=!1,Ve=null,e}function Lr(e,t){var n=oa(t),r=e+"__bubble";n.has(r)||(Or(t,e,2,!1),n.add(r))}var Pr="_reactListening"+Math.random().toString(36).slice(2);function Nr(e){e[Pr]||(e[Pr]=!0,l.forEach((function(t){Tr.has(t)||Ir(t,!1,e,null),Ir(t,!0,e,null)})))}function Ir(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Tr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=oa(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),Or(o,e,a,t),i.add(l))}function Or(e,t,n,r){var a=It.get(t);switch(void 0===a?2:a){case 0:a=Yt;break;case 1:a=Kt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!je||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=ta(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Be)return e(t,n);Be=!0;try{return Me(e,t,n)}finally{Be=!1,Fe()}}((function(){var r=o,a=xe(n),i=[];e:{var l=Nt.get(e);if(void 0!==l){var s=fn,c=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Ln;break;case"focusin":c="focus",s=vn;break;case"focusout":c="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Nn;break;case Ct:case At:case Lt:s=yn;break;case Pt:s=In;break;case"scroll":s=mn;break;case"wheel":s=Rn;break;case"copy":case"cut":case"paste":s=kn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Pn}var u=0!=(4&t),d=!u&&"scroll"===e,f=u?null!==l?l+"Capture":null:l;u=[];for(var p,m=r;null!==m;){var g=(p=m).stateNode;if(5===p.tag&&null!==g&&(p=g,null!==f&&(null!=(g=$e(m,f))&&u.push(Mr(m,g,p)))),d)break;m=m.return}0<u.length&&(l=new s(l,c,null,n,a),i.push({event:l,listeners:u}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(c=n.relatedTarget||n.fromElement)||!ta(c)&&!c[Jr])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(c=(c=n.relatedTarget||n.toElement)?ta(c):null)&&(c!==(d=Ye(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(s=null,c=r),s!==c)){if(u=hn,g="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Pn,g="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ra(s),p=null==c?l:ra(c),(l=new u(g,m+"leave",s,n,a)).target=d,l.relatedTarget=p,g=null,ta(a)===r&&((u=new u(f,m+"enter",c,n,a)).target=p,u.relatedTarget=d,g=u),d=g,s&&c)e:{for(f=c,m=0,p=u=s;p;p=Br(p))m++;for(p=0,g=f;g;g=Br(g))p++;for(;0<m-p;)u=Br(u),m--;for(;0<p-m;)f=Br(f),p--;for(;m--;){if(u===f||null!==f&&u===f.alternate)break e;u=Br(u),f=Br(f)}u=null}else u=null;null!==s&&Fr(i,l,s,u,!1),null!==c&&null!==d&&Fr(i,d,c,u,!0)}if("select"===(s=(l=r?ra(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var h=Qn;else if(Vn(l))if(Jn)h=sr;else{h=ir;var b=or}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(h=lr);switch(h&&(h=h(e,r))?Wn(i,h,n,a):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ae(l,"number",l.value)),b=r?ra(r):window,e){case"focusin":(Vn(b)||"true"===b.contentEditable)&&(vr=b,yr=r,wr=null);break;case"focusout":wr=yr=vr=null;break;case"mousedown":kr=!0;break;case"contextmenu":case"mouseup":case"dragend":kr=!1,Er(i,n,a);break;case"selectionchange":if(br)break;case"keydown":case"keyup":Er(i,n,a)}var v;if(Dn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?Un(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&($n&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(v=nn()):(en="value"in(Jt=a)?Jt.value:Jt.textContent,Hn=!0)),0<(b=Dr(r,y)).length&&(y=new En(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Zn(n))&&(y.data=v))),(v=Fn?function(e,t){switch(e){case"compositionend":return Zn(t);case"keypress":return 32!==t.which?null:(zn=!0,jn);case"textInput":return(e=t.data)===jn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return $n&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(a=new En("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Ar(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=$e(e,n))&&r.unshift(Mr(e,o,a)),null!=(o=$e(e,t))&&r.push(Mr(e,o,a))),e=e.return}return r}function Br(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,c=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==c&&(l=c,a?null!=(s=$e(n,o))&&i.unshift(Mr(n,s,l)):a||null!=(s=$e(n,o))&&i.push(Mr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function $r(){}var jr=null,zr=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Zr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Kr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Kr,Qr="__reactProps$"+Kr,Jr="__reactContainer$"+Kr,ea="__reactEvents$"+Kr;function ta(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Xr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function na(e){return!(e=e[Xr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ra(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function aa(e){return e[Qr]||null}function oa(e){var t=e[ea];return void 0===t&&(t=e[ea]=new Set),t}var ia=[],la=-1;function sa(e){return{current:e}}function ca(e){0>la||(e.current=ia[la],ia[la]=null,la--)}function ua(e,t){la++,ia[la]=e.current,e.current=t}var da={},fa=sa(da),pa=sa(!1),ma=da;function ga(e,t){var n=e.type.contextTypes;if(!n)return da;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ha(e){return null!=(e=e.childContextTypes)}function ba(){ca(pa),ca(fa)}function va(e,t,n){if(fa.current!==da)throw Error(i(168));ua(fa,t),ua(pa,n)}function ya(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,W(t)||"Unknown",o));return a({},n,r)}function wa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||da,ma=fa.current,ua(fa,e),ua(pa,pa.current),!0}function ka(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=ya(e,t,ma),r.__reactInternalMemoizedMergedChildContext=e,ca(pa),ca(fa),ua(fa,e)):ca(pa),ua(pa,n)}var Ea=null,Sa=null,_a=o.unstable_runWithPriority,xa=o.unstable_scheduleCallback,Ta=o.unstable_cancelCallback,Ca=o.unstable_shouldYield,Aa=o.unstable_requestPaint,La=o.unstable_now,Pa=o.unstable_getCurrentPriorityLevel,Na=o.unstable_ImmediatePriority,Ia=o.unstable_UserBlockingPriority,Oa=o.unstable_NormalPriority,Ra=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Da={},Ba=void 0!==Aa?Aa:function(){},Fa=null,$a=null,ja=!1,za=La(),Ua=1e4>za?La:function(){return La()-za};function Za(){switch(Pa()){case Na:return 99;case Ia:return 98;case Oa:return 97;case Ra:return 96;case Ma:return 95;default:throw Error(i(332))}}function Ha(e){switch(e){case 99:return Na;case 98:return Ia;case 97:return Oa;case 96:return Ra;case 95:return Ma;default:throw Error(i(332))}}function Ga(e,t){return e=Ha(e),_a(e,t)}function Va(e,t,n){return e=Ha(e),xa(e,t,n)}function Wa(){if(null!==$a){var e=$a;$a=null,Ta(e)}qa()}function qa(){if(!ja&&null!==Fa){ja=!0;var e=0;try{var t=Fa;Ga(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Fa=null}catch(n){throw null!==Fa&&(Fa=Fa.slice(e+1)),xa(Na,Wa),n}finally{ja=!1}}}var Ya=k.ReactCurrentBatchConfig;function Ka(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xa=sa(null),Qa=null,Ja=null,eo=null;function to(){eo=Ja=Qa=null}function no(e){var t=Xa.current;ca(Xa),e.type._context._currentValue=t}function ro(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ao(e,t){Qa=e,eo=Ja=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function oo(e,t){if(eo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(eo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ja){if(null===Qa)throw Error(i(308));Ja=t,Qa.dependencies={lanes:0,firstContext:t,responders:null}}else Ja=Ja.next=t;return e._currentValue}var io=!1;function lo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function so(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function co(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function uo(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function po(e,t,n,r){var o=e.updateQueue;io=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var c=s,u=c.next;c.next=null,null===l?i=u:l.next=u,l=c;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=u:f.next=u,d.lastBaseUpdate=c)}}if(null!==i){for(f=o.baseState,l=0,d=u=c=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(s=t,p=n,g.tag){case 1:if("function"==typeof(m=g.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=g.payload)?m.call(p,f,s):m))break e;f=a({},f,s);break e;case 2:io=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(u=d=p,c=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(c=f),o.baseState=c,o.firstBaseUpdate=u,o.lastBaseUpdate=d,zl|=l,e.lanes=l,e.memoizedState=f}}function mo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var go=(new r.Component).refs;function ho(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var bo={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=co(r,a);o.payload=t,null!=n&&(o.callback=n),uo(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=co(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),uo(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),a=co(n,r);a.tag=2,null!=t&&(a.callback=t),uo(e,a),ms(e,r,n)}};function vo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(a,o))}function yo(e,t,n){var r=!1,a=da,o=t.contextType;return"object"==typeof o&&null!==o?o=oo(o):(a=ha(t)?ma:fa.current,o=(r=null!=(r=t.contextTypes))?ga(e,a):da),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=bo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function wo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&bo.enqueueReplaceState(t,t.state,null)}function ko(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=go,lo(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=oo(o):(o=ha(t)?ma:fa.current,a.context=ga(e,o)),po(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(ho(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&bo.enqueueReplaceState(a,a.state,null),po(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var Eo=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===go&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _o(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xo(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xs(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=qs(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case S:return(t=Xs(t,e.mode,n)).return=e,t}if(Eo(t)||U(t))return(t=qs(t,e.mode,n,null)).return=e,t;_o(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===a?n.type===_?d(e,t,n.props.children,r,a):c(e,t,n,r):null;case S:return n.key===a?u(e,t,n,r):null}if(Eo(n)||U(n))return null!==a?null:d(e,t,n,r,null);_o(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,a,r.key):c(t,e,r,a);case S:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(Eo(r)||U(r))return d(t,e=e.get(n)||null,r,a,null);_o(t,r)}return null}function g(a,i,l,s){for(var c=null,u=null,d=i,g=i=0,h=null;null!==d&&g<l.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=p(a,d,l[g],s);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===u?c=b:u.sibling=b,u=b,d=h}if(g===l.length)return n(a,d),c;if(null===d){for(;g<l.length;g++)null!==(d=f(a,l[g],s))&&(i=o(d,i,g),null===u?c=d:u.sibling=d,u=d);return c}for(d=r(a,d);g<l.length;g++)null!==(h=m(d,a,g,l[g],s))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===u?c=h:u.sibling=h,u=h);return e&&d.forEach((function(e){return t(a,e)})),c}function h(a,l,s,c){var u=U(s);if("function"!=typeof u)throw Error(i(150));if(null==(s=u.call(s)))throw Error(i(151));for(var d=u=null,g=l,h=l=0,b=null,v=s.next();null!==g&&!v.done;h++,v=s.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=p(a,g,v.value,c);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),l=o(y,l,h),null===d?u=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),u;if(null===g){for(;!v.done;h++,v=s.next())null!==(v=f(a,v.value,c))&&(l=o(v,l,h),null===d?u=v:d.sibling=v,d=v);return u}for(g=r(a,g);!v.done;h++,v=s.next())null!==(v=m(g,a,h,v.value,c))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),l=o(v,l,h),null===d?u=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),u}return function(e,r,o,s){var c="object"==typeof o&&null!==o&&o.type===_&&null===o.key;c&&(o=o.props.children);var u="object"==typeof o&&null!==o;if(u)switch(o.$$typeof){case E:e:{for(u=o.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(o.type===_){n(e,c.sibling),(r=a(c,o.props.children)).return=e,e=r;break e}}else if(c.elementType===o.type){n(e,c.sibling),(r=a(c,o.props)).ref=So(e,c,o),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}o.type===_?((r=qs(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Ws(o.type,o.key,o.props,null,e.mode,s)).ref=So(e,r,o),s.return=e,e=s)}return l(e);case S:e:{for(c=o.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xs(o,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ks(o,e.mode,s)).return=e,e=r),l(e);if(Eo(o))return g(e,r,o,s);if(U(o))return h(e,r,o,s);if(u&&_o(e,o),void 0===o&&!c)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var To=xo(!0),Co=xo(!1),Ao={},Lo=sa(Ao),Po=sa(Ao),No=sa(Ao);function Io(e){if(e===Ao)throw Error(i(174));return e}function Oo(e,t){switch(ua(No,t),ua(Po,e),ua(Lo,Ao),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ca(Lo),ua(Lo,t)}function Ro(){ca(Lo),ca(Po),ca(No)}function Mo(e){Io(No.current);var t=Io(Lo.current),n=pe(t,e.type);t!==n&&(ua(Po,e),ua(Lo,n))}function Do(e){Po.current===e&&(ca(Lo),ca(Po))}var Bo=sa(0);function Fo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var $o=null,jo=null,zo=!1;function Uo(e,t){var n=Hs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Zo(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ho(e){if(zo){var t=jo;if(t){var n=t;if(!Zo(e,t)){if(!(t=Wr(n.nextSibling))||!Zo(e,t))return e.flags=-1025&e.flags|2,zo=!1,void($o=e);Uo($o,n)}$o=e,jo=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,zo=!1,$o=e}}function Go(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;$o=e}function Vo(e){if(e!==$o)return!1;if(!zo)return Go(e),zo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Zr(t,e.memoizedProps))for(t=jo;t;)Uo(e,t),t=Wr(t.nextSibling);if(Go(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){jo=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}jo=null}}else jo=$o?Wr(e.stateNode.nextSibling):null;return!0}function Wo(){jo=$o=null,zo=!1}var qo=[];function Yo(){for(var e=0;e<qo.length;e++)qo[e]._workInProgressVersionPrimary=null;qo.length=0}var Ko=k.ReactCurrentDispatcher,Xo=k.ReactCurrentBatchConfig,Qo=0,Jo=null,ei=null,ti=null,ni=!1,ri=!1;function ai(){throw Error(i(321))}function oi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,a,o){if(Qo=o,Jo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ko.current=null===e||null===e.memoizedState?Ii:Oi,e=n(r,a),ri){o=0;do{if(ri=!1,!(25>o))throw Error(i(301));o+=1,ti=ei=null,t.updateQueue=null,Ko.current=Ri,e=n(r,a)}while(ri)}if(Ko.current=Ni,t=null!==ei&&null!==ei.next,Qo=0,ti=ei=Jo=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Jo.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Jo.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Jo.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Jo.memoizedState=ti=e:ti=ti.next=e}return ti}function ci(e,t){return"function"==typeof t?t(e):t}function ui(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,c=a;do{var u=c.lane;if((Qo&u)===u)null!==s&&(s=s.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var d={lane:u,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,Jo.lanes|=u,zl|=u}c=c.next}while(null!==c&&c!==a);null===s?o=r:s.next=l,cr(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);cr(o,t.memoizedState)||(Di=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Qo&e)===e)&&(t._workInProgressVersionPrimary=r,qo.push(t))),e)return n(t._source);throw qo.push(t),Error(i(350))}function pi(e,t,n,r){var a=Ol;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Ko.current,c=s.useState((function(){return fi(a,t,n)})),u=c[1],d=c[0];c=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,g=f.source;f=f.subscribe;var h=Jo;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=u;var e=o(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(u(e),e=ps(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-Zt(i),c=1<<s;r[s]|=e,i&=~c}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),cr(m,n)&&cr(g,t)&&cr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=u=Pi.bind(null,Jo,e),c.queue=e,c.baseQueue=null,d=fi(a,t,n),c.memoizedState=c.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function gi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Pi.bind(null,Jo,e),[t.memoizedState,e]}function hi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Jo.updateQueue)?(t={lastEffect:null},Jo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function yi(e,t,n,r){var a=li();Jo.flags|=e,a.memoizedState=hi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var a=si();r=void 0===r?null:r;var o=void 0;if(null!==ei){var i=ei.memoizedState;if(o=i.destroy,null!==r&&oi(r,i.deps))return void hi(t,n,o,r)}Jo.flags|=e,a.memoizedState=hi(1|t,n,o,r)}function ki(e,t){return yi(516,4,e,t)}function Ei(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Ti(){}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ai(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Li(e,t){var n=Za();Ga(98>n?98:n,(function(){e(!0)})),Ga(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Pi(e,t,n){var r=fs(),a=ps(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Jo||null!==i&&i===Jo)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,cr(s,l))return}catch(c){}ms(e,a,r)}}var Ni={readContext:oo,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Ii={readContext:oo,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:oo,useEffect:ki,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,yi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return yi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Pi.bind(null,Jo,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ti,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Li.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(zo){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&Jo.mode)&&(Jo.flags|=516,hi(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Oi={readContext:oo,useCallback:Ci,useContext:oo,useEffect:Ei,useImperativeHandle:xi,useLayoutEffect:Si,useMemo:Ai,useReducer:ui,useRef:vi,useState:function(){return ui(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=ui(ci),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=ui(ci)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ui(ci)[0]},unstable_isNewReconciler:!1},Ri={readContext:oo,useCallback:Ci,useContext:oo,useEffect:Ei,useImperativeHandle:xi,useLayoutEffect:Si,useMemo:Ai,useReducer:di,useRef:vi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Mi=k.ReactCurrentOwner,Di=!1;function Bi(e,t,n,r){t.child=null===e?Co(t,null,n,r):To(t,e.child,n,r)}function Fi(e,t,n,r,a){n=n.render;var o=t.ref;return ao(t,a),r=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Bi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function $i(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Gs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,ji(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function ji(e,t,n,r,a,o){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Di=!0)}return Zi(e,t,n,r,o)}function zi(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Es(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Es(t,e),null;t.memoizedState={baseLanes:0},Es(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Es(t,r);return Bi(e,t,a,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Zi(e,t,n,r,a){var o=ha(n)?ma:fa.current;return o=ga(t,o),ao(t,a),n=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Bi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Hi(e,t,n,r,a){if(ha(n)){var o=!0;wa(t)}else o=!1;if(ao(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),yo(t,n,r),ko(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=oo(c):c=ga(t,c=ha(n)?ma:fa.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==c)&&wo(t,i,r,c),io=!1;var f=t.memoizedState;i.state=f,po(t,r,i,a),s=t.memoizedState,l!==r||f!==s||pa.current||io?("function"==typeof u&&(ho(t,n,u,r),s=t.memoizedState),(l=io||vo(t,n,l,r,f,s,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=c,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,so(e,t),l=t.memoizedProps,c=t.type===t.elementType?l:Ka(t.type,l),i.props=c,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=oo(s):s=ga(t,s=ha(n)?ma:fa.current);var p=n.getDerivedStateFromProps;(u="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wo(t,i,r,s),io=!1,f=t.memoizedState,i.state=f,po(t,r,i,a);var m=t.memoizedState;l!==d||f!==m||pa.current||io?("function"==typeof p&&(ho(t,n,p,r),m=t.memoizedState),(c=io||vo(t,n,c,r,f,m,s))?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=c):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,o,a)}function Gi(e,t,n,r,a,o){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&ka(t,n,!1),ol(e,t,o);r=t.stateNode,Mi.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=To(t,e.child,null,o),t.child=To(t,null,l,o)):Bi(e,t,l,o),t.memoizedState=r.state,a&&ka(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?va(0,t.pendingContext,t.pendingContext!==t.context):t.context&&va(0,t.context,!1),Oo(e,t.containerInfo)}var Wi,qi,Yi,Ki,Xi={dehydrated:null,retryLane:0};function Qi(e,t,n){var r,a=t.pendingProps,o=Bo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),ua(Bo,1&o),null===e?(void 0!==a.fallback&&Ho(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,a):(n=el(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Ys(t,a,0,null),n=qs(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Vs(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ro(e.return,t)}function rl(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Bi(e,t,r.children,n),0!=(2&(r=Bo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ua(Bo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===Fo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===Fo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),zl|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!zo)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ha(t.type)&&ba(),null;case 3:return Ro(),ca(pa),ca(fa),Yo(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Vo(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Do(t);var o=Io(No.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Io(Lo.current),Vo(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Qr]=l,n){case"dialog":Lr("cancel",r),Lr("close",r);break;case"iframe":case"object":case"embed":Lr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Lr(xr[e],r);break;case"source":Lr("error",r);break;case"img":case"image":case"link":Lr("error",r),Lr("load",r);break;case"details":Lr("toggle",r);break;case"input":ee(r,l),Lr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Lr("invalid",r);break;case"textarea":se(r,l),Lr("invalid",r)}for(var c in Se(n,l),e=null,l)l.hasOwnProperty(c)&&(o=l[c],"children"===c?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(c)&&null!=o&&"onScroll"===c&&Lr("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ue(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=$r)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(c=9===o.nodeType?o:o.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),"select"===n&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Xr]=t,e[Qr]=r,Wi(e,t,!1,!1),t.stateNode=e,c=_e(n,r),n){case"dialog":Lr("cancel",e),Lr("close",e),o=r;break;case"iframe":case"object":case"embed":Lr("load",e),o=r;break;case"video":case"audio":for(o=0;o<xr.length;o++)Lr(xr[o],e);o=r;break;case"source":Lr("error",e),o=r;break;case"img":case"image":case"link":Lr("error",e),Lr("load",e),o=r;break;case"details":Lr("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Lr("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Lr("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Lr("invalid",e);break;default:o=r}Se(n,o);var u=o;for(l in u)if(u.hasOwnProperty(l)){var d=u[l];"style"===l?ke(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&he(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Lr("scroll",e):null!=d&&w(e,l,d,c))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ue(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=$r)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Io(No.current),Io(Lo.current),Vo(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ca(Bo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Vo(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Bo.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Ol||0==(134217727&zl)&&0==(134217727&Ul)||vs(Ol,Ml))),(r||n)&&(t.flags|=4),null);case 4:return Ro(),qi(t),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return no(t),null;case 19:if(ca(Bo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(c=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(c=Fo(e))){for(t.flags|=64,il(r,!1),null!==(l=c.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(c=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=c.childLanes,l.lanes=c.lanes,l.child=c.child,l.memoizedProps=c.memoizedProps,l.memoizedState=c.memoizedState,l.updateQueue=c.updateQueue,l.type=c.type,e=c.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ua(Bo,1&Bo.current|2),t.child}e=e.sibling}null!==r.tail&&Ua()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fo(c))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!c.alternate&&!zo)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ua()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ua(),n.sibling=null,t=Bo.current,ua(Bo,l?1&t|2:1&t),n):null;case 23:case 24:return Ss(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:ha(e.type)&&ba();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ro(),ca(pa),ca(fa),Yo(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Do(e),null;case 13:return ca(Bo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ca(Bo),null;case 4:return Ro(),null;case 10:return no(e),null;case 23:case 24:return Ss(),null;default:return null}}function cl(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function ul(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Io(Lo.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=$r)}for(d in Se(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var c=o[d];for(i in c)c.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var u=r[d];if(c=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&u!==c&&(null!=u||null!=c))if("style"===d)if(c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(n||(n={}),n[i]=u[i])}else n||(l||(l=[]),l.push(d,n)),n=u;else"dangerouslySetInnerHTML"===d?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(l=l||[]).push(d,u)):"children"===d?"string"!=typeof u&&"number"!=typeof u||(l=l||[]).push(d,""+u):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=u&&"onScroll"===d&&Lr("scroll",e),l||c===u||(l=[])):"object"==typeof u&&null!==u&&u.$$typeof===M?u.toString():(l=l||[]).push(d,u))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=co(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Xl=r),ul(0,t)},n}function pl(e,t,n){(n=co(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return ul(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Ql?Ql=new Set([this]):Ql.add(this),ul(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function gl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){js(e,n)}else t.current=null}function hl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ka(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function bl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Bs(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ka(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&mo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}mo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&kt(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=we("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(Sa&&"function"==typeof Sa.onCommitFiberUnmount)try{Sa.onCommitFiberUnmount(Ea,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Bs(t,n);else{r=t;try{a()}catch(o){js(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){js(t,o)}break;case 5:gl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function kl(e){return 5===e.tag||3===e.tag||4===e.tag}function El(e){e:{for(var t=e.return;null!==t;){if(kl(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||kl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sl(e,n,t):_l(e,n,t)}function Sl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=$r));else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var l=e,s=a,c=s;;)if(yl(l,c),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===s)break e;for(;null===c.sibling;){if(null===c.return||c.return===s)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(yl(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function Tl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Qr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,a),t=_e(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?ke(n,s):"dangerouslySetInnerHTML"===l?he(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ce(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,kt(n.containerInfo)));case 13:return null!==t.memoizedState&&(Gl=Ua(),vl(t.child,!0)),void Cl(t);case 19:return void Cl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Cl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Al(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ll=Math.ceil,Pl=k.ReactCurrentDispatcher,Nl=k.ReactCurrentOwner,Il=0,Ol=null,Rl=null,Ml=0,Dl=0,Bl=sa(0),Fl=0,$l=null,jl=0,zl=0,Ul=0,Zl=0,Hl=null,Gl=0,Vl=1/0;function Wl(){Vl=Ua()+500}var ql,Yl=null,Kl=!1,Xl=null,Ql=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,cs=0,us=null,ds=!1;function fs(){return 0!=(48&Il)?Ua():-1!==ls?ls:ls=Ua()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Za()?1:2;if(0===ss&&(ss=jl),0!==Ya.transition){0!==cs&&(cs=null!==Hl?Hl.pendingLanes:0),e=ss;var t=4186112&~cs;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Za(),0!=(4&Il)&&98===e?e=$t(12,ss):e=$t(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=gs(e,t)))return null;Ut(e,t,n),e===Ol&&(Ul|=t,4===Fl&&vs(e,Ml));var r=Za();1===t?0!=(8&Il)&&0==(48&Il)?ys(e):(hs(e,n),0===Il&&(Wl(),Wa())):(0==(4&Il)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),hs(e,n)),Hl=e}function gs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Zt(l),c=1<<s,u=o[s];if(-1===u){if(0==(c&r)||0!=(c&a)){u=t,Dt(c);var d=Mt;o[s]=10<=d?u+250:6<=d?u+5e3:-1}}else u<=t&&(e.expiredLanes|=c);l&=~c}if(r=Bt(e,e===Ol?Ml:0),t=Mt,0===r)null!==n&&(n!==Da&&Ta(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Da&&Ta(n)}15===t?(n=ys.bind(null,e),null===Fa?(Fa=[n],$a=xa(Na,qa)):Fa.push(n),n=Da):14===t?n=Va(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Va(n,bs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bs(e){if(ls=-1,cs=ss=0,0!=(48&Il))throw Error(i(327));var t=e.callbackNode;if(Ms()&&e.callbackNode!==t)return null;var n=Bt(e,e===Ol?Ml:0);if(0===n)return null;var r=n,a=Il;Il|=16;var o=Ts();for(Ol===e&&Ml===r||(Wl(),_s(e,r));;)try{Ls();break}catch(s){xs(e,s)}if(to(),Pl.current=o,Il=a,null!==Rl?r=0:(Ol=null,Ml=0,r=Fl),0!=(jl&Ul))_s(e,0);else if(0!==r){if(2===r&&(Il|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Cs(e,n))),1===r)throw t=$l,_s(e,0),vs(e,n),hs(e,Ua()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Is(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Gl+500-Ua())){if(0!==Bt(e,0))break;if(((a=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Hr(Is.bind(null,e),r);break}Is(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-Zt(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=Ua()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ll(n/1960))-n)){e.timeoutHandle=Hr(Is.bind(null,e),n);break}Is(e);break;default:throw Error(i(329))}}return hs(e,Ua()),e.callbackNode===t?bs.bind(null,e):null}function vs(e,t){for(t&=~Zl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Zt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Il))throw Error(i(327));if(Ms(),e===Ol&&0!=(e.expiredLanes&Ml)){var t=Ml,n=Cs(e,t);0!=(jl&Ul)&&(n=Cs(e,t=Bt(e,t)))}else n=Cs(e,t=Bt(e,0));if(0!==e.tag&&2===n&&(Il|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Cs(e,t))),1===n)throw n=$l,_s(e,0),vs(e,t),hs(e,Ua()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Is(e),hs(e,Ua()),null}function ws(e,t){var n=Il;Il|=1;try{return e(t)}finally{0===(Il=n)&&(Wl(),Wa())}}function ks(e,t){var n=Il;Il&=-2,Il|=8;try{return e(t)}finally{0===(Il=n)&&(Wl(),Wa())}}function Es(e,t){ua(Bl,Dl),Dl|=t,jl|=t}function Ss(){Dl=Bl.current,ca(Bl)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==Rl)for(n=Rl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&ba();break;case 3:Ro(),ca(pa),ca(fa),Yo();break;case 5:Do(r);break;case 4:Ro();break;case 13:case 19:ca(Bo);break;case 10:no(r);break;case 23:case 24:Ss()}n=n.return}Ol=e,Rl=Vs(e.current,null),Ml=Dl=jl=t,Fl=0,$l=null,Zl=Ul=zl=0}function xs(e,t){for(;;){var n=Rl;try{if(to(),Ko.current=Ni,ni){for(var r=Jo.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ni=!1}if(Qo=0,ti=ei=Jo=null,ri=!1,Nl.current=null,null===n||null===n.return){Fl=1,$l=t,Rl=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Ml,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var c=s;if(0==(2&l.mode)){var u=l.alternate;u?(l.updateQueue=u.updateQueue,l.memoizedState=u.memoizedState,l.lanes=u.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Bo.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var g=f.memoizedProps;p=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(p){var h=f.updateQueue;if(null===h){var b=new Set;b.add(c),f.updateQueue=b}else h.add(c);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=co(-1,1);v.tag=2,uo(l,v)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(c,s)):void 0===(s=y.get(c))&&(s=new Set,y.set(c,s)),!s.has(l)){s.add(l);var w=zs.bind(null,o,c,l);c.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=cl(s,l),f=i;do{switch(f.tag){case 3:o=s,f.flags|=4096,t&=-t,f.lanes|=t,fo(f,fl(0,o,t));break e;case 1:o=s;var k=f.type,E=f.stateNode;if(0==(64&f.flags)&&("function"==typeof k.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Ql||!Ql.has(E)))){f.flags|=4096,t&=-t,f.lanes|=t,fo(f,pl(f,o,t));break e}}f=f.return}while(null!==f)}Ns(n)}catch(S){t=S,Rl===n&&null!==n&&(Rl=n=n.return);continue}break}}function Ts(){var e=Pl.current;return Pl.current=Ni,null===e?Ni:e}function Cs(e,t){var n=Il;Il|=16;var r=Ts();for(Ol===e&&Ml===t||_s(e,t);;)try{As();break}catch(a){xs(e,a)}if(to(),Il=n,Pl.current=r,null!==Rl)throw Error(i(261));return Ol=null,Ml=0,Fl}function As(){for(;null!==Rl;)Ps(Rl)}function Ls(){for(;null!==Rl&&!Ca();)Ps(Rl)}function Ps(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?Ns(e):Rl=t,Nl.current=null}function Ns(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(Rl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Rl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Rl=t);Rl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Is(e){var t=Za();return Ga(99,Os.bind(null,e,t)),null}function Os(e,t){do{Ms()}while(null!==es);if(0!=(48&Il))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<o;){var c=31-Zt(o),u=1<<c;a[c]=0,l[c]=-1,s[c]=-1,o&=~u}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Ol&&(Rl=Ol=null,Ml=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Il,Il|=32,Nl.current=null,jr=qt,hr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(u=s.getSelection&&s.getSelection())&&0!==u.rangeCount){s=u.anchorNode,o=u.anchorOffset,c=u.focusNode,u=u.focusOffset;try{s.nodeType,c.nodeType}catch(T){s=null;break e}var d=0,f=-1,p=-1,m=0,g=0,h=l,b=null;t:for(;;){for(var v;h!==s||0!==o&&3!==h.nodeType||(f=d+o),h!==c||0!==u&&3!==h.nodeType||(p=d+u),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===l)break t;if(b===s&&++m===o&&(f=d),b===c&&++g===u&&(p=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;zr={focusedElem:l,selectionRange:s},qt=!1,us=null,ds=!1,Yl=r;do{try{Rs()}catch(T){if(null===Yl)throw Error(i(330));js(Yl,T),Yl=Yl.nextEffect}}while(null!==Yl);us=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&be(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var k=w.ref;null!==k&&("function"==typeof k?k(null):k.current=null)}}switch(1038&y){case 2:El(Yl),Yl.flags&=-3;break;case 6:El(Yl),Yl.flags&=-3,Tl(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,Tl(Yl.alternate,Yl);break;case 4:Tl(Yl.alternate,Yl);break;case 8:xl(l,s=Yl);var E=s.alternate;wl(s),null!==E&&wl(E)}Yl=Yl.nextEffect}}catch(T){if(null===Yl)throw Error(i(330));js(Yl,T),Yl=Yl.nextEffect}}while(null!==Yl);if(k=zr,w=gr(),y=k.focusedElem,l=k.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==l&&hr(y)&&(w=l.start,void 0===(k=l.end)&&(k=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(k,y.value.length)):(k=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(k=k.getSelection(),s=y.textContent.length,E=Math.min(l.start,s),l=void 0===l.end?E:Math.min(l.end,s),!k.extend&&E>l&&(s=l,l=E,E=s),s=pr(y,E),o=pr(y,l),s&&o&&(1!==k.rangeCount||k.anchorNode!==s.node||k.anchorOffset!==s.offset||k.focusNode!==o.node||k.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),k.removeAllRanges(),E>l?(k.addRange(w),k.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),k.addRange(w))))),w=[];for(k=y;k=k.parentNode;)1===k.nodeType&&w.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(k=w[y]).element.scrollLeft=k.left,k.element.scrollTop=k.top}qt=!!jr,zr=jr=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var S=Yl.flags;if(36&S&&bl(y,Yl.alternate,Yl),128&S){w=void 0;var _=Yl.ref;if(null!==_){var x=Yl.stateNode;Yl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Yl=Yl.nextEffect}}catch(T){if(null===Yl)throw Error(i(330));js(Yl,T),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Ba(),Il=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((S=Yl).sibling=null,S.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Ql=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,Sa&&"function"==typeof Sa.onCommitFiberRoot)try{Sa.onCommitFiberRoot(Ea,n,void 0,64==(64&n.current.flags))}catch(T){}if(hs(e,Ua()),Kl)throw Kl=!1,e=Xl,Xl=null,e;return 0!=(8&Il)||Wa(),null}function Rs(){for(;null!==Yl;){var e=Yl.alternate;ds||null===us||(0!=(8&Yl.flags)?Je(Yl,us)&&(ds=!0):13===Yl.tag&&Al(e,Yl)&&Je(Yl,us)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&hl(e,Yl),0==(512&t)||Jl||(Jl=!0,Va(97,(function(){return Ms(),null}))),Yl=Yl.nextEffect}}function Ms(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Ga(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Ms(),null})))}function Bs(e,t){rs.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Ms(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Il))throw Error(i(331));var t=Il;Il|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(c){if(null===o)throw Error(i(330));js(o,c)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(c){if(null===o)throw Error(i(330));js(o,c)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Il=t,Wa(),!0}function $s(e,t,n){uo(e,t=fl(0,t=cl(n,t),1)),t=fs(),null!==(e=gs(e,1))&&(Ut(e,1,t),hs(e,t))}function js(e,t){if(3===e.tag)$s(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){$s(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r))){var a=pl(n,e=cl(t,e),1);if(uo(n,a),a=fs(),null!==(n=gs(n,1)))Ut(n,1,a),hs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function zs(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Ol===e&&(Ml&n)===n&&(4===Fl||3===Fl&&(62914560&Ml)===Ml&&500>Ua()-Gl?_s(e,0):Zl|=n),hs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Za()?1:2:(0===ss&&(ss=jl),0===(t=jt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=gs(e,t))&&(Ut(e,t,n),hs(e,n))}function Zs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hs(e,t,n,r){return new Zs(e,t,n,r)}function Gs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Hs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Gs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,a,o,t);case D:l=8,a|=16;break;case x:l=8,a|=1;break;case T:return(e=Hs(12,n,t,8|a)).elementType=T,e.type=T,e.lanes=o,e;case P:return(e=Hs(13,n,t,a)).type=P,e.elementType=P,e.lanes=o,e;case N:return(e=Hs(19,n,t,a)).elementType=N,e.lanes=o,e;case B:return Ys(n,a,o,t);case F:return(e=Hs(24,n,t,a)).elementType=F,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:l=10;break e;case A:l=9;break e;case L:l=11;break e;case I:l=14;break e;case O:l=16,r=null;break e;case R:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function qs(e,t,n,r){return(e=Hs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=Hs(23,e,r,t)).elementType=B,e.lanes=n,e}function Ks(e,t,n){return(e=Hs(6,e,null,t)).lanes=n,e}function Xs(e,t,n){return(t=Hs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=zt(0),this.expirationTimes=zt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zt(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var a=t.current,o=fs(),l=ps(a);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(ha(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var c=n.type;if(ha(c)){n=ya(n,c,s);break e}}n=s}else n=da;return null===t.context?t.context=n:t.pendingContext=n,(t=co(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),uo(a,t),ms(a,l,o),l}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Qs(e,t,null!=n&&!0===n.hydrate),t=Hs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,lo(t),e[Jr]=n.current,Nr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function ac(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function oc(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=ec(i);l.call(e)}}Js(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=ec(i);s.call(e)}}ks((function(){Js(t,i,e,a)}))}return ec(i)}function ic(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ac(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||pa.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Wo();break;case 5:Mo(t);break;case 1:ha(t.type)&&wa(t);break;case 4:Oo(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;ua(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Qi(e,t,n):(ua(Bo,1&Bo.current),null!==(t=ol(e,t,n))?t.sibling:null);ua(Bo,1&Bo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),ua(Bo,Bo.current),r)break;return null;case 23:case 24:return t.lanes=0,zi(e,t,n)}return ol(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ga(t,fa.current),ao(t,n),a=ii(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ha(r)){var o=!0;wa(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,lo(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ho(t,r,l,e),a.updater=bo,t.stateNode=a,a._reactInternals=t,ko(t,r,e,n),t=Gi(null,t,r,!0,o,n)}else t.tag=0,Bi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Gs(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===I)return 14}return 2}(a),e=Ka(a,e),o){case 0:t=Zi(null,t,a,e,n);break e;case 1:t=Hi(null,t,a,e,n);break e;case 11:t=Fi(null,t,a,e,n);break e;case 14:t=$i(null,t,a,Ka(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,Zi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 1:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,so(e,t),po(t,r,null,n),(r=t.memoizedState.element)===a)Wo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(jo=Wr(t.stateNode.containerInfo.firstChild),$o=t,o=zo=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],qo.push(o);for(n=Co(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Bi(e,t,r,n),Wo();t=t.child}return t;case 5:return Mo(t),null===e&&Ho(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,Zr(r,a)?l=null:null!==o&&Zr(r,o)&&(t.flags|=16),Ui(e,t),Bi(e,t,l,n),t.child;case 6:return null===e&&Ho(t),null;case 13:return Qi(e,t,n);case 4:return Oo(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=To(t,null,r,n):Bi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Fi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 7:return Bi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Bi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(ua(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=cr(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!pa.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var c=s.dependencies;if(null!==c){l=s.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&o)){1===s.tag&&((u=co(-1,n&-n)).tag=2,uo(s,u)),s.lanes|=n,null!==(u=s.alternate)&&(u.lanes|=n),ro(s.return,n),c.lanes|=n;break}u=u.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Bi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,ao(t,n),r=r(a=oo(a,o.unstable_observedBits)),t.flags|=1,Bi(e,t,r,n),t.child;case 14:return o=Ka(a=t.type,t.pendingProps),$i(e,t,a,o=Ka(a.type,o),r,n);case 15:return ji(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Ka(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ha(r)?(e=!0,wa(t)):e=!1,ao(t,n),yo(t,r,a),ko(t,r,a,n),Gi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return zi(e,t,n)}throw Error(i(156,t.tag))},rc.prototype.render=function(e){Js(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nc(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nc(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nc(e,n)}},rt=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=aa(r);if(!a)throw Error(i(90));X(r),ne(r,a)}}}break;case"textarea":ce(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ie=ws,Oe=function(e,t,n,r,a){var o=Il;Il|=4;try{return Ga(98,e.bind(null,t,n,r,a))}finally{0===(Il=o)&&(Wl(),Wa())}},Re=function(){0==(49&Il)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hs(e,Ua())}))}Wa()}(),Ms())},Me=function(e,t){var n=Il;Il|=2;try{return e(t)}finally{0===(Il=n)&&(Wl(),Wa())}};var lc={Events:[na,ra,aa,Pe,Ne,Ms,{current:!1}]},sc={findFiberByHostInstance:ta,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cc={bundleType:sc.bundleType,version:sc.version,rendererPackageName:sc.rendererPackageName,rendererConfig:sc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:k.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Qe(e))?null:e.stateNode},findFiberByHostInstance:sc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uc=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uc.isDisabled&&uc.supportsFiber)try{Ea=uc.inject(cc),Sa=uc}catch(ge){}}t.createPortal=ic,t.hydrate=function(e,t,n){if(!ac(t))throw Error(i(200));return oc(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,c,u;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,c[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==c[s]&&"__v"!==c[s]&&"__o"!==c[s]||!e.$$typeof)&&!o(e[c[s]],i[c[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>G,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),l=n.n(i),s=n(1143),c=n.n(s),u=n(6774),d=n.n(u);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},x=function(e){return S(e,"onChangeClientState")||function(){}},T=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},C=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][c]&&(a[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=f({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},L=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},N=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},O=[h.NOSCRIPT,h.SCRIPT,h.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},M=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},B=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},F=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=D(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=M(n),o=P(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return M(t)}};default:return{toComponent:function(){return B(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===O.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},$=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=N(e.metaTags,y),o=N(t,b),i=N(n,v);return{priorityMethods:{toComponent:function(){return[].concat(B(h.META,a.priority),B(h.LINK,o.priority),B(h.SCRIPT,i.priority))},toString:function(){return F(h.META,a.priority,r)+" "+F(h.LINK,o.priority,r)+" "+F(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=m.priorityMethods,u=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(h.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",a,r),link:F(h.LINK,u,r),meta:F(h.META,d,r),noscript:F(h.NOSCRIPT,o,r),script:F(h.SCRIPT,f,r),style:F(h.STYLE,i,r),title:F(h.TITLE,{title:s,titleAttributes:c},r)}},j=[],z=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?j:n.instances},add:function(e){(n.canUseDOM?j:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?j:n.instances).indexOf(e);(n.canUseDOM?j:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=$({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new z(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),-1===a.indexOf(s)&&a.push(s);var u=o.indexOf(s);-1!==u&&o.splice(u,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(h.TITLE,t)}(u,d);var f={baseTag:V(h.BASE,n),linkTags:V(h.LINK,a),metaTags:V(h.META,o),noscriptTags:V(h.NOSCRIPT,i),scriptTags:V(h.SCRIPT,s),styleTags:V(h.STYLE,c)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:C(["href"],e),bodyAttributes:T("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:T("htmlAttributes",e),linkTags:A(h.LINK,["rel","href"],e),metaTags:A(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:A(h.SCRIPT,["src","innerHTML"],e),styleTags:A(h.STYLE,["cssText"],e),title:_(e),titleAttributes:T("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});G.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){q(t,(function(){Y=null}))})):(q(t),Y=null)):$&&(a=$(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:Z.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Q=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case h.BODY:return f({},a,{bodyAttributes:f({},o)});case h.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,X),l=Object.keys(i).reduce((function(e,t){return e[E[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,Q),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof z||(o=new z(o.context,o.instances)),o?r.createElement(K,f({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(K,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case c:case f:case h:case g:case s:return e;default:return t}}case a:return t}}}function E(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return E(e)||k(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===f},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===c||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return c.push(h),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),f=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:s.func.isRequired}),o(h,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>u,rU:()=>h});var r=n(6550),a=n(5068),o=n(7294),i=n(9318),l=n(7462),s=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=o.forwardRef;void 0===m&&(m=p);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=p!==m&&t||n,o.createElement("a",u)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,u=e.replace,h=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=f(d(h,e.location),e.location),s=r?n.createHref(r):"",g=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(u||r?n.replace:n.push)(t)}});return p!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,p=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,S=e.style,_=e.to,x=e.innerRef,T=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,C=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=C?(0,r.LX)(n.pathname,{path:C,exact:g,sensitive:k,strict:E}):null,L=!!(y?y(A,n):A),P="function"==typeof m?m(L):m,N="function"==typeof S?S(L):S;L&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,u),N=(0,l.Z)({},N,p));var I=(0,l.Z)({"aria-current":L&&a||null,className:P,style:N,to:i},T);return b!==v?I.ref=t||x:I.innerRef=x,o.createElement(h,I)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>y,LX:()=>S,TH:()=>O,k6:()=>I,rs:()=>P,s6:()=>v});var r=n(5068),a=n(7294),o=n(5697),i=n.n(o),l=n(9318),s=n(8776),c=n(7462),u=n(9658),d=n.n(u),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},a.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},a.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},a.getValue=function(){return this.context[l]?this.context[l].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return c.contextTypes=((o={})[l]=i().object,o),{Provider:s,Consumer:c}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),v=h("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},k=1e4,E=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,l=void 0!==i&&i,s=n.sensitive,c=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return E<k&&(r[e]=o,E++),o}(n,{end:o,strict:l,sensitive:c}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var u=s[0],f=s.slice(1),p=e===u;return o&&!p?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,c.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,u=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(v.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:u?a.createElement(u,o):d?d(o):null:"function"==typeof l?l(o):null)}))},t}(a.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function T(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function C(e){return"string"==typeof e?e:(0,l.Ep)(e)}function A(e){return function(){(0,s.Z)(!1)}}function L(){}a.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var N=a.useContext;function I(){return N(b)}function O(){return N(v).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,E="+"===y||"*"===y,S="?"===y||"*"===y,_=n[2]||u,x=b||v;r.push({name:h||o++,prefix:g||"",delimiter:_,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:x?c(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,f=l[u.name];if(null==f){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(f)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');o+=u.prefix+d}}else o+=u}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var c=e[l];if("string"==typeof c)i+=s(c);else{var f=s(c.prefix),p="(?:"+c.pattern+")";t.push(c),c.repeat&&(p+="(?:"+f+p+")*"),i+=p=c.optional?c.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",u(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var c=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),c=d("react.memo"),u=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},k=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,r)&&!E.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var c=Array(s),u=0;u<s;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,props:o,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var x=/\/+/g;function T(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function C(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+T(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),C(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var c=0;c<e.length;c++){var u=r+T(l=e[c],c);s+=C(l,t,n,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(l=e.next()).done;)s+=C(l=l.value,t,n,u=r+T(l,c++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function A(e,t,n){if(null==e)return e;var r=[],a=0;return C(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function L(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function N(){var e=P.current;if(null===e)throw Error(p(321));return e}var I={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)k.call(t,u)&&!E.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=n;else if(1<u){c=Array(u);for(var d=0;d<u;d++)c[d]=arguments[d+2];o.children=c}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var c=null,u=null,d=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==c?setTimeout(n,0,e):(c=e,setTimeout(d,0))},r=function(e,t){u=setTimeout(e,t)},a=function(){clearTimeout(u)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,k=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?k.postMessage(null):(g=!1,h=null)}catch(n){throw k.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,k.postMessage(null))},r=function(e,n){b=f((function(){e(t.unstable_now())}),n)},a=function(){p(b),b=-1}}function E(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<x(a,t)))break e;e[r]=t,e[n]=a,n=r}}function S(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],l=o+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var T=[],C=[],A=1,L=null,P=3,N=!1,I=!1,O=!1;function R(e){for(var t=S(C);null!==t;){if(null===t.callback)_(C);else{if(!(t.startTime<=e))break;_(C),t.sortIndex=t.expirationTime,E(T,t)}t=S(C)}}function M(e){if(O=!1,R(e),!I)if(null!==S(T))I=!0,n(D);else{var t=S(C);null!==t&&r(M,t.startTime-e)}}function D(e,n){I=!1,O&&(O=!1,a()),N=!0;var o=P;try{for(R(n),L=S(T);null!==L&&(!(L.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=L.callback;if("function"==typeof i){L.callback=null,P=L.priorityLevel;var l=i(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?L.callback=l:L===S(T)&&_(T),R(n)}else _(T);L=S(T)}if(null!==L)var s=!0;else{var c=S(C);null!==c&&r(M,c.startTime-n),s=!1}return s}finally{L=null,P=o,N=!1}}var B=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){I||N||(I=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return S(T)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=B,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:A++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,E(C,e),null===S(T)&&e===S(C)&&(O?a():O=!0,r(M,i-l))):(e.sortIndex=s,E(T,e),I||N||(I=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var c=o[s];if(!l(c))return!1;var u=e[c],d=t[c];if(!1===(a=n?n.call(r,u,d,c):void 0)||void 0===a&&u!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(r){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,u=r[1];return l((function(){a.value=n,a.getSnapshot=t,c(a)&&u({inst:a})}),[e,n,t]),i((function(){return c(a)&&u({inst:a}),e((function(){c(a)&&u({inst:a})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"mf",tagline:"blog and additional materials for courses at \u03c6",url:"https://blog.mfocko.xyz",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon.ico",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:!1,blog:!1,theme:{customCss:["/home/runner/work/blog/blog/src/css/custom.scss","/home/runner/work/blog/blog/src/css/jetbrains_mono.css"]}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"ib002",path:"ib002",routeBasePath:"ib002",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://gitlab.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"pb071",path:"pb071",routeBasePath:"pb071",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://gitlab.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"pb161",path:"pb161",routeBasePath:"pb161",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://gitlab.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-blog",{id:"blog",routeBasePath:"blog",path:"./blog",feedOptions:{type:"all",description:"mf's blog"},editUrl:"https://gitlab.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],"docusaurus-plugin-sass"],stylesheets:[{href:"https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css",type:"text/css",integrity:"sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM",crossorigin:"anonymous"}],themeConfig:{navbar:{title:"mf",items:[{type:"dropdown",label:"Additional FI MU materials",items:[{type:"doc",docId:"ib002-intro",docsPluginId:"ib002",label:"IB002: Algorithms"},{type:"doc",docId:"pb071-intro",docsPluginId:"pb071",label:"PB071: C"},{type:"doc",docId:"pb161-intro",docsPluginId:"pb161",label:"PB161: C++"}],position:"left"},{to:"contributions",label:"Contributions",position:"left"},{to:"talks",label:"Talks",position:"left"},{to:"blog",position:"right",label:"Blog"}],hideOnScroll:!1},footer:{style:"dark",copyright:"Copyright \xa9 2023 Matej Focko.",links:[{title:"Git",items:[{label:"GitHub",href:"https://github.com/mfocko"},{label:"GitLab",href:"https://gitlab.com/mfocko"},{label:"Gitea (self-hosted)",href:"https://git.mfocko.xyz/mfocko"}]},{title:"Social #1",items:[{label:"LinkedIn",href:"https://www.linkedin.com/in/mfocko/"},{label:"Fosstodon",href:"https://fosstodon.org/@m4tt_314"},{label:"Hachyderm.io",href:"https://hachyderm.io/@m4tt_314"}]},{title:"Social #2",items:[{label:"Twitter",href:"https://twitter.com/m4tt_314"},{label:"Twitch",href:"https://twitch.tv/m4tt_314"},{label:"Ko-fi",href:"https://ko-fi.com/m4tt_314"}]}]},prism:{theme:{plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["ada","bash","csharp","dot","haskell","java","nix","pascal","ruby","rust"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},docs:{sidebar:{hideable:!0,autoCollapseCategories:!1},versionPersistence:"localStorage"},mermaid:{options:{fontFamily:"Iosevka,'Iosevka Term','Cascadia Code','JetBrains Mono','Fira Code',monospace"},theme:{dark:"dark",light:"default"}},algolia:{appId:"0VXRFPR4QF",apiKey:"9d4d452117cfaaae3e51b9568e22aa16",indexName:"mfocko",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},markdown:{mermaid:!0},themes:["@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-a0e":{"__comp":"a6aa9e1f","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"},{"content":"ab2721d4"},{"content":"bb882650"},{"content":"75cccf44"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"metadata":"a7098721"},"/blog/2023/08/02/copr-75c":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"b5a32f14"},"/blog/aoc-2022/1st-week-0fa":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"dff2ebad"},"/blog/aoc-2022/2nd-week-0be":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"377f3aa1"},"/blog/aoc-2022/3rd-week-2f7":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"f48be158"},"/blog/aoc-2022/4th-week-9fd":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"3da4b779"},"/blog/aoc-2022/intro-645":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"51624505"},"/blog/archive-db3":{"__comp":"9e4087bc","__context":{"plugin":"0220f5fc"},"archive":"4200b1a9"},"/blog/leetcode/sort-diagonally-819":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"cfa2b263"},"/blog/tags-726":{"__comp":"01a85c17","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","tags":"66d5ef6c"},"/blog/tags/\ud83c\udfed-fa9":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"765ea78b","listMetadata":"b25fbc58"},"/blog/tags/admin-3a8":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"a082abd3","listMetadata":"146d9b84"},"/blog/tags/advent-of-code-3ce":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"19d7c045","listMetadata":"8b1802c5"},"/blog/tags/advent-of-code-2022-a9b":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"a80747a0","listMetadata":"62d847b3"},"/blog/tags/copr-dd4":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"b45dccf0","listMetadata":"3011a4c0"},"/blog/tags/cpp-d2e":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"4edd2021","listMetadata":"4621632b"},"/blog/tags/iterators-f8b":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"ff472cd9","listMetadata":"29694455"},"/blog/tags/leetcode-238":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"86cd1460","listMetadata":"e89da83e"},"/blog/tags/red-hat-06b":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"52f2a5bf","listMetadata":"d79dd549"},"/blog/tags/rust-576":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"9287eafd","listMetadata":"0bfe45d5"},"/blog/tags/vps-afb":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"8c0e532b","listMetadata":"0608d96f"},"/contributions-c6e":{"__comp":"22a175ec","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/ib002/tags-139":{"__comp":"3720c009","__context":{"plugin":"280c26e1"},"tags":"52bff962"},"/ib002/tags/applications-bd0":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"470a9204"},"/ib002/tags/backtracking-e79":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"74c2e0e9"},"/ib002/tags/balanced-trees-633":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"5af27364"},"/ib002/tags/bfs-2b0":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"1e298f0c"},"/ib002/tags/bottom-up-dp-bfd":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"fd0b1e16"},"/ib002/tags/c-41d":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"58dd4fbd"},"/ib002/tags/csharp-e02":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"95be84b6"},"/ib002/tags/dynamic-array-a76":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"d9adc206"},"/ib002/tags/dynamic-programming-5f1":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"82b3b723"},"/ib002/tags/exponential-3dd":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"4c4e9f30"},"/ib002/tags/graphs-b40":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"dadfcff0"},"/ib002/tags/greedy-f4e":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"3593220c"},"/ib002/tags/iterative-81e":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"3aef4518"},"/ib002/tags/iterators-a31":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"73d5f13d"},"/ib002/tags/java-99a":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"18f481e4"},"/ib002/tags/karel-a44":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"edfd2a45"},"/ib002/tags/postconditions-5a4":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"37cf4872"},"/ib002/tags/python-2cd":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"75316eff"},"/ib002/tags/recursion-1ae":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"8418981c"},"/ib002/tags/red-black-trees-2b4":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"eb7cc117"},"/ib002/tags/sorting-90a":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"d5ca4423"},"/ib002/tags/testing-b13":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"d02d148d"},"/ib002/tags/time-complexity-01e":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"be4da062"},"/ib002/tags/top-down-dp-e81":{"__comp":"df203c0f","__context":{"plugin":"280c26e1"},"tag":"e25b3183"},"/search-49e":{"__comp":"1a4e3797","__context":{"plugin":"b0291f37"}},"/talks-cdf":{"__comp":"0fcbc6ca","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/ib002-092":{"__comp":"1be78505","__context":{"plugin":"280c26e1"},"versionMetadata":"b0067e0a"},"/ib002/-e66":{"__comp":"17896441","content":"834ed470"},"/ib002/algorithms-correctness/postcondition-ambiguity-760":{"__comp":"17896441","content":"9eb50c57"},"/ib002/category/algorithms-and-correctness-cde":{"__comp":"14eb3368","categoryGeneratedIndex":"8e1fadd0"},"/ib002/category/asymptotic-notation-and-time-complexity-b3d":{"__comp":"14eb3368","categoryGeneratedIndex":"a7d8226e"},"/ib002/category/graphs-eb5":{"__comp":"14eb3368","categoryGeneratedIndex":"09bc59e7"},"/ib002/category/recursion-39b":{"__comp":"14eb3368","categoryGeneratedIndex":"b2c263ce"},"/ib002/category/red-black-trees-e0c":{"__comp":"14eb3368","categoryGeneratedIndex":"d74d369f"},"/ib002/graphs/bfs-tree-aaa":{"__comp":"17896441","content":"2a09abcd"},"/ib002/graphs/iterative-and-iterators-489":{"__comp":"17896441","content":"fcc91f97"},"/ib002/rb-trees/applications-cfb":{"__comp":"17896441","content":"1e2009d3"},"/ib002/rb-trees/rules-35f":{"__comp":"17896441","content":"3de247b5"},"/ib002/recursion/karel-1-11c":{"__comp":"17896441","content":"4e286f4e"},"/ib002/recursion/pyramid-slide-down-73a":{"__comp":"17896441","content":"7d580cdb"},"/ib002/time-complexity/extend-712":{"__comp":"17896441","content":"788cc978"},"/pb071-f28":{"__comp":"1be78505","__context":{"plugin":"27470891"},"versionMetadata":"1bebd4ed"},"/pb071/-66f":{"__comp":"17896441","content":"337bc122"},"/pb071/bonuses/seminar-03-86d":{"__comp":"17896441","content":"90425ffc"},"/pb071/bonuses/seminar-04-7d6":{"__comp":"17896441","content":"713b7838"},"/pb071/bonuses/seminar-05-06-c41":{"__comp":"17896441","content":"f533ef4a"},"/pb071/bonuses/seminar-08-487":{"__comp":"17896441","content":"2523321d"},"/pb071/bonuses/seminar-10-8b8":{"__comp":"17896441","content":"7cf94373"},"/pb071/category/bonuses-995":{"__comp":"14eb3368","categoryGeneratedIndex":"4688cd57"},"/pb071/category/practice-exams-066":{"__comp":"14eb3368","categoryGeneratedIndex":"d661cf04"},"/pb071/mr-a43":{"__comp":"17896441","content":"83bf91d3"},"/pb071/pexam/cams-a0c":{"__comp":"17896441","content":"b9b1ccdc"},"/pb071/pexam/garbage_collect-0af":{"__comp":"17896441","content":"f60c832f"},"/pb161-bca":{"__comp":"1be78505","__context":{"plugin":"c8cbffbd"},"versionMetadata":"94036ea2"},"/pb161/-726":{"__comp":"17896441","content":"4ee12fa2"},"/pb161/environment-a0b":{"__comp":"17896441","content":"a2be6ffb"},"/-dfb":{"__comp":"c4f5d8e4","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.9283b308.js.LICENSE.txt b/assets/js/main.9283b308.js.LICENSE.txt new file mode 100644 index 0000000..eb75d69 --- /dev/null +++ b/assets/js/main.9283b308.js.LICENSE.txt @@ -0,0 +1,63 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/** + * @license React + * use-sync-external-store-shim.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.be793c46.js b/assets/js/runtime~main.be793c46.js new file mode 100644 index 0000000..f95901b --- /dev/null +++ b/assets/js/runtime~main.be793c46.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,f,a,c,d={},b={};function t(e){var f=b[e];if(void 0!==f)return f.exports;var a=b[e]={exports:{}};return d[e].call(a.exports,a,a.exports,t),a.exports}t.m=d,e=[],t.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],c=e[i][1],d=e[i][2];for(var r=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(t.O).every((e=>t.O[e](a[o])))?a.splice(o--,1):(r=!1,d<b&&(b=d));if(r){e.splice(i--,1);var n=c();void 0!==n&&(f=n)}}return f}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},t.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return t.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);t.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var r=2&c&&e;"object"==typeof r&&!~f.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,t.d(d,b),d},t.d=(e,f)=>{for(var a in f)t.o(f,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((f,a)=>(t.f[a](e,f),f)),[])),t.u=e=>"assets/js/"+({6:"e25b3183",143:"eb7cc117",146:"dff2ebad",404:"1bebd4ed",516:"a7d8226e",822:"8c0e532b",866:"4200b1a9",932:"4688cd57",1011:"377f3aa1",1050:"a7098721",1171:"d7f7fb17",1235:"86cd1460",1246:"2a09abcd",1272:"b0067e0a",1378:"0220f5fc",1501:"4e286f4e",1505:"3aef4518",1731:"337bc122",1851:"0fcbc6ca",2160:"f533ef4a",2167:"713b7838",2177:"3da4b779",2433:"b5a32f14",2732:"1e298f0c",2741:"d675395f",3039:"765ea78b",3086:"cfa2b263",3089:"a6aa9e1f",3095:"7cf94373",3184:"3de247b5",3223:"834ed470",3340:"58dd4fbd",3388:"29694455",3502:"5af27364",3519:"4621632b",3528:"74c2e0e9",3561:"95b96bb9",3608:"9e4087bc",3618:"a6a48ea2",3731:"51624505",3751:"3720c009",3835:"95be84b6",3906:"1e2009d3",3936:"470a9204",4013:"01a85c17",4064:"f48be158",4195:"c4f5d8e4",4252:"d9adc206",4256:"75cccf44",4269:"0bfe45d5",4287:"75316eff",4477:"94036ea2",4637:"19d7c045",4800:"a2be6ffb",4932:"09bc59e7",4972:"27470891",5126:"d5ca4423",5169:"d79dd549",5383:"8418981c",5388:"fd0b1e16",5430:"52f2a5bf",5521:"9287eafd",5529:"280c26e1",5658:"af8b72a7",5787:"82b3b723",5824:"a80747a0",5975:"4edd2021",6057:"18f481e4",6097:"b0291f37",6103:"ccc49370",6112:"d661cf04",6192:"b2c263ce",6234:"fcc91f97",6498:"be4da062",6554:"8e1fadd0",6890:"22a175ec",7248:"edfd2a45",7509:"9eb50c57",7555:"73d5f13d",7568:"0608d96f",7624:"dadfcff0",7755:"ab2721d4",7780:"d02d148d",7823:"83bf91d3",7883:"4c4e9f30",7918:"17896441",7920:"1a4e3797",7926:"3011a4c0",7963:"4ee12fa2",7979:"37cf4872",8091:"bb882650",8167:"3593220c",8442:"7d580cdb",8480:"8b1802c5",8520:"62d847b3",8610:"6875c492",8643:"ff472cd9",8757:"e89da83e",8769:"90425ffc",8786:"a082abd3",9044:"b9b1ccdc",9157:"788cc978",9193:"2523321d",9197:"b25fbc58",9228:"66d5ef6c",9300:"146d9b84",9385:"95f41f0b",9479:"d74d369f",9514:"1be78505",9611:"f60c832f",9679:"b45dccf0",9710:"52bff962",9814:"c8cbffbd",9817:"14eb3368",9924:"df203c0f"}[e]||e)+"."+{6:"1c50e16b",143:"55f4bd7d",146:"0c0a899d",404:"a838562f",516:"dabdb919",822:"9cbc1be0",866:"e4798bae",932:"4f084bfb",1011:"4c98e03e",1050:"ef506174",1171:"fd985da7",1235:"733128af",1246:"15946a52",1272:"68fd3778",1378:"5b1b8f6e",1426:"d90fc9fa",1501:"b0df1295",1505:"ae37468c",1731:"a2fd825d",1851:"e8ea4c91",2160:"13c50ab8",2167:"e5a05e06",2177:"a33bbff3",2433:"3c491fc9",2732:"caf61e40",2741:"567b4609",3039:"eff9c6dc",3086:"c19c407b",3089:"c08b78c4",3095:"f790d5a8",3184:"66851c3c",3223:"690ec9f0",3340:"f45f89fa",3388:"a2e2c1d7",3502:"400470ed",3519:"f101cb78",3528:"fc48acce",3561:"aefbf3b7",3608:"dadc79bc",3618:"d5faeb42",3731:"ab30cae6",3751:"996e811f",3835:"0463fc28",3906:"7e268ae7",3936:"f961c4a3",4013:"02ca9acb",4064:"eaa96907",4195:"05fc7105",4252:"4d3c59b2",4256:"5b6f1b34",4269:"58ce388b",4287:"a7b24a88",4477:"8be2e014",4637:"18dfd0ba",4800:"f8d1346f",4932:"64a221ae",4972:"d509d6e4",5126:"c7f8ab3b",5169:"ee10504b",5383:"3eb99a51",5388:"7f8a8c44",5430:"f6c9442b",5521:"8885dd15",5529:"27c7a6b1",5658:"1e28998e",5787:"fdccb1de",5824:"4dc03a81",5975:"47ff14e6",6048:"83823b1f",6057:"35406774",6097:"5b91d377",6103:"6c86d4f9",6112:"70911e61",6192:"01869630",6234:"acb581ec",6316:"0ca4149a",6498:"4dfd3eed",6554:"b5230023",6890:"a5706cf0",6945:"04a6ca6a",7248:"1bede75c",7509:"bc586b34",7515:"45da5915",7555:"2c8e245a",7568:"ee46e047",7624:"3cd22a72",7724:"0fff5da7",7755:"e0b371f9",7780:"0cb68506",7823:"21975b05",7883:"f247e2b4",7918:"a160e7e2",7920:"48f1640b",7926:"573f9325",7963:"74d68d7b",7979:"0b06d100",8091:"671a659f",8167:"04c28473",8442:"71718a61",8480:"6f267f4c",8520:"06e10519",8610:"2d487359",8643:"4ff57c91",8757:"a63c019a",8769:"955d8c56",8786:"1797976b",8894:"de4803df",8954:"296edd99",9044:"859f8a18",9157:"4f78c34d",9193:"50613303",9197:"c6b468d1",9228:"fc107ca5",9300:"996dfbcb",9385:"79e14732",9479:"ab677fcf",9487:"b3a824a3",9514:"65bfdbb1",9611:"d6dc7ae0",9679:"5fcb5182",9710:"6e8cadd8",9814:"a55be3a0",9817:"9c4e865a",9924:"1c48be56"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},t.l=(e,f,a,d)=>{if(c[e])c[e].push(f);else{var b,r;if(void 0!==a)for(var o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var i=o[n];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="fi:"+a){b=i;break}}b||(r=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,t.nc&&b.setAttribute("nonce",t.nc),b.setAttribute("data-webpack","fi:"+a),b.src=e),c[e]=[f];var u=(f,a)=>{b.onerror=b.onload=null,clearTimeout(l);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(a))),f)return f(a)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),r&&document.head.appendChild(b)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918",27470891:"4972",29694455:"3388",51624505:"3731",e25b3183:"6",eb7cc117:"143",dff2ebad:"146","1bebd4ed":"404",a7d8226e:"516","8c0e532b":"822","4200b1a9":"866","4688cd57":"932","377f3aa1":"1011",a7098721:"1050",d7f7fb17:"1171","86cd1460":"1235","2a09abcd":"1246",b0067e0a:"1272","0220f5fc":"1378","4e286f4e":"1501","3aef4518":"1505","337bc122":"1731","0fcbc6ca":"1851",f533ef4a:"2160","713b7838":"2167","3da4b779":"2177",b5a32f14:"2433","1e298f0c":"2732",d675395f:"2741","765ea78b":"3039",cfa2b263:"3086",a6aa9e1f:"3089","7cf94373":"3095","3de247b5":"3184","834ed470":"3223","58dd4fbd":"3340","5af27364":"3502","4621632b":"3519","74c2e0e9":"3528","95b96bb9":"3561","9e4087bc":"3608",a6a48ea2:"3618","3720c009":"3751","95be84b6":"3835","1e2009d3":"3906","470a9204":"3936","01a85c17":"4013",f48be158:"4064",c4f5d8e4:"4195",d9adc206:"4252","75cccf44":"4256","0bfe45d5":"4269","75316eff":"4287","94036ea2":"4477","19d7c045":"4637",a2be6ffb:"4800","09bc59e7":"4932",d5ca4423:"5126",d79dd549:"5169","8418981c":"5383",fd0b1e16:"5388","52f2a5bf":"5430","9287eafd":"5521","280c26e1":"5529",af8b72a7:"5658","82b3b723":"5787",a80747a0:"5824","4edd2021":"5975","18f481e4":"6057",b0291f37:"6097",ccc49370:"6103",d661cf04:"6112",b2c263ce:"6192",fcc91f97:"6234",be4da062:"6498","8e1fadd0":"6554","22a175ec":"6890",edfd2a45:"7248","9eb50c57":"7509","73d5f13d":"7555","0608d96f":"7568",dadfcff0:"7624",ab2721d4:"7755",d02d148d:"7780","83bf91d3":"7823","4c4e9f30":"7883","1a4e3797":"7920","3011a4c0":"7926","4ee12fa2":"7963","37cf4872":"7979",bb882650:"8091","3593220c":"8167","7d580cdb":"8442","8b1802c5":"8480","62d847b3":"8520","6875c492":"8610",ff472cd9:"8643",e89da83e:"8757","90425ffc":"8769",a082abd3:"8786",b9b1ccdc:"9044","788cc978":"9157","2523321d":"9193",b25fbc58:"9197","66d5ef6c":"9228","146d9b84":"9300","95f41f0b":"9385",d74d369f:"9479","1be78505":"9514",f60c832f:"9611",b45dccf0:"9679","52bff962":"9710",c8cbffbd:"9814","14eb3368":"9817",df203c0f:"9924"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(f,a)=>{var c=t.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=t.p+t.u(f),r=new Error;t.l(b,(a=>{if(t.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;r.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",r.name="ChunkLoadError",r.type=d,r.request=b,c[1](r)}}),"chunk-"+f,f)}},t.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],r=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in r)t.o(r,c)&&(t.m[c]=r[c]);if(o)var i=o(t)}for(f&&f(a);n<b.length;n++)d=b[n],t.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return t.O(i)},a=self.webpackChunkfi=self.webpackChunkfi||[];a.forEach(f.bind(null,0)),a.push=f.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/blog/2023/08/02/copr/index.html b/blog/2023/08/02/copr/index.html new file mode 100644 index 0000000..15fe6e0 --- /dev/null +++ b/blog/2023/08/02/copr/index.html @@ -0,0 +1,67 @@ +<!doctype html> +<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-blog"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v2.4.1"> +<title data-rh="true">How can Copr help with broken dependencies | mf + + + + + + + + + + + + + +

+

How can Copr help with broken dependencies

· 4 min read
Matej Focko

When you decide to run Fedora on your VPS, you might get screwed over by using +random repositories…

When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without +thinking. I bet 99% of people would say that I'm crazy for doing such thing2, +BUT I've been using Fedora on my PCs for some time already and it felt very +stable and natural to just use, even for VPS.

One of the first things I've done was setting up a mail server. You may guess +what's the fun part about having a mail server… Yes, it's all the spam you +receive and only then you realize how much “crap” gets filtered on free mail +services. To battle this problem I chose to use +rspamd that had CentOS support, but someone +had a Copr repository that I used to +install it.

How does Copr repositories work?

If you have ever used Ubuntu, you might be familiar with the concept since it is +very close to PPAs.

tl;dr of the whole process consists of

  1. enabling the Copr repository, and
  2. installing the desired package.

So in shell you would do

# dnf copr enable ‹copr-repository›
# dnf install ‹package-from-the-repository›

And… that's it! Nothing else needed! Simple, right? And literally same process +as you would do for the PPA.

AUR

On the other hand, if you are familiar with the archLinux, you definitely know +AUR and what it can do for you. Copr repository is pretty similar, but the +packages are prebuilt in Copr and Copr repositories can carry the required +dependencies for said packages, which simplifies the distribution, and can even +help with installing singular packages (when you just need the dependency, not +everything).

My issue

Now you might wonder how would I use it on my VPS. It's rather simple, once in +6 months a new Fedora release comes out. And you need to upgrade to newer +release… You don't need to do it right away and for such setup it probably isn't +even recommended.

tip

Fedora releases are supported for a year, i.e. they live 6 months till the next +release and then another 6 months till another release.

Some people prefer to run one version “behind”. If you ever decide to run it on +your home server or in a similar setup, it might be a pretty good idea to +follow. I'm using the “latest greatest”, cause why not 😄

One way or another, you still need to bump the release every six months, unless +you'd bump 2 releases at once every year, which would be a decision, since, at +least I, cannot see any benefits in it… You don't go for “stability”, cause once +a year you switch to the latest release and then, before you bump, you use one +year old software, so you're not even using the latest.

Fast-forward 2 years in the future, new Fedora release came out (October '22) +and I was doing an upgrade. Dependencies of the rspamd have been updated and +rspamd builds in Copr have failed and no one fixed it. Cool, so now I can +upgrade, but can either ignore the dependencies or uninstall the rspamd…

How can Copr help?

I have managed to find +specfile for the +rspamd package that they use for CentOS. There were some files apart from the +specfile, so I had to make an SRPM locally and then… I just uploaded the SRPM +to the Copr to +build +an RPM.

I have switched the previous Copr repository for rspamd with my own and happily +proceeded with the upgrade.

Conclusion

Copr is heavily used for testing builds on the upstream with +Packit. However, as you can see, it is possible to use it +very well for packaging your own stuff and avoiding issues (such as the one +I have described above), if need be.


  1. vpsFree.cz
  2. Even though I've been running archLinux on some Raspberry Pi's and also +on one of my “home servers”, before getting the VPS. You could say I like +to live on the edge…
+ + + + \ No newline at end of file diff --git a/blog/aoc-2022/1st-week/index.html b/blog/aoc-2022/1st-week/index.html new file mode 100644 index 0000000..d0562bf --- /dev/null +++ b/blog/aoc-2022/1st-week/index.html @@ -0,0 +1,111 @@ + + + + + +1st week of Advent of Code '22 in Rust | mf + + + + + + + + + + + + + +
+

1st week of Advent of Code '22 in Rust

· 13 min read
Matej Focko

Let's go through the first week of Advent of Code in Rust.

note

If you wish to have a look at the solutions, you can follow them on my GitLab. +More specifically in the /src/bin/.

I will try to summarize my experience with using Rust for the AoC. Trying it out +ages ago, I believe it will be pain and suffering, but we will see. For each +day I will also try to give a tl;dr of the problem, so that you can better imagine +the relation to my woes or 👍 moments.

Day 1: Calorie Counting

tl;dr

As the name suggests, we get the calories of the food contained in the elves +backpacks and we want to choose the elf that has the most food ;)

Wakey wakey!

Programming in Rust at 6am definitely hits. I've also forgotten to mention how I +handle samples. With each puzzle you usually get a sample input and expected +output. You can use them to verify that your solution works, or usually doesn't.

At first I've decided to put asserts into my main, something like

assert_eq!(part_1(&sample), 24000);
info!("Part 1: {}", part_1(&input));

assert_eq!(part_2(&sample), 45000);
info!("Part 2: {}", part_2(&input));

However, once you get further, the sample input may take some time to run itself. +So in the end, I have decided to turn them into unit tests:

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_part_1() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_1(&sample), 24000);
}

#[test]
fn test_part_2() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_2(&sample), 45000);
}
}

And later on I have noticed, it's hard to tell the difference between the days, +so I further renamed the mod from generic tests to reflect the days.

Also after finishing the first day puzzle, I have installed an sccache to +cache the builds, so that the build time is lower, cause it was kinda unbearable.

Solution

Well, it's a pretty simple problem. You just take the input, sum the calories and +find the biggest one. However, if we try to generalize to more than the biggest +one, the fun appears. We have few options:

  • keep all the calories, sort them, take what we need
  • keep all the calories and use max heap
  • use min heap and maintain at most N calories that we need

Day 2: Rock Paper Scissors

tl;dr

You want to know what score did you achieve while playing Rock Paper Scissors. +And then you want to be strategic about it.

Apart from the technical details of the puzzle, it went relatively smooth.

Solution

I took relatively naïve approach and then tried to simplify it.

Day 3: Rucksack Reorganization

tl;dr

Let's go reorganize elves' backpacks! Each backpacks has 2 compartments and you +want to find the common item among those compartments. Each of them has priority, +you care only about the sum.

This is the day where I started to fight the compiler and neither of us decided +to give up. Let's dive into it \o/

Fun fact

Fighting the compiler took me 30 minutes.

We need to find a common item among 2 collections, that's an easy task, right? +We can construct 2 sets and find an intersection:

let top: HashSet<i32> = [1, 2, 3].iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].iter().collect();

Now, the first issue that we encounter is caused by the fact that we are using +a slice (the […]), iterator of that returns references to the numbers. +And we get immediately yelled at by the compiler, because the numbers are discarded +after running the .collect. To fix this, we can use .into_iter:

let top: HashSet<i32> = [1, 2, 3].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();

This way the numbers will get copied instead of referenced. OK, let's find the +intersection of those 2 collections:

println!("Common elements: {:?}", top.intersection(&bottom));
Common elements: [3]
caution

Notice that we need to do &bottom. It explicitly specifies that .intersection +borrows the bottom, i.e. takes an immutable reference to it.

That's what we want, right? Looks like it! \o/

Next part wants us to find the common element among all of the backpacks. OK, so +that should be fairly easy, we have an intersection and we want to find intersection +over all of them.

Let's have a look at the type of the .intersection

pub fn intersection<'a>(
    &'a self,
    other: &'a HashSet<T, S>
) -> Intersection<'a, T, S>

OK… Huh… But we have an example there!

let intersection: HashSet<_> = a.intersection(&b).collect();

Cool, that's all we need.

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
println!("Intersection: {:?}", intersection);
Intersection: {3, 4}

Cool, so let's do the intersection with the top_2:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
println!("Intersection: {:?}", intersection);

And we get yelled at by the compiler:

error[E0308]: mismatched types
--> src/main.rs:10:58
|
10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
| ------------ ^^^^^^ expected `&i32`, found `i32`
| |
| arguments to this function are incorrect
|
= note: expected reference `&HashSet<&i32>`
found reference `&HashSet<i32>`

/o\ What the hell is going on here? Well, the funny thing is, that this operation +doesn't return the elements themselves, but the references to them and when we pass +the third set, it has just the values themselves, without any references.

tip

It may seem as a very weird decision, but in fact it makes some sense… It allows +you to do intersection of items that may not be possible to copy. Overall this is +a “tax” for having a borrow checker drilling your ass having your back and +making sure you're not doing something naughty that may cause an undefined +behavior.

To resolve this we need to get an iterator that clones the elements:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();
println!("Intersection: {:?}", intersection);
Intersection: {4}

Solution

The approach is pretty simple, if you omit the 1on1 with the compiler. You just +have some fun with the set operations :)

Day 4: Camp Cleanup

tl;dr

Elves are cleaning up the camp and they got overlapping sections to clean up. +Find how many overlap and can take the day off.

RangeInclusive is your friend not an enemy :)

Solution

Relatively easy, you just need to parse the input and know what you want. Rust's +RangeInclusive type helped a lot, cause it took care of all abstractions.

Day 5: Supply Stacks

tl;dr

Let's play with stacks of crates.

Very easy problem with very annoying input. You can judge yourself:

    [D]    
[N] [C]
[Z] [M] [P]
1 2 3

move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

Good luck transforming that into something reasonable :)

Fun fact

Took me 40 minutes to parse this reasonably, including fighting the compiler.

Solution

For the initial solution I went with a manual solution (as in I have done all +the work. Later on I have decided to explore the std and interface of the +std::vec::Vec and found split_off which takes an index and splits (duh) +the vector:

let mut vec = vec![1, 2, 3];
let vec2 = vec.split_off(1);
assert_eq!(vec, [1]);
assert_eq!(vec2, [2, 3]);

This helped me simplify my solution a lot and also get rid of some edge cases.

Day 6: Tuning Trouble

tl;dr

Finding start of the message in a very weird protocol. Start of the message is +denoted by NN unique consecutive characters.

Solution

A lot of different approaches, knowing that we are dealing with input consisting +solely of ASCII letters, I bit the bullet and went with sliding window and +constructing sets from that window, checking if the set is as big as the window.

One possible optimization could consist of keeping a bit-vector (i.e. usize +variable) of encountered characters and updating it as we go. However this has +a different issue and that is removal of the characters from the left side of the +window. We don't know if the same character is not included later on.

Other option is to do similar thing, but keeping the frequencies of the letters, +and again knowing we have only ASCII letters we can optimize by having a vector +of 26 elements that keeps count for each lowercase letter.

Day 7: No Space Left On Device

tl;dr

Let's simulate du to get some stats about our file system and then pinpoint +directories that take a lot of space and should be deleted.

I was waiting for this moment, and yet it got me! +imagine me swearing for hours

Solution

We need to “build” a file system from the input that is given in a following form:

$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

There are few ways in which you can achieve this and also you can assume some +preconditions, but why would we do that, right? :)

You can “slap” this in either HashMap or BTreeMap and call it a day. +And that would be boring…

tip

BTreeMap is quite fitting for this, don't you think?

I always wanted to try allocation on heap in Rust, so I chose to implement a tree. +I fought with the Box<T> for some time and was losing…

Then I looked up some implementations of trees or linked lists and decided to try +Rc<Cell<T>>. And I got my ass whopped by the compiler once again. /o\

tip

Box<T> represents a dynamically allocated memory on heap. It is a single pointer, +you can imagine this as std::unique_ptr<T> in C++.

Rc<T> represents a dynamically allocated memory on heap. On top of that it is +reference counted (that's what the Rc stands for). You can imagine this as +std::shared_ptr<T> in C++.

Now the fun stuff. Neither of them lets you mutate the contents of the memory.

Cell<T> allows you to mutate the memory. Can be used reasonably with types that +can be copied, because the memory safety is guaranteed by copying the contents +when there is more than one mutable reference to the memory.

RefCell<T> is similar to the Cell<T>, but the borrowing rules (how many mutable +references are present) are checked dynamically.

So in the end, if you want something like std::shared_ptr<T> in Rust, you want +to have Rc<RefCell<T>>.

So, how are we going to represent the file system then? We will use an enumeration, +hehe, which is an algebraic data type that can store some stuff in itself 😩

type FileHandle = Rc<RefCell<AocFile>>;

#[derive(Debug)]
enum AocFile {
File(usize),
Directory(BTreeMap<String, FileHandle>),
}

Let's go over it! FileHandle represents dynamically allocated AocFile, not +much to discuss. What does the #[derive(Debug)] do though? It lets us to print +out the value of that enumeration, it's derived, so it's not as good as if we had +implemented it ourselves, but it's good enough for debugging, hence the name.

Now to the fun part! AocFile value can be represented in two ways:

  • File(usize), e.g. AocFile::File(123) and we can pattern match it, if we +need to
  • Directory(BTreeMap<String, FileHandle>) will represent the directory and will +contain map matching the name of the files (or directories) within to their +respective file handles

I will omit the details about constructing this file system, cause there are a lot +of technicalities introduced by the nature of the input. However if you are +interested, you can have a look at my solution.

We need to find small enough directories and also find the smallest directory that +will free enough space. Now the question is, how could we do that. And there are +multiple ways I will describe.

I have chosen to implement tree catamorphism 😩. It is basically a fold +over a tree data structure. We descent down into the leaves and propagate computed +results all the way to the root. You can also notice that this approach is very +similar to dynamic programming, we find overlapping sections of the computation +and try to minimize the additional work (in this case: we need to know sizes of +our descendants, but we have already been there).

Another approach that has been suggested to me few days later is running DFS on +the graph. And, funnily enough, we would still need to combine what we found in +the branches where we descent. So in the end, it would work very similarly to my +solution.

One of the more exotic options would be precomputing the required information at +the same time as parsing. That could be done by adding additional fields to the +nodes which would allow storing such information and updating it as we construct +the file system.

Post Mortem

Things that have been brought up in the discussion later on.

Rc<T> vs Rc<RefCell<T>>

It has been brought up that I have a contradicting statement regarding the +dynamically allocated memory. Specifically:

  • You can imagine Rc<T> as an std::shared_ptr<T> (in C++)
  • When you want an equivalent of std::shared_ptr<T>, you want to use +Rc<RefCell<T>>

Now, in Rust it is a bit more complicated, because the type that represents the +“shared pointer” is Rc<T>. What RefCell<T> does is making sure that there is +only one “owner” of a mutable reference at a time (and dynamically, as opposed +to the Cell<T>).

Therefore to be precise and correct about the equivalents of std::shared_ptr<T> +in Rust, we can say that

  • Rc<T> is an equivalent of a const std::shared_ptr<T>,
  • and Rc<RefCell<T>> is an equivalent of a std::shared_ptr<T>.

You can easily see that they only differ in the mutability. (And even that is not +as simple as it seems, because there is also Cell<T>)

+ + + + \ No newline at end of file diff --git a/blog/aoc-2022/2nd-week/index.html b/blog/aoc-2022/2nd-week/index.html new file mode 100644 index 0000000..30811dd --- /dev/null +++ b/blog/aoc-2022/2nd-week/index.html @@ -0,0 +1,172 @@ + + + + + +2nd week of Advent of Code '22 in Rust | mf + + + + + + + + + + + + + +
+

2nd week of Advent of Code '22 in Rust

· 21 min read
Matej Focko

Let's go through the second week of Advent of Code in Rust.

Day 8: Treetop Tree House

tl;dr

We get a forest and we want to know how many trees are visible from the outside. +Apart from that we want to find the best view.

Nothing interesting. We are moving around 2D map though. And indexing can get a +bit painful when doing so, let's refactor it a bit ;) During the preparation for +the AoC, I have written Vector2D and now it's time to extend it with indexing +of Vec of Vecs. In my solution I was manipulating with indices in the following +way:

  • swapping them
  • checking whether they are correct indices for the Vec<Vec<T>>
  • indexing Vec<Vec<T>> with them
caution

I'm getting familiar with Rust and starting to “abuse” it… While doing so, I'm +also uncovering some “features” that I don't really like. Therefore I will mark +all of my rants with thicc «↯» mark and will try to “lock” them into their +own “box of hell”.

Swapping indices

Relatively simple implementation, just take the values, swap them and return new +vector.

impl<T: Copy> Vector2D<T> {
pub fn swap(&self) -> Self {
Self {
x: self.y,
y: self.x,
}
}
}

Pretty straight-forward implementation, but let's talk about the T: Copy. We +need to use it, since we are returning a new vector, with swapped values. +If we had values that cannot be copied, the only thing we could do, would be a +vector of references (and it would also introduce a lifetime, to which we'll get +later on). This is pretty similar with the operations on sets from the first week.

Indexing Vec

I will start with the indexing, cause bound-checking is a bit more… complicated +than I would like to.

pub fn index<'a, T, U>(v: &'a [Vec<U>], idx: &Vector2D<T>) -> &'a U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Let's talk about this mess… Body of the function is probably the most easy part +and should not be hard to understand, we just take the x and y and convert +them both to usize type that can be used later on for indexing.

The type signature of the function is where the fun is at 😉 We are trying +to convert unknown type to usize, so we must bound the T as a type that can +be converted to usize, that's how we got usize: TryFrom<T> which basically +says that usize must implement TryFrom<T> trait and therefore allows us to +convert the indices to actual usize indices. Using .unwrap() also forces us +to bound the error that can occur when converting T into usize, that's how +we get <usize as TryFrom<T>>::Error: Debug which loosely means

error during conversion of T into usize must implement Debug, +i.e. can be printed in some way or other

T: Copy is required by .try_into() which takes T by-value.

And now we are left only with the first line of the definition.

note

Skilled Rustaceans might notice that this implementation is rather flaky and can +break in multiple places at once. I'll get back to it…

Let's split it in multiple parts:

  • v: &'a [Vec<U>] represents the 2D Vec, we are indexing, Vec implements +Slice trait and clippy recommends using &[T] to &Vec<T>, exact details +are unknown to me
  • idx: &Vector2D<T> represents the indices which we use, we take them by +reference to avoid an unnecessary copy
  • -> &'a U means that we are returning a reference to some value of type U. +Now the question is what does the 'a mean, we can also see it as a generic +type declared along T and U. And the answer is relatively simple, 'a +represents a lifetime. We take the v by a reference and return a reference, +borrow checker validates all of the borrows (or references), so we need to +specify that our returned value has the same lifetime as the vector we have +taken by a reference, i.e. returned reference must live at least as long as the +v. This way we can “be sure” that the returned reference is valid.
Issues

First issue that our implementation has is the fact that we cannot get a mutable +reference out of that function. This could be easily resolved by introducing new +function, e.g. index_mut. Which I have actually done while writing this part:

pub fn index_mut<'a, T, U>(v: &'a mut [Vec<U>], idx: &Vector2D<T>) -> &'a mut U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&mut v[y][x]
}
«↯» Why can't we use one function?

When we consider a Vec<T>, we don't need to consider containers as T, Rust +implements indexing as traits Index<T> and IndexMut<T> that do the dirty work +behind syntactic sugar of container[idx].

However, implementing of traits is not allowed for external types, i.e. types +that you haven't defined yourself. This means that you can implement indexing +over containers that you have implemented yourself, but you cannot use your own +types for indexing “built-in” types.

Another part of this rabbit hole is trait SliceIndex<T> that is of a relevance +because of

impl<T, I> Index<I> for [T]
where
I: SliceIndex<[T]>

impl<T, I, A> Index<I> for Vec<T, A>
where
I: SliceIndex<[T]>,
A: Allocator

impl<T, I, const N: usize> Index<I> for [T; N]
where
[T]: Index<I>

In other words, if your type implements SliceIndex<T> trait, it can be used +for indexing. As of now, this trait has all of its required methods experimental +and is marked as unsafe.

Another problem is a requirement for indexing either [Vec<T>] or Vec<Vec<T>>. +This requirement could be countered by removing inner type Vec<T> and constraining +it by a trait Index (or IndexMut respectively) in a following way

pub fn index<'a, C, T>(v: &'a [C], idx: &Vector2D<T>) -> &'a C::Output
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
C: Index<usize>
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Given this, we can also give a more meaningful typename for indexing type, such +as I.

Checking bounds

Now we can get to the boundary checks, it is very similar, but a more… dirty. +First approach that came up was to convert the indices in Vector2D to usize, +but when you add the indices up, e.g. when checking the neighbors, you can end +up with negative values which, unlike in C++, causes an error (instead of underflow +that you can use to your advantage; you can easily guess how).

So how can we approach this then? Well… we will convert the bounds instead of +the indices and that lead us to:

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
usize: TryInto<T>,
<usize as TryInto<T>>::Error: Debug,
T: PartialOrd + Copy,
{
idx.y >= 0.try_into().unwrap()
&& idx.y < v.len().try_into().unwrap()
&& idx.x >= 0.try_into().unwrap()
&& idx.x
< v[TryInto::<usize>::try_into(idx.y).unwrap()]
.len()
.try_into()
.unwrap()
}

You can tell that it's definitely a shitty code. Let's improve it now! We will +get back to the original idea, but do it better. We know that we cannot convert +negative values into usize, but we also know that conversion like that +returns a Result<T, E> which we can use to our advantage.

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
T: Copy,
usize: TryFrom<T>,
{
usize::try_from(idx.y)
.and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))
.unwrap_or(false)
}

Result<T, E> is a type similar to Either in Haskell and it allows us to chain +multiple operations on correct results or propagate the original error without +doing anything. Let's dissect it one-by-one.

try_from is a method implemented in TryFrom trait, that allows you to convert +types and either successfully convert them or fail (with a reasonable error). This +method returns Result<T, E>.

We call and_then on that result, let's have a look at the type signature of +and_then, IMO it explains more than enough:

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> Result<U, E>

OK… So it takes the result and a function and returns another result with +different value and different error. However we can see that the function, which +represents an operation on a result, takes just the value, i.e. it doesn't care +about any previous error. To make it short:

and_then allows us to run an operation, which can fail, on the correct result

We parsed a y index and now we try to convert the x index with try_from +again, but on that result we use map rather than and_then, why would that be?

pub fn map<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> U

Huh… map performs an operation that cannot fail. And finally we use +unwrap_or which takes the value from result, or in case of an error returns the +default that we define.

How does this work then? If y is negative, the conversion fails and the error +propagates all the way to unwrap_or, if y can be a correct usize value, then +we do the same with x. If x is negative, we propagate the error as with y, +and if it's not, then we check whether it exceeds the higher bounds or not.

Solution

Relatively simple, you just need follow the rules and not get too smart, otherwise +it will get back at you.

Day 9: Rope Bridge

tl;dr

We get a rope with knots and we want to track how many different positions are +visited with the rope's tail.

By this day, I have come to a conclusion that current skeleton for each day +generates a lot of boilerplate. And even though it can be easily copied, it's +just a waste of space and unnecessary code. Let's “simplify” this (on one end +while creating monster on the other end). I've gone through what we need in the +preparations for the AoC. Let's sum up our requirements:

  • parsing
  • part 1 & 2
  • running on sample / input
  • tests

Parsing and implementation of both parts is code that changes each day and we +cannot do anything about it. However running and testing can be simplified!

Let's introduce and export a new module solution that will take care of all of +this. We will start by introducing a trait for each day.

pub trait Solution<Input, Output: Display> {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;

fn part_1(input: &Input) -> Output;
fn part_2(input: &Input) -> Output;
}

This does a lot of work for us already, we have defined a trait and for each day +we will create a structure representing a specific day. That structure will also +implement the Solution trait.

Now we need to get rid of the boilerplate, we can't get rid of the main function, +but we can at least move out the functionality.

fn run(type_of_input: &str) -> Result<()>
where
Self: Sized,
{
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = Self::parse_input(format!("{}s/{}.txt", type_of_input, Self::day()));

info!("Part 1: {}", Self::part_1(&input));
info!("Part 2: {}", Self::part_2(&input));

Ok(())
}

fn main() -> Result<()>
where
Self: Sized,
{
Self::run("input")
}

This is all part of the Solution trait, which can implement methods while being +dependent on what is provided by the implementing types. In this case, we just +need to bound the Output type to implement Display that is necessary for the +info! and format string there.

Now we can get to first of the nasty things we are going to do… And it is the +day() method that you can see being used when constructing path to the input +file. That method will generate a name of the file, e.g. day01 and we know that +we can somehow deduce it from the structure name, given we name it reasonably.

fn day() -> String {
let mut day = String::from(type_name::<Self>().split("::").next().unwrap());
day.make_ascii_lowercase();

day.to_string()
}
type_name

This feature is still experimental and considered to be internal, it is not +advised to use it any production code.

And now we can get to the nastiest stuff 😩 We will generate the tests!

We want to be able to generate tests for sample input in a following way:

test_sample!(day_01, Day01, 42, 69);

There's not much we can do, so we will write a macro to generate the tests for us.

#[macro_export]
macro_rules! test_sample {
($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {
#[cfg(test)]
mod $mod_name {
use super::*;

#[test]
fn test_part_1() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_1(&sample), $part_1);
}

#[test]
fn test_part_2() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_2(&sample), $part_2);
}
}
};
}

We have used it in a similar way as macros in C/C++, one of the things that we +can use to our advantage is defining “type” of the parameters for the macro. All +parameters have their name prefixed with $ sign and you can define various “forms” +of your macro. Let's go through it!

We have following parameters:

  • $mod_name which represents the name for the module with tests, it is typed +with ident which means that we want a valid identifier to be passed in.
  • $day_struct represents the structure that will be used for tests, it is typed +with tt which represents a token tree, in our case it is a type.
  • $part_X represents the expected output for the Xth part and is of type expr +which literally means an expression.

Apart from that we need to use #[macro_export] to mark the macro as exported +for usage outside of the module. Now our skeleton looks like:

use aoc_2022::*;

type Input = String;
type Output = String;

struct DayXX;
impl Solution<Input, Output> for DayXX {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
file_to_string(pathname)
}

fn part_1(input: &Input) -> Output {
todo!()
}

fn part_2(input: &Input) -> Output {
todo!()
}
}

fn main() -> Result<()> {
// DayXX::run("sample")
DayXX::main()
}

// test_sample!(day_XX, DayXX, , );

Solution

Not much to talk about, it is relatively easy to simulate.

Day 10: Cathode-Ray Tube

tl;dr

Emulating basic arithmetic operations on a CPU and drawing on CRT based on the +CPU's accumulator.

In this day I have discovered an issue with my design of the Solution trait. +And the issue is caused by different types of Output for the part 1 and part 2.

Problem is relatively simple and consists of simulating a CPU, I have approached +it in a following way:

fn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {
instructions
.iter()
.fold(State::new(), |state, instruction| {
state.execute(instruction, &mut out)
});

out
}

We just take the instructions, we have some state of the CPU and we execute the +instructions one-by-one. Perfect usage of the fold (or reduce as you may know +it from other languages).

You can also see that we have an Output type, so the question is how can we fix +that problem. And the answer is very simple and functional. Rust allows you to +have an enumeration that can bear some other values apart from the type itself.

tip

We could've seen something like this with the Result<T, E> type that can be +defined as

enum Result<T, E> {
Ok(T),
Err(E)
}
What does that mean though?

When we have an Ok value, it has the result itself, and when we get an Err +value, it has the error. This also allows us to handle results in a rather +pretty way:

match do_something(x) {
Ok(y) => {
println!("SUCCESS: {}", y);
},
Err(y) => {
eprintln!("ERROR: {}", y);
}
}

My solution has a following outline:

fn execute(&self, i: &Instruction, output: &mut Output) -> State {
// execute the instruction

// collect results if necessary
match output {
Output::Part1(x) => self.execute_part_1(y, x),
Output::Part2(x) => self.execute_part_2(y, x),
}

// return the obtained state
new_state
}

You might think that it's a perfectly reasonable thing to do. Yes, but notice +that the match statement doesn't collect the changes in any way and also we +pass output by &mut, so it is shared across each iteration of the fold.

The dirty and ingenious thing is that xs are passed by &mut too and therefore +they are directly modified by the helper functions. To sum it up and let it sit

We are collecting the result into an enumeration that is shared +across all iterations of fold.

Solution

Similar to Day 9, but there are some technical details that can get you.

Day 11: Monkey in the Middle

tl;dr

Simulation of monkeys throwing stuff around and measuring your stress levels +while your stuff is being passed around.

I think I decided to use regular expressions here for the first time, cause +parsing the input was a pain.

Also I didn't expect to implement Euclidean algorithm in Rust…

Solution

Again, we're just running a simulation. Though I must admit it was very easy to +make a small technical mistakes that could affect the final results very late.

Day 12: Hill Climbing Algorithm

tl;dr

Finding shortest path up the hill and also shortest path down to the ground while +also rolling down the hill…

As I have said in the tl;dr, we are looking for the shortest path, but the start +and goal differ for the part 1 and 2. So I have decided to refactor my solution +to a BFS algorithm that takes necessary parameters via functions:

fn bfs<F, G>(
graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G
) -> Option<usize>
where
F: Fn(&[Vec<char>], &Position, &Position) -> bool,
G: Fn(&[Vec<char>], &Position) -> bool

We pass the initial vertex from the caller and everything else is left to the BFS +algorithm, based on the has_edge and is_target functions.

This was easy! And that is not very usual in Rust once you want to pass around +functions. 👀

Solution

Looking for the shortest path… Must be Dijkstra, right? Nope! Half of the +Reddit got jebaited though. In all fairness, nothing stops you from implementing +the Dijkstra's algorithm for finding the shortest path, but if you know that +all connected vertices are in a unit (actually d=1d = 1) distance from each other, +then you know that running Dijkstra is equivalent to running BFS, only with worse +time complexity, because of the priority heap instead of the queue.

Day 13: Distress Signal

tl;dr

Processing packets with structured data from the distress signal.

You can implement a lot of traits if you want to. It is imperative to implement +ordering on the packets. I had a typo, so I also proceeded to implement a Display +trait for debugging purposes:

impl Display for Packet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Packet::Integer(x) => write!(f, "{x}"),
Packet::List(lst) => write!(f, "[{}]", lst.iter().map(|p| format!("{p}")).join(",")),
}
}
}

Solution

A lot of technical details… Parsing is nasty too…

Day 14: Regolith Reservoir

tl;dr

Let's simulate falling sand grain-by-grain.

Again, both parts are relatively similar with minimal changes, so it is a good +idea to refactor it a bit. Similar approach to the BFS above. Also this is the +first day where I ran into efficiency issues and had to redo my solution to speed +it up just a bit.

Solution

Tedious.

Post Mortem

Indexing

I was asked about the indexing after publishing the blog. And truly it is rather +complicated topic, especially after releasing SliceIndex<I> trait. I couldn't +leave it be, so I tried to implement the Index and IndexMut trait.

note

I have also mentioned that the SliceIndex trait is unsafe, but truth be told, +only unsafe part are the 2 methods that are named *unchecked*. Anyways, I will +be implementing the Index* traits for now, rather than the SliceIndex.

It's relatively straightforward…

impl<I, C> Index<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}

We can see a lot of similarities to the implementation of index and index_mut +functions. In the end, they are 1:1, just wrapped in the trait that provides a +syntax sugar for container[idx].

note

I have also switched from using the TryFrom to TryInto trait, since it better +matches what we are using, the .try_into rather than usize::try_from.

Also implementing TryFrom automatically provides you with a TryInto trait, +since it is relatively easy to implement. Just compare the following:

pub trait TryFrom<T>: Sized {
type Error;

fn try_from(value: T) -> Result<Self, Self::Error>;
}

pub trait TryInto<T>: Sized {
type Error;

fn try_into(self) -> Result<T, Self::Error>;
}

OK, so we have our trait implemented, we should be able to use container[index], +right? Yes… but actually no 😦

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:26:18
|
26 | if trees[pos] > tallest {
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:30:28
|
30 | max(tallest, trees[pos])
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`
--> src/bin/day08.rs:52:28
|
52 | let max_height = trees[position];
| ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`

Why? We have it implemented for the slices ([C]), why doesn't it work? Well, +the fun part consists of the fact that in other place, where we were using it, +we were passing the &[Vec<T>], but this is coming from a helper functions that +take &Vec<Vec<T>> instead. And… we don't implement Index and IndexMut for +those. Just for the slices. 🤯 What are we going to do about it?

We can either start copy-pasting or be smarter about it… I choose to be smarter, +so let's implement a macro! The only difference across the implementations are +the types of the outer containers. Implementation doesn't differ at all!

Implementing the macro can be done in a following way:

macro_rules! generate_indices {
($container:ty) => {
impl<I, C> Index<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}
};
}

And now we can simply do

generate_indices!(VecDeque<C>);
generate_indices!([C]);
generate_indices!(Vec<C>);
// generate_indices!([C; N], const N: usize);

The last type (I took the inspiration from the implementations of the Index and +IndexMut traits) is a bit problematic, because of the const N: usize part, +which I haven't managed to be able to parse. And that's how I got rid of the error.

note

If I were to use 2D-indexing over [C; N] slices, I'd probably just go with the +copy-paste, cause the cost of this “monstrosity” outweighs the benefits of no DRY.

Cause of the problem

This issue is relatively funny. If you don't use any type aliases, just the raw +types, you'll get suggested certain changes by the clippy. For example if you +consider the following piece of code

fn get_sum(nums: &Vec<i32>) -> i32 {
nums.iter().sum()
}

fn main() {
let nums = vec![1, 2, 3];
println!("Sum: {}", get_sum(&nums));
}

and you run clippy on it, you will get

Checking playground v0.0.1 (/playground)
warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
--> src/main.rs:1:18
|
1 | fn get_sum(nums: &Vec<i32>) -> i32 {
| ^^^^^^^^^ help: change this to: `&[i32]`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg
= note: `#[warn(clippy::ptr_arg)]` on by default

warning: `playground` (bin "playground") generated 1 warning
Finished dev [unoptimized + debuginfo] target(s) in 0.61s

However, if you introduce a type alias, such as

type Numbers = Vec<i32>;

Then clippy won't say anything, cause there is literally nothing to suggest. +However the outcome is not the same…

+ + + + \ No newline at end of file diff --git a/blog/aoc-2022/3rd-week/index.html b/blog/aoc-2022/3rd-week/index.html new file mode 100644 index 0000000..dd9c8ec --- /dev/null +++ b/blog/aoc-2022/3rd-week/index.html @@ -0,0 +1,112 @@ + + + + + +3rd week of Advent of Code '22 in Rust | mf + + + + + + + + + + + + + +
+

3rd week of Advent of Code '22 in Rust

· 12 min read
Matej Focko

Let's go through the third week of Advent of Code in Rust.

Day 15: Beacon Exclusion Zone

tl;dr

Triangulating a distress beacon based on the information from the sensors.

Solution

Relatively easy thing to implement, no major Rust issues hit.

Day 16: Proboscidea Volcanium

tl;dr

Finding a max flow in a graph given some time constraints.

Solution

I have used some interesting things to implement this and make it easier for me.

Indexing in graph

I have come across a situation where I needed to keep more information regarding +the graph… In that case you can, of course, create a structure and keep it in, +but once you have multiple members in the structure it gets harder to work with +since you need to address the fields in the structure. When you work with graph, +you frequently need to access the vertices and in this case it felt a lot easier +to implement the indexing in a graph, rather than explicitly access the +underlying data structure.

Here you can see a rather short snippet from the solution that allows you to +“index” the graph:

impl Index<&str> for Graph {
type Output = Vertex;

fn index(&self, index: &str) -> &Self::Output {
&self.g[index]
}
}

Cartesian product

During the implementation I had to utilize Floyd-Warshall algorithm for finding +the shortest path between pairs of vertices and utilized the iproduct! macro +from the itertools. It is a very useful higher-order function that allows +you to keep the nesting of the loops at a minimum level while still maintaining +the same functionality.

“Implementing” an iterator

For the second part, you get to split the work between 2 actors. That way you +can achieve higher efficiency of the whole process that you're planning, but it +also makes it harder to evaluate algorithmically, since you need to check the +different ways the work can be split.

Being affected by functional programming brain damage™️, I have chosen to +do this part by function that returns an iterator over the possible ways:

fn pairings(
valves: &BTreeSet<String>,
) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + '_ {
let mapping = valves.iter().collect_vec();

let max_mask = 1 << (valves.len() - 1);

(0..max_mask).map(move |mask| {
let mut elephant = BTreeSet::new();
let mut human = BTreeSet::new();

for (i, &v) in mapping.iter().enumerate() {
if (mask & (1 << i)) == 0 {
human.insert(v.clone());
} else {
elephant.insert(v.clone());
}
}

(human, elephant)
})
}

Day 17: Pyroclastic Flow

tl;dr

Simulating an autonomous Tetris where pieces get affected by a series of jets of +hot gas.

Solution

Similarly to the previous day I have created some iterators 😄

Collision detection

Once you need to check for collisions it is very helpful to be able to just +iterate through the positions that can actually collide with the wall or other +piece.

To get the desired behaviour, you can just compose few smaller functions:

fn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + '_ {
shape.iter().enumerate().flat_map(|(y, row)| {
row.iter().enumerate().filter_map(move |(x, c)| {
if c == &'#' {
Some(Vector2D::new(x as isize, y as isize))
} else {
None
}
})
})
}

In the end, we get relative positions which we can adjust later when given the +specific positions from iterator. You can see some interesting parts in this:

  • .enumerate() allows us to get both the indices (coordinates) and the line +or, later on, the character itself,
  • .flat_map() flattens the iterator, i.e. when we return another iterator, +they just get chained instead of iterating over iterators (which sounds pretty +disturbing, doesn't it?),
  • and finally .filter_map() which is pretty similar to the “basic” .map() +with a one, key, difference that it expects the items of an iterator to be +mapped to an Option<T> from which it ignores nothing (as in None 😉) +and also unwraps the values from Some(…).

Infinite iterator

In the solution we cycle through both Tetris-like shapes that fall down and the +jets that move our pieces around. Initially I have implemented my own infinite +iterator that just yields the indices. It is a very simple, yet powerful, piece +of code:

struct InfiniteIndex {
size: usize,
i: usize,
}

impl InfiniteIndex {
fn new(size: usize) -> InfiniteIndex {
InfiniteIndex { size, i: size - 1 }
}
}

impl Iterator for InfiniteIndex {
type Item = usize;

fn next(&mut self) -> Option<Self::Item> {
self.i = (self.i + 1) % self.size;
Some(self.i)
}
}

However when I'm looking at the code now, it doesn't really make much sense… +Guess what, we can use a built-in function that is implemented on iterators for +that! The function is called .cycle()

On the other hand, I am not going to switch to that function, since it would +introduce an another myriad of issues caused by the fact that I create iterators +right away in the constructor of my structure and the iterators would borrow +both the jets and shapes which would introduce a lifetime dependency into the +structure.

Day 18: Boiling Boulders

tl;dr

Let's compute a surface area of some obsidian approximated via coordinates of +cubes.

Solution

This day is kinda interesting, because it shows how easily you can complicate the +problem and also how much can you screw yourself over with the optimization and +“smart” approach.

For the first part you need to find the surface area of an obsidian that is +approximated by cubes. Now, that is a very easy thing to do, just keep the track +of already added cubes, and check if the newly added cube touches any face of any +other cube. Simple, and with a BTreeSet relatively efficient way to do it.

However the second part lets you on a secret that there may be some surface area +from the “inside” too and you want to know only the one from the outside of the +obsidian. I have seen some solutions later, but if you check your data, you might +notice that the bounding box of all the cubes isn't that big at all. Therefore I +chose to pre-construct the box beforehand, fill in the cubes and then just run a +BFS turning all the lava on the outside into the air. Now you just need to check +cubes and count how many of their faces touch the air.

Day 19: Not Enough Minerals

tl;dr

Finding out the best strategy for building robots to collect geodes.

Solution

Not much interesting stuff to mention apart from the suggestion to never believe +that the default implementation given by derive macro is what you want, it +doesn't have to be. 😄

Day 20: Grove Positioning System

tl;dr

Shuffling around the circular linked list to find the coordinates.

Now, small rant for this day is in place. They've never mentioned that coordinates +can repeat and therefore the values are non-unique. This is something that did +not happen in the given sample, but was present in the user input. It took »a lot« +to realize that this is the issue.

Solution

I have tried implementing a circular linked list for this… and I have failed +miserably. To be fair, I still have no clue why. It was “fun” to play around with +the Rc<RefCell<T>>. In the end I failed on wrong answer. I have also encountered +a rather interesting issue with .borrow_mut() method being used on Rc<RefCell<T>>.

.borrow_mut()

Consider the following snippet of the code (taken from the documentation):

use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::rc::Rc;
// use std::borrow::BorrowMut;

fn main() {
let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));
// Create a new block to limit the scope of the dynamic borrow
{
let mut map: RefMut<_> = shared_map.borrow_mut();
map.insert("africa", 92388);
map.insert("kyoto", 11837);
map.insert("piccadilly", 11826);
map.insert("marbles", 38);
}

// Note that if we had not let the previous borrow of the cache fall out
// of scope then the subsequent borrow would cause a dynamic thread panic.
// This is the major hazard of using `RefCell`.
let total: i32 = shared_map.borrow().values().sum();
println!("{total}");
}

We allocate a hash map on the heap and then in the inner block, we borrow it as +a mutable reference, so that we can use it.

note

It is a very primitive example for Rc<RefCell<T>> and mutable borrow.

If you uncomment the 4th line with use std::borrow::BorrowMut;, you cannot +compile the code anymore, because of

   Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
--> src/main.rs:10:34
|
10 | let mut map: RefMut<_> = shared_map.borrow_mut();
| --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference
| |
| expected due to this
|
= note: expected struct `RefMut<'_, _>`
found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:11:13
|
11 | map.insert("africa", 92388);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:12:13
|
12 | map.insert("kyoto", 11837);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:13:13
|
13 | map.insert("piccadilly", 11826);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:14:13
|
14 | map.insert("marbles", 38);
| ^^^^^^ method not found in `RefMut<'_, _>`

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `playground` due to 5 previous errors

It might seem a bit ridiculous. However, I got to a point where the compiler +suggested use std::borrow::BorrowMut; and it resulted in breaking parts of the +code that worked previously. I think it may be a good idea to go over what is +happening here.

.borrow_mut() on Rc<RefCell<T>>

Let's consider a variable x of type Rc<RefCell<T>>. What happens when you +call .borrow_mut() on it? We can look at the Rc type, and… hang on! There is +neither .borrow_mut() method or BorrowMut trait implemented. How can we do it +then?

Let's go further and we can see that RefCell<T> implements a .borrow_mut() +method. OK, but how can we call it on the Rc<T>? Easily! Rc<T> implements +Deref<T> and therefore you can call methods on Rc<T> objects as if they were +T objects. If we read on Deref coercion, we can see the following:

If T implements Deref<Target = U>, …:

  • T implicitly implements all the (immutable) methods of the type U.

What is the requirement for the .borrow_mut() on RefCell<T>? Well, it needs +&self, so the Deref implements the .borrow_mut() for the Rc<RefCell<T>>.

BorrowMut trait

I have not been able to find a lot on this trait. My guess is that it provides a +method instead of a syntactic sugar (&mut x) for the mutable borrow. And also +it provides default implementations for the types:

impl BorrowMut<str> for String

impl<T> BorrowMut<T> for &mut T
where
T: ?Sized,

impl<T> BorrowMut<T> for T
where
T: ?Sized,

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where
A: Allocator,

impl<T, A> BorrowMut<T> for Box<T, A>
where
A: Allocator,
T: ?Sized,

impl<T, const N: usize> BorrowMut<[T]> for [T; N]
Conflict

Now the question is why did it break the code… My first take was that the type +Rc<RefCell<T>> has some specialized implementation of the .borrow_mut() and +the use overrides it with the default, which is true in a sense. However +there is no specialized implementation. Let's have a look at the trait and the +type signature on the RefCell<T>:

// trait
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow_mut(&mut self) -> &mut Borrowed;
}

// ‹RefCell<T>.borrow_mut()› type signature
pub fn borrow_mut(&self) -> RefMut<'_, T>

I think that we can definitely agree on the fact that RefMut<'_, T> is not the +RefCell<T>.

In my opinion, RefCell<T> implements a separate .borrow_mut() rather +than implementing the interface, because it cannot satisfy the type requirements +of the trait.

caution

I wonder how are we expected to deal with this conflict, if and when, we need +both the .borrow_mut() of the trait and .borrow_mut() of the RefCell<T>.

Fun fact

I was suggested by the compiler to do use std::borrow::BorrowMut; and break the +code.

So much for the almighty and helpful compiler…

Day 21: Monkey Math

tl;dr

Computing an expression tree and then also finding ideal value for a node.

Solution

Relatively simple, until you get to the 2nd part where you start to practice +a lot of the copy-paste. I have managed to sneak some perverted stuff in there +though :) Let's go through the details.

Default trait

For the first time and twice I had a need to have a default value for my types, +enumerations in this case. Rust offers a very nice trait1 that is described +as:

A trait for giving a type a useful default value.

I guess it sums it up nicely. The more interesting part about this is the fact +that you can use the macro machinery to save yourself some typing. If you have +enumeration of which the default value doesn't bear any parameter, you can just +do2:

#[derive(Default)]
enum Color {
#[default]
White,
Gray,
Black,
}

Abusing negation

If you want to use a unary minus operator on your own type, you can implement +a Neg trait3. I was dealing with a binary tree and needed a way how to look +at the other side, so I have just implemented the negation for flipping between +left and right 😄


  1. Default docs
  2. Pardon my example from the graph algorithms ;)
  3. Neg docs
+ + + + \ No newline at end of file diff --git a/blog/aoc-2022/4th-week/index.html b/blog/aoc-2022/4th-week/index.html new file mode 100644 index 0000000..520111b --- /dev/null +++ b/blog/aoc-2022/4th-week/index.html @@ -0,0 +1,136 @@ + + + + + +4th week of Advent of Code '22 in Rust | mf + + + + + + + + + + + + + +
+

4th week of Advent of Code '22 in Rust

· 16 min read
Matej Focko

Let's go through the fourth week of Advent of Code in Rust.

Day 22: Monkey Map

tl;dr

Simulating a movement on a 2D map with given instructions. Map becomes a cube in +the 2nd part…

Rant

This was the most obnoxious problem of this year… and a lot of Rust issues have +been hit.

Solution

It seems like a very simple problem to solve, but with very obnoxious changes in +the 2nd part and also it's relatively hard to decompose »properly«.

Column iterator

In the first part of the problem it was needed to know the boundaries of each +row and column, since I stored them in Vec<Vec<char>> and padded with spaces +to ensure I have a rectangular 2D “array”. However when you wanted to go through +each row and column to determine the boundaries, it was very easy to do for the +rows (cause each row is a Vec element), but not for the columns, since they +span multiple rows.

For this use case I have implemented my own column iterator:

pub struct ColumnIterator<'a, T> {
map: &'a [Vec<T>],
column: usize,

i: usize,
}

impl<'a, T> ColumnIterator<'a, T> {
pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
Self { map, column, i: 0 }
}
}

impl<'a, T> Iterator for ColumnIterator<'a, T> {
type Item = &'a T;

fn next(&mut self) -> Option<Self::Item> {
if self.i >= self.map.len() {
return None;
}

self.i += 1;
Some(&self.map[self.i - 1][self.column])
}
}

Given this piece of an iterator, it is very easy to factor out the common +functionality between the rows and columns into:

let mut find_boundaries = |constructor: fn(usize) -> Orientation,
iterator: &mut dyn Iterator<Item = &char>,
upper_bound,
i| {
let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
let start = first_non_empty.next().unwrap().0 as isize;

let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

boundaries.insert(constructor(i), start..end);
};

And then use it as such:

// construct all horizontal boundaries
(0..map.len()).for_each(|row| {
find_boundaries(
Orientation::horizontal,
&mut map[row].iter(),
map[row].len(),
row,
);
});

// construct all vertical boundaries
(0..map[0].len()).for_each(|col| {
find_boundaries(
Orientation::vertical,
&mut ColumnIterator::new(&map, col),
map.len(),
col,
);
});

Walking around the map

Once the 2nd part got introduced, you start to think about a way how not to +copy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've +chosen to introduce a trait (i.e. interface) for 2D and 3D walker.

trait Wrap: Clone {
type State;

// simulation
fn is_blocked(&self) -> bool;
fn step(&mut self, steps: isize);
fn turn_left(&mut self);
fn turn_right(&mut self);

// movement
fn next(&self) -> (Self::State, Direction);

// final answer
fn answer(&self) -> Output;
}

Each walker maintains its own state and also provides the functions that are +used during the simulation. The “promised” methods are separated into:

  • simulation-related: that are used during the simulation from the .fold()
  • movement-related: just a one method that holds most of the logic differences +between 2D and 3D
  • final answer: which extracts the proof of solution from the +implementation-specific walker

Both 2D and 3D versions borrow the original input and therefore you must +annotate the lifetime of it:

struct Wrap2D<'a> {
input: &'a Input,
position: Position,
direction: Direction,
}
impl<'a> Wrap2D<'a> {
fn new(input: &'a Input) -> Wrap2D<'a> {
// …

Problems

I have used a lot of closures for this problem and once I introduced a parameter +that was of unknown type (apart from the fact it implements a specific trait), I +got suggested a “fix” for the compilation error that resulted in something that +was not possible to parse, cause it, more than likely, violated the grammar.

In a similar fashion, I have been suggested changes that led to a code that +didn't make sense by just looking at it (there was no need to try the changes), +for example one suggested change in the closure parameter caused disapperance of +the parameter name. 😄

Clippy

I have to admit that Clippy was rather helpful here, I'll include two examples +of rather smart suggestions.

When writing the parsing for this problem, the first thing I have spotted on the +char was the .is_digit() function that takes a radix as a parameter. Clippy +noticed that I use radix = 10 and suggested switching to .is_ascii_digit() +that does exactly the same thing:

-                .take_while(|c| c.is_digit(10))
+ .take_while(|c| c.is_ascii_digit())

Another useful suggestion appeared when working with the iterators and I wanted +to get the nn-th element from it. You know the .skip(), you know the +.next(), just “slap” them together and we're done for 😁 Well, I got +suggested to use .nth() that does exactly the combination of the two mentioned +methods on iterators:

-            match it.clone().skip(skip).next().unwrap() {
+ match it.clone().nth(skip).unwrap() {

Day 23: Unstable Diffusion

tl;dr

Simulating movement of elves around with a set of specific rules.

Solution

There's not much to mention since it's just a cellular automaton simulation +(even though the AoC rules for cellular automatons usually get out of hand +😉).

Although I had a need to determine boundaries of the elves' positions and ended +up with a nasty DRY violation. Knowing that you you're looking for maximum and +minimum that are, of course, exactly the same except for initial values and +comparators, it looks like a rather simple fix, but typing in Rust is something +else, right? In the end I settled for a function that computes both boundaries +without any duplication while using a closure:

fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
positions
.iter()
.fold(Vector2D::new(init, init), |acc, elf| {
Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
})
};

(f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
}

This function returns a pair of 2D vectors that represent opposite points of the +bounding rectangle of all elves.

You might ask why would we need a closure and the answer is that positions +cannot be captured from within the nested function, only via closure. One more +fun fact on top of that is the type of the comparator

&dyn Fn(isize, isize) -> isize

Once we remove the dyn keyword, compiler yells at us and also includes a way +how to get a more thorough explanation of the error by running

$ rustc --explain E0782

which shows us

Trait objects must include the `dyn` keyword.

Erroneous code example:

```
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
```

Trait objects are a way to call methods on types that are not known until
runtime but conform to some trait.

Trait objects should be formed with `Box<dyn Foo>`, but in the code above
`dyn` is left off.

This makes it harder to see that `arg` is a trait object and not a
simply a heap allocated type called `Foo`.

To fix this issue, add `dyn` before the trait name.

```
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
```

This used to be allowed before edition 2021, but is now an error.
Rant

Not all of the explanations are helpful though, in some cases they might be even +more confusing than helpful, since they address very simple use cases.

As you can see, even in this case there are two sides to the explanations:

  • it explains why you need to use dyn, but
  • it still mentions that trait objects need to be heap-allocated via Box<T> +that, as you can see in my snippet, does not apply here 😄 IMO it's +caused by the fact that we are borrowing it and therefore we don't need to +care about the size or whereabouts of it.
C++ parallel

If you dive into the explanation above, you can notice that the Box<dyn Trait> +pattern is very helpful for using types that are not known during compile-time. +You would use a very similar approach in C++ when parsing some data structure +from input (let's say JSON for example).

On the other hand, in this case, it doesn't really make much sense, cause you +can clearly see that the types are known during the compile-time, which in +C++ could be easily resolved by templating the helper function.

Day 24: Blizzard Basin

tl;dr

Navigating your way through a basin with series of blizzards that move around +you as you move.

caution

It's second to last day and I went “bonkers” on the Rust 😄 Proceed to +read Solution part on your own risk.

Solution

You are given a map with blizzards all over the place and you're supposed to +find the minimum time it requires you to walk through the basin without getting +in any of the blizzards.

Breakdown

Relatively simple, yet a bit annoying, approach can be taken. It's technically +a shortest-path algorithm implementation with some relaxation restrictions and +being able to stay on one position for some time, so each vertex of the graph +is determined by the position on the map and the timestamp. I have chosen to +use Vector3D<usize>, since x and y attributes can be used for the position +and, well, let's use z for a timestamp, cause why not, right? 😉

Evaluating the blizzards

caution

I think that this is the most perverted abuse of the traits in the whole 4 weeks +of AoC in Rust…

The blizzards move along their respective directions in time and loop around in +their respective row/column. Each vertex holds position and time, so we can +just index the basin with the vertex itself, right? Yes, we can 😈

Fun fact

While writing this part, I've recognized unnecessary verbosity in the code and +cleaned it up a bit. The changed version is shown here and the original was just +more verbose.

I'll skip the boring parts of checking bounds and entry/exit of the basin 😉 +We can easily calculate positions of the blizzards using a modular arithmetics:

impl Index<Position> for Basin {
type Output = char;

fn index(&self, index: Position) -> &Self::Output {
// ‹skipped boring parts›

// We need to account for the loops of the blizzards
let width = self.cols - 2;
let height = self.rows - 2;

let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
[
(
index.y() as usize,
blizzard_origin(width, -1, index.z(), index.x()),
'>',
),
(
index.y() as usize,
blizzard_origin(width, 1, index.z(), index.x()),
'<',
),
(
blizzard_origin(height, -1, index.z(), index.y()),
index.x() as usize,
'v',
),
(
blizzard_origin(height, 1, index.z(), index.y()),
index.x() as usize,
'^',
),
]
.iter()
.find_map(|&(y, x, direction)| {
if self.map[y][x] == direction {
Some(&self.map[y][x])
} else {
None
}
})
.unwrap_or(&'.')
}
}

As you can see, there is an expression for calculating the original position and +it's used multiple times, so why not take it out to a lambda, right? 😉

I couldn't get the rustfmt to format the for-loop nicely, so I've just +decided to go with iterating over an elements of a slice. I have used, once +again, a combination of two functions (find_map in this case) to do 2 things +at once and at the end, if we haven't found any blizzard, we just return the +empty space.

I think it's a very nice (and naughty) way how to use the Index trait, don't +you think?

Shortest-path algorithm

For the shortest path you can choose and adjust any of the common shortest-path +algorithms, in my case, I have decided to use A* instead of Dijkstra's +algorithm, since it better reflects the cost function.

Comparison of costs

With the Dijkstra's algorithm I would proceed with the time attribute used as +a priority for the queue.

Whereas with the A*, I have chosen to use both time and Manhattan distance +that promotes vertices closer to the exit and with a minimum time taken.

Cost function is, of course, a closure 😉

let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());

And also for checking the possible moves from the current vertex, I have +implemented, yet another, closure that yields an iterator with the next moves:

let next_positions = |p| {
[(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
.iter()
.filter_map(move |&(x, y, t)| {
let next_p = p + Vector3D::new(x, y, t);

if basin[next_p] == '.' {
Some(next_p)
} else {
None
}
})
};

Min-heap

In this case I had a need to use the priority queue taking the elements with the +lowest cost as the prioritized ones. Rust only offers you the BinaryHeap and +that is a max-heap. One of the ways how to achieve a min-heap is to put the +elements in wrapped in a Reverse (as is even showed in the linked docs of +the BinaryHeap). However the wrapping affects the type of the heap and also +popping the most prioritized elements yields values wrapped in the Reverse.

For this purpose I have just taken the max-heap and wrapped it as a whole in a +separate structure providing just the desired methods:

use std::cmp::{Ord, Reverse};
use std::collections::BinaryHeap;

pub struct MinHeap<T> {
heap: BinaryHeap<Reverse<T>>,
}

impl<T: Ord> MinHeap<T> {
pub fn new() -> MinHeap<T> {
MinHeap {
heap: BinaryHeap::new(),
}
}

pub fn push(&mut self, item: T) {
self.heap.push(Reverse(item))
}

pub fn pop(&mut self) -> Option<T> {
self.heap.pop().map(|Reverse(x)| x)
}
}

impl<T: Ord> Default for MinHeap<T> {
fn default() -> Self {
Self::new()
}
}

Rest is just the algorithm implementation which is not that interesting.

Day 25: Full of Hot Air

tl;dr

Playing around with a numbers in a special base.

Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem” +with a rather easy solution, as the last day always seems to be.

Solution

Implementing 2 functions, converting from the SNAFU base and back to the SNAFU +base representation. Let's do a bit more though! I have implemented two functions:

  • from_snafu
  • to_snafu

Now it is apparent that all I do is number to string and string to number. Hmm… +that sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers +and implement the traits that we need.

Let's start with a structure:

#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct SNAFU {
value: i64,
}

Converting from &str

We will start by implementing the FromStr trait that will help us parse our input. +This is rather simple, I can just take the from_snafu function, copy-paste it +into the from_str method and the number I get will be wrapped in Result and +SNAFU structure.

Converting to String

This is more fun. In some cases you need to implement only one trait and others +are automatically implemented using that one trait. In our case, if you look in +the documentation, you can see that ToString trait is automatically implemented +for any type that implements Display trait.

Let's implement the Display trait then. We should be able to use the to_snafu +function and just take the self.value from the SNAFU structure.

And for the convenience of tests, we can also implement a rather simple From<i64> +trait for the SNAFU.

Adjusting the code

After those changes we need to adjust the code and tests.

Parsing of the input is very easy, before we have used the lines, now we parse +everything:

     fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
- file_to_lines(pathname)
+ file_to_structs(pathname)
}

Part 1 needs to be adjusted a bit too:

     fn part_1(input: &Input) -> Output {
- to_snafu(input.iter().map(|s| from_snafu(s)).sum())
+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
}

You can also see that it simplifies the meaning a bit and it is more explicit than +the previous versions.

And for the tests:

     #[test]
fn test_from() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(from_snafu(s), *n);
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
}
}

#[test]
fn test_to() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(to_snafu(*n), s.to_string());
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());
}

Summary

Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

Finished advent calendar :smile:

Advent of Code

This year was quite fun, even though most of the solutions and posts came in +later on (cough in '23 cough). Day 22 was the most obnoxious one… And also +it feels like I used priority queues and tree data structures a lot 👀

with Rust

I must admit that a lot of compiler warnings and errors were very useful. Even +though I still found some instances where they didn't help at all or cause even +worse issues than I had. Compilation times have been addressed with the caching.

Building my first tree data structure in Rust has been a very “interesting” +journey. Being able to write a more generic BFS algorithm that allows you to not +duplicate code while still mantaining the desired functionality contributes to +a very readable code.

I am definitely much more aware of the basic things that bloated Python is +missing, yet Rust has them…

Using explicit types and writing down placeholder functions with todo!() +macros is very pleasant, since it allows you to easily navigate the type system +during the development when you don't even need to be sure how are you going to +put the smaller pieces together.

I have used a plethora of traits and also implemented some of them to either be +idiomatic, or exploit the syntactic sugar they offer. Deriving the default trait +implementation is also very helpful in a lot of cases, e.g. debugging output, +copying, equality comparison, etc.

I confess to touching more “cursed” parts of the Rust, such as macros to +declutter the copy-paste for tests or writing my own structures that need to +carry a lifetime for their own fields.

tl;dr Relatively pleasant language until you hit brick wall 😉


See you next year! Maybe in Rust, maybe not 🙃

+ + + + \ No newline at end of file diff --git a/blog/aoc-2022/intro/index.html b/blog/aoc-2022/intro/index.html new file mode 100644 index 0000000..8963ab4 --- /dev/null +++ b/blog/aoc-2022/intro/index.html @@ -0,0 +1,91 @@ + + + + + +Advent of Code '22 in Rust | mf + + + + + + + + + + + + + +
+

Advent of Code '22 in Rust

· 9 min read
Matej Focko

Let's talk about the preparations for this year's Advent of Code.

Choosing a language

When choosing a language for AoC, you usually want a language that gives you a +quick feedback which allows you to iterate quickly to the solution of the puzzle. +One of the most common choices is Python, many people also use JavaScript or Ruby.

Given the competitive nature of the AoC and popularity among competitive programming, +C++ might be also a very good choice. Only if you are familiar with it, I guess…

If you want a challenge, you might also choose to rotate the languages each day. +Though I prefer to use only one language.

For this year I have been deciding between Rust, C++ and Pascal or Ada.

I have tried Rust last year and have survived with it for 3 days and then gave +up and switched to Kotlin, which was pretty good given it is “Java undercover”. +I pretty much like the ideas behind Rust, I am not sure about the whole cult and +implementation of those ideas though. After some years with C/C++, I would say +that Rust feels too safe for my taste and tries to “punish me” even for the +most trivial things.

C++ is a very robust, but also comes with a wide variety of options providing you +the ability to shoot yourself in the leg. I have tried to solve few days of previous +Advent of Code events, it was relatively easy to solve the problems in C++, given +that I do not admit writing my own iterator for enumerate

Pascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a +pretty nice standard library that offers enough to be able to quickly solve some +problems in it. However the toolkit is questionable :/

Choosing libraries

Preparations for Rust

All of the sources, later on including solutions, can be found at my +GitLab.

Toolkit

Since we are using Rust, we are going to use a Cargo and more than likely VSCode +with rust-analyzer. Because of my choice of libraries, we will also introduce +a .envrc file that can be used by direnv, which allows you to set specific +environment variables when you enter a directory. In our case, we will use

# to show nice backtrace when using the color-eyre
export RUST_BACKTRACE=1

# to catch logs generated by tracing
export RUST_LOG=trace

And for the one of the most obnoxious things ever, we will use a script to download +the inputs instead of “clicking, opening and copying to a file1. There is +no need to be fancy, so we will adjust Python script by Martin2.

#!/usr/bin/env python3

import datetime
import yaml
import requests
import sys


def load_config():
with open("env.yaml", "r") as f:
js = yaml.load(f, Loader=yaml.Loader)
return js["session"], js["year"]


def get_input(session, year, day):
return requests.get(
f"https://adventofcode.com/{year}/day/{day}/input",
cookies={"session": session},
headers={
"User-Agent": "{repo} by {mail}".format(
repo="gitlab.com/mfocko/advent-of-code-2022",
mail="me@mfocko.xyz",
)
},
).content.decode("utf-8")


def main():
day = datetime.datetime.now().day
if len(sys.argv) == 2:
day = sys.argv[1]

session, year = load_config()
problem_input = get_input(session, year, day)

with open(f"./inputs/day{day:>02}.txt", "w") as f:
f.write(problem_input)


if __name__ == "__main__":
main()

If the script is called without any arguments, it will deduce the day from the +system, so we do not need to change the day every morning. It also requires a +configuration file:

# env.yaml
session: ‹your session cookie›
year: 2022

Libraries

Looking at the list of the libraries, I have chosen “a lot” of them. Let's walk +through each of them.

tracing and tracing-subscriber are the crates that can be used for tracing +and logging of your Rust programs, there are also other crates that can help you +with providing backtrace to the Sentry in case you have deployed your application +somewhere and you want to watch over it. In our use case we will just utilize the +macros for debugging in the terminal.

thiserror, anyhow and color-eyre are used for error reporting. +thiserror is a very good choice for libraries, cause it extends the Error +from the std and allows you to create more convenient error types. Next is +anyhow which kinda builds on top of the thiserror and provides you with simpler +error handling in binaries3. And finally we have color-eyre which, as I found +out later, is a colorful (wink wink) extension of eyre which is fork of anyhow +while supporting customized reports.

In the end I have decided to remove thiserror and anyhow, since first one is +suitable for libraries and the latter was basically fully replaced by {color-,}eyre.

regex and lazy_static are a very good and also, I hope, self-explanatory +combination. lazy_static allows you to have static variables that must be initialized +during runtime.

itertools provides some nice extensions to the iterators from the std.

My own “library”

When creating the crate for this year's Advent of Code, I have chosen a library +type. Even though standard library is huge, some things might not be included and +also we can follow KISS. I have 2 modules that my “library” exports, one for +parsing and one for 2D vector (that gets used quite often during Advent of Code).

Key part is, of course, processing the input and my library exports following +functions that get used a lot:

/// Reads file to the string.
pub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;

/// Reads file and returns it as a vector of characters.
pub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;

/// Reads file and returns a vector of parsed structures. Expects each structure
/// on its own line in the file. And `T` needs to implement `FromStr` trait.
pub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>
where
<T as FromStr>::Err: Debug;

/// Converts iterator over strings to a vector of parsed structures. `T` needs
/// to implement `FromStr` trait and its error must derive `Debug` trait.
pub fn strings_to_structs<T: FromStr, U>(
iter: impl Iterator<Item = U>
) -> Vec<T>
where
<T as std::str::FromStr>::Err: std::fmt::Debug,
U: Deref<Target = str>;

/// Reads file and returns it as a vector of its lines.
pub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;

As for the vector, I went with a rather simple implementation that allows only +addition of the vectors for now and accessing the elements via functions x() +and y(). Also the vector is generic, so we can use it with any numeric type we +need.

Skeleton

We can also prepare a template to quickly bootstrap each of the days. We know +that each puzzle has 2 parts, which means that we can start with 2 functions that +will solve them.

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

Both functions take reference to the input and return some output (in majority +of puzzles, it is the same type). todo!() can be used as a nice placeholder, +it also causes a panic when reached and we could also provide some string with +an explanation, e.g. todo!("part 1"). We have not given functions a specific +type and to avoid as much copy-paste as possible, we will introduce type aliases.

type Input = String;
type Output = i32;
tip

This allows us to quickly adjust the types only in one place without the need to +do regex-replace or replace them manually.

For each day we get a personalized input that is provided as a text file. Almost +all the time, we would like to get some structured type out of that input, and +therefore it makes sense to introduce a new function that will provide the parsing +of the input.

fn parse_input(path: &str) -> Input {
todo!()
}

This “parser” will take a path to the file, just in case we would like to run the +sample instead of input.

OK, so now we can write a main function that will take all of the pieces and +run them.

fn main() {
let input = parse_input("inputs/dayXX.txt");

println!("Part 1: {}", part_1(&input));
println!("Part 2: {}", part_2(&input));
}

This would definitely do :) But we have installed a few libraries and we want to +use them. In this part we are going to utilize tracing (for tracing, duh…) +and color-eyre (for better error reporting, e.g. from parsing).

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

The first statement will set up tracing and configure it to print out the logs to +terminal, based on the environment variable. We also change the formatting a bit, +since we do not need all the fancy features of the logger. Pure initialization +would get us logs like this:

2022-12-11T19:53:19.975343Z  INFO day01: Part 1: 0

However after running that command, we will get the following:

 INFO src/bin/day01.rs:35: Part 1: 0

And the color_eyre::install()? is quite straightforward. We just initialize the +error reporting by color eyre.

caution

Notice that we had to add Ok(()) to the end of the function and adjust the +return type of the main to Result<()>. It is caused by the color eyre that +can be installed only once and therefore it can fail, that is how we got the ? +at the end of the ::install which unwraps the »result« of the installation.

Overall we will get to a template like this:

use aoc_2022::*;

use color_eyre::eyre::Result;
use tracing::info;
use tracing_subscriber::EnvFilter;

type Input = String;
type Output = i32;

fn parse_input(path: &str) -> Input {
todo!()
}

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

  1. Copy-pasting might be a relaxing thing to do, but you can also discover +nasty stuff about your PC. See this Reddit post and the comment.
  2. GitHub profile
  3. Even though you can use it even for libraries, but handling errors from +libraries using anyhow is nasty… You will be the stinky one ;)
+ + + + \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html new file mode 100644 index 0000000..066479b --- /dev/null +++ b/blog/archive/index.html @@ -0,0 +1,25 @@ + + + + + +Archive | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml new file mode 100644 index 0000000..83c5d6b --- /dev/null +++ b/blog/atom.xml @@ -0,0 +1,751 @@ + + + https://blog.mfocko.xyz/blog + mf Blog + 2023-08-02T00:00:00.000Z + https://github.com/jpmonette/feed + + mf's blog + https://blog.mfocko.xyz/img/favicon.ico + + <![CDATA[How can Copr help with broken dependencies]]> + https://blog.mfocko.xyz/blog/2023/08/02/copr + + 2023-08-02T00:00:00.000Z + + When you decide to run Fedora on your VPS, you might get screwed over by using +random repositories…

When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without +thinking. I bet 99% of people would say that I'm crazy for doing such thing2, +BUT I've been using Fedora on my PCs for some time already and it felt very +stable and natural to just use, even for VPS.

One of the first things I've done was setting up a mail server. You may guess +what's the fun part about having a mail server… Yes, it's all the spam you +receive and only then you realize how much “crap” gets filtered on free mail +services. To battle this problem I chose to use +rspamd that had CentOS support, but someone +had a Copr repository that I used to +install it.

How does Copr repositories work?

If you have ever used Ubuntu, you might be familiar with the concept since it is +very close to PPAs.

tl;dr of the whole process consists of

  1. enabling the Copr repository, and
  2. installing the desired package.

So in shell you would do

# dnf copr enable ‹copr-repository›
# dnf install ‹package-from-the-repository›

And… that's it! Nothing else needed! Simple, right? And literally same process +as you would do for the PPA.

AUR

On the other hand, if you are familiar with the archLinux, you definitely know +AUR and what it can do for you. Copr repository is pretty similar, but the +packages are prebuilt in Copr and Copr repositories can carry the required +dependencies for said packages, which simplifies the distribution, and can even +help with installing singular packages (when you just need the dependency, not +everything).

My issue

Now you might wonder how would I use it on my VPS. It's rather simple, once in +6 months a new Fedora release comes out. And you need to upgrade to newer +release… You don't need to do it right away and for such setup it probably isn't +even recommended.

tip

Fedora releases are supported for a year, i.e. they live 6 months till the next +release and then another 6 months till another release.

Some people prefer to run one version “behind”. If you ever decide to run it on +your home server or in a similar setup, it might be a pretty good idea to +follow. I'm using the “latest greatest”, cause why not 😄

One way or another, you still need to bump the release every six months, unless +you'd bump 2 releases at once every year, which would be a decision, since, at +least I, cannot see any benefits in it… You don't go for “stability”, cause once +a year you switch to the latest release and then, before you bump, you use one +year old software, so you're not even using the latest.

Fast-forward 2 years in the future, new Fedora release came out (October '22) +and I was doing an upgrade. Dependencies of the rspamd have been updated and +rspamd builds in Copr have failed and no one fixed it. Cool, so now I can +upgrade, but can either ignore the dependencies or uninstall the rspamd…

How can Copr help?

I have managed to find +specfile for the +rspamd package that they use for CentOS. There were some files apart from the +specfile, so I had to make an SRPM locally and then… I just uploaded the SRPM +to the Copr to +build +an RPM.

I have switched the previous Copr repository for rspamd with my own and happily +proceeded with the upgrade.

Conclusion

Copr is heavily used for testing builds on the upstream with +Packit. However, as you can see, it is possible to use it +very well for packaging your own stuff and avoiding issues (such as the one +I have described above), if need be.


  1. vpsFree.cz
  2. Even though I've been running archLinux on some Raspberry Pi's and also +on one of my “home servers”, before getting the VPS. You could say I like +to live on the edge…
]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + + + +
+ + <![CDATA[4th week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/4th-week + + 2023-07-07T15:14:00.000Z + + Let's go through the fourth week of Advent of Code in Rust.

Day 22: Monkey Map

tl;dr

Simulating a movement on a 2D map with given instructions. Map becomes a cube in +the 2nd part…

Rant

This was the most obnoxious problem of this year… and a lot of Rust issues have +been hit.

Solution

It seems like a very simple problem to solve, but with very obnoxious changes in +the 2nd part and also it's relatively hard to decompose »properly«.

Column iterator

In the first part of the problem it was needed to know the boundaries of each +row and column, since I stored them in Vec<Vec<char>> and padded with spaces +to ensure I have a rectangular 2D “array”. However when you wanted to go through +each row and column to determine the boundaries, it was very easy to do for the +rows (cause each row is a Vec element), but not for the columns, since they +span multiple rows.

For this use case I have implemented my own column iterator:

pub struct ColumnIterator<'a, T> {
map: &'a [Vec<T>],
column: usize,

i: usize,
}

impl<'a, T> ColumnIterator<'a, T> {
pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
Self { map, column, i: 0 }
}
}

impl<'a, T> Iterator for ColumnIterator<'a, T> {
type Item = &'a T;

fn next(&mut self) -> Option<Self::Item> {
if self.i >= self.map.len() {
return None;
}

self.i += 1;
Some(&self.map[self.i - 1][self.column])
}
}

Given this piece of an iterator, it is very easy to factor out the common +functionality between the rows and columns into:

let mut find_boundaries = |constructor: fn(usize) -> Orientation,
iterator: &mut dyn Iterator<Item = &char>,
upper_bound,
i| {
let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
let start = first_non_empty.next().unwrap().0 as isize;

let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

boundaries.insert(constructor(i), start..end);
};

And then use it as such:

// construct all horizontal boundaries
(0..map.len()).for_each(|row| {
find_boundaries(
Orientation::horizontal,
&mut map[row].iter(),
map[row].len(),
row,
);
});

// construct all vertical boundaries
(0..map[0].len()).for_each(|col| {
find_boundaries(
Orientation::vertical,
&mut ColumnIterator::new(&map, col),
map.len(),
col,
);
});

Walking around the map

Once the 2nd part got introduced, you start to think about a way how not to +copy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've +chosen to introduce a trait (i.e. interface) for 2D and 3D walker.

trait Wrap: Clone {
type State;

// simulation
fn is_blocked(&self) -> bool;
fn step(&mut self, steps: isize);
fn turn_left(&mut self);
fn turn_right(&mut self);

// movement
fn next(&self) -> (Self::State, Direction);

// final answer
fn answer(&self) -> Output;
}

Each walker maintains its own state and also provides the functions that are +used during the simulation. The “promised” methods are separated into:

  • simulation-related: that are used during the simulation from the .fold()
  • movement-related: just a one method that holds most of the logic differences +between 2D and 3D
  • final answer: which extracts the proof of solution from the +implementation-specific walker

Both 2D and 3D versions borrow the original input and therefore you must +annotate the lifetime of it:

struct Wrap2D<'a> {
input: &'a Input,
position: Position,
direction: Direction,
}
impl<'a> Wrap2D<'a> {
fn new(input: &'a Input) -> Wrap2D<'a> {
// …

Problems

I have used a lot of closures for this problem and once I introduced a parameter +that was of unknown type (apart from the fact it implements a specific trait), I +got suggested a “fix” for the compilation error that resulted in something that +was not possible to parse, cause it, more than likely, violated the grammar.

In a similar fashion, I have been suggested changes that led to a code that +didn't make sense by just looking at it (there was no need to try the changes), +for example one suggested change in the closure parameter caused disapperance of +the parameter name. 😄

Clippy

I have to admit that Clippy was rather helpful here, I'll include two examples +of rather smart suggestions.

When writing the parsing for this problem, the first thing I have spotted on the +char was the .is_digit() function that takes a radix as a parameter. Clippy +noticed that I use radix = 10 and suggested switching to .is_ascii_digit() +that does exactly the same thing:

-                .take_while(|c| c.is_digit(10))
+ .take_while(|c| c.is_ascii_digit())

Another useful suggestion appeared when working with the iterators and I wanted +to get the nn-th element from it. You know the .skip(), you know the +.next(), just “slap” them together and we're done for 😁 Well, I got +suggested to use .nth() that does exactly the combination of the two mentioned +methods on iterators:

-            match it.clone().skip(skip).next().unwrap() {
+ match it.clone().nth(skip).unwrap() {

Day 23: Unstable Diffusion

tl;dr

Simulating movement of elves around with a set of specific rules.

Solution

There's not much to mention since it's just a cellular automaton simulation +(even though the AoC rules for cellular automatons usually get out of hand +😉).

Although I had a need to determine boundaries of the elves' positions and ended +up with a nasty DRY violation. Knowing that you you're looking for maximum and +minimum that are, of course, exactly the same except for initial values and +comparators, it looks like a rather simple fix, but typing in Rust is something +else, right? In the end I settled for a function that computes both boundaries +without any duplication while using a closure:

fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
positions
.iter()
.fold(Vector2D::new(init, init), |acc, elf| {
Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
})
};

(f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
}

This function returns a pair of 2D vectors that represent opposite points of the +bounding rectangle of all elves.

You might ask why would we need a closure and the answer is that positions +cannot be captured from within the nested function, only via closure. One more +fun fact on top of that is the type of the comparator

&dyn Fn(isize, isize) -> isize

Once we remove the dyn keyword, compiler yells at us and also includes a way +how to get a more thorough explanation of the error by running

$ rustc --explain E0782

which shows us

Trait objects must include the `dyn` keyword.

Erroneous code example:

```
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
```

Trait objects are a way to call methods on types that are not known until
runtime but conform to some trait.

Trait objects should be formed with `Box<dyn Foo>`, but in the code above
`dyn` is left off.

This makes it harder to see that `arg` is a trait object and not a
simply a heap allocated type called `Foo`.

To fix this issue, add `dyn` before the trait name.

```
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
```

This used to be allowed before edition 2021, but is now an error.
Rant

Not all of the explanations are helpful though, in some cases they might be even +more confusing than helpful, since they address very simple use cases.

As you can see, even in this case there are two sides to the explanations:

  • it explains why you need to use dyn, but
  • it still mentions that trait objects need to be heap-allocated via Box<T> +that, as you can see in my snippet, does not apply here 😄 IMO it's +caused by the fact that we are borrowing it and therefore we don't need to +care about the size or whereabouts of it.
C++ parallel

If you dive into the explanation above, you can notice that the Box<dyn Trait> +pattern is very helpful for using types that are not known during compile-time. +You would use a very similar approach in C++ when parsing some data structure +from input (let's say JSON for example).

On the other hand, in this case, it doesn't really make much sense, cause you +can clearly see that the types are known during the compile-time, which in +C++ could be easily resolved by templating the helper function.

Day 24: Blizzard Basin

tl;dr

Navigating your way through a basin with series of blizzards that move around +you as you move.

caution

It's second to last day and I went “bonkers” on the Rust 😄 Proceed to +read Solution part on your own risk.

Solution

You are given a map with blizzards all over the place and you're supposed to +find the minimum time it requires you to walk through the basin without getting +in any of the blizzards.

Breakdown

Relatively simple, yet a bit annoying, approach can be taken. It's technically +a shortest-path algorithm implementation with some relaxation restrictions and +being able to stay on one position for some time, so each vertex of the graph +is determined by the position on the map and the timestamp. I have chosen to +use Vector3D<usize>, since x and y attributes can be used for the position +and, well, let's use z for a timestamp, cause why not, right? 😉

Evaluating the blizzards

caution

I think that this is the most perverted abuse of the traits in the whole 4 weeks +of AoC in Rust…

The blizzards move along their respective directions in time and loop around in +their respective row/column. Each vertex holds position and time, so we can +just index the basin with the vertex itself, right? Yes, we can 😈

Fun fact

While writing this part, I've recognized unnecessary verbosity in the code and +cleaned it up a bit. The changed version is shown here and the original was just +more verbose.

I'll skip the boring parts of checking bounds and entry/exit of the basin 😉 +We can easily calculate positions of the blizzards using a modular arithmetics:

impl Index<Position> for Basin {
type Output = char;

fn index(&self, index: Position) -> &Self::Output {
// ‹skipped boring parts›

// We need to account for the loops of the blizzards
let width = self.cols - 2;
let height = self.rows - 2;

let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
[
(
index.y() as usize,
blizzard_origin(width, -1, index.z(), index.x()),
'>',
),
(
index.y() as usize,
blizzard_origin(width, 1, index.z(), index.x()),
'<',
),
(
blizzard_origin(height, -1, index.z(), index.y()),
index.x() as usize,
'v',
),
(
blizzard_origin(height, 1, index.z(), index.y()),
index.x() as usize,
'^',
),
]
.iter()
.find_map(|&(y, x, direction)| {
if self.map[y][x] == direction {
Some(&self.map[y][x])
} else {
None
}
})
.unwrap_or(&'.')
}
}

As you can see, there is an expression for calculating the original position and +it's used multiple times, so why not take it out to a lambda, right? 😉

I couldn't get the rustfmt to format the for-loop nicely, so I've just +decided to go with iterating over an elements of a slice. I have used, once +again, a combination of two functions (find_map in this case) to do 2 things +at once and at the end, if we haven't found any blizzard, we just return the +empty space.

I think it's a very nice (and naughty) way how to use the Index trait, don't +you think?

Shortest-path algorithm

For the shortest path you can choose and adjust any of the common shortest-path +algorithms, in my case, I have decided to use A* instead of Dijkstra's +algorithm, since it better reflects the cost function.

Comparison of costs

With the Dijkstra's algorithm I would proceed with the time attribute used as +a priority for the queue.

Whereas with the A*, I have chosen to use both time and Manhattan distance +that promotes vertices closer to the exit and with a minimum time taken.

Cost function is, of course, a closure 😉

let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());

And also for checking the possible moves from the current vertex, I have +implemented, yet another, closure that yields an iterator with the next moves:

let next_positions = |p| {
[(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
.iter()
.filter_map(move |&(x, y, t)| {
let next_p = p + Vector3D::new(x, y, t);

if basin[next_p] == '.' {
Some(next_p)
} else {
None
}
})
};

Min-heap

In this case I had a need to use the priority queue taking the elements with the +lowest cost as the prioritized ones. Rust only offers you the BinaryHeap and +that is a max-heap. One of the ways how to achieve a min-heap is to put the +elements in wrapped in a Reverse (as is even showed in the linked docs of +the BinaryHeap). However the wrapping affects the type of the heap and also +popping the most prioritized elements yields values wrapped in the Reverse.

For this purpose I have just taken the max-heap and wrapped it as a whole in a +separate structure providing just the desired methods:

use std::cmp::{Ord, Reverse};
use std::collections::BinaryHeap;

pub struct MinHeap<T> {
heap: BinaryHeap<Reverse<T>>,
}

impl<T: Ord> MinHeap<T> {
pub fn new() -> MinHeap<T> {
MinHeap {
heap: BinaryHeap::new(),
}
}

pub fn push(&mut self, item: T) {
self.heap.push(Reverse(item))
}

pub fn pop(&mut self) -> Option<T> {
self.heap.pop().map(|Reverse(x)| x)
}
}

impl<T: Ord> Default for MinHeap<T> {
fn default() -> Self {
Self::new()
}
}

Rest is just the algorithm implementation which is not that interesting.

Day 25: Full of Hot Air

tl;dr

Playing around with a numbers in a special base.

Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem” +with a rather easy solution, as the last day always seems to be.

Solution

Implementing 2 functions, converting from the SNAFU base and back to the SNAFU +base representation. Let's do a bit more though! I have implemented two functions:

  • from_snafu
  • to_snafu

Now it is apparent that all I do is number to string and string to number. Hmm… +that sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers +and implement the traits that we need.

Let's start with a structure:

#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct SNAFU {
value: i64,
}

Converting from &str

We will start by implementing the FromStr trait that will help us parse our input. +This is rather simple, I can just take the from_snafu function, copy-paste it +into the from_str method and the number I get will be wrapped in Result and +SNAFU structure.

Converting to String

This is more fun. In some cases you need to implement only one trait and others +are automatically implemented using that one trait. In our case, if you look in +the documentation, you can see that ToString trait is automatically implemented +for any type that implements Display trait.

Let's implement the Display trait then. We should be able to use the to_snafu +function and just take the self.value from the SNAFU structure.

And for the convenience of tests, we can also implement a rather simple From<i64> +trait for the SNAFU.

Adjusting the code

After those changes we need to adjust the code and tests.

Parsing of the input is very easy, before we have used the lines, now we parse +everything:

     fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
- file_to_lines(pathname)
+ file_to_structs(pathname)
}

Part 1 needs to be adjusted a bit too:

     fn part_1(input: &Input) -> Output {
- to_snafu(input.iter().map(|s| from_snafu(s)).sum())
+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
}

You can also see that it simplifies the meaning a bit and it is more explicit than +the previous versions.

And for the tests:

     #[test]
fn test_from() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(from_snafu(s), *n);
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
}
}

#[test]
fn test_to() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(to_snafu(*n), s.to_string());
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());
}

Summary

Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

Finished advent calendar :smile:

Advent of Code

This year was quite fun, even though most of the solutions and posts came in +later on (cough in '23 cough). Day 22 was the most obnoxious one… And also +it feels like I used priority queues and tree data structures a lot 👀

with Rust

I must admit that a lot of compiler warnings and errors were very useful. Even +though I still found some instances where they didn't help at all or cause even +worse issues than I had. Compilation times have been addressed with the caching.

Building my first tree data structure in Rust has been a very “interesting” +journey. Being able to write a more generic BFS algorithm that allows you to not +duplicate code while still mantaining the desired functionality contributes to +a very readable code.

I am definitely much more aware of the basic things that bloated Python is +missing, yet Rust has them…

Using explicit types and writing down placeholder functions with todo!() +macros is very pleasant, since it allows you to easily navigate the type system +during the development when you don't even need to be sure how are you going to +put the smaller pieces together.

I have used a plethora of traits and also implemented some of them to either be +idiomatic, or exploit the syntactic sugar they offer. Deriving the default trait +implementation is also very helpful in a lot of cases, e.g. debugging output, +copying, equality comparison, etc.

I confess to touching more “cursed” parts of the Rust, such as macros to +declutter the copy-paste for tests or writing my own structures that need to +carry a lifetime for their own fields.

tl;dr Relatively pleasant language until you hit brick wall 😉


See you next year! Maybe in Rust, maybe not 🙃

]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+ + <![CDATA[3rd week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/3rd-week + + 2023-07-06T21:00:00.000Z + + Let's go through the third week of Advent of Code in Rust.

Day 15: Beacon Exclusion Zone

tl;dr

Triangulating a distress beacon based on the information from the sensors.

Solution

Relatively easy thing to implement, no major Rust issues hit.

Day 16: Proboscidea Volcanium

tl;dr

Finding a max flow in a graph given some time constraints.

Solution

I have used some interesting things to implement this and make it easier for me.

Indexing in graph

I have come across a situation where I needed to keep more information regarding +the graph… In that case you can, of course, create a structure and keep it in, +but once you have multiple members in the structure it gets harder to work with +since you need to address the fields in the structure. When you work with graph, +you frequently need to access the vertices and in this case it felt a lot easier +to implement the indexing in a graph, rather than explicitly access the +underlying data structure.

Here you can see a rather short snippet from the solution that allows you to +“index” the graph:

impl Index<&str> for Graph {
type Output = Vertex;

fn index(&self, index: &str) -> &Self::Output {
&self.g[index]
}
}

Cartesian product

During the implementation I had to utilize Floyd-Warshall algorithm for finding +the shortest path between pairs of vertices and utilized the iproduct! macro +from the itertools. It is a very useful higher-order function that allows +you to keep the nesting of the loops at a minimum level while still maintaining +the same functionality.

“Implementing” an iterator

For the second part, you get to split the work between 2 actors. That way you +can achieve higher efficiency of the whole process that you're planning, but it +also makes it harder to evaluate algorithmically, since you need to check the +different ways the work can be split.

Being affected by functional programming brain damage™️, I have chosen to +do this part by function that returns an iterator over the possible ways:

fn pairings(
valves: &BTreeSet<String>,
) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + '_ {
let mapping = valves.iter().collect_vec();

let max_mask = 1 << (valves.len() - 1);

(0..max_mask).map(move |mask| {
let mut elephant = BTreeSet::new();
let mut human = BTreeSet::new();

for (i, &v) in mapping.iter().enumerate() {
if (mask & (1 << i)) == 0 {
human.insert(v.clone());
} else {
elephant.insert(v.clone());
}
}

(human, elephant)
})
}

Day 17: Pyroclastic Flow

tl;dr

Simulating an autonomous Tetris where pieces get affected by a series of jets of +hot gas.

Solution

Similarly to the previous day I have created some iterators 😄

Collision detection

Once you need to check for collisions it is very helpful to be able to just +iterate through the positions that can actually collide with the wall or other +piece.

To get the desired behaviour, you can just compose few smaller functions:

fn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + '_ {
shape.iter().enumerate().flat_map(|(y, row)| {
row.iter().enumerate().filter_map(move |(x, c)| {
if c == &'#' {
Some(Vector2D::new(x as isize, y as isize))
} else {
None
}
})
})
}

In the end, we get relative positions which we can adjust later when given the +specific positions from iterator. You can see some interesting parts in this:

  • .enumerate() allows us to get both the indices (coordinates) and the line +or, later on, the character itself,
  • .flat_map() flattens the iterator, i.e. when we return another iterator, +they just get chained instead of iterating over iterators (which sounds pretty +disturbing, doesn't it?),
  • and finally .filter_map() which is pretty similar to the “basic” .map() +with a one, key, difference that it expects the items of an iterator to be +mapped to an Option<T> from which it ignores nothing (as in None 😉) +and also unwraps the values from Some(…).

Infinite iterator

In the solution we cycle through both Tetris-like shapes that fall down and the +jets that move our pieces around. Initially I have implemented my own infinite +iterator that just yields the indices. It is a very simple, yet powerful, piece +of code:

struct InfiniteIndex {
size: usize,
i: usize,
}

impl InfiniteIndex {
fn new(size: usize) -> InfiniteIndex {
InfiniteIndex { size, i: size - 1 }
}
}

impl Iterator for InfiniteIndex {
type Item = usize;

fn next(&mut self) -> Option<Self::Item> {
self.i = (self.i + 1) % self.size;
Some(self.i)
}
}

However when I'm looking at the code now, it doesn't really make much sense… +Guess what, we can use a built-in function that is implemented on iterators for +that! The function is called .cycle()

On the other hand, I am not going to switch to that function, since it would +introduce an another myriad of issues caused by the fact that I create iterators +right away in the constructor of my structure and the iterators would borrow +both the jets and shapes which would introduce a lifetime dependency into the +structure.

Day 18: Boiling Boulders

tl;dr

Let's compute a surface area of some obsidian approximated via coordinates of +cubes.

Solution

This day is kinda interesting, because it shows how easily you can complicate the +problem and also how much can you screw yourself over with the optimization and +“smart” approach.

For the first part you need to find the surface area of an obsidian that is +approximated by cubes. Now, that is a very easy thing to do, just keep the track +of already added cubes, and check if the newly added cube touches any face of any +other cube. Simple, and with a BTreeSet relatively efficient way to do it.

However the second part lets you on a secret that there may be some surface area +from the “inside” too and you want to know only the one from the outside of the +obsidian. I have seen some solutions later, but if you check your data, you might +notice that the bounding box of all the cubes isn't that big at all. Therefore I +chose to pre-construct the box beforehand, fill in the cubes and then just run a +BFS turning all the lava on the outside into the air. Now you just need to check +cubes and count how many of their faces touch the air.

Day 19: Not Enough Minerals

tl;dr

Finding out the best strategy for building robots to collect geodes.

Solution

Not much interesting stuff to mention apart from the suggestion to never believe +that the default implementation given by derive macro is what you want, it +doesn't have to be. 😄

Day 20: Grove Positioning System

tl;dr

Shuffling around the circular linked list to find the coordinates.

Now, small rant for this day is in place. They've never mentioned that coordinates +can repeat and therefore the values are non-unique. This is something that did +not happen in the given sample, but was present in the user input. It took »a lot« +to realize that this is the issue.

Solution

I have tried implementing a circular linked list for this… and I have failed +miserably. To be fair, I still have no clue why. It was “fun” to play around with +the Rc<RefCell<T>>. In the end I failed on wrong answer. I have also encountered +a rather interesting issue with .borrow_mut() method being used on Rc<RefCell<T>>.

.borrow_mut()

Consider the following snippet of the code (taken from the documentation):

use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::rc::Rc;
// use std::borrow::BorrowMut;

fn main() {
let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));
// Create a new block to limit the scope of the dynamic borrow
{
let mut map: RefMut<_> = shared_map.borrow_mut();
map.insert("africa", 92388);
map.insert("kyoto", 11837);
map.insert("piccadilly", 11826);
map.insert("marbles", 38);
}

// Note that if we had not let the previous borrow of the cache fall out
// of scope then the subsequent borrow would cause a dynamic thread panic.
// This is the major hazard of using `RefCell`.
let total: i32 = shared_map.borrow().values().sum();
println!("{total}");
}

We allocate a hash map on the heap and then in the inner block, we borrow it as +a mutable reference, so that we can use it.

note

It is a very primitive example for Rc<RefCell<T>> and mutable borrow.

If you uncomment the 4th line with use std::borrow::BorrowMut;, you cannot +compile the code anymore, because of

   Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
--> src/main.rs:10:34
|
10 | let mut map: RefMut<_> = shared_map.borrow_mut();
| --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference
| |
| expected due to this
|
= note: expected struct `RefMut<'_, _>`
found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:11:13
|
11 | map.insert("africa", 92388);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:12:13
|
12 | map.insert("kyoto", 11837);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:13:13
|
13 | map.insert("piccadilly", 11826);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:14:13
|
14 | map.insert("marbles", 38);
| ^^^^^^ method not found in `RefMut<'_, _>`

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `playground` due to 5 previous errors

It might seem a bit ridiculous. However, I got to a point where the compiler +suggested use std::borrow::BorrowMut; and it resulted in breaking parts of the +code that worked previously. I think it may be a good idea to go over what is +happening here.

.borrow_mut() on Rc<RefCell<T>>

Let's consider a variable x of type Rc<RefCell<T>>. What happens when you +call .borrow_mut() on it? We can look at the Rc type, and… hang on! There is +neither .borrow_mut() method or BorrowMut trait implemented. How can we do it +then?

Let's go further and we can see that RefCell<T> implements a .borrow_mut() +method. OK, but how can we call it on the Rc<T>? Easily! Rc<T> implements +Deref<T> and therefore you can call methods on Rc<T> objects as if they were +T objects. If we read on Deref coercion, we can see the following:

If T implements Deref<Target = U>, …:

  • T implicitly implements all the (immutable) methods of the type U.

What is the requirement for the .borrow_mut() on RefCell<T>? Well, it needs +&self, so the Deref implements the .borrow_mut() for the Rc<RefCell<T>>.

BorrowMut trait

I have not been able to find a lot on this trait. My guess is that it provides a +method instead of a syntactic sugar (&mut x) for the mutable borrow. And also +it provides default implementations for the types:

impl BorrowMut<str> for String

impl<T> BorrowMut<T> for &mut T
where
T: ?Sized,

impl<T> BorrowMut<T> for T
where
T: ?Sized,

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where
A: Allocator,

impl<T, A> BorrowMut<T> for Box<T, A>
where
A: Allocator,
T: ?Sized,

impl<T, const N: usize> BorrowMut<[T]> for [T; N]
Conflict

Now the question is why did it break the code… My first take was that the type +Rc<RefCell<T>> has some specialized implementation of the .borrow_mut() and +the use overrides it with the default, which is true in a sense. However +there is no specialized implementation. Let's have a look at the trait and the +type signature on the RefCell<T>:

// trait
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow_mut(&mut self) -> &mut Borrowed;
}

// ‹RefCell<T>.borrow_mut()› type signature
pub fn borrow_mut(&self) -> RefMut<'_, T>

I think that we can definitely agree on the fact that RefMut<'_, T> is not the +RefCell<T>.

In my opinion, RefCell<T> implements a separate .borrow_mut() rather +than implementing the interface, because it cannot satisfy the type requirements +of the trait.

caution

I wonder how are we expected to deal with this conflict, if and when, we need +both the .borrow_mut() of the trait and .borrow_mut() of the RefCell<T>.

Fun fact

I was suggested by the compiler to do use std::borrow::BorrowMut; and break the +code.

So much for the almighty and helpful compiler…

Day 21: Monkey Math

tl;dr

Computing an expression tree and then also finding ideal value for a node.

Solution

Relatively simple, until you get to the 2nd part where you start to practice +a lot of the copy-paste. I have managed to sneak some perverted stuff in there +though :) Let's go through the details.

Default trait

For the first time and twice I had a need to have a default value for my types, +enumerations in this case. Rust offers a very nice trait1 that is described +as:

A trait for giving a type a useful default value.

I guess it sums it up nicely. The more interesting part about this is the fact +that you can use the macro machinery to save yourself some typing. If you have +enumeration of which the default value doesn't bear any parameter, you can just +do2:

#[derive(Default)]
enum Color {
#[default]
White,
Gray,
Black,
}

Abusing negation

If you want to use a unary minus operator on your own type, you can implement +a Neg trait3. I was dealing with a binary tree and needed a way how to look +at the other side, so I have just implemented the negation for flipping between +left and right 😄


  1. Default docs
  2. Pardon my example from the graph algorithms ;)
  3. Neg docs
]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+ + <![CDATA[Sort the matrix diagonally]]> + https://blog.mfocko.xyz/blog/leetcode/sort-diagonally + + 2023-03-04T23:15:00.000Z + + Let's try to solve one of the LeetCode challenges in easy and hard mode at the +same time.

Problem description

A matrix diagonal is a diagonal line of cells starting from some cell in +either the topmost row or leftmost column and going in the bottom-right direction +until reaching the matrix's end. For example, the matrix diagonal starting +from mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0], +mat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending +order and return the resulting matrix.

Example

Image describing the problem

Skeleton and initial adjustments

We are given the following skeleton for the C++ and the given challenge:

class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

}
};

The task is to sort the passed matrix diagonally and then return it. First of all, +I don't like to solve this in a web browser, so we'll need to adjust it accordingly +for running it locally. We'll start by including the vector header and using +fully-qualified namespaces1 and also adding few tests:

#include <cassert>
#include <vector>

using matrix = std::vector<std::vector<int>>;

class Solution {
public:
matrix diagonalSort(matrix& mat)
{
}
};

static void test_case_1()
{
// Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
// Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
std::vector { 2, 2, 1, 2 },
std::vector { 1, 1, 1, 2 } })
== std::vector { std::vector { 1, 1, 1, 1 },
std::vector { 1, 2, 2, 2 },
std::vector { 1, 2, 3, 3 } }));
}

static void test_case_2()
{
// Input: mat =
// [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
// Output:
// [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
std::vector { 23, 55, 17, 45, 15, 52 },
std::vector { 75, 31, 36, 44, 58, 8 },
std::vector { 22, 27, 33, 25, 68, 4 },
std::vector { 84, 28, 14, 11, 5, 50 } })
== std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
std::vector { 11, 11, 25, 45, 8, 69 },
std::vector { 14, 23, 25, 44, 58, 15 },
std::vector { 22, 27, 31, 36, 50, 66 },
std::vector { 84, 28, 75, 33, 55, 68 } }));
}

int main()
{
test_case_1();
test_case_2();

return 0;
}

We need to return the matrix, but we're given a reference to the input matrix. We +can easily abuse the C++ here and just switch the reference to value, this way +the matrix will be copied when passed to the function, we can sort the copy and +just return it back. And we also get yelled by the compiler for the fact that the +method doesn't return anything yet, so to make it “shut up” we will just return +the input for now:

-    matrix diagonalSort(matrix& mat)
+ matrix diagonalSort(matrix mat)
{
+ return mat;
}

Now, we get the copy and we're good to go.

Naïve solution

As you may know, C++ offers a plethora of functions that can be used to your +advantage, given that you know how to “bend” the data structures accordingly.

What does that mean for us? Well, we have an std::sort, we can use it, right? +Let's have a look at it:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

This overload is more than we need. What does it do? It just sorts the elements +in the range [first, last) using operator< on them. We can't sort the whole +matrix using this, but… we can sort just »one« diagonal without doing much work +on our end.

What is the RandomIt type though? If we look more into the documentation, we +can easily find the requirements for it and also learn that it's a random access +iterator and allows swapping its values at the same time.

Random access iterator

What is the random access iterator though? We can find it in a documentation +and see the following description:

A LegacyRandomAccessIterator is a LegacyBidirectionalIterator +that can be moved to point to any element in constant time.

After that we can see all the requirements for it being listed. I don't feel like +reading them right now, so we will just use it and see where the compilation blows +up, i.e. “compiler-assisted development2 if you will ;)

Now we know that we can use std::sort to sort the diagonal itself, but we also +need to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to +someone else3. And that way we get

matrix diagonalSort(matrix mat)
{
// we iterate over the diagonals
for (auto d : diagonals(mat)) {
// and we sort each diagonal
std::sort(d.begin(), d.end());
}

// we take the matrix by copy, so we can sort in-situ and return the copy
// that we sorted
return mat;
}

This solution looks very simple, doesn't it? Well, cause it is. +Let's try compiling it:

matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
for (auto d : diagonals(mat)) {
^
Found compiler error(s).
make: *** [makefile:14: tidy] Error 1

OK, seems about right. We haven't implemented the diagonals yet. And based on +what we've written so far, we need a function or a class diagonals that will +give us the diagonals we need.

Implementing the diagonals

Cool, so we need the function that will let us go through each and every diagonal +in our matrix. We use the for-range loop, so whatever we get back from the +diagonals must support .begin() and .end(). Since I am a masochist, we will +do such functionality for a matrix of any type, not just the int from the challenge.

As I said, we need to be able to

  • construct the object
  • get the beginning
  • get the end (the “sentinel”)
template <typename T>
class diagonals {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& _matrix;

public:
diagonals(matrix_t& m)
: _matrix(m)
{
}
diagonals_iter begin()
{
/* TODO */
}
diagonals_iter end()
{
/* TODO */
}
};

Now we have a diagonals that we can use to go through the diagonals. We haven't +implemented the core of it yet. Let's go through what we have for now.

We have a templated class with templated T that is used as a placeholder for any +type we would store in the matrix. Because I'm lazy, I have defined the matrix_t +type that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to +type it out all the time. Of course, we need to store the matrix, we are given, +as a private attribute. And then just have the constructor and the 2 methods we +need for the for-range.

Iterating over diagonals

Now that we have an object that will allow us to iterate through the diagonals, +we need to implement the iterating itself. We need to go through all of them, so +we have multiple options how to do so. I have decided to start from the “main” +diagonal that starts at (0, 0) index and then proceed with the diagonals starting +in the first row, followed by the rest of the diagonals in the first column.

We need to be able to tell that we've iterated through all of them, and also we +need to know which diagonal is next. For that purpose we will pass the indices +of the first cell on the diagonal. That way we can always tell how to move forward.

We will start by updating the begin and end to reflect our choice accordingly.

diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }

For the begin we return the first diagonal that starts at (0, 0). And because +we have decided to do the diagonals in the first column at the end, the first +diagonal that is not a valid one is the one at (0, height). Apart from the +indices, we also need to pass reference to the matrix itself.

note

You may have noticed that we also include the diagonals that have length 1, +specifically the ones at (0, height - 1) and (width - 1, 0). We are implementing +an iterator that should not care about the way it's being used. Therefore, we +don't care about the fact they don't need to be sorted.

Cool, let's leave the iterator itself to someone else, right?4

Implementing the iterator over diagonals

We can start with a simple skeleton based on the information that we pass from +the diagonals. Also to utilize the matrix_t and also contain implementation +details hidden away, we will put this code into the diagonals class.

class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}
};

In this case we will be implementing a “simple” forward iterator, so we don't +need to implement a lot. Notably it will be:

  • inequality operator (we need to know when we reach the end and have nothing to +iterate over)
  • preincrementation operator (we need to be able to move around the iterable)
  • dereference operator (we need to be able to retrieve the objects we iterate +over)
class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator!=(const diagonals_iter& rhs) const
{
// iterators are not equal if they reference different matrices, or
// their positions differ
return m != rhs.m || x != rhs.x || y != rhs.y;
}

diagonals_iter& operator++()
{
if (y != 0) {
// iterating through diagonals down the first column
y++;
return *this;
}

// iterating the diagonals along the first row
x++;
if (x == m.front().size()) {
// switching to diagonals in the first column
x = 0;
y++;
}

return *this;
}

diagonal<T> operator*() const { return diagonal { m, x, y }; }
};

Let's go one-by-one. Inequality operator is rather simple, just compare iterator's +attributes field-by-field. If you think about it, checking inequality of two 2D +vectors may be a bit inefficient, therefore, we can swap around and check it as +a last thing.

-        return m != rhs.m || x != rhs.x || y != rhs.y;
+ return x != rhs.x || y != rhs.y || m != rhs.m;

Preincrementation is where the magic happens. If you have a better look, you can +see two branches of this operation:

  1. When y != 0 (we're iterating over the diagonals in the first column) +In this case, we just bump the row and we're done.
  2. When y == 0 (we're iterating over the diagonals in the first row) +In this case, we bump the column and check if we haven't gotten out of bounds, +i.e. the end of the first row. If we get out of the bounds, we're continuing +with the second diagonal in the first column.

Dereferencing the iterator must “yield” something. In our case it will be the +diagonal that we want to sort. For sorting we need just the iterators that can +move around said diagonal. The simplest thing, we can do, is to delegate it to +something else. In our case it will be a class called diagonal.

Implementing the diagonal itself

After implementing the iterator over diagonals, we know that all we need to describe +a diagonal is the matrix itself and the “start” of the diagonal (row and column). +And we also know that the diagonal must provide some iterators for the std::sort +function. We can start with the following skeleton:

template <typename T>
class diagonal {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& matrix;
std::size_t x;
std::size_t y;

public:
diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
: matrix(matrix)
, x(x)
, y(y)
{
}

diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

diagonal_iter end() const
{
auto max_x = matrix[y].size();
auto max_y = matrix.size();

// we need to find the distance in which we get out of bounds (either in
// column or row)
auto steps = std::min(max_x - x, max_y - y);

return diagonal_iter { matrix, x + steps, y + steps };
}
};

Initialization is rather simple, we just “keep” the stuff we get, begin is the +simplest, we just delegate.

In case of the end, it gets more complicated. We need to know where is the “end” +of the diagonal. Since end should point to the first element “after” the iterable, +we know that it's the first position of the iterator where either y becomes +matrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal, +duh, therefore we can deduce the first “position” afterwards by minimal amount of +steps to get out of the any column or row, hence std::min(max_x - x, max_y - y). +Final position is then computed simply by adding the steps to the beginning of +the diagonal.

Now we just need to finish the iterator for the diagonal itself and we're done.

Implementing diagonal_iter

This part is the hardest from all we need to do. It's because of the requirements +of the std::sort that requires us to implement a random access iterator. I have +briefly described it above, and “in a nutshell” it means that we need to implement +an iterator that can move in constant time along the diagonal in any amount of +steps.

Let's go through all of the functionality that our iterator needs to support to +be used in std::sort. We need the usual operations like:

  • equality/inequality
  • incrementation
  • dereferencing

We will also add all the types that our iterator uses with the category of the +iterator, i.e. what interface it supports:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }
};

This is pretty similar to the previous iterator, but now we need to implement the +remaining requirements of the random access iterator. Let's see what those are:

  • decrementation - cause we need to be able to move backwards too, since random access iterator extends the interface of bidirectional iterator
  • moving the iterator in either direction by steps given as an integer
  • being able to tell the distance between two iterators
  • define an ordering on the iterators

Let's fill them in:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }

// exactly opposite to the incrementation
diagonal_iter operator--()
{
x--;
y--;
return *this;
}

// moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
// can just return a new iterator and subtract ‹n› from both coordinates in
// the matrix
diagonal_iter operator-(difference_type n) const
{
return diagonal_iter { m, x - n, y - n };
}

// here we assume that we are given two iterators on the same diagonal
difference_type operator-(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x - rhs.x;
}

// counterpart of moving ‹n› steps backwards
diagonal_iter operator+(difference_type n) const
{
return diagonal_iter { m, x + n, y + n };
}

// we compare the coordinates, and also assume that those 2 iterators are
// lying on the same diagonal
bool operator<(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x < rhs.x && y < rhs.y;
}
};

At this point we could probably try and compile it, right? If we do so, we will +get yelled at by a compiler for the following reasons:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __next;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
std::__unguarded_linear_insert(__i,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
std::__unguarded_linear_insert(__i,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
__unguarded_linear_insert(_RandomAccessIterator __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __cut;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__introsort_loop(__first, __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

That's a lot of noise, isn't it? Let's focus on the important parts:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

Ah! We have a reference in our iterator, and this prevents us from having a copy +assignment operator (that is used “somewhere” in the sorting algorithm). Well… +Let's just wrap it!

# we need to keep a different type than reference
- matrix_t& m;
+ std::reference_wrapper<matrix_t> m;

# in comparison we need to get the reference out of the wrapper first
- return x == rhs.x && y == rhs.y && m == rhs.m;
+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

# same when we return a reference to the “cell” in the matrix
- reference operator*() const { return m[y][x]; }
+ reference operator*() const { return m.get()[y][x]; }

# and finally in the assertions that we set for the “distance” and “less than”
- assert(m == rhs.m);
+ assert(m.get() == rhs.m.get());

We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.


  1. just because I'm used to it and don't care about your opinion ;)
  2. exercise at your own risk
  3. me in 5 minutes in fact, but don't make me scared
  4. me in the next section…
]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+ + <![CDATA[2nd week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/2nd-week + + 2022-12-25T23:15:00.000Z + + Let's go through the second week of Advent of Code in Rust.

Day 8: Treetop Tree House

tl;dr

We get a forest and we want to know how many trees are visible from the outside. +Apart from that we want to find the best view.

Nothing interesting. We are moving around 2D map though. And indexing can get a +bit painful when doing so, let's refactor it a bit ;) During the preparation for +the AoC, I have written Vector2D and now it's time to extend it with indexing +of Vec of Vecs. In my solution I was manipulating with indices in the following +way:

  • swapping them
  • checking whether they are correct indices for the Vec<Vec<T>>
  • indexing Vec<Vec<T>> with them
caution

I'm getting familiar with Rust and starting to “abuse” it… While doing so, I'm +also uncovering some “features” that I don't really like. Therefore I will mark +all of my rants with thicc «↯» mark and will try to “lock” them into their +own “box of hell”.

Swapping indices

Relatively simple implementation, just take the values, swap them and return new +vector.

impl<T: Copy> Vector2D<T> {
pub fn swap(&self) -> Self {
Self {
x: self.y,
y: self.x,
}
}
}

Pretty straight-forward implementation, but let's talk about the T: Copy. We +need to use it, since we are returning a new vector, with swapped values. +If we had values that cannot be copied, the only thing we could do, would be a +vector of references (and it would also introduce a lifetime, to which we'll get +later on). This is pretty similar with the operations on sets from the first week.

Indexing Vec

I will start with the indexing, cause bound-checking is a bit more… complicated +than I would like to.

pub fn index<'a, T, U>(v: &'a [Vec<U>], idx: &Vector2D<T>) -> &'a U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Let's talk about this mess… Body of the function is probably the most easy part +and should not be hard to understand, we just take the x and y and convert +them both to usize type that can be used later on for indexing.

The type signature of the function is where the fun is at 😉 We are trying +to convert unknown type to usize, so we must bound the T as a type that can +be converted to usize, that's how we got usize: TryFrom<T> which basically +says that usize must implement TryFrom<T> trait and therefore allows us to +convert the indices to actual usize indices. Using .unwrap() also forces us +to bound the error that can occur when converting T into usize, that's how +we get <usize as TryFrom<T>>::Error: Debug which loosely means

error during conversion of T into usize must implement Debug, +i.e. can be printed in some way or other

T: Copy is required by .try_into() which takes T by-value.

And now we are left only with the first line of the definition.

note

Skilled Rustaceans might notice that this implementation is rather flaky and can +break in multiple places at once. I'll get back to it…

Let's split it in multiple parts:

  • v: &'a [Vec<U>] represents the 2D Vec, we are indexing, Vec implements +Slice trait and clippy recommends using &[T] to &Vec<T>, exact details +are unknown to me
  • idx: &Vector2D<T> represents the indices which we use, we take them by +reference to avoid an unnecessary copy
  • -> &'a U means that we are returning a reference to some value of type U. +Now the question is what does the 'a mean, we can also see it as a generic +type declared along T and U. And the answer is relatively simple, 'a +represents a lifetime. We take the v by a reference and return a reference, +borrow checker validates all of the borrows (or references), so we need to +specify that our returned value has the same lifetime as the vector we have +taken by a reference, i.e. returned reference must live at least as long as the +v. This way we can “be sure” that the returned reference is valid.
Issues

First issue that our implementation has is the fact that we cannot get a mutable +reference out of that function. This could be easily resolved by introducing new +function, e.g. index_mut. Which I have actually done while writing this part:

pub fn index_mut<'a, T, U>(v: &'a mut [Vec<U>], idx: &Vector2D<T>) -> &'a mut U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&mut v[y][x]
}
«↯» Why can't we use one function?

When we consider a Vec<T>, we don't need to consider containers as T, Rust +implements indexing as traits Index<T> and IndexMut<T> that do the dirty work +behind syntactic sugar of container[idx].

However, implementing of traits is not allowed for external types, i.e. types +that you haven't defined yourself. This means that you can implement indexing +over containers that you have implemented yourself, but you cannot use your own +types for indexing “built-in” types.

Another part of this rabbit hole is trait SliceIndex<T> that is of a relevance +because of

impl<T, I> Index<I> for [T]
where
I: SliceIndex<[T]>

impl<T, I, A> Index<I> for Vec<T, A>
where
I: SliceIndex<[T]>,
A: Allocator

impl<T, I, const N: usize> Index<I> for [T; N]
where
[T]: Index<I>

In other words, if your type implements SliceIndex<T> trait, it can be used +for indexing. As of now, this trait has all of its required methods experimental +and is marked as unsafe.

Another problem is a requirement for indexing either [Vec<T>] or Vec<Vec<T>>. +This requirement could be countered by removing inner type Vec<T> and constraining +it by a trait Index (or IndexMut respectively) in a following way

pub fn index<'a, C, T>(v: &'a [C], idx: &Vector2D<T>) -> &'a C::Output
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
C: Index<usize>
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Given this, we can also give a more meaningful typename for indexing type, such +as I.

Checking bounds

Now we can get to the boundary checks, it is very similar, but a more… dirty. +First approach that came up was to convert the indices in Vector2D to usize, +but when you add the indices up, e.g. when checking the neighbors, you can end +up with negative values which, unlike in C++, causes an error (instead of underflow +that you can use to your advantage; you can easily guess how).

So how can we approach this then? Well… we will convert the bounds instead of +the indices and that lead us to:

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
usize: TryInto<T>,
<usize as TryInto<T>>::Error: Debug,
T: PartialOrd + Copy,
{
idx.y >= 0.try_into().unwrap()
&& idx.y < v.len().try_into().unwrap()
&& idx.x >= 0.try_into().unwrap()
&& idx.x
< v[TryInto::<usize>::try_into(idx.y).unwrap()]
.len()
.try_into()
.unwrap()
}

You can tell that it's definitely a shitty code. Let's improve it now! We will +get back to the original idea, but do it better. We know that we cannot convert +negative values into usize, but we also know that conversion like that +returns a Result<T, E> which we can use to our advantage.

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
T: Copy,
usize: TryFrom<T>,
{
usize::try_from(idx.y)
.and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))
.unwrap_or(false)
}

Result<T, E> is a type similar to Either in Haskell and it allows us to chain +multiple operations on correct results or propagate the original error without +doing anything. Let's dissect it one-by-one.

try_from is a method implemented in TryFrom trait, that allows you to convert +types and either successfully convert them or fail (with a reasonable error). This +method returns Result<T, E>.

We call and_then on that result, let's have a look at the type signature of +and_then, IMO it explains more than enough:

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> Result<U, E>

OK… So it takes the result and a function and returns another result with +different value and different error. However we can see that the function, which +represents an operation on a result, takes just the value, i.e. it doesn't care +about any previous error. To make it short:

and_then allows us to run an operation, which can fail, on the correct result

We parsed a y index and now we try to convert the x index with try_from +again, but on that result we use map rather than and_then, why would that be?

pub fn map<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> U

Huh… map performs an operation that cannot fail. And finally we use +unwrap_or which takes the value from result, or in case of an error returns the +default that we define.

How does this work then? If y is negative, the conversion fails and the error +propagates all the way to unwrap_or, if y can be a correct usize value, then +we do the same with x. If x is negative, we propagate the error as with y, +and if it's not, then we check whether it exceeds the higher bounds or not.

Solution

Relatively simple, you just need follow the rules and not get too smart, otherwise +it will get back at you.

Day 9: Rope Bridge

tl;dr

We get a rope with knots and we want to track how many different positions are +visited with the rope's tail.

By this day, I have come to a conclusion that current skeleton for each day +generates a lot of boilerplate. And even though it can be easily copied, it's +just a waste of space and unnecessary code. Let's “simplify” this (on one end +while creating monster on the other end). I've gone through what we need in the +preparations for the AoC. Let's sum up our requirements:

  • parsing
  • part 1 & 2
  • running on sample / input
  • tests

Parsing and implementation of both parts is code that changes each day and we +cannot do anything about it. However running and testing can be simplified!

Let's introduce and export a new module solution that will take care of all of +this. We will start by introducing a trait for each day.

pub trait Solution<Input, Output: Display> {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;

fn part_1(input: &Input) -> Output;
fn part_2(input: &Input) -> Output;
}

This does a lot of work for us already, we have defined a trait and for each day +we will create a structure representing a specific day. That structure will also +implement the Solution trait.

Now we need to get rid of the boilerplate, we can't get rid of the main function, +but we can at least move out the functionality.

fn run(type_of_input: &str) -> Result<()>
where
Self: Sized,
{
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = Self::parse_input(format!("{}s/{}.txt", type_of_input, Self::day()));

info!("Part 1: {}", Self::part_1(&input));
info!("Part 2: {}", Self::part_2(&input));

Ok(())
}

fn main() -> Result<()>
where
Self: Sized,
{
Self::run("input")
}

This is all part of the Solution trait, which can implement methods while being +dependent on what is provided by the implementing types. In this case, we just +need to bound the Output type to implement Display that is necessary for the +info! and format string there.

Now we can get to first of the nasty things we are going to do… And it is the +day() method that you can see being used when constructing path to the input +file. That method will generate a name of the file, e.g. day01 and we know that +we can somehow deduce it from the structure name, given we name it reasonably.

fn day() -> String {
let mut day = String::from(type_name::<Self>().split("::").next().unwrap());
day.make_ascii_lowercase();

day.to_string()
}
type_name

This feature is still experimental and considered to be internal, it is not +advised to use it any production code.

And now we can get to the nastiest stuff 😩 We will generate the tests!

We want to be able to generate tests for sample input in a following way:

test_sample!(day_01, Day01, 42, 69);

There's not much we can do, so we will write a macro to generate the tests for us.

#[macro_export]
macro_rules! test_sample {
($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {
#[cfg(test)]
mod $mod_name {
use super::*;

#[test]
fn test_part_1() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_1(&sample), $part_1);
}

#[test]
fn test_part_2() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_2(&sample), $part_2);
}
}
};
}

We have used it in a similar way as macros in C/C++, one of the things that we +can use to our advantage is defining “type” of the parameters for the macro. All +parameters have their name prefixed with $ sign and you can define various “forms” +of your macro. Let's go through it!

We have following parameters:

  • $mod_name which represents the name for the module with tests, it is typed +with ident which means that we want a valid identifier to be passed in.
  • $day_struct represents the structure that will be used for tests, it is typed +with tt which represents a token tree, in our case it is a type.
  • $part_X represents the expected output for the Xth part and is of type expr +which literally means an expression.

Apart from that we need to use #[macro_export] to mark the macro as exported +for usage outside of the module. Now our skeleton looks like:

use aoc_2022::*;

type Input = String;
type Output = String;

struct DayXX;
impl Solution<Input, Output> for DayXX {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
file_to_string(pathname)
}

fn part_1(input: &Input) -> Output {
todo!()
}

fn part_2(input: &Input) -> Output {
todo!()
}
}

fn main() -> Result<()> {
// DayXX::run("sample")
DayXX::main()
}

// test_sample!(day_XX, DayXX, , );

Solution

Not much to talk about, it is relatively easy to simulate.

Day 10: Cathode-Ray Tube

tl;dr

Emulating basic arithmetic operations on a CPU and drawing on CRT based on the +CPU's accumulator.

In this day I have discovered an issue with my design of the Solution trait. +And the issue is caused by different types of Output for the part 1 and part 2.

Problem is relatively simple and consists of simulating a CPU, I have approached +it in a following way:

fn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {
instructions
.iter()
.fold(State::new(), |state, instruction| {
state.execute(instruction, &mut out)
});

out
}

We just take the instructions, we have some state of the CPU and we execute the +instructions one-by-one. Perfect usage of the fold (or reduce as you may know +it from other languages).

You can also see that we have an Output type, so the question is how can we fix +that problem. And the answer is very simple and functional. Rust allows you to +have an enumeration that can bear some other values apart from the type itself.

tip

We could've seen something like this with the Result<T, E> type that can be +defined as

enum Result<T, E> {
Ok(T),
Err(E)
}
What does that mean though?

When we have an Ok value, it has the result itself, and when we get an Err +value, it has the error. This also allows us to handle results in a rather +pretty way:

match do_something(x) {
Ok(y) => {
println!("SUCCESS: {}", y);
},
Err(y) => {
eprintln!("ERROR: {}", y);
}
}

My solution has a following outline:

fn execute(&self, i: &Instruction, output: &mut Output) -> State {
// execute the instruction

// collect results if necessary
match output {
Output::Part1(x) => self.execute_part_1(y, x),
Output::Part2(x) => self.execute_part_2(y, x),
}

// return the obtained state
new_state
}

You might think that it's a perfectly reasonable thing to do. Yes, but notice +that the match statement doesn't collect the changes in any way and also we +pass output by &mut, so it is shared across each iteration of the fold.

The dirty and ingenious thing is that xs are passed by &mut too and therefore +they are directly modified by the helper functions. To sum it up and let it sit

We are collecting the result into an enumeration that is shared +across all iterations of fold.

Solution

Similar to Day 9, but there are some technical details that can get you.

Day 11: Monkey in the Middle

tl;dr

Simulation of monkeys throwing stuff around and measuring your stress levels +while your stuff is being passed around.

I think I decided to use regular expressions here for the first time, cause +parsing the input was a pain.

Also I didn't expect to implement Euclidean algorithm in Rust…

Solution

Again, we're just running a simulation. Though I must admit it was very easy to +make a small technical mistakes that could affect the final results very late.

Day 12: Hill Climbing Algorithm

tl;dr

Finding shortest path up the hill and also shortest path down to the ground while +also rolling down the hill…

As I have said in the tl;dr, we are looking for the shortest path, but the start +and goal differ for the part 1 and 2. So I have decided to refactor my solution +to a BFS algorithm that takes necessary parameters via functions:

fn bfs<F, G>(
graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G
) -> Option<usize>
where
F: Fn(&[Vec<char>], &Position, &Position) -> bool,
G: Fn(&[Vec<char>], &Position) -> bool

We pass the initial vertex from the caller and everything else is left to the BFS +algorithm, based on the has_edge and is_target functions.

This was easy! And that is not very usual in Rust once you want to pass around +functions. 👀

Solution

Looking for the shortest path… Must be Dijkstra, right? Nope! Half of the +Reddit got jebaited though. In all fairness, nothing stops you from implementing +the Dijkstra's algorithm for finding the shortest path, but if you know that +all connected vertices are in a unit (actually d=1d = 1) distance from each other, +then you know that running Dijkstra is equivalent to running BFS, only with worse +time complexity, because of the priority heap instead of the queue.

Day 13: Distress Signal

tl;dr

Processing packets with structured data from the distress signal.

You can implement a lot of traits if you want to. It is imperative to implement +ordering on the packets. I had a typo, so I also proceeded to implement a Display +trait for debugging purposes:

impl Display for Packet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Packet::Integer(x) => write!(f, "{x}"),
Packet::List(lst) => write!(f, "[{}]", lst.iter().map(|p| format!("{p}")).join(",")),
}
}
}

Solution

A lot of technical details… Parsing is nasty too…

Day 14: Regolith Reservoir

tl;dr

Let's simulate falling sand grain-by-grain.

Again, both parts are relatively similar with minimal changes, so it is a good +idea to refactor it a bit. Similar approach to the BFS above. Also this is the +first day where I ran into efficiency issues and had to redo my solution to speed +it up just a bit.

Solution

Tedious.

Post Mortem

Indexing

I was asked about the indexing after publishing the blog. And truly it is rather +complicated topic, especially after releasing SliceIndex<I> trait. I couldn't +leave it be, so I tried to implement the Index and IndexMut trait.

note

I have also mentioned that the SliceIndex trait is unsafe, but truth be told, +only unsafe part are the 2 methods that are named *unchecked*. Anyways, I will +be implementing the Index* traits for now, rather than the SliceIndex.

It's relatively straightforward…

impl<I, C> Index<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}

We can see a lot of similarities to the implementation of index and index_mut +functions. In the end, they are 1:1, just wrapped in the trait that provides a +syntax sugar for container[idx].

note

I have also switched from using the TryFrom to TryInto trait, since it better +matches what we are using, the .try_into rather than usize::try_from.

Also implementing TryFrom automatically provides you with a TryInto trait, +since it is relatively easy to implement. Just compare the following:

pub trait TryFrom<T>: Sized {
type Error;

fn try_from(value: T) -> Result<Self, Self::Error>;
}

pub trait TryInto<T>: Sized {
type Error;

fn try_into(self) -> Result<T, Self::Error>;
}

OK, so we have our trait implemented, we should be able to use container[index], +right? Yes… but actually no 😦

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:26:18
|
26 | if trees[pos] > tallest {
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:30:28
|
30 | max(tallest, trees[pos])
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`
--> src/bin/day08.rs:52:28
|
52 | let max_height = trees[position];
| ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`

Why? We have it implemented for the slices ([C]), why doesn't it work? Well, +the fun part consists of the fact that in other place, where we were using it, +we were passing the &[Vec<T>], but this is coming from a helper functions that +take &Vec<Vec<T>> instead. And… we don't implement Index and IndexMut for +those. Just for the slices. 🤯 What are we going to do about it?

We can either start copy-pasting or be smarter about it… I choose to be smarter, +so let's implement a macro! The only difference across the implementations are +the types of the outer containers. Implementation doesn't differ at all!

Implementing the macro can be done in a following way:

macro_rules! generate_indices {
($container:ty) => {
impl<I, C> Index<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}
};
}

And now we can simply do

generate_indices!(VecDeque<C>);
generate_indices!([C]);
generate_indices!(Vec<C>);
// generate_indices!([C; N], const N: usize);

The last type (I took the inspiration from the implementations of the Index and +IndexMut traits) is a bit problematic, because of the const N: usize part, +which I haven't managed to be able to parse. And that's how I got rid of the error.

note

If I were to use 2D-indexing over [C; N] slices, I'd probably just go with the +copy-paste, cause the cost of this “monstrosity” outweighs the benefits of no DRY.

Cause of the problem

This issue is relatively funny. If you don't use any type aliases, just the raw +types, you'll get suggested certain changes by the clippy. For example if you +consider the following piece of code

fn get_sum(nums: &Vec<i32>) -> i32 {
nums.iter().sum()
}

fn main() {
let nums = vec![1, 2, 3];
println!("Sum: {}", get_sum(&nums));
}

and you run clippy on it, you will get

Checking playground v0.0.1 (/playground)
warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
--> src/main.rs:1:18
|
1 | fn get_sum(nums: &Vec<i32>) -> i32 {
| ^^^^^^^^^ help: change this to: `&[i32]`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg
= note: `#[warn(clippy::ptr_arg)]` on by default

warning: `playground` (bin "playground") generated 1 warning
Finished dev [unoptimized + debuginfo] target(s) in 0.61s

However, if you introduce a type alias, such as

type Numbers = Vec<i32>;

Then clippy won't say anything, cause there is literally nothing to suggest. +However the outcome is not the same…

]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+ + <![CDATA[1st week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/1st-week + + 2022-12-15T01:15:00.000Z + + Let's go through the first week of Advent of Code in Rust.

note

If you wish to have a look at the solutions, you can follow them on my GitLab. +More specifically in the /src/bin/.

I will try to summarize my experience with using Rust for the AoC. Trying it out +ages ago, I believe it will be pain and suffering, but we will see. For each +day I will also try to give a tl;dr of the problem, so that you can better imagine +the relation to my woes or 👍 moments.

Day 1: Calorie Counting

tl;dr

As the name suggests, we get the calories of the food contained in the elves +backpacks and we want to choose the elf that has the most food ;)

Wakey wakey!

Programming in Rust at 6am definitely hits. I've also forgotten to mention how I +handle samples. With each puzzle you usually get a sample input and expected +output. You can use them to verify that your solution works, or usually doesn't.

At first I've decided to put asserts into my main, something like

assert_eq!(part_1(&sample), 24000);
info!("Part 1: {}", part_1(&input));

assert_eq!(part_2(&sample), 45000);
info!("Part 2: {}", part_2(&input));

However, once you get further, the sample input may take some time to run itself. +So in the end, I have decided to turn them into unit tests:

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_part_1() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_1(&sample), 24000);
}

#[test]
fn test_part_2() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_2(&sample), 45000);
}
}

And later on I have noticed, it's hard to tell the difference between the days, +so I further renamed the mod from generic tests to reflect the days.

Also after finishing the first day puzzle, I have installed an sccache to +cache the builds, so that the build time is lower, cause it was kinda unbearable.

Solution

Well, it's a pretty simple problem. You just take the input, sum the calories and +find the biggest one. However, if we try to generalize to more than the biggest +one, the fun appears. We have few options:

  • keep all the calories, sort them, take what we need
  • keep all the calories and use max heap
  • use min heap and maintain at most N calories that we need

Day 2: Rock Paper Scissors

tl;dr

You want to know what score did you achieve while playing Rock Paper Scissors. +And then you want to be strategic about it.

Apart from the technical details of the puzzle, it went relatively smooth.

Solution

I took relatively naïve approach and then tried to simplify it.

Day 3: Rucksack Reorganization

tl;dr

Let's go reorganize elves' backpacks! Each backpacks has 2 compartments and you +want to find the common item among those compartments. Each of them has priority, +you care only about the sum.

This is the day where I started to fight the compiler and neither of us decided +to give up. Let's dive into it \o/

Fun fact

Fighting the compiler took me 30 minutes.

We need to find a common item among 2 collections, that's an easy task, right? +We can construct 2 sets and find an intersection:

let top: HashSet<i32> = [1, 2, 3].iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].iter().collect();

Now, the first issue that we encounter is caused by the fact that we are using +a slice (the […]), iterator of that returns references to the numbers. +And we get immediately yelled at by the compiler, because the numbers are discarded +after running the .collect. To fix this, we can use .into_iter:

let top: HashSet<i32> = [1, 2, 3].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();

This way the numbers will get copied instead of referenced. OK, let's find the +intersection of those 2 collections:

println!("Common elements: {:?}", top.intersection(&bottom));
Common elements: [3]
caution

Notice that we need to do &bottom. It explicitly specifies that .intersection +borrows the bottom, i.e. takes an immutable reference to it.

That's what we want, right? Looks like it! \o/

Next part wants us to find the common element among all of the backpacks. OK, so +that should be fairly easy, we have an intersection and we want to find intersection +over all of them.

Let's have a look at the type of the .intersection

pub fn intersection<'a>(
    &'a self,
    other: &'a HashSet<T, S>
) -> Intersection<'a, T, S>

OK… Huh… But we have an example there!

let intersection: HashSet<_> = a.intersection(&b).collect();

Cool, that's all we need.

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
println!("Intersection: {:?}", intersection);
Intersection: {3, 4}

Cool, so let's do the intersection with the top_2:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
println!("Intersection: {:?}", intersection);

And we get yelled at by the compiler:

error[E0308]: mismatched types
--> src/main.rs:10:58
|
10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
| ------------ ^^^^^^ expected `&i32`, found `i32`
| |
| arguments to this function are incorrect
|
= note: expected reference `&HashSet<&i32>`
found reference `&HashSet<i32>`

/o\ What the hell is going on here? Well, the funny thing is, that this operation +doesn't return the elements themselves, but the references to them and when we pass +the third set, it has just the values themselves, without any references.

tip

It may seem as a very weird decision, but in fact it makes some sense… It allows +you to do intersection of items that may not be possible to copy. Overall this is +a “tax” for having a borrow checker drilling your ass having your back and +making sure you're not doing something naughty that may cause an undefined +behavior.

To resolve this we need to get an iterator that clones the elements:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();
println!("Intersection: {:?}", intersection);
Intersection: {4}

Solution

The approach is pretty simple, if you omit the 1on1 with the compiler. You just +have some fun with the set operations :)

Day 4: Camp Cleanup

tl;dr

Elves are cleaning up the camp and they got overlapping sections to clean up. +Find how many overlap and can take the day off.

RangeInclusive is your friend not an enemy :)

Solution

Relatively easy, you just need to parse the input and know what you want. Rust's +RangeInclusive type helped a lot, cause it took care of all abstractions.

Day 5: Supply Stacks

tl;dr

Let's play with stacks of crates.

Very easy problem with very annoying input. You can judge yourself:

    [D]    
[N] [C]
[Z] [M] [P]
1 2 3

move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

Good luck transforming that into something reasonable :)

Fun fact

Took me 40 minutes to parse this reasonably, including fighting the compiler.

Solution

For the initial solution I went with a manual solution (as in I have done all +the work. Later on I have decided to explore the std and interface of the +std::vec::Vec and found split_off which takes an index and splits (duh) +the vector:

let mut vec = vec![1, 2, 3];
let vec2 = vec.split_off(1);
assert_eq!(vec, [1]);
assert_eq!(vec2, [2, 3]);

This helped me simplify my solution a lot and also get rid of some edge cases.

Day 6: Tuning Trouble

tl;dr

Finding start of the message in a very weird protocol. Start of the message is +denoted by NN unique consecutive characters.

Solution

A lot of different approaches, knowing that we are dealing with input consisting +solely of ASCII letters, I bit the bullet and went with sliding window and +constructing sets from that window, checking if the set is as big as the window.

One possible optimization could consist of keeping a bit-vector (i.e. usize +variable) of encountered characters and updating it as we go. However this has +a different issue and that is removal of the characters from the left side of the +window. We don't know if the same character is not included later on.

Other option is to do similar thing, but keeping the frequencies of the letters, +and again knowing we have only ASCII letters we can optimize by having a vector +of 26 elements that keeps count for each lowercase letter.

Day 7: No Space Left On Device

tl;dr

Let's simulate du to get some stats about our file system and then pinpoint +directories that take a lot of space and should be deleted.

I was waiting for this moment, and yet it got me! +imagine me swearing for hours

Solution

We need to “build” a file system from the input that is given in a following form:

$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

There are few ways in which you can achieve this and also you can assume some +preconditions, but why would we do that, right? :)

You can “slap” this in either HashMap or BTreeMap and call it a day. +And that would be boring…

tip

BTreeMap is quite fitting for this, don't you think?

I always wanted to try allocation on heap in Rust, so I chose to implement a tree. +I fought with the Box<T> for some time and was losing…

Then I looked up some implementations of trees or linked lists and decided to try +Rc<Cell<T>>. And I got my ass whopped by the compiler once again. /o\

tip

Box<T> represents a dynamically allocated memory on heap. It is a single pointer, +you can imagine this as std::unique_ptr<T> in C++.

Rc<T> represents a dynamically allocated memory on heap. On top of that it is +reference counted (that's what the Rc stands for). You can imagine this as +std::shared_ptr<T> in C++.

Now the fun stuff. Neither of them lets you mutate the contents of the memory.

Cell<T> allows you to mutate the memory. Can be used reasonably with types that +can be copied, because the memory safety is guaranteed by copying the contents +when there is more than one mutable reference to the memory.

RefCell<T> is similar to the Cell<T>, but the borrowing rules (how many mutable +references are present) are checked dynamically.

So in the end, if you want something like std::shared_ptr<T> in Rust, you want +to have Rc<RefCell<T>>.

So, how are we going to represent the file system then? We will use an enumeration, +hehe, which is an algebraic data type that can store some stuff in itself 😩

type FileHandle = Rc<RefCell<AocFile>>;

#[derive(Debug)]
enum AocFile {
File(usize),
Directory(BTreeMap<String, FileHandle>),
}

Let's go over it! FileHandle represents dynamically allocated AocFile, not +much to discuss. What does the #[derive(Debug)] do though? It lets us to print +out the value of that enumeration, it's derived, so it's not as good as if we had +implemented it ourselves, but it's good enough for debugging, hence the name.

Now to the fun part! AocFile value can be represented in two ways:

  • File(usize), e.g. AocFile::File(123) and we can pattern match it, if we +need to
  • Directory(BTreeMap<String, FileHandle>) will represent the directory and will +contain map matching the name of the files (or directories) within to their +respective file handles

I will omit the details about constructing this file system, cause there are a lot +of technicalities introduced by the nature of the input. However if you are +interested, you can have a look at my solution.

We need to find small enough directories and also find the smallest directory that +will free enough space. Now the question is, how could we do that. And there are +multiple ways I will describe.

I have chosen to implement tree catamorphism 😩. It is basically a fold +over a tree data structure. We descent down into the leaves and propagate computed +results all the way to the root. You can also notice that this approach is very +similar to dynamic programming, we find overlapping sections of the computation +and try to minimize the additional work (in this case: we need to know sizes of +our descendants, but we have already been there).

Another approach that has been suggested to me few days later is running DFS on +the graph. And, funnily enough, we would still need to combine what we found in +the branches where we descent. So in the end, it would work very similarly to my +solution.

One of the more exotic options would be precomputing the required information at +the same time as parsing. That could be done by adding additional fields to the +nodes which would allow storing such information and updating it as we construct +the file system.

Post Mortem

Things that have been brought up in the discussion later on.

Rc<T> vs Rc<RefCell<T>>

It has been brought up that I have a contradicting statement regarding the +dynamically allocated memory. Specifically:

  • You can imagine Rc<T> as an std::shared_ptr<T> (in C++)
  • When you want an equivalent of std::shared_ptr<T>, you want to use +Rc<RefCell<T>>

Now, in Rust it is a bit more complicated, because the type that represents the +“shared pointer” is Rc<T>. What RefCell<T> does is making sure that there is +only one “owner” of a mutable reference at a time (and dynamically, as opposed +to the Cell<T>).

Therefore to be precise and correct about the equivalents of std::shared_ptr<T> +in Rust, we can say that

  • Rc<T> is an equivalent of a const std::shared_ptr<T>,
  • and Rc<RefCell<T>> is an equivalent of a std::shared_ptr<T>.

You can easily see that they only differ in the mutability. (And even that is not +as simple as it seems, because there is also Cell<T>)

]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+ + <![CDATA[Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/intro + + 2022-12-14T21:45:00.000Z + + Let's talk about the preparations for this year's Advent of Code.

Choosing a language

When choosing a language for AoC, you usually want a language that gives you a +quick feedback which allows you to iterate quickly to the solution of the puzzle. +One of the most common choices is Python, many people also use JavaScript or Ruby.

Given the competitive nature of the AoC and popularity among competitive programming, +C++ might be also a very good choice. Only if you are familiar with it, I guess…

If you want a challenge, you might also choose to rotate the languages each day. +Though I prefer to use only one language.

For this year I have been deciding between Rust, C++ and Pascal or Ada.

I have tried Rust last year and have survived with it for 3 days and then gave +up and switched to Kotlin, which was pretty good given it is “Java undercover”. +I pretty much like the ideas behind Rust, I am not sure about the whole cult and +implementation of those ideas though. After some years with C/C++, I would say +that Rust feels too safe for my taste and tries to “punish me” even for the +most trivial things.

C++ is a very robust, but also comes with a wide variety of options providing you +the ability to shoot yourself in the leg. I have tried to solve few days of previous +Advent of Code events, it was relatively easy to solve the problems in C++, given +that I do not admit writing my own iterator for enumerate

Pascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a +pretty nice standard library that offers enough to be able to quickly solve some +problems in it. However the toolkit is questionable :/

Choosing libraries

Preparations for Rust

All of the sources, later on including solutions, can be found at my +GitLab.

Toolkit

Since we are using Rust, we are going to use a Cargo and more than likely VSCode +with rust-analyzer. Because of my choice of libraries, we will also introduce +a .envrc file that can be used by direnv, which allows you to set specific +environment variables when you enter a directory. In our case, we will use

# to show nice backtrace when using the color-eyre
export RUST_BACKTRACE=1

# to catch logs generated by tracing
export RUST_LOG=trace

And for the one of the most obnoxious things ever, we will use a script to download +the inputs instead of “clicking, opening and copying to a file1. There is +no need to be fancy, so we will adjust Python script by Martin2.

#!/usr/bin/env python3

import datetime
import yaml
import requests
import sys


def load_config():
with open("env.yaml", "r") as f:
js = yaml.load(f, Loader=yaml.Loader)
return js["session"], js["year"]


def get_input(session, year, day):
return requests.get(
f"https://adventofcode.com/{year}/day/{day}/input",
cookies={"session": session},
headers={
"User-Agent": "{repo} by {mail}".format(
repo="gitlab.com/mfocko/advent-of-code-2022",
mail="me@mfocko.xyz",
)
},
).content.decode("utf-8")


def main():
day = datetime.datetime.now().day
if len(sys.argv) == 2:
day = sys.argv[1]

session, year = load_config()
problem_input = get_input(session, year, day)

with open(f"./inputs/day{day:>02}.txt", "w") as f:
f.write(problem_input)


if __name__ == "__main__":
main()

If the script is called without any arguments, it will deduce the day from the +system, so we do not need to change the day every morning. It also requires a +configuration file:

# env.yaml
session: ‹your session cookie›
year: 2022

Libraries

Looking at the list of the libraries, I have chosen “a lot” of them. Let's walk +through each of them.

tracing and tracing-subscriber are the crates that can be used for tracing +and logging of your Rust programs, there are also other crates that can help you +with providing backtrace to the Sentry in case you have deployed your application +somewhere and you want to watch over it. In our use case we will just utilize the +macros for debugging in the terminal.

thiserror, anyhow and color-eyre are used for error reporting. +thiserror is a very good choice for libraries, cause it extends the Error +from the std and allows you to create more convenient error types. Next is +anyhow which kinda builds on top of the thiserror and provides you with simpler +error handling in binaries3. And finally we have color-eyre which, as I found +out later, is a colorful (wink wink) extension of eyre which is fork of anyhow +while supporting customized reports.

In the end I have decided to remove thiserror and anyhow, since first one is +suitable for libraries and the latter was basically fully replaced by {color-,}eyre.

regex and lazy_static are a very good and also, I hope, self-explanatory +combination. lazy_static allows you to have static variables that must be initialized +during runtime.

itertools provides some nice extensions to the iterators from the std.

My own “library”

When creating the crate for this year's Advent of Code, I have chosen a library +type. Even though standard library is huge, some things might not be included and +also we can follow KISS. I have 2 modules that my “library” exports, one for +parsing and one for 2D vector (that gets used quite often during Advent of Code).

Key part is, of course, processing the input and my library exports following +functions that get used a lot:

/// Reads file to the string.
pub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;

/// Reads file and returns it as a vector of characters.
pub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;

/// Reads file and returns a vector of parsed structures. Expects each structure
/// on its own line in the file. And `T` needs to implement `FromStr` trait.
pub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>
where
<T as FromStr>::Err: Debug;

/// Converts iterator over strings to a vector of parsed structures. `T` needs
/// to implement `FromStr` trait and its error must derive `Debug` trait.
pub fn strings_to_structs<T: FromStr, U>(
iter: impl Iterator<Item = U>
) -> Vec<T>
where
<T as std::str::FromStr>::Err: std::fmt::Debug,
U: Deref<Target = str>;

/// Reads file and returns it as a vector of its lines.
pub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;

As for the vector, I went with a rather simple implementation that allows only +addition of the vectors for now and accessing the elements via functions x() +and y(). Also the vector is generic, so we can use it with any numeric type we +need.

Skeleton

We can also prepare a template to quickly bootstrap each of the days. We know +that each puzzle has 2 parts, which means that we can start with 2 functions that +will solve them.

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

Both functions take reference to the input and return some output (in majority +of puzzles, it is the same type). todo!() can be used as a nice placeholder, +it also causes a panic when reached and we could also provide some string with +an explanation, e.g. todo!("part 1"). We have not given functions a specific +type and to avoid as much copy-paste as possible, we will introduce type aliases.

type Input = String;
type Output = i32;
tip

This allows us to quickly adjust the types only in one place without the need to +do regex-replace or replace them manually.

For each day we get a personalized input that is provided as a text file. Almost +all the time, we would like to get some structured type out of that input, and +therefore it makes sense to introduce a new function that will provide the parsing +of the input.

fn parse_input(path: &str) -> Input {
todo!()
}

This “parser” will take a path to the file, just in case we would like to run the +sample instead of input.

OK, so now we can write a main function that will take all of the pieces and +run them.

fn main() {
let input = parse_input("inputs/dayXX.txt");

println!("Part 1: {}", part_1(&input));
println!("Part 2: {}", part_2(&input));
}

This would definitely do :) But we have installed a few libraries and we want to +use them. In this part we are going to utilize tracing (for tracing, duh…) +and color-eyre (for better error reporting, e.g. from parsing).

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

The first statement will set up tracing and configure it to print out the logs to +terminal, based on the environment variable. We also change the formatting a bit, +since we do not need all the fancy features of the logger. Pure initialization +would get us logs like this:

2022-12-11T19:53:19.975343Z  INFO day01: Part 1: 0

However after running that command, we will get the following:

 INFO src/bin/day01.rs:35: Part 1: 0

And the color_eyre::install()? is quite straightforward. We just initialize the +error reporting by color eyre.

caution

Notice that we had to add Ok(()) to the end of the function and adjust the +return type of the main to Result<()>. It is caused by the color eyre that +can be installed only once and therefore it can fail, that is how we got the ? +at the end of the ::install which unwraps the »result« of the installation.

Overall we will get to a template like this:

use aoc_2022::*;

use color_eyre::eyre::Result;
use tracing::info;
use tracing_subscriber::EnvFilter;

type Input = String;
type Output = i32;

fn parse_input(path: &str) -> Input {
todo!()
}

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

  1. Copy-pasting might be a relaxing thing to do, but you can also discover +nasty stuff about your PC. See this Reddit post and the comment.
  2. GitHub profile
  3. Even though you can use it even for libraries, but handling errors from +libraries using anyhow is nasty… You will be the stinky one ;)
]]>
+ + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + +
+
\ No newline at end of file diff --git a/blog/feed.json b/blog/feed.json new file mode 100644 index 0000000..3dda5a8 --- /dev/null +++ b/blog/feed.json @@ -0,0 +1,129 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "mf Blog", + "home_page_url": "https://blog.mfocko.xyz/blog", + "description": "mf's blog", + "items": [ + { + "id": "https://blog.mfocko.xyz/blog/2023/08/02/copr", + "content_html": "

When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories…

When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without\nthinking. I bet 99% of people would say that I'm crazy for doing such thing2,\nBUT I've been using Fedora on my PCs for some time already and it felt very\nstable and natural to just use, even for VPS.

One of the first things I've done was setting up a mail server. You may guess\nwhat's the fun part about having a mail server… Yes, it's all the spam you\nreceive and only then you realize how much “crap” gets filtered on free mail\nservices. To battle this problem I chose to use\nrspamd that had CentOS support, but someone\nhad a Copr repository that I used to\ninstall it.

How does Copr repositories work?

If you have ever used Ubuntu, you might be familiar with the concept since it is\nvery close to PPAs.

tl;dr of the whole process consists of

  1. enabling the Copr repository, and
  2. installing the desired package.

So in shell you would do

# dnf copr enable ‹copr-repository›
# dnf install ‹package-from-the-repository›

And… that's it! Nothing else needed! Simple, right? And literally same process\nas you would do for the PPA.

AUR

On the other hand, if you are familiar with the archLinux, you definitely know\nAUR and what it can do for you. Copr repository is pretty similar, but the\npackages are prebuilt in Copr and Copr repositories can carry the required\ndependencies for said packages, which simplifies the distribution, and can even\nhelp with installing singular packages (when you just need the dependency, not\neverything).

My issue

Now you might wonder how would I use it on my VPS. It's rather simple, once in\n6 months a new Fedora release comes out. And you need to upgrade to newer\nrelease… You don't need to do it right away and for such setup it probably isn't\neven recommended.

tip

Fedora releases are supported for a year, i.e. they live 6 months till the next\nrelease and then another 6 months till another release.

Some people prefer to run one version “behind”. If you ever decide to run it on\nyour home server or in a similar setup, it might be a pretty good idea to\nfollow. I'm using the “latest greatest”, cause why not 😄

One way or another, you still need to bump the release every six months, unless\nyou'd bump 2 releases at once every year, which would be a decision, since, at\nleast I, cannot see any benefits in it… You don't go for “stability”, cause once\na year you switch to the latest release and then, before you bump, you use one\nyear old software, so you're not even using the latest.

Fast-forward 2 years in the future, new Fedora release came out (October '22)\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\nupgrade, but can either ignore the dependencies or uninstall the rspamd…

How can Copr help?

I have managed to find\nspecfile for the\nrspamd package that they use for CentOS. There were some files apart from the\nspecfile, so I had to make an SRPM locally and then… I just uploaded the SRPM\nto the Copr to\nbuild\nan RPM.

I have switched the previous Copr repository for rspamd with my own and happily\nproceeded with the upgrade.

Conclusion

Copr is heavily used for testing builds on the upstream with\nPackit. However, as you can see, it is possible to use it\nvery well for packaging your own stuff and avoiding issues (such as the one\nI have described above), if need be.


  1. vpsFree.cz
  2. Even though I've been running archLinux on some Raspberry Pi's and also\non one of my “home servers”, before getting the VPS. You could say I like\nto live on the edge…
", + "url": "https://blog.mfocko.xyz/blog/2023/08/02/copr", + "title": "How can Copr help with broken dependencies", + "summary": "Copr comes to save you when maintainer doesn't care.", + "date_modified": "2023-08-02T00:00:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "🏭", + "red-hat", + "copr", + "admin", + "vps" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/aoc-2022/4th-week", + "content_html": "

Let's go through the fourth week of Advent of Code in Rust.

Day 22: Monkey Map

tl;dr

Simulating a movement on a 2D map with given instructions. Map becomes a cube in\nthe 2nd part…

Rant

This was the most obnoxious problem of this year… and a lot of Rust issues have\nbeen hit.

Solution

It seems like a very simple problem to solve, but with very obnoxious changes in\nthe 2nd part and also it's relatively hard to decompose »properly«.

Column iterator

In the first part of the problem it was needed to know the boundaries of each\nrow and column, since I stored them in Vec<Vec<char>> and padded with spaces\nto ensure I have a rectangular 2D “array”. However when you wanted to go through\neach row and column to determine the boundaries, it was very easy to do for the\nrows (cause each row is a Vec element), but not for the columns, since they\nspan multiple rows.

For this use case I have implemented my own column iterator:

pub struct ColumnIterator<'a, T> {
map: &'a [Vec<T>],
column: usize,

i: usize,
}

impl<'a, T> ColumnIterator<'a, T> {
pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
Self { map, column, i: 0 }
}
}

impl<'a, T> Iterator for ColumnIterator<'a, T> {
type Item = &'a T;

fn next(&mut self) -> Option<Self::Item> {
if self.i >= self.map.len() {
return None;
}

self.i += 1;
Some(&self.map[self.i - 1][self.column])
}
}

Given this piece of an iterator, it is very easy to factor out the common\nfunctionality between the rows and columns into:

let mut find_boundaries = |constructor: fn(usize) -> Orientation,
iterator: &mut dyn Iterator<Item = &char>,
upper_bound,
i| {
let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
let start = first_non_empty.next().unwrap().0 as isize;

let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

boundaries.insert(constructor(i), start..end);
};

And then use it as such:

// construct all horizontal boundaries
(0..map.len()).for_each(|row| {
find_boundaries(
Orientation::horizontal,
&mut map[row].iter(),
map[row].len(),
row,
);
});

// construct all vertical boundaries
(0..map[0].len()).for_each(|col| {
find_boundaries(
Orientation::vertical,
&mut ColumnIterator::new(&map, col),
map.len(),
col,
);
});

Walking around the map

Once the 2nd part got introduced, you start to think about a way how not to\ncopy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've\nchosen to introduce a trait (i.e. interface) for 2D and 3D walker.

trait Wrap: Clone {
type State;

// simulation
fn is_blocked(&self) -> bool;
fn step(&mut self, steps: isize);
fn turn_left(&mut self);
fn turn_right(&mut self);

// movement
fn next(&self) -> (Self::State, Direction);

// final answer
fn answer(&self) -> Output;
}

Each walker maintains its own state and also provides the functions that are\nused during the simulation. The “promised” methods are separated into:

  • simulation-related: that are used during the simulation from the .fold()
  • movement-related: just a one method that holds most of the logic differences\nbetween 2D and 3D
  • final answer: which extracts the proof of solution from the\nimplementation-specific walker

Both 2D and 3D versions borrow the original input and therefore you must\nannotate the lifetime of it:

struct Wrap2D<'a> {
input: &'a Input,
position: Position,
direction: Direction,
}
impl<'a> Wrap2D<'a> {
fn new(input: &'a Input) -> Wrap2D<'a> {
// …

Problems

I have used a lot of closures for this problem and once I introduced a parameter\nthat was of unknown type (apart from the fact it implements a specific trait), I\ngot suggested a “fix” for the compilation error that resulted in something that\nwas not possible to parse, cause it, more than likely, violated the grammar.

In a similar fashion, I have been suggested changes that led to a code that\ndidn't make sense by just looking at it (there was no need to try the changes),\nfor example one suggested change in the closure parameter caused disapperance of\nthe parameter name. 😄

Clippy

I have to admit that Clippy was rather helpful here, I'll include two examples\nof rather smart suggestions.

When writing the parsing for this problem, the first thing I have spotted on the\nchar was the .is_digit() function that takes a radix as a parameter. Clippy\nnoticed that I use radix = 10 and suggested switching to .is_ascii_digit()\nthat does exactly the same thing:

-                .take_while(|c| c.is_digit(10))
+ .take_while(|c| c.is_ascii_digit())

Another useful suggestion appeared when working with the iterators and I wanted\nto get the nnn-th element from it. You know the .skip(), you know the\n.next(), just “slap” them together and we're done for 😁 Well, I got\nsuggested to use .nth() that does exactly the combination of the two mentioned\nmethods on iterators:

-            match it.clone().skip(skip).next().unwrap() {
+ match it.clone().nth(skip).unwrap() {

Day 23: Unstable Diffusion

tl;dr

Simulating movement of elves around with a set of specific rules.

Solution

There's not much to mention since it's just a cellular automaton simulation\n(even though the AoC rules for cellular automatons usually get out of hand\n😉).

Although I had a need to determine boundaries of the elves' positions and ended\nup with a nasty DRY violation. Knowing that you you're looking for maximum and\nminimum that are, of course, exactly the same except for initial values and\ncomparators, it looks like a rather simple fix, but typing in Rust is something\nelse, right? In the end I settled for a function that computes both boundaries\nwithout any duplication while using a closure:

fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
positions
.iter()
.fold(Vector2D::new(init, init), |acc, elf| {
Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
})
};

(f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
}

This function returns a pair of 2D vectors that represent opposite points of the\nbounding rectangle of all elves.

You might ask why would we need a closure and the answer is that positions\ncannot be captured from within the nested function, only via closure. One more\nfun fact on top of that is the type of the comparator

&dyn Fn(isize, isize) -> isize

Once we remove the dyn keyword, compiler yells at us and also includes a way\nhow to get a more thorough explanation of the error by running

$ rustc --explain E0782

which shows us

Trait objects must include the `dyn` keyword.

Erroneous code example:

```
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
```

Trait objects are a way to call methods on types that are not known until
runtime but conform to some trait.

Trait objects should be formed with `Box<dyn Foo>`, but in the code above
`dyn` is left off.

This makes it harder to see that `arg` is a trait object and not a
simply a heap allocated type called `Foo`.

To fix this issue, add `dyn` before the trait name.

```
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
```

This used to be allowed before edition 2021, but is now an error.
Rant

Not all of the explanations are helpful though, in some cases they might be even\nmore confusing than helpful, since they address very simple use cases.

As you can see, even in this case there are two sides to the explanations:

  • it explains why you need to use dyn, but
  • it still mentions that trait objects need to be heap-allocated via Box<T>\nthat, as you can see in my snippet, does not apply here 😄 IMO it's\ncaused by the fact that we are borrowing it and therefore we don't need to\ncare about the size or whereabouts of it.
C++ parallel

If you dive into the explanation above, you can notice that the Box<dyn Trait>\npattern is very helpful for using types that are not known during compile-time.\nYou would use a very similar approach in C++ when parsing some data structure\nfrom input (let's say JSON for example).

On the other hand, in this case, it doesn't really make much sense, cause you\ncan clearly see that the types are known during the compile-time, which in\nC++ could be easily resolved by templating the helper function.

Day 24: Blizzard Basin

tl;dr

Navigating your way through a basin with series of blizzards that move around\nyou as you move.

caution

It's second to last day and I went “bonkers” on the Rust 😄 Proceed to\nread Solution part on your own risk.

Solution

You are given a map with blizzards all over the place and you're supposed to\nfind the minimum time it requires you to walk through the basin without getting\nin any of the blizzards.

Breakdown

Relatively simple, yet a bit annoying, approach can be taken. It's technically\na shortest-path algorithm implementation with some relaxation restrictions and\nbeing able to stay on one position for some time, so each vertex of the graph\nis determined by the position on the map and the timestamp. I have chosen to\nuse Vector3D<usize>, since x and y attributes can be used for the position\nand, well, let's use z for a timestamp, cause why not, right? 😉

Evaluating the blizzards

caution

I think that this is the most perverted abuse of the traits in the whole 4 weeks\nof AoC in Rust…

The blizzards move along their respective directions in time and loop around in\ntheir respective row/column. Each vertex holds position and time, so we can\njust index the basin with the vertex itself, right? Yes, we can 😈

Fun fact

While writing this part, I've recognized unnecessary verbosity in the code and\ncleaned it up a bit. The changed version is shown here and the original was just\nmore verbose.

I'll skip the boring parts of checking bounds and entry/exit of the basin 😉\nWe can easily calculate positions of the blizzards using a modular arithmetics:

impl Index<Position> for Basin {
type Output = char;

fn index(&self, index: Position) -> &Self::Output {
// ‹skipped boring parts›

// We need to account for the loops of the blizzards
let width = self.cols - 2;
let height = self.rows - 2;

let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
[
(
index.y() as usize,
blizzard_origin(width, -1, index.z(), index.x()),
'>',
),
(
index.y() as usize,
blizzard_origin(width, 1, index.z(), index.x()),
'<',
),
(
blizzard_origin(height, -1, index.z(), index.y()),
index.x() as usize,
'v',
),
(
blizzard_origin(height, 1, index.z(), index.y()),
index.x() as usize,
'^',
),
]
.iter()
.find_map(|&(y, x, direction)| {
if self.map[y][x] == direction {
Some(&self.map[y][x])
} else {
None
}
})
.unwrap_or(&'.')
}
}

As you can see, there is an expression for calculating the original position and\nit's used multiple times, so why not take it out to a lambda, right? 😉

I couldn't get the rustfmt to format the for-loop nicely, so I've just\ndecided to go with iterating over an elements of a slice. I have used, once\nagain, a combination of two functions (find_map in this case) to do 2 things\nat once and at the end, if we haven't found any blizzard, we just return the\nempty space.

I think it's a very nice (and naughty) way how to use the Index trait, don't\nyou think?

Shortest-path algorithm

For the shortest path you can choose and adjust any of the common shortest-path\nalgorithms, in my case, I have decided to use A* instead of Dijkstra's\nalgorithm, since it better reflects the cost function.

Comparison of costs

With the Dijkstra's algorithm I would proceed with the time attribute used as\na priority for the queue.

Whereas with the A*, I have chosen to use both time and Manhattan distance\nthat promotes vertices closer to the exit and with a minimum time taken.

Cost function is, of course, a closure 😉

let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());

And also for checking the possible moves from the current vertex, I have\nimplemented, yet another, closure that yields an iterator with the next moves:

let next_positions = |p| {
[(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
.iter()
.filter_map(move |&(x, y, t)| {
let next_p = p + Vector3D::new(x, y, t);

if basin[next_p] == '.' {
Some(next_p)
} else {
None
}
})
};

Min-heap

In this case I had a need to use the priority queue taking the elements with the\nlowest cost as the prioritized ones. Rust only offers you the BinaryHeap and\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\nelements in wrapped in a Reverse (as is even showed in the linked docs of\nthe BinaryHeap). However the wrapping affects the type of the heap and also\npopping the most prioritized elements yields values wrapped in the Reverse.

For this purpose I have just taken the max-heap and wrapped it as a whole in a\nseparate structure providing just the desired methods:

use std::cmp::{Ord, Reverse};
use std::collections::BinaryHeap;

pub struct MinHeap<T> {
heap: BinaryHeap<Reverse<T>>,
}

impl<T: Ord> MinHeap<T> {
pub fn new() -> MinHeap<T> {
MinHeap {
heap: BinaryHeap::new(),
}
}

pub fn push(&mut self, item: T) {
self.heap.push(Reverse(item))
}

pub fn pop(&mut self) -> Option<T> {
self.heap.pop().map(|Reverse(x)| x)
}
}

impl<T: Ord> Default for MinHeap<T> {
fn default() -> Self {
Self::new()
}
}

Rest is just the algorithm implementation which is not that interesting.

Day 25: Full of Hot Air

tl;dr

Playing around with a numbers in a special base.

Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem”\nwith a rather easy solution, as the last day always seems to be.

Solution

Implementing 2 functions, converting from the SNAFU base and back to the SNAFU\nbase representation. Let's do a bit more though! I have implemented two functions:

  • from_snafu
  • to_snafu

Now it is apparent that all I do is number to string and string to number. Hmm…\nthat sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers\nand implement the traits that we need.

Let's start with a structure:

#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct SNAFU {
value: i64,
}

Converting from &str

We will start by implementing the FromStr trait that will help us parse our input.\nThis is rather simple, I can just take the from_snafu function, copy-paste it\ninto the from_str method and the number I get will be wrapped in Result and\nSNAFU structure.

Converting to String

This is more fun. In some cases you need to implement only one trait and others\nare automatically implemented using that one trait. In our case, if you look in\nthe documentation, you can see that ToString trait is automatically implemented\nfor any type that implements Display trait.

Let's implement the Display trait then. We should be able to use the to_snafu\nfunction and just take the self.value from the SNAFU structure.

And for the convenience of tests, we can also implement a rather simple From<i64>\ntrait for the SNAFU.

Adjusting the code

After those changes we need to adjust the code and tests.

Parsing of the input is very easy, before we have used the lines, now we parse\neverything:

     fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
- file_to_lines(pathname)
+ file_to_structs(pathname)
}

Part 1 needs to be adjusted a bit too:

     fn part_1(input: &Input) -> Output {
- to_snafu(input.iter().map(|s| from_snafu(s)).sum())
+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
}

You can also see that it simplifies the meaning a bit and it is more explicit than\nthe previous versions.

And for the tests:

     #[test]
fn test_from() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(from_snafu(s), *n);
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
}
}

#[test]
fn test_to() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(to_snafu(*n), s.to_string());
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());
}

Summary

Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

\"Finished

Advent of Code

This year was quite fun, even though most of the solutions and posts came in\nlater on (cough in '23 cough). Day 22 was the most obnoxious one… And also\nit feels like I used priority queues and tree data structures a lot 👀

with Rust

I must admit that a lot of compiler warnings and errors were very useful. Even\nthough I still found some instances where they didn't help at all or cause even\nworse issues than I had. Compilation times have been addressed with the caching.

Building my first tree data structure in Rust has been a very “interesting”\njourney. Being able to write a more generic BFS algorithm that allows you to not\nduplicate code while still mantaining the desired functionality contributes to\na very readable code.

I am definitely much more aware of the basic things that bloated Python is\nmissing, yet Rust has them…

Using explicit types and writing down placeholder functions with todo!()\nmacros is very pleasant, since it allows you to easily navigate the type system\nduring the development when you don't even need to be sure how are you going to\nput the smaller pieces together.

I have used a plethora of traits and also implemented some of them to either be\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\ncopying, equality comparison, etc.

I confess to touching more “cursed” parts of the Rust, such as macros to\ndeclutter the copy-paste for tests or writing my own structures that need to\ncarry a lifetime for their own fields.

tl;dr Relatively pleasant language until you hit brick wall 😉


See you next year! Maybe in Rust, maybe not 🙃

", + "url": "https://blog.mfocko.xyz/blog/aoc-2022/4th-week", + "title": "4th week of Advent of Code '22 in Rust", + "summary": "Surviving fourth week in Rust.", + "date_modified": "2023-07-07T15:14:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "advent-of-code", + "advent-of-code-2022", + "rust" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/aoc-2022/3rd-week", + "content_html": "

Let's go through the third week of Advent of Code in Rust.

Day 15: Beacon Exclusion Zone

tl;dr

Triangulating a distress beacon based on the information from the sensors.

Solution

Relatively easy thing to implement, no major Rust issues hit.

Day 16: Proboscidea Volcanium

tl;dr

Finding a max flow in a graph given some time constraints.

Solution

I have used some interesting things to implement this and make it easier for me.

Indexing in graph

I have come across a situation where I needed to keep more information regarding\nthe graph… In that case you can, of course, create a structure and keep it in,\nbut once you have multiple members in the structure it gets harder to work with\nsince you need to address the fields in the structure. When you work with graph,\nyou frequently need to access the vertices and in this case it felt a lot easier\nto implement the indexing in a graph, rather than explicitly access the\nunderlying data structure.

Here you can see a rather short snippet from the solution that allows you to\n“index” the graph:

impl Index<&str> for Graph {
type Output = Vertex;

fn index(&self, index: &str) -> &Self::Output {
&self.g[index]
}
}

Cartesian product

During the implementation I had to utilize Floyd-Warshall algorithm for finding\nthe shortest path between pairs of vertices and utilized the iproduct! macro\nfrom the itertools. It is a very useful higher-order function that allows\nyou to keep the nesting of the loops at a minimum level while still maintaining\nthe same functionality.

“Implementing” an iterator

For the second part, you get to split the work between 2 actors. That way you\ncan achieve higher efficiency of the whole process that you're planning, but it\nalso makes it harder to evaluate algorithmically, since you need to check the\ndifferent ways the work can be split.

Being affected by functional programming brain damage™️, I have chosen to\ndo this part by function that returns an iterator over the possible ways:

fn pairings(
valves: &BTreeSet<String>,
) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + '_ {
let mapping = valves.iter().collect_vec();

let max_mask = 1 << (valves.len() - 1);

(0..max_mask).map(move |mask| {
let mut elephant = BTreeSet::new();
let mut human = BTreeSet::new();

for (i, &v) in mapping.iter().enumerate() {
if (mask & (1 << i)) == 0 {
human.insert(v.clone());
} else {
elephant.insert(v.clone());
}
}

(human, elephant)
})
}

Day 17: Pyroclastic Flow

tl;dr

Simulating an autonomous Tetris where pieces get affected by a series of jets of\nhot gas.

Solution

Similarly to the previous day I have created some iterators 😄

Collision detection

Once you need to check for collisions it is very helpful to be able to just\niterate through the positions that can actually collide with the wall or other\npiece.

To get the desired behaviour, you can just compose few smaller functions:

fn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + '_ {
shape.iter().enumerate().flat_map(|(y, row)| {
row.iter().enumerate().filter_map(move |(x, c)| {
if c == &'#' {
Some(Vector2D::new(x as isize, y as isize))
} else {
None
}
})
})
}

In the end, we get relative positions which we can adjust later when given the\nspecific positions from iterator. You can see some interesting parts in this:

  • .enumerate() allows us to get both the indices (coordinates) and the line\nor, later on, the character itself,
  • .flat_map() flattens the iterator, i.e. when we return another iterator,\nthey just get chained instead of iterating over iterators (which sounds pretty\ndisturbing, doesn't it?),
  • and finally .filter_map() which is pretty similar to the “basic” .map()\nwith a one, key, difference that it expects the items of an iterator to be\nmapped to an Option<T> from which it ignores nothing (as in None 😉)\nand also unwraps the values from Some(…).

Infinite iterator

In the solution we cycle through both Tetris-like shapes that fall down and the\njets that move our pieces around. Initially I have implemented my own infinite\niterator that just yields the indices. It is a very simple, yet powerful, piece\nof code:

struct InfiniteIndex {
size: usize,
i: usize,
}

impl InfiniteIndex {
fn new(size: usize) -> InfiniteIndex {
InfiniteIndex { size, i: size - 1 }
}
}

impl Iterator for InfiniteIndex {
type Item = usize;

fn next(&mut self) -> Option<Self::Item> {
self.i = (self.i + 1) % self.size;
Some(self.i)
}
}

However when I'm looking at the code now, it doesn't really make much sense…\nGuess what, we can use a built-in function that is implemented on iterators for\nthat! The function is called .cycle()

On the other hand, I am not going to switch to that function, since it would\nintroduce an another myriad of issues caused by the fact that I create iterators\nright away in the constructor of my structure and the iterators would borrow\nboth the jets and shapes which would introduce a lifetime dependency into the\nstructure.

Day 18: Boiling Boulders

tl;dr

Let's compute a surface area of some obsidian approximated via coordinates of\ncubes.

Solution

This day is kinda interesting, because it shows how easily you can complicate the\nproblem and also how much can you screw yourself over with the optimization and\n“smart” approach.

For the first part you need to find the surface area of an obsidian that is\napproximated by cubes. Now, that is a very easy thing to do, just keep the track\nof already added cubes, and check if the newly added cube touches any face of any\nother cube. Simple, and with a BTreeSet relatively efficient way to do it.

However the second part lets you on a secret that there may be some surface area\nfrom the “inside” too and you want to know only the one from the outside of the\nobsidian. I have seen some solutions later, but if you check your data, you might\nnotice that the bounding box of all the cubes isn't that big at all. Therefore I\nchose to pre-construct the box beforehand, fill in the cubes and then just run a\nBFS turning all the lava on the outside into the air. Now you just need to check\ncubes and count how many of their faces touch the air.

Day 19: Not Enough Minerals

tl;dr

Finding out the best strategy for building robots to collect geodes.

Solution

Not much interesting stuff to mention apart from the suggestion to never believe\nthat the default implementation given by derive macro is what you want, it\ndoesn't have to be. 😄

Day 20: Grove Positioning System

tl;dr

Shuffling around the circular linked list to find the coordinates.

Now, small rant for this day is in place. They've never mentioned that coordinates\ncan repeat and therefore the values are non-unique. This is something that did\nnot happen in the given sample, but was present in the user input. It took »a lot«\nto realize that this is the issue.

Solution

I have tried implementing a circular linked list for this… and I have failed\nmiserably. To be fair, I still have no clue why. It was “fun” to play around with\nthe Rc<RefCell<T>>. In the end I failed on wrong answer. I have also encountered\na rather interesting issue with .borrow_mut() method being used on Rc<RefCell<T>>.

.borrow_mut()

Consider the following snippet of the code (taken from the documentation):

use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::rc::Rc;
// use std::borrow::BorrowMut;

fn main() {
let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));
// Create a new block to limit the scope of the dynamic borrow
{
let mut map: RefMut<_> = shared_map.borrow_mut();
map.insert(\"africa\", 92388);
map.insert(\"kyoto\", 11837);
map.insert(\"piccadilly\", 11826);
map.insert(\"marbles\", 38);
}

// Note that if we had not let the previous borrow of the cache fall out
// of scope then the subsequent borrow would cause a dynamic thread panic.
// This is the major hazard of using `RefCell`.
let total: i32 = shared_map.borrow().values().sum();
println!(\"{total}\");
}

We allocate a hash map on the heap and then in the inner block, we borrow it as\na mutable reference, so that we can use it.

note

It is a very primitive example for Rc<RefCell<T>> and mutable borrow.

If you uncomment the 4th line with use std::borrow::BorrowMut;, you cannot\ncompile the code anymore, because of

   Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
--> src/main.rs:10:34
|
10 | let mut map: RefMut<_> = shared_map.borrow_mut();
| --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference
| |
| expected due to this
|
= note: expected struct `RefMut<'_, _>`
found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:11:13
|
11 | map.insert(\"africa\", 92388);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:12:13
|
12 | map.insert(\"kyoto\", 11837);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:13:13
|
13 | map.insert(\"piccadilly\", 11826);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:14:13
|
14 | map.insert(\"marbles\", 38);
| ^^^^^^ method not found in `RefMut<'_, _>`

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `playground` due to 5 previous errors

It might seem a bit ridiculous. However, I got to a point where the compiler\nsuggested use std::borrow::BorrowMut; and it resulted in breaking parts of the\ncode that worked previously. I think it may be a good idea to go over what is\nhappening here.

.borrow_mut() on Rc<RefCell<T>>

Let's consider a variable x of type Rc<RefCell<T>>. What happens when you\ncall .borrow_mut() on it? We can look at the Rc type, and… hang on! There is\nneither .borrow_mut() method or BorrowMut trait implemented. How can we do it\nthen?

Let's go further and we can see that RefCell<T> implements a .borrow_mut()\nmethod. OK, but how can we call it on the Rc<T>? Easily! Rc<T> implements\nDeref<T> and therefore you can call methods on Rc<T> objects as if they were\nT objects. If we read on Deref coercion, we can see the following:

If T implements Deref<Target = U>, …:

  • T implicitly implements all the (immutable) methods of the type U.

What is the requirement for the .borrow_mut() on RefCell<T>? Well, it needs\n&self, so the Deref implements the .borrow_mut() for the Rc<RefCell<T>>.

BorrowMut trait

I have not been able to find a lot on this trait. My guess is that it provides a\nmethod instead of a syntactic sugar (&mut x) for the mutable borrow. And also\nit provides default implementations for the types:

impl BorrowMut<str> for String

impl<T> BorrowMut<T> for &mut T
where
T: ?Sized,

impl<T> BorrowMut<T> for T
where
T: ?Sized,

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where
A: Allocator,

impl<T, A> BorrowMut<T> for Box<T, A>
where
A: Allocator,
T: ?Sized,

impl<T, const N: usize> BorrowMut<[T]> for [T; N]
Conflict

Now the question is why did it break the code… My first take was that the type\nRc<RefCell<T>> has some specialized implementation of the .borrow_mut() and\nthe use overrides it with the default, which is true in a sense. However\nthere is no specialized implementation. Let's have a look at the trait and the\ntype signature on the RefCell<T>:

// trait
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow_mut(&mut self) -> &mut Borrowed;
}

// ‹RefCell<T>.borrow_mut()› type signature
pub fn borrow_mut(&self) -> RefMut<'_, T>

I think that we can definitely agree on the fact that RefMut<'_, T> is not the\nRefCell<T>.

In my opinion, RefCell<T> implements a separate .borrow_mut() rather\nthan implementing the interface, because it cannot satisfy the type requirements\nof the trait.

caution

I wonder how are we expected to deal with this conflict, if and when, we need\nboth the .borrow_mut() of the trait and .borrow_mut() of the RefCell<T>.

Fun fact

I was suggested by the compiler to do use std::borrow::BorrowMut; and break the\ncode.

So much for the almighty and helpful compiler…

Day 21: Monkey Math

tl;dr

Computing an expression tree and then also finding ideal value for a node.

Solution

Relatively simple, until you get to the 2nd part where you start to practice\na lot of the copy-paste. I have managed to sneak some perverted stuff in there\nthough :) Let's go through the details.

Default trait

For the first time and twice I had a need to have a default value for my types,\nenumerations in this case. Rust offers a very nice trait1 that is described\nas:

A trait for giving a type a useful default value.

I guess it sums it up nicely. The more interesting part about this is the fact\nthat you can use the macro machinery to save yourself some typing. If you have\nenumeration of which the default value doesn't bear any parameter, you can just\ndo2:

#[derive(Default)]
enum Color {
#[default]
White,
Gray,
Black,
}

Abusing negation

If you want to use a unary minus operator on your own type, you can implement\na Neg trait3. I was dealing with a binary tree and needed a way how to look\nat the other side, so I have just implemented the negation for flipping between\nleft and right 😄


  1. Default docs
  2. Pardon my example from the graph algorithms ;)
  3. Neg docs
", + "url": "https://blog.mfocko.xyz/blog/aoc-2022/3rd-week", + "title": "3rd week of Advent of Code '22 in Rust", + "summary": "Surviving third week in Rust.", + "date_modified": "2023-07-06T21:00:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "advent-of-code", + "advent-of-code-2022", + "rust" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/leetcode/sort-diagonally", + "content_html": "

Let's try to solve one of the LeetCode challenges in easy and hard mode at the\nsame time.

Problem description

A matrix diagonal is a diagonal line of cells starting from some cell in\neither the topmost row or leftmost column and going in the bottom-right direction\nuntil reaching the matrix's end. For example, the matrix diagonal starting\nfrom mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0],\nmat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending\norder and return the resulting matrix.

Example

\"Image

Skeleton and initial adjustments

We are given the following skeleton for the C++ and the given challenge:

class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

}
};

The task is to sort the passed matrix diagonally and then return it. First of all,\nI don't like to solve this in a web browser, so we'll need to adjust it accordingly\nfor running it locally. We'll start by including the vector header and using\nfully-qualified namespaces1 and also adding few tests:

#include <cassert>
#include <vector>

using matrix = std::vector<std::vector<int>>;

class Solution {
public:
matrix diagonalSort(matrix& mat)
{
}
};

static void test_case_1()
{
// Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
// Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
std::vector { 2, 2, 1, 2 },
std::vector { 1, 1, 1, 2 } })
== std::vector { std::vector { 1, 1, 1, 1 },
std::vector { 1, 2, 2, 2 },
std::vector { 1, 2, 3, 3 } }));
}

static void test_case_2()
{
// Input: mat =
// [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
// Output:
// [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
std::vector { 23, 55, 17, 45, 15, 52 },
std::vector { 75, 31, 36, 44, 58, 8 },
std::vector { 22, 27, 33, 25, 68, 4 },
std::vector { 84, 28, 14, 11, 5, 50 } })
== std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
std::vector { 11, 11, 25, 45, 8, 69 },
std::vector { 14, 23, 25, 44, 58, 15 },
std::vector { 22, 27, 31, 36, 50, 66 },
std::vector { 84, 28, 75, 33, 55, 68 } }));
}

int main()
{
test_case_1();
test_case_2();

return 0;
}

We need to return the matrix, but we're given a reference to the input matrix. We\ncan easily abuse the C++ here and just switch the reference to value, this way\nthe matrix will be copied when passed to the function, we can sort the copy and\njust return it back. And we also get yelled by the compiler for the fact that the\nmethod doesn't return anything yet, so to make it “shut up” we will just return\nthe input for now:

-    matrix diagonalSort(matrix& mat)
+ matrix diagonalSort(matrix mat)
{
+ return mat;
}

Now, we get the copy and we're good to go.

Naïve solution

As you may know, C++ offers a plethora of functions that can be used to your\nadvantage, given that you know how to “bend” the data structures accordingly.

What does that mean for us? Well, we have an std::sort, we can use it, right?\nLet's have a look at it:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

This overload is more than we need. What does it do? It just sorts the elements\nin the range [first, last) using operator< on them. We can't sort the whole\nmatrix using this, but… we can sort just »one« diagonal without doing much work\non our end.

What is the RandomIt type though? If we look more into the documentation, we\ncan easily find the requirements for it and also learn that it's a random access\niterator and allows swapping its values at the same time.

Random access iterator

What is the random access iterator though? We can find it in a documentation\nand see the following description:

A LegacyRandomAccessIterator is a LegacyBidirectionalIterator\nthat can be moved to point to any element in constant time.

After that we can see all the requirements for it being listed. I don't feel like\nreading them right now, so we will just use it and see where the compilation blows\nup, i.e. “compiler-assisted development2 if you will ;)

Now we know that we can use std::sort to sort the diagonal itself, but we also\nneed to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to\nsomeone else3. And that way we get

matrix diagonalSort(matrix mat)
{
// we iterate over the diagonals
for (auto d : diagonals(mat)) {
// and we sort each diagonal
std::sort(d.begin(), d.end());
}

// we take the matrix by copy, so we can sort in-situ and return the copy
// that we sorted
return mat;
}

This solution looks very simple, doesn't it? Well, cause it is.\nLet's try compiling it:

matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
for (auto d : diagonals(mat)) {
^
Found compiler error(s).
make: *** [makefile:14: tidy] Error 1

OK, seems about right. We haven't implemented the diagonals yet. And based on\nwhat we've written so far, we need a function or a class diagonals that will\ngive us the diagonals we need.

Implementing the diagonals

Cool, so we need the function that will let us go through each and every diagonal\nin our matrix. We use the for-range loop, so whatever we get back from the\ndiagonals must support .begin() and .end(). Since I am a masochist, we will\ndo such functionality for a matrix of any type, not just the int from the challenge.

As I said, we need to be able to

  • construct the object
  • get the beginning
  • get the end (the “sentinel”)
template <typename T>
class diagonals {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& _matrix;

public:
diagonals(matrix_t& m)
: _matrix(m)
{
}
diagonals_iter begin()
{
/* TODO */
}
diagonals_iter end()
{
/* TODO */
}
};

Now we have a diagonals that we can use to go through the diagonals. We haven't\nimplemented the core of it yet. Let's go through what we have for now.

We have a templated class with templated T that is used as a placeholder for any\ntype we would store in the matrix. Because I'm lazy, I have defined the matrix_t\ntype that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to\ntype it out all the time. Of course, we need to store the matrix, we are given,\nas a private attribute. And then just have the constructor and the 2 methods we\nneed for the for-range.

Iterating over diagonals

Now that we have an object that will allow us to iterate through the diagonals,\nwe need to implement the iterating itself. We need to go through all of them, so\nwe have multiple options how to do so. I have decided to start from the “main”\ndiagonal that starts at (0, 0) index and then proceed with the diagonals starting\nin the first row, followed by the rest of the diagonals in the first column.

We need to be able to tell that we've iterated through all of them, and also we\nneed to know which diagonal is next. For that purpose we will pass the indices\nof the first cell on the diagonal. That way we can always tell how to move forward.

We will start by updating the begin and end to reflect our choice accordingly.

diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }

For the begin we return the first diagonal that starts at (0, 0). And because\nwe have decided to do the diagonals in the first column at the end, the first\ndiagonal that is not a valid one is the one at (0, height). Apart from the\nindices, we also need to pass reference to the matrix itself.

note

You may have noticed that we also include the diagonals that have length 1,\nspecifically the ones at (0, height - 1) and (width - 1, 0). We are implementing\nan iterator that should not care about the way it's being used. Therefore, we\ndon't care about the fact they don't need to be sorted.

Cool, let's leave the iterator itself to someone else, right?4

Implementing the iterator over diagonals

We can start with a simple skeleton based on the information that we pass from\nthe diagonals. Also to utilize the matrix_t and also contain implementation\ndetails hidden away, we will put this code into the diagonals class.

class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}
};

In this case we will be implementing a “simple” forward iterator, so we don't\nneed to implement a lot. Notably it will be:

  • inequality operator (we need to know when we reach the end and have nothing to\niterate over)
  • preincrementation operator (we need to be able to move around the iterable)
  • dereference operator (we need to be able to retrieve the objects we iterate\nover)
class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator!=(const diagonals_iter& rhs) const
{
// iterators are not equal if they reference different matrices, or
// their positions differ
return m != rhs.m || x != rhs.x || y != rhs.y;
}

diagonals_iter& operator++()
{
if (y != 0) {
// iterating through diagonals down the first column
y++;
return *this;
}

// iterating the diagonals along the first row
x++;
if (x == m.front().size()) {
// switching to diagonals in the first column
x = 0;
y++;
}

return *this;
}

diagonal<T> operator*() const { return diagonal { m, x, y }; }
};

Let's go one-by-one. Inequality operator is rather simple, just compare iterator's\nattributes field-by-field. If you think about it, checking inequality of two 2D\nvectors may be a bit inefficient, therefore, we can swap around and check it as\na last thing.

-        return m != rhs.m || x != rhs.x || y != rhs.y;
+ return x != rhs.x || y != rhs.y || m != rhs.m;

Preincrementation is where the magic happens. If you have a better look, you can\nsee two branches of this operation:

  1. When y != 0 (we're iterating over the diagonals in the first column)\nIn this case, we just bump the row and we're done.
  2. When y == 0 (we're iterating over the diagonals in the first row)\nIn this case, we bump the column and check if we haven't gotten out of bounds,\ni.e. the end of the first row. If we get out of the bounds, we're continuing\nwith the second diagonal in the first column.

Dereferencing the iterator must “yield” something. In our case it will be the\ndiagonal that we want to sort. For sorting we need just the iterators that can\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\nsomething else. In our case it will be a class called diagonal.

Implementing the diagonal itself

After implementing the iterator over diagonals, we know that all we need to describe\na diagonal is the matrix itself and the “start” of the diagonal (row and column).\nAnd we also know that the diagonal must provide some iterators for the std::sort\nfunction. We can start with the following skeleton:

template <typename T>
class diagonal {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& matrix;
std::size_t x;
std::size_t y;

public:
diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
: matrix(matrix)
, x(x)
, y(y)
{
}

diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

diagonal_iter end() const
{
auto max_x = matrix[y].size();
auto max_y = matrix.size();

// we need to find the distance in which we get out of bounds (either in
// column or row)
auto steps = std::min(max_x - x, max_y - y);

return diagonal_iter { matrix, x + steps, y + steps };
}
};

Initialization is rather simple, we just “keep” the stuff we get, begin is the\nsimplest, we just delegate.

In case of the end, it gets more complicated. We need to know where is the “end”\nof the diagonal. Since end should point to the first element “after” the iterable,\nwe know that it's the first position of the iterator where either y becomes\nmatrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal,\nduh, therefore we can deduce the first “position” afterwards by minimal amount of\nsteps to get out of the any column or row, hence std::min(max_x - x, max_y - y).\nFinal position is then computed simply by adding the steps to the beginning of\nthe diagonal.

Now we just need to finish the iterator for the diagonal itself and we're done.

Implementing diagonal_iter

This part is the hardest from all we need to do. It's because of the requirements\nof the std::sort that requires us to implement a random access iterator. I have\nbriefly described it above, and “in a nutshell” it means that we need to implement\nan iterator that can move in constant time along the diagonal in any amount of\nsteps.

Let's go through all of the functionality that our iterator needs to support to\nbe used in std::sort. We need the usual operations like:

  • equality/inequality
  • incrementation
  • dereferencing

We will also add all the types that our iterator uses with the category of the\niterator, i.e. what interface it supports:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }
};

This is pretty similar to the previous iterator, but now we need to implement the\nremaining requirements of the random access iterator. Let's see what those are:

  • decrementation - cause we need to be able to move backwards too, since random access iterator extends the interface of bidirectional iterator
  • moving the iterator in either direction by steps given as an integer
  • being able to tell the distance between two iterators
  • define an ordering on the iterators

Let's fill them in:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }

// exactly opposite to the incrementation
diagonal_iter operator--()
{
x--;
y--;
return *this;
}

// moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
// can just return a new iterator and subtract ‹n› from both coordinates in
// the matrix
diagonal_iter operator-(difference_type n) const
{
return diagonal_iter { m, x - n, y - n };
}

// here we assume that we are given two iterators on the same diagonal
difference_type operator-(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x - rhs.x;
}

// counterpart of moving ‹n› steps backwards
diagonal_iter operator+(difference_type n) const
{
return diagonal_iter { m, x + n, y + n };
}

// we compare the coordinates, and also assume that those 2 iterators are
// lying on the same diagonal
bool operator<(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x < rhs.x && y < rhs.y;
}
};

At this point we could probably try and compile it, right? If we do so, we will\nget yelled at by a compiler for the following reasons:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __next;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
std::__unguarded_linear_insert(__i,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
std::__unguarded_linear_insert(__i,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
__unguarded_linear_insert(_RandomAccessIterator __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __cut;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__introsort_loop(__first, __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

That's a lot of noise, isn't it? Let's focus on the important parts:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

Ah! We have a reference in our iterator, and this prevents us from having a copy\nassignment operator (that is used “somewhere” in the sorting algorithm). Well…\nLet's just wrap it!

# we need to keep a different type than reference
- matrix_t& m;
+ std::reference_wrapper<matrix_t> m;

# in comparison we need to get the reference out of the wrapper first
- return x == rhs.x && y == rhs.y && m == rhs.m;
+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

# same when we return a reference to the “cell” in the matrix
- reference operator*() const { return m[y][x]; }
+ reference operator*() const { return m.get()[y][x]; }

# and finally in the assertions that we set for the “distance” and “less than”
- assert(m == rhs.m);
+ assert(m.get() == rhs.m.get());

We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.


  1. just because I'm used to it and don't care about your opinion ;)
  2. exercise at your own risk
  3. me in 5 minutes in fact, but don't make me scared
  4. me in the next section…
", + "url": "https://blog.mfocko.xyz/blog/leetcode/sort-diagonally", + "title": "Sort the matrix diagonally", + "summary": "Compiler assisted development.", + "date_modified": "2023-03-04T23:15:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "cpp", + "leetcode", + "iterators" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/aoc-2022/2nd-week", + "content_html": "

Let's go through the second week of Advent of Code in Rust.

Day 8: Treetop Tree House

tl;dr

We get a forest and we want to know how many trees are visible from the outside.\nApart from that we want to find the best view.

Nothing interesting. We are moving around 2D map though. And indexing can get a\nbit painful when doing so, let's refactor it a bit ;) During the preparation for\nthe AoC, I have written Vector2D and now it's time to extend it with indexing\nof Vec of Vecs. In my solution I was manipulating with indices in the following\nway:

  • swapping them
  • checking whether they are correct indices for the Vec<Vec<T>>
  • indexing Vec<Vec<T>> with them
caution

I'm getting familiar with Rust and starting to “abuse” it… While doing so, I'm\nalso uncovering some “features” that I don't really like. Therefore I will mark\nall of my rants with thicc «↯» mark and will try to “lock” them into their\nown “box of hell”.

Swapping indices

Relatively simple implementation, just take the values, swap them and return new\nvector.

impl<T: Copy> Vector2D<T> {
pub fn swap(&self) -> Self {
Self {
x: self.y,
y: self.x,
}
}
}

Pretty straight-forward implementation, but let's talk about the T: Copy. We\nneed to use it, since we are returning a new vector, with swapped values.\nIf we had values that cannot be copied, the only thing we could do, would be a\nvector of references (and it would also introduce a lifetime, to which we'll get\nlater on). This is pretty similar with the operations on sets from the first week.

Indexing Vec

I will start with the indexing, cause bound-checking is a bit more… complicated\nthan I would like to.

pub fn index<'a, T, U>(v: &'a [Vec<U>], idx: &Vector2D<T>) -> &'a U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Let's talk about this mess… Body of the function is probably the most easy part\nand should not be hard to understand, we just take the x and y and convert\nthem both to usize type that can be used later on for indexing.

The type signature of the function is where the fun is at 😉 We are trying\nto convert unknown type to usize, so we must bound the T as a type that can\nbe converted to usize, that's how we got usize: TryFrom<T> which basically\nsays that usize must implement TryFrom<T> trait and therefore allows us to\nconvert the indices to actual usize indices. Using .unwrap() also forces us\nto bound the error that can occur when converting T into usize, that's how\nwe get <usize as TryFrom<T>>::Error: Debug which loosely means

error during conversion of T into usize must implement Debug,\ni.e. can be printed in some way or other

T: Copy is required by .try_into() which takes T by-value.

And now we are left only with the first line of the definition.

note

Skilled Rustaceans might notice that this implementation is rather flaky and can\nbreak in multiple places at once. I'll get back to it…

Let's split it in multiple parts:

  • v: &'a [Vec<U>] represents the 2D Vec, we are indexing, Vec implements\nSlice trait and clippy recommends using &[T] to &Vec<T>, exact details\nare unknown to me
  • idx: &Vector2D<T> represents the indices which we use, we take them by\nreference to avoid an unnecessary copy
  • -> &'a U means that we are returning a reference to some value of type U.\nNow the question is what does the 'a mean, we can also see it as a generic\ntype declared along T and U. And the answer is relatively simple, 'a\nrepresents a lifetime. We take the v by a reference and return a reference,\nborrow checker validates all of the borrows (or references), so we need to\nspecify that our returned value has the same lifetime as the vector we have\ntaken by a reference, i.e. returned reference must live at least as long as the\nv. This way we can “be sure” that the returned reference is valid.
Issues

First issue that our implementation has is the fact that we cannot get a mutable\nreference out of that function. This could be easily resolved by introducing new\nfunction, e.g. index_mut. Which I have actually done while writing this part:

pub fn index_mut<'a, T, U>(v: &'a mut [Vec<U>], idx: &Vector2D<T>) -> &'a mut U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&mut v[y][x]
}
«↯» Why can't we use one function?

When we consider a Vec<T>, we don't need to consider containers as T, Rust\nimplements indexing as traits Index<T> and IndexMut<T> that do the dirty work\nbehind syntactic sugar of container[idx].

However, implementing of traits is not allowed for external types, i.e. types\nthat you haven't defined yourself. This means that you can implement indexing\nover containers that you have implemented yourself, but you cannot use your own\ntypes for indexing “built-in” types.

Another part of this rabbit hole is trait SliceIndex<T> that is of a relevance\nbecause of

impl<T, I> Index<I> for [T]
where
I: SliceIndex<[T]>

impl<T, I, A> Index<I> for Vec<T, A>
where
I: SliceIndex<[T]>,
A: Allocator

impl<T, I, const N: usize> Index<I> for [T; N]
where
[T]: Index<I>

In other words, if your type implements SliceIndex<T> trait, it can be used\nfor indexing. As of now, this trait has all of its required methods experimental\nand is marked as unsafe.

Another problem is a requirement for indexing either [Vec<T>] or Vec<Vec<T>>.\nThis requirement could be countered by removing inner type Vec<T> and constraining\nit by a trait Index (or IndexMut respectively) in a following way

pub fn index<'a, C, T>(v: &'a [C], idx: &Vector2D<T>) -> &'a C::Output
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
C: Index<usize>
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Given this, we can also give a more meaningful typename for indexing type, such\nas I.

Checking bounds

Now we can get to the boundary checks, it is very similar, but a more… dirty.\nFirst approach that came up was to convert the indices in Vector2D to usize,\nbut when you add the indices up, e.g. when checking the neighbors, you can end\nup with negative values which, unlike in C++, causes an error (instead of underflow\nthat you can use to your advantage; you can easily guess how).

So how can we approach this then? Well… we will convert the bounds instead of\nthe indices and that lead us to:

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
usize: TryInto<T>,
<usize as TryInto<T>>::Error: Debug,
T: PartialOrd + Copy,
{
idx.y >= 0.try_into().unwrap()
&& idx.y < v.len().try_into().unwrap()
&& idx.x >= 0.try_into().unwrap()
&& idx.x
< v[TryInto::<usize>::try_into(idx.y).unwrap()]
.len()
.try_into()
.unwrap()
}

You can tell that it's definitely a shitty code. Let's improve it now! We will\nget back to the original idea, but do it better. We know that we cannot convert\nnegative values into usize, but we also know that conversion like that\nreturns a Result<T, E> which we can use to our advantage.

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
T: Copy,
usize: TryFrom<T>,
{
usize::try_from(idx.y)
.and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))
.unwrap_or(false)
}

Result<T, E> is a type similar to Either in Haskell and it allows us to chain\nmultiple operations on correct results or propagate the original error without\ndoing anything. Let's dissect it one-by-one.

try_from is a method implemented in TryFrom trait, that allows you to convert\ntypes and either successfully convert them or fail (with a reasonable error). This\nmethod returns Result<T, E>.

We call and_then on that result, let's have a look at the type signature of\nand_then, IMO it explains more than enough:

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> Result<U, E>

OK… So it takes the result and a function and returns another result with\ndifferent value and different error. However we can see that the function, which\nrepresents an operation on a result, takes just the value, i.e. it doesn't care\nabout any previous error. To make it short:

and_then allows us to run an operation, which can fail, on the correct result

We parsed a y index and now we try to convert the x index with try_from\nagain, but on that result we use map rather than and_then, why would that be?

pub fn map<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> U

Huh… map performs an operation that cannot fail. And finally we use\nunwrap_or which takes the value from result, or in case of an error returns the\ndefault that we define.

How does this work then? If y is negative, the conversion fails and the error\npropagates all the way to unwrap_or, if y can be a correct usize value, then\nwe do the same with x. If x is negative, we propagate the error as with y,\nand if it's not, then we check whether it exceeds the higher bounds or not.

Solution

Relatively simple, you just need follow the rules and not get too smart, otherwise\nit will get back at you.

Day 9: Rope Bridge

tl;dr

We get a rope with knots and we want to track how many different positions are\nvisited with the rope's tail.

By this day, I have come to a conclusion that current skeleton for each day\ngenerates a lot of boilerplate. And even though it can be easily copied, it's\njust a waste of space and unnecessary code. Let's “simplify” this (on one end\nwhile creating monster on the other end). I've gone through what we need in the\npreparations for the AoC. Let's sum up our requirements:

  • parsing
  • part 1 & 2
  • running on sample / input
  • tests

Parsing and implementation of both parts is code that changes each day and we\ncannot do anything about it. However running and testing can be simplified!

Let's introduce and export a new module solution that will take care of all of\nthis. We will start by introducing a trait for each day.

pub trait Solution<Input, Output: Display> {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;

fn part_1(input: &Input) -> Output;
fn part_2(input: &Input) -> Output;
}

This does a lot of work for us already, we have defined a trait and for each day\nwe will create a structure representing a specific day. That structure will also\nimplement the Solution trait.

Now we need to get rid of the boilerplate, we can't get rid of the main function,\nbut we can at least move out the functionality.

fn run(type_of_input: &str) -> Result<()>
where
Self: Sized,
{
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = Self::parse_input(format!(\"{}s/{}.txt\", type_of_input, Self::day()));

info!(\"Part 1: {}\", Self::part_1(&input));
info!(\"Part 2: {}\", Self::part_2(&input));

Ok(())
}

fn main() -> Result<()>
where
Self: Sized,
{
Self::run(\"input\")
}

This is all part of the Solution trait, which can implement methods while being\ndependent on what is provided by the implementing types. In this case, we just\nneed to bound the Output type to implement Display that is necessary for the\ninfo! and format string there.

Now we can get to first of the nasty things we are going to do… And it is the\nday() method that you can see being used when constructing path to the input\nfile. That method will generate a name of the file, e.g. day01 and we know that\nwe can somehow deduce it from the structure name, given we name it reasonably.

fn day() -> String {
let mut day = String::from(type_name::<Self>().split(\"::\").next().unwrap());
day.make_ascii_lowercase();

day.to_string()
}
type_name

This feature is still experimental and considered to be internal, it is not\nadvised to use it any production code.

And now we can get to the nastiest stuff 😩 We will generate the tests!

We want to be able to generate tests for sample input in a following way:

test_sample!(day_01, Day01, 42, 69);

There's not much we can do, so we will write a macro to generate the tests for us.

#[macro_export]
macro_rules! test_sample {
($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {
#[cfg(test)]
mod $mod_name {
use super::*;

#[test]
fn test_part_1() {
let sample =
$day_struct::parse_input(&format!(\"samples/{}.txt\", $day_struct::day()));
assert_eq!($day_struct::part_1(&sample), $part_1);
}

#[test]
fn test_part_2() {
let sample =
$day_struct::parse_input(&format!(\"samples/{}.txt\", $day_struct::day()));
assert_eq!($day_struct::part_2(&sample), $part_2);
}
}
};
}

We have used it in a similar way as macros in C/C++, one of the things that we\ncan use to our advantage is defining “type” of the parameters for the macro. All\nparameters have their name prefixed with $ sign and you can define various “forms”\nof your macro. Let's go through it!

We have following parameters:

  • $mod_name which represents the name for the module with tests, it is typed\nwith ident which means that we want a valid identifier to be passed in.
  • $day_struct represents the structure that will be used for tests, it is typed\nwith tt which represents a token tree, in our case it is a type.
  • $part_X represents the expected output for the Xth part and is of type expr\nwhich literally means an expression.

Apart from that we need to use #[macro_export] to mark the macro as exported\nfor usage outside of the module. Now our skeleton looks like:

use aoc_2022::*;

type Input = String;
type Output = String;

struct DayXX;
impl Solution<Input, Output> for DayXX {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
file_to_string(pathname)
}

fn part_1(input: &Input) -> Output {
todo!()
}

fn part_2(input: &Input) -> Output {
todo!()
}
}

fn main() -> Result<()> {
// DayXX::run(\"sample\")
DayXX::main()
}

// test_sample!(day_XX, DayXX, , );

Solution

Not much to talk about, it is relatively easy to simulate.

Day 10: Cathode-Ray Tube

tl;dr

Emulating basic arithmetic operations on a CPU and drawing on CRT based on the\nCPU's accumulator.

In this day I have discovered an issue with my design of the Solution trait.\nAnd the issue is caused by different types of Output for the part 1 and part 2.

Problem is relatively simple and consists of simulating a CPU, I have approached\nit in a following way:

fn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {
instructions
.iter()
.fold(State::new(), |state, instruction| {
state.execute(instruction, &mut out)
});

out
}

We just take the instructions, we have some state of the CPU and we execute the\ninstructions one-by-one. Perfect usage of the fold (or reduce as you may know\nit from other languages).

You can also see that we have an Output type, so the question is how can we fix\nthat problem. And the answer is very simple and functional. Rust allows you to\nhave an enumeration that can bear some other values apart from the type itself.

tip

We could've seen something like this with the Result<T, E> type that can be\ndefined as

enum Result<T, E> {
Ok(T),
Err(E)
}
What does that mean though?

When we have an Ok value, it has the result itself, and when we get an Err\nvalue, it has the error. This also allows us to handle results in a rather\npretty way:

match do_something(x) {
Ok(y) => {
println!(\"SUCCESS: {}\", y);
},
Err(y) => {
eprintln!(\"ERROR: {}\", y);
}
}

My solution has a following outline:

fn execute(&self, i: &Instruction, output: &mut Output) -> State {
// execute the instruction

// collect results if necessary
match output {
Output::Part1(x) => self.execute_part_1(y, x),
Output::Part2(x) => self.execute_part_2(y, x),
}

// return the obtained state
new_state
}

You might think that it's a perfectly reasonable thing to do. Yes, but notice\nthat the match statement doesn't collect the changes in any way and also we\npass output by &mut, so it is shared across each iteration of the fold.

The dirty and ingenious thing is that xs are passed by &mut too and therefore\nthey are directly modified by the helper functions. To sum it up and let it sit

We are collecting the result into an enumeration that is shared\nacross all iterations of fold.

Solution

Similar to Day 9, but there are some technical details that can get you.

Day 11: Monkey in the Middle

tl;dr

Simulation of monkeys throwing stuff around and measuring your stress levels\nwhile your stuff is being passed around.

I think I decided to use regular expressions here for the first time, cause\nparsing the input was a pain.

Also I didn't expect to implement Euclidean algorithm in Rust…

Solution

Again, we're just running a simulation. Though I must admit it was very easy to\nmake a small technical mistakes that could affect the final results very late.

Day 12: Hill Climbing Algorithm

tl;dr

Finding shortest path up the hill and also shortest path down to the ground while\nalso rolling down the hill…

As I have said in the tl;dr, we are looking for the shortest path, but the start\nand goal differ for the part 1 and 2. So I have decided to refactor my solution\nto a BFS algorithm that takes necessary parameters via functions:

fn bfs<F, G>(
graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G
) -> Option<usize>
where
F: Fn(&[Vec<char>], &Position, &Position) -> bool,
G: Fn(&[Vec<char>], &Position) -> bool

We pass the initial vertex from the caller and everything else is left to the BFS\nalgorithm, based on the has_edge and is_target functions.

This was easy! And that is not very usual in Rust once you want to pass around\nfunctions. 👀

Solution

Looking for the shortest path… Must be Dijkstra, right? Nope! Half of the\nReddit got jebaited though. In all fairness, nothing stops you from implementing\nthe Dijkstra's algorithm for finding the shortest path, but if you know that\nall connected vertices are in a unit (actually d=1d = 1d=1) distance from each other,\nthen you know that running Dijkstra is equivalent to running BFS, only with worse\ntime complexity, because of the priority heap instead of the queue.

Day 13: Distress Signal

tl;dr

Processing packets with structured data from the distress signal.

You can implement a lot of traits if you want to. It is imperative to implement\nordering on the packets. I had a typo, so I also proceeded to implement a Display\ntrait for debugging purposes:

impl Display for Packet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Packet::Integer(x) => write!(f, \"{x}\"),
Packet::List(lst) => write!(f, \"[{}]\", lst.iter().map(|p| format!(\"{p}\")).join(\",\")),
}
}
}

Solution

A lot of technical details… Parsing is nasty too…

Day 14: Regolith Reservoir

tl;dr

Let's simulate falling sand grain-by-grain.

Again, both parts are relatively similar with minimal changes, so it is a good\nidea to refactor it a bit. Similar approach to the BFS above. Also this is the\nfirst day where I ran into efficiency issues and had to redo my solution to speed\nit up just a bit.

Solution

Tedious.

Post Mortem

Indexing

I was asked about the indexing after publishing the blog. And truly it is rather\ncomplicated topic, especially after releasing SliceIndex<I> trait. I couldn't\nleave it be, so I tried to implement the Index and IndexMut trait.

note

I have also mentioned that the SliceIndex trait is unsafe, but truth be told,\nonly unsafe part are the 2 methods that are named *unchecked*. Anyways, I will\nbe implementing the Index* traits for now, rather than the SliceIndex.

It's relatively straightforward…

impl<I, C> Index<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}

We can see a lot of similarities to the implementation of index and index_mut\nfunctions. In the end, they are 1:1, just wrapped in the trait that provides a\nsyntax sugar for container[idx].

note

I have also switched from using the TryFrom to TryInto trait, since it better\nmatches what we are using, the .try_into rather than usize::try_from.

Also implementing TryFrom automatically provides you with a TryInto trait,\nsince it is relatively easy to implement. Just compare the following:

pub trait TryFrom<T>: Sized {
type Error;

fn try_from(value: T) -> Result<Self, Self::Error>;
}

pub trait TryInto<T>: Sized {
type Error;

fn try_into(self) -> Result<T, Self::Error>;
}

OK, so we have our trait implemented, we should be able to use container[index],\nright? Yes… but actually no 😦

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:26:18
|
26 | if trees[pos] > tallest {
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:30:28
|
30 | max(tallest, trees[pos])
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`
--> src/bin/day08.rs:52:28
|
52 | let max_height = trees[position];
| ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`

Why? We have it implemented for the slices ([C]), why doesn't it work? Well,\nthe fun part consists of the fact that in other place, where we were using it,\nwe were passing the &[Vec<T>], but this is coming from a helper functions that\ntake &Vec<Vec<T>> instead. And… we don't implement Index and IndexMut for\nthose. Just for the slices. 🤯 What are we going to do about it?

We can either start copy-pasting or be smarter about it… I choose to be smarter,\nso let's implement a macro! The only difference across the implementations are\nthe types of the outer containers. Implementation doesn't differ at all!

Implementing the macro can be done in a following way:

macro_rules! generate_indices {
($container:ty) => {
impl<I, C> Index<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}
};
}

And now we can simply do

generate_indices!(VecDeque<C>);
generate_indices!([C]);
generate_indices!(Vec<C>);
// generate_indices!([C; N], const N: usize);

The last type (I took the inspiration from the implementations of the Index and\nIndexMut traits) is a bit problematic, because of the const N: usize part,\nwhich I haven't managed to be able to parse. And that's how I got rid of the error.

note

If I were to use 2D-indexing over [C; N] slices, I'd probably just go with the\ncopy-paste, cause the cost of this “monstrosity” outweighs the benefits of no DRY.

Cause of the problem

This issue is relatively funny. If you don't use any type aliases, just the raw\ntypes, you'll get suggested certain changes by the clippy. For example if you\nconsider the following piece of code

fn get_sum(nums: &Vec<i32>) -> i32 {
nums.iter().sum()
}

fn main() {
let nums = vec![1, 2, 3];
println!(\"Sum: {}\", get_sum(&nums));
}

and you run clippy on it, you will get

Checking playground v0.0.1 (/playground)
warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
--> src/main.rs:1:18
|
1 | fn get_sum(nums: &Vec<i32>) -> i32 {
| ^^^^^^^^^ help: change this to: `&[i32]`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg
= note: `#[warn(clippy::ptr_arg)]` on by default

warning: `playground` (bin \"playground\") generated 1 warning
Finished dev [unoptimized + debuginfo] target(s) in 0.61s

However, if you introduce a type alias, such as

type Numbers = Vec<i32>;

Then clippy won't say anything, cause there is literally nothing to suggest.\nHowever the outcome is not the same…

", + "url": "https://blog.mfocko.xyz/blog/aoc-2022/2nd-week", + "title": "2nd week of Advent of Code '22 in Rust", + "summary": "Surviving second week in Rust.", + "date_modified": "2022-12-25T23:15:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "advent-of-code", + "advent-of-code-2022", + "rust" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/aoc-2022/1st-week", + "content_html": "

Let's go through the first week of Advent of Code in Rust.

note

If you wish to have a look at the solutions, you can follow them on my GitLab.\nMore specifically in the /src/bin/.

I will try to summarize my experience with using Rust for the AoC. Trying it out\nages ago, I believe it will be pain and suffering, but we will see. For each\nday I will also try to give a tl;dr of the problem, so that you can better imagine\nthe relation to my woes or 👍 moments.

Day 1: Calorie Counting

tl;dr

As the name suggests, we get the calories of the food contained in the elves\nbackpacks and we want to choose the elf that has the most food ;)

Wakey wakey!

Programming in Rust at 6am definitely hits. I've also forgotten to mention how I\nhandle samples. With each puzzle you usually get a sample input and expected\noutput. You can use them to verify that your solution works, or usually doesn't.

At first I've decided to put asserts into my main, something like

assert_eq!(part_1(&sample), 24000);
info!(\"Part 1: {}\", part_1(&input));

assert_eq!(part_2(&sample), 45000);
info!(\"Part 2: {}\", part_2(&input));

However, once you get further, the sample input may take some time to run itself.\nSo in the end, I have decided to turn them into unit tests:

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_part_1() {
let sample = parse_input(\"samples/day01.txt\");
assert_eq!(part_1(&sample), 24000);
}

#[test]
fn test_part_2() {
let sample = parse_input(\"samples/day01.txt\");
assert_eq!(part_2(&sample), 45000);
}
}

And later on I have noticed, it's hard to tell the difference between the days,\nso I further renamed the mod from generic tests to reflect the days.

Also after finishing the first day puzzle, I have installed an sccache to\ncache the builds, so that the build time is lower, cause it was kinda unbearable.

Solution

Well, it's a pretty simple problem. You just take the input, sum the calories and\nfind the biggest one. However, if we try to generalize to more than the biggest\none, the fun appears. We have few options:

  • keep all the calories, sort them, take what we need
  • keep all the calories and use max heap
  • use min heap and maintain at most N calories that we need

Day 2: Rock Paper Scissors

tl;dr

You want to know what score did you achieve while playing Rock Paper Scissors.\nAnd then you want to be strategic about it.

Apart from the technical details of the puzzle, it went relatively smooth.

Solution

I took relatively naïve approach and then tried to simplify it.

Day 3: Rucksack Reorganization

tl;dr

Let's go reorganize elves' backpacks! Each backpacks has 2 compartments and you\nwant to find the common item among those compartments. Each of them has priority,\nyou care only about the sum.

This is the day where I started to fight the compiler and neither of us decided\nto give up. Let's dive into it \\o/

Fun fact

Fighting the compiler took me 30 minutes.

We need to find a common item among 2 collections, that's an easy task, right?\nWe can construct 2 sets and find an intersection:

let top: HashSet<i32> = [1, 2, 3].iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].iter().collect();

Now, the first issue that we encounter is caused by the fact that we are using\na slice (the […]), iterator of that returns references to the numbers.\nAnd we get immediately yelled at by the compiler, because the numbers are discarded\nafter running the .collect. To fix this, we can use .into_iter:

let top: HashSet<i32> = [1, 2, 3].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();

This way the numbers will get copied instead of referenced. OK, let's find the\nintersection of those 2 collections:

println!(\"Common elements: {:?}\", top.intersection(&bottom));
Common elements: [3]
caution

Notice that we need to do &bottom. It explicitly specifies that .intersection\nborrows the bottom, i.e. takes an immutable reference to it.

That's what we want, right? Looks like it! \\o/

Next part wants us to find the common element among all of the backpacks. OK, so\nthat should be fairly easy, we have an intersection and we want to find intersection\nover all of them.

Let's have a look at the type of the .intersection

pub fn intersection<'a>(
    &'a self,
    other: &'a HashSet<T, S>
) -> Intersection<'a, T, S>

OK… Huh… But we have an example there!

let intersection: HashSet<_> = a.intersection(&b).collect();

Cool, that's all we need.

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
println!(\"Intersection: {:?}\", intersection);
Intersection: {3, 4}

Cool, so let's do the intersection with the top_2:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
println!(\"Intersection: {:?}\", intersection);

And we get yelled at by the compiler:

error[E0308]: mismatched types
--> src/main.rs:10:58
|
10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
| ------------ ^^^^^^ expected `&i32`, found `i32`
| |
| arguments to this function are incorrect
|
= note: expected reference `&HashSet<&i32>`
found reference `&HashSet<i32>`

/o\\ What the hell is going on here? Well, the funny thing is, that this operation\ndoesn't return the elements themselves, but the references to them and when we pass\nthe third set, it has just the values themselves, without any references.

tip

It may seem as a very weird decision, but in fact it makes some sense… It allows\nyou to do intersection of items that may not be possible to copy. Overall this is\na “tax” for having a borrow checker drilling your ass having your back and\nmaking sure you're not doing something naughty that may cause an undefined\nbehavior.

To resolve this we need to get an iterator that clones the elements:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();
println!(\"Intersection: {:?}\", intersection);
Intersection: {4}

Solution

The approach is pretty simple, if you omit the 1on1 with the compiler. You just\nhave some fun with the set operations :)

Day 4: Camp Cleanup

tl;dr

Elves are cleaning up the camp and they got overlapping sections to clean up.\nFind how many overlap and can take the day off.

RangeInclusive is your friend not an enemy :)

Solution

Relatively easy, you just need to parse the input and know what you want. Rust's\nRangeInclusive type helped a lot, cause it took care of all abstractions.

Day 5: Supply Stacks

tl;dr

Let's play with stacks of crates.

Very easy problem with very annoying input. You can judge yourself:

    [D]    
[N] [C]
[Z] [M] [P]
1 2 3

move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

Good luck transforming that into something reasonable :)

Fun fact

Took me 40 minutes to parse this reasonably, including fighting the compiler.

Solution

For the initial solution I went with a manual solution (as in I have done all\nthe work. Later on I have decided to explore the std and interface of the\nstd::vec::Vec and found split_off which takes an index and splits (duh)\nthe vector:

let mut vec = vec![1, 2, 3];
let vec2 = vec.split_off(1);
assert_eq!(vec, [1]);
assert_eq!(vec2, [2, 3]);

This helped me simplify my solution a lot and also get rid of some edge cases.

Day 6: Tuning Trouble

tl;dr

Finding start of the message in a very weird protocol. Start of the message is\ndenoted by NNN unique consecutive characters.

Solution

A lot of different approaches, knowing that we are dealing with input consisting\nsolely of ASCII letters, I bit the bullet and went with sliding window and\nconstructing sets from that window, checking if the set is as big as the window.

One possible optimization could consist of keeping a bit-vector (i.e. usize\nvariable) of encountered characters and updating it as we go. However this has\na different issue and that is removal of the characters from the left side of the\nwindow. We don't know if the same character is not included later on.

Other option is to do similar thing, but keeping the frequencies of the letters,\nand again knowing we have only ASCII letters we can optimize by having a vector\nof 26 elements that keeps count for each lowercase letter.

Day 7: No Space Left On Device

tl;dr

Let's simulate du to get some stats about our file system and then pinpoint\ndirectories that take a lot of space and should be deleted.

I was waiting for this moment, and yet it got me!\nimagine me swearing for hours

Solution

We need to “build” a file system from the input that is given in a following form:

$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

There are few ways in which you can achieve this and also you can assume some\npreconditions, but why would we do that, right? :)

You can “slap” this in either HashMap or BTreeMap and call it a day.\nAnd that would be boring…

tip

BTreeMap is quite fitting for this, don't you think?

I always wanted to try allocation on heap in Rust, so I chose to implement a tree.\nI fought with the Box<T> for some time and was losing…

Then I looked up some implementations of trees or linked lists and decided to try\nRc<Cell<T>>. And I got my ass whopped by the compiler once again. /o\\

tip

Box<T> represents a dynamically allocated memory on heap. It is a single pointer,\nyou can imagine this as std::unique_ptr<T> in C++.

Rc<T> represents a dynamically allocated memory on heap. On top of that it is\nreference counted (that's what the Rc stands for). You can imagine this as\nstd::shared_ptr<T> in C++.

Now the fun stuff. Neither of them lets you mutate the contents of the memory.

Cell<T> allows you to mutate the memory. Can be used reasonably with types that\ncan be copied, because the memory safety is guaranteed by copying the contents\nwhen there is more than one mutable reference to the memory.

RefCell<T> is similar to the Cell<T>, but the borrowing rules (how many mutable\nreferences are present) are checked dynamically.

So in the end, if you want something like std::shared_ptr<T> in Rust, you want\nto have Rc<RefCell<T>>.

So, how are we going to represent the file system then? We will use an enumeration,\nhehe, which is an algebraic data type that can store some stuff in itself 😩

type FileHandle = Rc<RefCell<AocFile>>;

#[derive(Debug)]
enum AocFile {
File(usize),
Directory(BTreeMap<String, FileHandle>),
}

Let's go over it! FileHandle represents dynamically allocated AocFile, not\nmuch to discuss. What does the #[derive(Debug)] do though? It lets us to print\nout the value of that enumeration, it's derived, so it's not as good as if we had\nimplemented it ourselves, but it's good enough for debugging, hence the name.

Now to the fun part! AocFile value can be represented in two ways:

  • File(usize), e.g. AocFile::File(123) and we can pattern match it, if we\nneed to
  • Directory(BTreeMap<String, FileHandle>) will represent the directory and will\ncontain map matching the name of the files (or directories) within to their\nrespective file handles

I will omit the details about constructing this file system, cause there are a lot\nof technicalities introduced by the nature of the input. However if you are\ninterested, you can have a look at my solution.

We need to find small enough directories and also find the smallest directory that\nwill free enough space. Now the question is, how could we do that. And there are\nmultiple ways I will describe.

I have chosen to implement tree catamorphism 😩. It is basically a fold\nover a tree data structure. We descent down into the leaves and propagate computed\nresults all the way to the root. You can also notice that this approach is very\nsimilar to dynamic programming, we find overlapping sections of the computation\nand try to minimize the additional work (in this case: we need to know sizes of\nour descendants, but we have already been there).

Another approach that has been suggested to me few days later is running DFS on\nthe graph. And, funnily enough, we would still need to combine what we found in\nthe branches where we descent. So in the end, it would work very similarly to my\nsolution.

One of the more exotic options would be precomputing the required information at\nthe same time as parsing. That could be done by adding additional fields to the\nnodes which would allow storing such information and updating it as we construct\nthe file system.

Post Mortem

Things that have been brought up in the discussion later on.

Rc<T> vs Rc<RefCell<T>>

It has been brought up that I have a contradicting statement regarding the\ndynamically allocated memory. Specifically:

  • You can imagine Rc<T> as an std::shared_ptr<T> (in C++)
  • When you want an equivalent of std::shared_ptr<T>, you want to use\nRc<RefCell<T>>

Now, in Rust it is a bit more complicated, because the type that represents the\n“shared pointer” is Rc<T>. What RefCell<T> does is making sure that there is\nonly one “owner” of a mutable reference at a time (and dynamically, as opposed\nto the Cell<T>).

Therefore to be precise and correct about the equivalents of std::shared_ptr<T>\nin Rust, we can say that

  • Rc<T> is an equivalent of a const std::shared_ptr<T>,
  • and Rc<RefCell<T>> is an equivalent of a std::shared_ptr<T>.

You can easily see that they only differ in the mutability. (And even that is not\nas simple as it seems, because there is also Cell<T>)

", + "url": "https://blog.mfocko.xyz/blog/aoc-2022/1st-week", + "title": "1st week of Advent of Code '22 in Rust", + "summary": "Surviving first week in Rust.", + "date_modified": "2022-12-15T01:15:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "advent-of-code", + "advent-of-code-2022", + "rust" + ] + }, + { + "id": "https://blog.mfocko.xyz/blog/aoc-2022/intro", + "content_html": "

Let's talk about the preparations for this year's Advent of Code.

Choosing a language

When choosing a language for AoC, you usually want a language that gives you a\nquick feedback which allows you to iterate quickly to the solution of the puzzle.\nOne of the most common choices is Python, many people also use JavaScript or Ruby.

Given the competitive nature of the AoC and popularity among competitive programming,\nC++ might be also a very good choice. Only if you are familiar with it, I guess…

If you want a challenge, you might also choose to rotate the languages each day.\nThough I prefer to use only one language.

For this year I have been deciding between Rust, C++ and Pascal or Ada.

I have tried Rust last year and have survived with it for 3 days and then gave\nup and switched to Kotlin, which was pretty good given it is “Java undercover”.\nI pretty much like the ideas behind Rust, I am not sure about the whole cult and\nimplementation of those ideas though. After some years with C/C++, I would say\nthat Rust feels too safe for my taste and tries to “punish me” even for the\nmost trivial things.

C++ is a very robust, but also comes with a wide variety of options providing you\nthe ability to shoot yourself in the leg. I have tried to solve few days of previous\nAdvent of Code events, it was relatively easy to solve the problems in C++, given\nthat I do not admit writing my own iterator for enumerate

Pascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a\npretty nice standard library that offers enough to be able to quickly solve some\nproblems in it. However the toolkit is questionable :/

Choosing libraries

Preparations for Rust

All of the sources, later on including solutions, can be found at my\nGitLab.

Toolkit

Since we are using Rust, we are going to use a Cargo and more than likely VSCode\nwith rust-analyzer. Because of my choice of libraries, we will also introduce\na .envrc file that can be used by direnv, which allows you to set specific\nenvironment variables when you enter a directory. In our case, we will use

# to show nice backtrace when using the color-eyre
export RUST_BACKTRACE=1

# to catch logs generated by tracing
export RUST_LOG=trace

And for the one of the most obnoxious things ever, we will use a script to download\nthe inputs instead of “clicking, opening and copying to a file1. There is\nno need to be fancy, so we will adjust Python script by Martin2.

#!/usr/bin/env python3

import datetime
import yaml
import requests
import sys


def load_config():
with open(\"env.yaml\", \"r\") as f:
js = yaml.load(f, Loader=yaml.Loader)
return js[\"session\"], js[\"year\"]


def get_input(session, year, day):
return requests.get(
f\"https://adventofcode.com/{year}/day/{day}/input\",
cookies={\"session\": session},
headers={
\"User-Agent\": \"{repo} by {mail}\".format(
repo=\"gitlab.com/mfocko/advent-of-code-2022\",
mail=\"me@mfocko.xyz\",
)
},
).content.decode(\"utf-8\")


def main():
day = datetime.datetime.now().day
if len(sys.argv) == 2:
day = sys.argv[1]

session, year = load_config()
problem_input = get_input(session, year, day)

with open(f\"./inputs/day{day:>02}.txt\", \"w\") as f:
f.write(problem_input)


if __name__ == \"__main__\":
main()

If the script is called without any arguments, it will deduce the day from the\nsystem, so we do not need to change the day every morning. It also requires a\nconfiguration file:

# env.yaml
session: ‹your session cookie›
year: 2022

Libraries

Looking at the list of the libraries, I have chosen “a lot” of them. Let's walk\nthrough each of them.

tracing and tracing-subscriber are the crates that can be used for tracing\nand logging of your Rust programs, there are also other crates that can help you\nwith providing backtrace to the Sentry in case you have deployed your application\nsomewhere and you want to watch over it. In our use case we will just utilize the\nmacros for debugging in the terminal.

thiserror, anyhow and color-eyre are used for error reporting.\nthiserror is a very good choice for libraries, cause it extends the Error\nfrom the std and allows you to create more convenient error types. Next is\nanyhow which kinda builds on top of the thiserror and provides you with simpler\nerror handling in binaries3. And finally we have color-eyre which, as I found\nout later, is a colorful (wink wink) extension of eyre which is fork of anyhow\nwhile supporting customized reports.

In the end I have decided to remove thiserror and anyhow, since first one is\nsuitable for libraries and the latter was basically fully replaced by {color-,}eyre.

regex and lazy_static are a very good and also, I hope, self-explanatory\ncombination. lazy_static allows you to have static variables that must be initialized\nduring runtime.

itertools provides some nice extensions to the iterators from the std.

My own “library”

When creating the crate for this year's Advent of Code, I have chosen a library\ntype. Even though standard library is huge, some things might not be included and\nalso we can follow KISS. I have 2 modules that my “library” exports, one for\nparsing and one for 2D vector (that gets used quite often during Advent of Code).

Key part is, of course, processing the input and my library exports following\nfunctions that get used a lot:

/// Reads file to the string.
pub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;

/// Reads file and returns it as a vector of characters.
pub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;

/// Reads file and returns a vector of parsed structures. Expects each structure
/// on its own line in the file. And `T` needs to implement `FromStr` trait.
pub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>
where
<T as FromStr>::Err: Debug;

/// Converts iterator over strings to a vector of parsed structures. `T` needs
/// to implement `FromStr` trait and its error must derive `Debug` trait.
pub fn strings_to_structs<T: FromStr, U>(
iter: impl Iterator<Item = U>
) -> Vec<T>
where
<T as std::str::FromStr>::Err: std::fmt::Debug,
U: Deref<Target = str>;

/// Reads file and returns it as a vector of its lines.
pub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;

As for the vector, I went with a rather simple implementation that allows only\naddition of the vectors for now and accessing the elements via functions x()\nand y(). Also the vector is generic, so we can use it with any numeric type we\nneed.

Skeleton

We can also prepare a template to quickly bootstrap each of the days. We know\nthat each puzzle has 2 parts, which means that we can start with 2 functions that\nwill solve them.

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

Both functions take reference to the input and return some output (in majority\nof puzzles, it is the same type). todo!() can be used as a nice placeholder,\nit also causes a panic when reached and we could also provide some string with\nan explanation, e.g. todo!(\"part 1\"). We have not given functions a specific\ntype and to avoid as much copy-paste as possible, we will introduce type aliases.

type Input = String;
type Output = i32;
tip

This allows us to quickly adjust the types only in one place without the need to\ndo regex-replace or replace them manually.

For each day we get a personalized input that is provided as a text file. Almost\nall the time, we would like to get some structured type out of that input, and\ntherefore it makes sense to introduce a new function that will provide the parsing\nof the input.

fn parse_input(path: &str) -> Input {
todo!()
}

This “parser” will take a path to the file, just in case we would like to run the\nsample instead of input.

OK, so now we can write a main function that will take all of the pieces and\nrun them.

fn main() {
let input = parse_input(\"inputs/dayXX.txt\");

println!(\"Part 1: {}\", part_1(&input));
println!(\"Part 2: {}\", part_2(&input));
}

This would definitely do :) But we have installed a few libraries and we want to\nuse them. In this part we are going to utilize tracing (for tracing, duh…)\nand color-eyre (for better error reporting, e.g. from parsing).

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input(\"inputs/dayXX.txt\");

info!(\"Part 1: {}\", part_1(&input));
info!(\"Part 2: {}\", part_2(&input));

Ok(())
}

The first statement will set up tracing and configure it to print out the logs to\nterminal, based on the environment variable. We also change the formatting a bit,\nsince we do not need all the fancy features of the logger. Pure initialization\nwould get us logs like this:

2022-12-11T19:53:19.975343Z  INFO day01: Part 1: 0

However after running that command, we will get the following:

 INFO src/bin/day01.rs:35: Part 1: 0

And the color_eyre::install()? is quite straightforward. We just initialize the\nerror reporting by color eyre.

caution

Notice that we had to add Ok(()) to the end of the function and adjust the\nreturn type of the main to Result<()>. It is caused by the color eyre that\ncan be installed only once and therefore it can fail, that is how we got the ?\nat the end of the ::install which unwraps the »result« of the installation.

Overall we will get to a template like this:

use aoc_2022::*;

use color_eyre::eyre::Result;
use tracing::info;
use tracing_subscriber::EnvFilter;

type Input = String;
type Output = i32;

fn parse_input(path: &str) -> Input {
todo!()
}

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input(\"inputs/dayXX.txt\");

info!(\"Part 1: {}\", part_1(&input));
info!(\"Part 2: {}\", part_2(&input));

Ok(())
}

  1. Copy-pasting might be a relaxing thing to do, but you can also discover\nnasty stuff about your PC. See this Reddit post and the comment.
  2. GitHub profile
  3. Even though you can use it even for libraries, but handling errors from\nlibraries using anyhow is nasty… You will be the stinky one ;)
", + "url": "https://blog.mfocko.xyz/blog/aoc-2022/intro", + "title": "Advent of Code '22 in Rust", + "summary": "Preparing for Advent of Code '22.", + "date_modified": "2022-12-14T21:45:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "advent-of-code", + "advent-of-code-2022", + "rust" + ] + } + ] +} \ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..c891b3c --- /dev/null +++ b/blog/index.html @@ -0,0 +1,27 @@ + + + + + +Blog | mf + + + + + + + + + + + + + +
+
+ + + + \ No newline at end of file diff --git a/blog/leetcode/sort-diagonally/index.html b/blog/leetcode/sort-diagonally/index.html new file mode 100644 index 0000000..524fb4b --- /dev/null +++ b/blog/leetcode/sort-diagonally/index.html @@ -0,0 +1,113 @@ + + + + + +Sort the matrix diagonally | mf + + + + + + + + + + + + + +
+

Sort the matrix diagonally

· 17 min read
Matej Focko

Let's try to solve one of the LeetCode challenges in easy and hard mode at the +same time.

Problem description

A matrix diagonal is a diagonal line of cells starting from some cell in +either the topmost row or leftmost column and going in the bottom-right direction +until reaching the matrix's end. For example, the matrix diagonal starting +from mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0], +mat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending +order and return the resulting matrix.

Example

Image describing the problem

Skeleton and initial adjustments

We are given the following skeleton for the C++ and the given challenge:

class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

}
};

The task is to sort the passed matrix diagonally and then return it. First of all, +I don't like to solve this in a web browser, so we'll need to adjust it accordingly +for running it locally. We'll start by including the vector header and using +fully-qualified namespaces1 and also adding few tests:

#include <cassert>
#include <vector>

using matrix = std::vector<std::vector<int>>;

class Solution {
public:
matrix diagonalSort(matrix& mat)
{
}
};

static void test_case_1()
{
// Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
// Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
std::vector { 2, 2, 1, 2 },
std::vector { 1, 1, 1, 2 } })
== std::vector { std::vector { 1, 1, 1, 1 },
std::vector { 1, 2, 2, 2 },
std::vector { 1, 2, 3, 3 } }));
}

static void test_case_2()
{
// Input: mat =
// [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
// Output:
// [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
std::vector { 23, 55, 17, 45, 15, 52 },
std::vector { 75, 31, 36, 44, 58, 8 },
std::vector { 22, 27, 33, 25, 68, 4 },
std::vector { 84, 28, 14, 11, 5, 50 } })
== std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
std::vector { 11, 11, 25, 45, 8, 69 },
std::vector { 14, 23, 25, 44, 58, 15 },
std::vector { 22, 27, 31, 36, 50, 66 },
std::vector { 84, 28, 75, 33, 55, 68 } }));
}

int main()
{
test_case_1();
test_case_2();

return 0;
}

We need to return the matrix, but we're given a reference to the input matrix. We +can easily abuse the C++ here and just switch the reference to value, this way +the matrix will be copied when passed to the function, we can sort the copy and +just return it back. And we also get yelled by the compiler for the fact that the +method doesn't return anything yet, so to make it “shut up” we will just return +the input for now:

-    matrix diagonalSort(matrix& mat)
+ matrix diagonalSort(matrix mat)
{
+ return mat;
}

Now, we get the copy and we're good to go.

Naïve solution

As you may know, C++ offers a plethora of functions that can be used to your +advantage, given that you know how to “bend” the data structures accordingly.

What does that mean for us? Well, we have an std::sort, we can use it, right? +Let's have a look at it:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

This overload is more than we need. What does it do? It just sorts the elements +in the range [first, last) using operator< on them. We can't sort the whole +matrix using this, but… we can sort just »one« diagonal without doing much work +on our end.

What is the RandomIt type though? If we look more into the documentation, we +can easily find the requirements for it and also learn that it's a random access +iterator and allows swapping its values at the same time.

Random access iterator

What is the random access iterator though? We can find it in a documentation +and see the following description:

A LegacyRandomAccessIterator is a LegacyBidirectionalIterator +that can be moved to point to any element in constant time.

After that we can see all the requirements for it being listed. I don't feel like +reading them right now, so we will just use it and see where the compilation blows +up, i.e. “compiler-assisted development2 if you will ;)

Now we know that we can use std::sort to sort the diagonal itself, but we also +need to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to +someone else3. And that way we get

matrix diagonalSort(matrix mat)
{
// we iterate over the diagonals
for (auto d : diagonals(mat)) {
// and we sort each diagonal
std::sort(d.begin(), d.end());
}

// we take the matrix by copy, so we can sort in-situ and return the copy
// that we sorted
return mat;
}

This solution looks very simple, doesn't it? Well, cause it is. +Let's try compiling it:

matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
for (auto d : diagonals(mat)) {
^
Found compiler error(s).
make: *** [makefile:14: tidy] Error 1

OK, seems about right. We haven't implemented the diagonals yet. And based on +what we've written so far, we need a function or a class diagonals that will +give us the diagonals we need.

Implementing the diagonals

Cool, so we need the function that will let us go through each and every diagonal +in our matrix. We use the for-range loop, so whatever we get back from the +diagonals must support .begin() and .end(). Since I am a masochist, we will +do such functionality for a matrix of any type, not just the int from the challenge.

As I said, we need to be able to

  • construct the object
  • get the beginning
  • get the end (the “sentinel”)
template <typename T>
class diagonals {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& _matrix;

public:
diagonals(matrix_t& m)
: _matrix(m)
{
}
diagonals_iter begin()
{
/* TODO */
}
diagonals_iter end()
{
/* TODO */
}
};

Now we have a diagonals that we can use to go through the diagonals. We haven't +implemented the core of it yet. Let's go through what we have for now.

We have a templated class with templated T that is used as a placeholder for any +type we would store in the matrix. Because I'm lazy, I have defined the matrix_t +type that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to +type it out all the time. Of course, we need to store the matrix, we are given, +as a private attribute. And then just have the constructor and the 2 methods we +need for the for-range.

Iterating over diagonals

Now that we have an object that will allow us to iterate through the diagonals, +we need to implement the iterating itself. We need to go through all of them, so +we have multiple options how to do so. I have decided to start from the “main” +diagonal that starts at (0, 0) index and then proceed with the diagonals starting +in the first row, followed by the rest of the diagonals in the first column.

We need to be able to tell that we've iterated through all of them, and also we +need to know which diagonal is next. For that purpose we will pass the indices +of the first cell on the diagonal. That way we can always tell how to move forward.

We will start by updating the begin and end to reflect our choice accordingly.

diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }

For the begin we return the first diagonal that starts at (0, 0). And because +we have decided to do the diagonals in the first column at the end, the first +diagonal that is not a valid one is the one at (0, height). Apart from the +indices, we also need to pass reference to the matrix itself.

note

You may have noticed that we also include the diagonals that have length 1, +specifically the ones at (0, height - 1) and (width - 1, 0). We are implementing +an iterator that should not care about the way it's being used. Therefore, we +don't care about the fact they don't need to be sorted.

Cool, let's leave the iterator itself to someone else, right?4

Implementing the iterator over diagonals

We can start with a simple skeleton based on the information that we pass from +the diagonals. Also to utilize the matrix_t and also contain implementation +details hidden away, we will put this code into the diagonals class.

class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}
};

In this case we will be implementing a “simple” forward iterator, so we don't +need to implement a lot. Notably it will be:

  • inequality operator (we need to know when we reach the end and have nothing to +iterate over)
  • preincrementation operator (we need to be able to move around the iterable)
  • dereference operator (we need to be able to retrieve the objects we iterate +over)
class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator!=(const diagonals_iter& rhs) const
{
// iterators are not equal if they reference different matrices, or
// their positions differ
return m != rhs.m || x != rhs.x || y != rhs.y;
}

diagonals_iter& operator++()
{
if (y != 0) {
// iterating through diagonals down the first column
y++;
return *this;
}

// iterating the diagonals along the first row
x++;
if (x == m.front().size()) {
// switching to diagonals in the first column
x = 0;
y++;
}

return *this;
}

diagonal<T> operator*() const { return diagonal { m, x, y }; }
};

Let's go one-by-one. Inequality operator is rather simple, just compare iterator's +attributes field-by-field. If you think about it, checking inequality of two 2D +vectors may be a bit inefficient, therefore, we can swap around and check it as +a last thing.

-        return m != rhs.m || x != rhs.x || y != rhs.y;
+ return x != rhs.x || y != rhs.y || m != rhs.m;

Preincrementation is where the magic happens. If you have a better look, you can +see two branches of this operation:

  1. When y != 0 (we're iterating over the diagonals in the first column) +In this case, we just bump the row and we're done.
  2. When y == 0 (we're iterating over the diagonals in the first row) +In this case, we bump the column and check if we haven't gotten out of bounds, +i.e. the end of the first row. If we get out of the bounds, we're continuing +with the second diagonal in the first column.

Dereferencing the iterator must “yield” something. In our case it will be the +diagonal that we want to sort. For sorting we need just the iterators that can +move around said diagonal. The simplest thing, we can do, is to delegate it to +something else. In our case it will be a class called diagonal.

Implementing the diagonal itself

After implementing the iterator over diagonals, we know that all we need to describe +a diagonal is the matrix itself and the “start” of the diagonal (row and column). +And we also know that the diagonal must provide some iterators for the std::sort +function. We can start with the following skeleton:

template <typename T>
class diagonal {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& matrix;
std::size_t x;
std::size_t y;

public:
diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
: matrix(matrix)
, x(x)
, y(y)
{
}

diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

diagonal_iter end() const
{
auto max_x = matrix[y].size();
auto max_y = matrix.size();

// we need to find the distance in which we get out of bounds (either in
// column or row)
auto steps = std::min(max_x - x, max_y - y);

return diagonal_iter { matrix, x + steps, y + steps };
}
};

Initialization is rather simple, we just “keep” the stuff we get, begin is the +simplest, we just delegate.

In case of the end, it gets more complicated. We need to know where is the “end” +of the diagonal. Since end should point to the first element “after” the iterable, +we know that it's the first position of the iterator where either y becomes +matrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal, +duh, therefore we can deduce the first “position” afterwards by minimal amount of +steps to get out of the any column or row, hence std::min(max_x - x, max_y - y). +Final position is then computed simply by adding the steps to the beginning of +the diagonal.

Now we just need to finish the iterator for the diagonal itself and we're done.

Implementing diagonal_iter

This part is the hardest from all we need to do. It's because of the requirements +of the std::sort that requires us to implement a random access iterator. I have +briefly described it above, and “in a nutshell” it means that we need to implement +an iterator that can move in constant time along the diagonal in any amount of +steps.

Let's go through all of the functionality that our iterator needs to support to +be used in std::sort. We need the usual operations like:

  • equality/inequality
  • incrementation
  • dereferencing

We will also add all the types that our iterator uses with the category of the +iterator, i.e. what interface it supports:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }
};

This is pretty similar to the previous iterator, but now we need to implement the +remaining requirements of the random access iterator. Let's see what those are:

  • decrementation - cause we need to be able to move backwards too, since random access iterator extends the interface of bidirectional iterator
  • moving the iterator in either direction by steps given as an integer
  • being able to tell the distance between two iterators
  • define an ordering on the iterators

Let's fill them in:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }

// exactly opposite to the incrementation
diagonal_iter operator--()
{
x--;
y--;
return *this;
}

// moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
// can just return a new iterator and subtract ‹n› from both coordinates in
// the matrix
diagonal_iter operator-(difference_type n) const
{
return diagonal_iter { m, x - n, y - n };
}

// here we assume that we are given two iterators on the same diagonal
difference_type operator-(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x - rhs.x;
}

// counterpart of moving ‹n› steps backwards
diagonal_iter operator+(difference_type n) const
{
return diagonal_iter { m, x + n, y + n };
}

// we compare the coordinates, and also assume that those 2 iterators are
// lying on the same diagonal
bool operator<(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x < rhs.x && y < rhs.y;
}
};

At this point we could probably try and compile it, right? If we do so, we will +get yelled at by a compiler for the following reasons:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __next;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
std::__unguarded_linear_insert(__i,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
std::__unguarded_linear_insert(__i,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
__unguarded_linear_insert(_RandomAccessIterator __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __cut;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__introsort_loop(__first, __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

That's a lot of noise, isn't it? Let's focus on the important parts:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

Ah! We have a reference in our iterator, and this prevents us from having a copy +assignment operator (that is used “somewhere” in the sorting algorithm). Well… +Let's just wrap it!

# we need to keep a different type than reference
- matrix_t& m;
+ std::reference_wrapper<matrix_t> m;

# in comparison we need to get the reference out of the wrapper first
- return x == rhs.x && y == rhs.y && m == rhs.m;
+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

# same when we return a reference to the “cell” in the matrix
- reference operator*() const { return m[y][x]; }
+ reference operator*() const { return m.get()[y][x]; }

# and finally in the assertions that we set for the “distance” and “less than”
- assert(m == rhs.m);
+ assert(m.get() == rhs.m.get());

We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.


  1. just because I'm used to it and don't care about your opinion ;)
  2. exercise at your own risk
  3. me in 5 minutes in fact, but don't make me scared
  4. me in the next section…
+ + + + \ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml new file mode 100644 index 0000000..207b0b3 --- /dev/null +++ b/blog/rss.xml @@ -0,0 +1,725 @@ + + + + mf Blog + https://blog.mfocko.xyz/blog + mf's blog + Wed, 02 Aug 2023 00:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + + <![CDATA[How can Copr help with broken dependencies]]> + https://blog.mfocko.xyz/blog/2023/08/02/copr + https://blog.mfocko.xyz/blog/2023/08/02/copr + Wed, 02 Aug 2023 00:00:00 GMT + + When you decide to run Fedora on your VPS, you might get screwed over by using +random repositories…

When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without +thinking. I bet 99% of people would say that I'm crazy for doing such thing2, +BUT I've been using Fedora on my PCs for some time already and it felt very +stable and natural to just use, even for VPS.

One of the first things I've done was setting up a mail server. You may guess +what's the fun part about having a mail server… Yes, it's all the spam you +receive and only then you realize how much “crap” gets filtered on free mail +services. To battle this problem I chose to use +rspamd that had CentOS support, but someone +had a Copr repository that I used to +install it.

How does Copr repositories work?

If you have ever used Ubuntu, you might be familiar with the concept since it is +very close to PPAs.

tl;dr of the whole process consists of

  1. enabling the Copr repository, and
  2. installing the desired package.

So in shell you would do

# dnf copr enable ‹copr-repository›
# dnf install ‹package-from-the-repository›

And… that's it! Nothing else needed! Simple, right? And literally same process +as you would do for the PPA.

AUR

On the other hand, if you are familiar with the archLinux, you definitely know +AUR and what it can do for you. Copr repository is pretty similar, but the +packages are prebuilt in Copr and Copr repositories can carry the required +dependencies for said packages, which simplifies the distribution, and can even +help with installing singular packages (when you just need the dependency, not +everything).

My issue

Now you might wonder how would I use it on my VPS. It's rather simple, once in +6 months a new Fedora release comes out. And you need to upgrade to newer +release… You don't need to do it right away and for such setup it probably isn't +even recommended.

tip

Fedora releases are supported for a year, i.e. they live 6 months till the next +release and then another 6 months till another release.

Some people prefer to run one version “behind”. If you ever decide to run it on +your home server or in a similar setup, it might be a pretty good idea to +follow. I'm using the “latest greatest”, cause why not 😄

One way or another, you still need to bump the release every six months, unless +you'd bump 2 releases at once every year, which would be a decision, since, at +least I, cannot see any benefits in it… You don't go for “stability”, cause once +a year you switch to the latest release and then, before you bump, you use one +year old software, so you're not even using the latest.

Fast-forward 2 years in the future, new Fedora release came out (October '22) +and I was doing an upgrade. Dependencies of the rspamd have been updated and +rspamd builds in Copr have failed and no one fixed it. Cool, so now I can +upgrade, but can either ignore the dependencies or uninstall the rspamd…

How can Copr help?

I have managed to find +specfile for the +rspamd package that they use for CentOS. There were some files apart from the +specfile, so I had to make an SRPM locally and then… I just uploaded the SRPM +to the Copr to +build +an RPM.

I have switched the previous Copr repository for rspamd with my own and happily +proceeded with the upgrade.

Conclusion

Copr is heavily used for testing builds on the upstream with +Packit. However, as you can see, it is possible to use it +very well for packaging your own stuff and avoiding issues (such as the one +I have described above), if need be.


  1. vpsFree.cz
  2. Even though I've been running archLinux on some Raspberry Pi's and also +on one of my “home servers”, before getting the VPS. You could say I like +to live on the edge…
]]>
+ me+blog@mfocko.xyz (Matej Focko) + 🏭 + red-hat + copr + admin + vps +
+ + <![CDATA[4th week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/4th-week + https://blog.mfocko.xyz/blog/aoc-2022/4th-week + Fri, 07 Jul 2023 15:14:00 GMT + + Let's go through the fourth week of Advent of Code in Rust.

Day 22: Monkey Map

tl;dr

Simulating a movement on a 2D map with given instructions. Map becomes a cube in +the 2nd part…

Rant

This was the most obnoxious problem of this year… and a lot of Rust issues have +been hit.

Solution

It seems like a very simple problem to solve, but with very obnoxious changes in +the 2nd part and also it's relatively hard to decompose »properly«.

Column iterator

In the first part of the problem it was needed to know the boundaries of each +row and column, since I stored them in Vec<Vec<char>> and padded with spaces +to ensure I have a rectangular 2D “array”. However when you wanted to go through +each row and column to determine the boundaries, it was very easy to do for the +rows (cause each row is a Vec element), but not for the columns, since they +span multiple rows.

For this use case I have implemented my own column iterator:

pub struct ColumnIterator<'a, T> {
map: &'a [Vec<T>],
column: usize,

i: usize,
}

impl<'a, T> ColumnIterator<'a, T> {
pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
Self { map, column, i: 0 }
}
}

impl<'a, T> Iterator for ColumnIterator<'a, T> {
type Item = &'a T;

fn next(&mut self) -> Option<Self::Item> {
if self.i >= self.map.len() {
return None;
}

self.i += 1;
Some(&self.map[self.i - 1][self.column])
}
}

Given this piece of an iterator, it is very easy to factor out the common +functionality between the rows and columns into:

let mut find_boundaries = |constructor: fn(usize) -> Orientation,
iterator: &mut dyn Iterator<Item = &char>,
upper_bound,
i| {
let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
let start = first_non_empty.next().unwrap().0 as isize;

let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

boundaries.insert(constructor(i), start..end);
};

And then use it as such:

// construct all horizontal boundaries
(0..map.len()).for_each(|row| {
find_boundaries(
Orientation::horizontal,
&mut map[row].iter(),
map[row].len(),
row,
);
});

// construct all vertical boundaries
(0..map[0].len()).for_each(|col| {
find_boundaries(
Orientation::vertical,
&mut ColumnIterator::new(&map, col),
map.len(),
col,
);
});

Walking around the map

Once the 2nd part got introduced, you start to think about a way how not to +copy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've +chosen to introduce a trait (i.e. interface) for 2D and 3D walker.

trait Wrap: Clone {
type State;

// simulation
fn is_blocked(&self) -> bool;
fn step(&mut self, steps: isize);
fn turn_left(&mut self);
fn turn_right(&mut self);

// movement
fn next(&self) -> (Self::State, Direction);

// final answer
fn answer(&self) -> Output;
}

Each walker maintains its own state and also provides the functions that are +used during the simulation. The “promised” methods are separated into:

  • simulation-related: that are used during the simulation from the .fold()
  • movement-related: just a one method that holds most of the logic differences +between 2D and 3D
  • final answer: which extracts the proof of solution from the +implementation-specific walker

Both 2D and 3D versions borrow the original input and therefore you must +annotate the lifetime of it:

struct Wrap2D<'a> {
input: &'a Input,
position: Position,
direction: Direction,
}
impl<'a> Wrap2D<'a> {
fn new(input: &'a Input) -> Wrap2D<'a> {
// …

Problems

I have used a lot of closures for this problem and once I introduced a parameter +that was of unknown type (apart from the fact it implements a specific trait), I +got suggested a “fix” for the compilation error that resulted in something that +was not possible to parse, cause it, more than likely, violated the grammar.

In a similar fashion, I have been suggested changes that led to a code that +didn't make sense by just looking at it (there was no need to try the changes), +for example one suggested change in the closure parameter caused disapperance of +the parameter name. 😄

Clippy

I have to admit that Clippy was rather helpful here, I'll include two examples +of rather smart suggestions.

When writing the parsing for this problem, the first thing I have spotted on the +char was the .is_digit() function that takes a radix as a parameter. Clippy +noticed that I use radix = 10 and suggested switching to .is_ascii_digit() +that does exactly the same thing:

-                .take_while(|c| c.is_digit(10))
+ .take_while(|c| c.is_ascii_digit())

Another useful suggestion appeared when working with the iterators and I wanted +to get the nn-th element from it. You know the .skip(), you know the +.next(), just “slap” them together and we're done for 😁 Well, I got +suggested to use .nth() that does exactly the combination of the two mentioned +methods on iterators:

-            match it.clone().skip(skip).next().unwrap() {
+ match it.clone().nth(skip).unwrap() {

Day 23: Unstable Diffusion

tl;dr

Simulating movement of elves around with a set of specific rules.

Solution

There's not much to mention since it's just a cellular automaton simulation +(even though the AoC rules for cellular automatons usually get out of hand +😉).

Although I had a need to determine boundaries of the elves' positions and ended +up with a nasty DRY violation. Knowing that you you're looking for maximum and +minimum that are, of course, exactly the same except for initial values and +comparators, it looks like a rather simple fix, but typing in Rust is something +else, right? In the end I settled for a function that computes both boundaries +without any duplication while using a closure:

fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
positions
.iter()
.fold(Vector2D::new(init, init), |acc, elf| {
Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
})
};

(f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
}

This function returns a pair of 2D vectors that represent opposite points of the +bounding rectangle of all elves.

You might ask why would we need a closure and the answer is that positions +cannot be captured from within the nested function, only via closure. One more +fun fact on top of that is the type of the comparator

&dyn Fn(isize, isize) -> isize

Once we remove the dyn keyword, compiler yells at us and also includes a way +how to get a more thorough explanation of the error by running

$ rustc --explain E0782

which shows us

Trait objects must include the `dyn` keyword.

Erroneous code example:

```
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
```

Trait objects are a way to call methods on types that are not known until
runtime but conform to some trait.

Trait objects should be formed with `Box<dyn Foo>`, but in the code above
`dyn` is left off.

This makes it harder to see that `arg` is a trait object and not a
simply a heap allocated type called `Foo`.

To fix this issue, add `dyn` before the trait name.

```
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
```

This used to be allowed before edition 2021, but is now an error.
Rant

Not all of the explanations are helpful though, in some cases they might be even +more confusing than helpful, since they address very simple use cases.

As you can see, even in this case there are two sides to the explanations:

  • it explains why you need to use dyn, but
  • it still mentions that trait objects need to be heap-allocated via Box<T> +that, as you can see in my snippet, does not apply here 😄 IMO it's +caused by the fact that we are borrowing it and therefore we don't need to +care about the size or whereabouts of it.
C++ parallel

If you dive into the explanation above, you can notice that the Box<dyn Trait> +pattern is very helpful for using types that are not known during compile-time. +You would use a very similar approach in C++ when parsing some data structure +from input (let's say JSON for example).

On the other hand, in this case, it doesn't really make much sense, cause you +can clearly see that the types are known during the compile-time, which in +C++ could be easily resolved by templating the helper function.

Day 24: Blizzard Basin

tl;dr

Navigating your way through a basin with series of blizzards that move around +you as you move.

caution

It's second to last day and I went “bonkers” on the Rust 😄 Proceed to +read Solution part on your own risk.

Solution

You are given a map with blizzards all over the place and you're supposed to +find the minimum time it requires you to walk through the basin without getting +in any of the blizzards.

Breakdown

Relatively simple, yet a bit annoying, approach can be taken. It's technically +a shortest-path algorithm implementation with some relaxation restrictions and +being able to stay on one position for some time, so each vertex of the graph +is determined by the position on the map and the timestamp. I have chosen to +use Vector3D<usize>, since x and y attributes can be used for the position +and, well, let's use z for a timestamp, cause why not, right? 😉

Evaluating the blizzards

caution

I think that this is the most perverted abuse of the traits in the whole 4 weeks +of AoC in Rust…

The blizzards move along their respective directions in time and loop around in +their respective row/column. Each vertex holds position and time, so we can +just index the basin with the vertex itself, right? Yes, we can 😈

Fun fact

While writing this part, I've recognized unnecessary verbosity in the code and +cleaned it up a bit. The changed version is shown here and the original was just +more verbose.

I'll skip the boring parts of checking bounds and entry/exit of the basin 😉 +We can easily calculate positions of the blizzards using a modular arithmetics:

impl Index<Position> for Basin {
type Output = char;

fn index(&self, index: Position) -> &Self::Output {
// ‹skipped boring parts›

// We need to account for the loops of the blizzards
let width = self.cols - 2;
let height = self.rows - 2;

let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
[
(
index.y() as usize,
blizzard_origin(width, -1, index.z(), index.x()),
'>',
),
(
index.y() as usize,
blizzard_origin(width, 1, index.z(), index.x()),
'<',
),
(
blizzard_origin(height, -1, index.z(), index.y()),
index.x() as usize,
'v',
),
(
blizzard_origin(height, 1, index.z(), index.y()),
index.x() as usize,
'^',
),
]
.iter()
.find_map(|&(y, x, direction)| {
if self.map[y][x] == direction {
Some(&self.map[y][x])
} else {
None
}
})
.unwrap_or(&'.')
}
}

As you can see, there is an expression for calculating the original position and +it's used multiple times, so why not take it out to a lambda, right? 😉

I couldn't get the rustfmt to format the for-loop nicely, so I've just +decided to go with iterating over an elements of a slice. I have used, once +again, a combination of two functions (find_map in this case) to do 2 things +at once and at the end, if we haven't found any blizzard, we just return the +empty space.

I think it's a very nice (and naughty) way how to use the Index trait, don't +you think?

Shortest-path algorithm

For the shortest path you can choose and adjust any of the common shortest-path +algorithms, in my case, I have decided to use A* instead of Dijkstra's +algorithm, since it better reflects the cost function.

Comparison of costs

With the Dijkstra's algorithm I would proceed with the time attribute used as +a priority for the queue.

Whereas with the A*, I have chosen to use both time and Manhattan distance +that promotes vertices closer to the exit and with a minimum time taken.

Cost function is, of course, a closure 😉

let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());

And also for checking the possible moves from the current vertex, I have +implemented, yet another, closure that yields an iterator with the next moves:

let next_positions = |p| {
[(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
.iter()
.filter_map(move |&(x, y, t)| {
let next_p = p + Vector3D::new(x, y, t);

if basin[next_p] == '.' {
Some(next_p)
} else {
None
}
})
};

Min-heap

In this case I had a need to use the priority queue taking the elements with the +lowest cost as the prioritized ones. Rust only offers you the BinaryHeap and +that is a max-heap. One of the ways how to achieve a min-heap is to put the +elements in wrapped in a Reverse (as is even showed in the linked docs of +the BinaryHeap). However the wrapping affects the type of the heap and also +popping the most prioritized elements yields values wrapped in the Reverse.

For this purpose I have just taken the max-heap and wrapped it as a whole in a +separate structure providing just the desired methods:

use std::cmp::{Ord, Reverse};
use std::collections::BinaryHeap;

pub struct MinHeap<T> {
heap: BinaryHeap<Reverse<T>>,
}

impl<T: Ord> MinHeap<T> {
pub fn new() -> MinHeap<T> {
MinHeap {
heap: BinaryHeap::new(),
}
}

pub fn push(&mut self, item: T) {
self.heap.push(Reverse(item))
}

pub fn pop(&mut self) -> Option<T> {
self.heap.pop().map(|Reverse(x)| x)
}
}

impl<T: Ord> Default for MinHeap<T> {
fn default() -> Self {
Self::new()
}
}

Rest is just the algorithm implementation which is not that interesting.

Day 25: Full of Hot Air

tl;dr

Playing around with a numbers in a special base.

Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem” +with a rather easy solution, as the last day always seems to be.

Solution

Implementing 2 functions, converting from the SNAFU base and back to the SNAFU +base representation. Let's do a bit more though! I have implemented two functions:

  • from_snafu
  • to_snafu

Now it is apparent that all I do is number to string and string to number. Hmm… +that sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers +and implement the traits that we need.

Let's start with a structure:

#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct SNAFU {
value: i64,
}

Converting from &str

We will start by implementing the FromStr trait that will help us parse our input. +This is rather simple, I can just take the from_snafu function, copy-paste it +into the from_str method and the number I get will be wrapped in Result and +SNAFU structure.

Converting to String

This is more fun. In some cases you need to implement only one trait and others +are automatically implemented using that one trait. In our case, if you look in +the documentation, you can see that ToString trait is automatically implemented +for any type that implements Display trait.

Let's implement the Display trait then. We should be able to use the to_snafu +function and just take the self.value from the SNAFU structure.

And for the convenience of tests, we can also implement a rather simple From<i64> +trait for the SNAFU.

Adjusting the code

After those changes we need to adjust the code and tests.

Parsing of the input is very easy, before we have used the lines, now we parse +everything:

     fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
- file_to_lines(pathname)
+ file_to_structs(pathname)
}

Part 1 needs to be adjusted a bit too:

     fn part_1(input: &Input) -> Output {
- to_snafu(input.iter().map(|s| from_snafu(s)).sum())
+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
}

You can also see that it simplifies the meaning a bit and it is more explicit than +the previous versions.

And for the tests:

     #[test]
fn test_from() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(from_snafu(s), *n);
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
}
}

#[test]
fn test_to() {
- for (n, s) in EXAMPLES.iter() {
- assert_eq!(to_snafu(*n), s.to_string());
+ for (&n, s) in EXAMPLES.iter() {
+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());
}

Summary

Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

Finished advent calendar :smile:

Advent of Code

This year was quite fun, even though most of the solutions and posts came in +later on (cough in '23 cough). Day 22 was the most obnoxious one… And also +it feels like I used priority queues and tree data structures a lot 👀

with Rust

I must admit that a lot of compiler warnings and errors were very useful. Even +though I still found some instances where they didn't help at all or cause even +worse issues than I had. Compilation times have been addressed with the caching.

Building my first tree data structure in Rust has been a very “interesting” +journey. Being able to write a more generic BFS algorithm that allows you to not +duplicate code while still mantaining the desired functionality contributes to +a very readable code.

I am definitely much more aware of the basic things that bloated Python is +missing, yet Rust has them…

Using explicit types and writing down placeholder functions with todo!() +macros is very pleasant, since it allows you to easily navigate the type system +during the development when you don't even need to be sure how are you going to +put the smaller pieces together.

I have used a plethora of traits and also implemented some of them to either be +idiomatic, or exploit the syntactic sugar they offer. Deriving the default trait +implementation is also very helpful in a lot of cases, e.g. debugging output, +copying, equality comparison, etc.

I confess to touching more “cursed” parts of the Rust, such as macros to +declutter the copy-paste for tests or writing my own structures that need to +carry a lifetime for their own fields.

tl;dr Relatively pleasant language until you hit brick wall 😉


See you next year! Maybe in Rust, maybe not 🙃

]]>
+ me+blog@mfocko.xyz (Matej Focko) + advent-of-code + advent-of-code-2022 + rust +
+ + <![CDATA[3rd week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/3rd-week + https://blog.mfocko.xyz/blog/aoc-2022/3rd-week + Thu, 06 Jul 2023 21:00:00 GMT + + Let's go through the third week of Advent of Code in Rust.

Day 15: Beacon Exclusion Zone

tl;dr

Triangulating a distress beacon based on the information from the sensors.

Solution

Relatively easy thing to implement, no major Rust issues hit.

Day 16: Proboscidea Volcanium

tl;dr

Finding a max flow in a graph given some time constraints.

Solution

I have used some interesting things to implement this and make it easier for me.

Indexing in graph

I have come across a situation where I needed to keep more information regarding +the graph… In that case you can, of course, create a structure and keep it in, +but once you have multiple members in the structure it gets harder to work with +since you need to address the fields in the structure. When you work with graph, +you frequently need to access the vertices and in this case it felt a lot easier +to implement the indexing in a graph, rather than explicitly access the +underlying data structure.

Here you can see a rather short snippet from the solution that allows you to +“index” the graph:

impl Index<&str> for Graph {
type Output = Vertex;

fn index(&self, index: &str) -> &Self::Output {
&self.g[index]
}
}

Cartesian product

During the implementation I had to utilize Floyd-Warshall algorithm for finding +the shortest path between pairs of vertices and utilized the iproduct! macro +from the itertools. It is a very useful higher-order function that allows +you to keep the nesting of the loops at a minimum level while still maintaining +the same functionality.

“Implementing” an iterator

For the second part, you get to split the work between 2 actors. That way you +can achieve higher efficiency of the whole process that you're planning, but it +also makes it harder to evaluate algorithmically, since you need to check the +different ways the work can be split.

Being affected by functional programming brain damage™️, I have chosen to +do this part by function that returns an iterator over the possible ways:

fn pairings(
valves: &BTreeSet<String>,
) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + '_ {
let mapping = valves.iter().collect_vec();

let max_mask = 1 << (valves.len() - 1);

(0..max_mask).map(move |mask| {
let mut elephant = BTreeSet::new();
let mut human = BTreeSet::new();

for (i, &v) in mapping.iter().enumerate() {
if (mask & (1 << i)) == 0 {
human.insert(v.clone());
} else {
elephant.insert(v.clone());
}
}

(human, elephant)
})
}

Day 17: Pyroclastic Flow

tl;dr

Simulating an autonomous Tetris where pieces get affected by a series of jets of +hot gas.

Solution

Similarly to the previous day I have created some iterators 😄

Collision detection

Once you need to check for collisions it is very helpful to be able to just +iterate through the positions that can actually collide with the wall or other +piece.

To get the desired behaviour, you can just compose few smaller functions:

fn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + '_ {
shape.iter().enumerate().flat_map(|(y, row)| {
row.iter().enumerate().filter_map(move |(x, c)| {
if c == &'#' {
Some(Vector2D::new(x as isize, y as isize))
} else {
None
}
})
})
}

In the end, we get relative positions which we can adjust later when given the +specific positions from iterator. You can see some interesting parts in this:

  • .enumerate() allows us to get both the indices (coordinates) and the line +or, later on, the character itself,
  • .flat_map() flattens the iterator, i.e. when we return another iterator, +they just get chained instead of iterating over iterators (which sounds pretty +disturbing, doesn't it?),
  • and finally .filter_map() which is pretty similar to the “basic” .map() +with a one, key, difference that it expects the items of an iterator to be +mapped to an Option<T> from which it ignores nothing (as in None 😉) +and also unwraps the values from Some(…).

Infinite iterator

In the solution we cycle through both Tetris-like shapes that fall down and the +jets that move our pieces around. Initially I have implemented my own infinite +iterator that just yields the indices. It is a very simple, yet powerful, piece +of code:

struct InfiniteIndex {
size: usize,
i: usize,
}

impl InfiniteIndex {
fn new(size: usize) -> InfiniteIndex {
InfiniteIndex { size, i: size - 1 }
}
}

impl Iterator for InfiniteIndex {
type Item = usize;

fn next(&mut self) -> Option<Self::Item> {
self.i = (self.i + 1) % self.size;
Some(self.i)
}
}

However when I'm looking at the code now, it doesn't really make much sense… +Guess what, we can use a built-in function that is implemented on iterators for +that! The function is called .cycle()

On the other hand, I am not going to switch to that function, since it would +introduce an another myriad of issues caused by the fact that I create iterators +right away in the constructor of my structure and the iterators would borrow +both the jets and shapes which would introduce a lifetime dependency into the +structure.

Day 18: Boiling Boulders

tl;dr

Let's compute a surface area of some obsidian approximated via coordinates of +cubes.

Solution

This day is kinda interesting, because it shows how easily you can complicate the +problem and also how much can you screw yourself over with the optimization and +“smart” approach.

For the first part you need to find the surface area of an obsidian that is +approximated by cubes. Now, that is a very easy thing to do, just keep the track +of already added cubes, and check if the newly added cube touches any face of any +other cube. Simple, and with a BTreeSet relatively efficient way to do it.

However the second part lets you on a secret that there may be some surface area +from the “inside” too and you want to know only the one from the outside of the +obsidian. I have seen some solutions later, but if you check your data, you might +notice that the bounding box of all the cubes isn't that big at all. Therefore I +chose to pre-construct the box beforehand, fill in the cubes and then just run a +BFS turning all the lava on the outside into the air. Now you just need to check +cubes and count how many of their faces touch the air.

Day 19: Not Enough Minerals

tl;dr

Finding out the best strategy for building robots to collect geodes.

Solution

Not much interesting stuff to mention apart from the suggestion to never believe +that the default implementation given by derive macro is what you want, it +doesn't have to be. 😄

Day 20: Grove Positioning System

tl;dr

Shuffling around the circular linked list to find the coordinates.

Now, small rant for this day is in place. They've never mentioned that coordinates +can repeat and therefore the values are non-unique. This is something that did +not happen in the given sample, but was present in the user input. It took »a lot« +to realize that this is the issue.

Solution

I have tried implementing a circular linked list for this… and I have failed +miserably. To be fair, I still have no clue why. It was “fun” to play around with +the Rc<RefCell<T>>. In the end I failed on wrong answer. I have also encountered +a rather interesting issue with .borrow_mut() method being used on Rc<RefCell<T>>.

.borrow_mut()

Consider the following snippet of the code (taken from the documentation):

use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::rc::Rc;
// use std::borrow::BorrowMut;

fn main() {
let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));
// Create a new block to limit the scope of the dynamic borrow
{
let mut map: RefMut<_> = shared_map.borrow_mut();
map.insert("africa", 92388);
map.insert("kyoto", 11837);
map.insert("piccadilly", 11826);
map.insert("marbles", 38);
}

// Note that if we had not let the previous borrow of the cache fall out
// of scope then the subsequent borrow would cause a dynamic thread panic.
// This is the major hazard of using `RefCell`.
let total: i32 = shared_map.borrow().values().sum();
println!("{total}");
}

We allocate a hash map on the heap and then in the inner block, we borrow it as +a mutable reference, so that we can use it.

note

It is a very primitive example for Rc<RefCell<T>> and mutable borrow.

If you uncomment the 4th line with use std::borrow::BorrowMut;, you cannot +compile the code anymore, because of

   Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
--> src/main.rs:10:34
|
10 | let mut map: RefMut<_> = shared_map.borrow_mut();
| --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference
| |
| expected due to this
|
= note: expected struct `RefMut<'_, _>`
found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:11:13
|
11 | map.insert("africa", 92388);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:12:13
|
12 | map.insert("kyoto", 11837);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:13:13
|
13 | map.insert("piccadilly", 11826);
| ^^^^^^ method not found in `RefMut<'_, _>`

error[E0599]: no method named `insert` found for struct `RefMut<'_, _>` in the current scope
--> src/main.rs:14:13
|
14 | map.insert("marbles", 38);
| ^^^^^^ method not found in `RefMut<'_, _>`

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `playground` due to 5 previous errors

It might seem a bit ridiculous. However, I got to a point where the compiler +suggested use std::borrow::BorrowMut; and it resulted in breaking parts of the +code that worked previously. I think it may be a good idea to go over what is +happening here.

.borrow_mut() on Rc<RefCell<T>>

Let's consider a variable x of type Rc<RefCell<T>>. What happens when you +call .borrow_mut() on it? We can look at the Rc type, and… hang on! There is +neither .borrow_mut() method or BorrowMut trait implemented. How can we do it +then?

Let's go further and we can see that RefCell<T> implements a .borrow_mut() +method. OK, but how can we call it on the Rc<T>? Easily! Rc<T> implements +Deref<T> and therefore you can call methods on Rc<T> objects as if they were +T objects. If we read on Deref coercion, we can see the following:

If T implements Deref<Target = U>, …:

  • T implicitly implements all the (immutable) methods of the type U.

What is the requirement for the .borrow_mut() on RefCell<T>? Well, it needs +&self, so the Deref implements the .borrow_mut() for the Rc<RefCell<T>>.

BorrowMut trait

I have not been able to find a lot on this trait. My guess is that it provides a +method instead of a syntactic sugar (&mut x) for the mutable borrow. And also +it provides default implementations for the types:

impl BorrowMut<str> for String

impl<T> BorrowMut<T> for &mut T
where
T: ?Sized,

impl<T> BorrowMut<T> for T
where
T: ?Sized,

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where
A: Allocator,

impl<T, A> BorrowMut<T> for Box<T, A>
where
A: Allocator,
T: ?Sized,

impl<T, const N: usize> BorrowMut<[T]> for [T; N]
Conflict

Now the question is why did it break the code… My first take was that the type +Rc<RefCell<T>> has some specialized implementation of the .borrow_mut() and +the use overrides it with the default, which is true in a sense. However +there is no specialized implementation. Let's have a look at the trait and the +type signature on the RefCell<T>:

// trait
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow_mut(&mut self) -> &mut Borrowed;
}

// ‹RefCell<T>.borrow_mut()› type signature
pub fn borrow_mut(&self) -> RefMut<'_, T>

I think that we can definitely agree on the fact that RefMut<'_, T> is not the +RefCell<T>.

In my opinion, RefCell<T> implements a separate .borrow_mut() rather +than implementing the interface, because it cannot satisfy the type requirements +of the trait.

caution

I wonder how are we expected to deal with this conflict, if and when, we need +both the .borrow_mut() of the trait and .borrow_mut() of the RefCell<T>.

Fun fact

I was suggested by the compiler to do use std::borrow::BorrowMut; and break the +code.

So much for the almighty and helpful compiler…

Day 21: Monkey Math

tl;dr

Computing an expression tree and then also finding ideal value for a node.

Solution

Relatively simple, until you get to the 2nd part where you start to practice +a lot of the copy-paste. I have managed to sneak some perverted stuff in there +though :) Let's go through the details.

Default trait

For the first time and twice I had a need to have a default value for my types, +enumerations in this case. Rust offers a very nice trait1 that is described +as:

A trait for giving a type a useful default value.

I guess it sums it up nicely. The more interesting part about this is the fact +that you can use the macro machinery to save yourself some typing. If you have +enumeration of which the default value doesn't bear any parameter, you can just +do2:

#[derive(Default)]
enum Color {
#[default]
White,
Gray,
Black,
}

Abusing negation

If you want to use a unary minus operator on your own type, you can implement +a Neg trait3. I was dealing with a binary tree and needed a way how to look +at the other side, so I have just implemented the negation for flipping between +left and right 😄


  1. Default docs
  2. Pardon my example from the graph algorithms ;)
  3. Neg docs
]]>
+ me+blog@mfocko.xyz (Matej Focko) + advent-of-code + advent-of-code-2022 + rust +
+ + <![CDATA[Sort the matrix diagonally]]> + https://blog.mfocko.xyz/blog/leetcode/sort-diagonally + https://blog.mfocko.xyz/blog/leetcode/sort-diagonally + Sat, 04 Mar 2023 23:15:00 GMT + + Let's try to solve one of the LeetCode challenges in easy and hard mode at the +same time.

Problem description

A matrix diagonal is a diagonal line of cells starting from some cell in +either the topmost row or leftmost column and going in the bottom-right direction +until reaching the matrix's end. For example, the matrix diagonal starting +from mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0], +mat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending +order and return the resulting matrix.

Example

Image describing the problem

Skeleton and initial adjustments

We are given the following skeleton for the C++ and the given challenge:

class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

}
};

The task is to sort the passed matrix diagonally and then return it. First of all, +I don't like to solve this in a web browser, so we'll need to adjust it accordingly +for running it locally. We'll start by including the vector header and using +fully-qualified namespaces1 and also adding few tests:

#include <cassert>
#include <vector>

using matrix = std::vector<std::vector<int>>;

class Solution {
public:
matrix diagonalSort(matrix& mat)
{
}
};

static void test_case_1()
{
// Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
// Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
std::vector { 2, 2, 1, 2 },
std::vector { 1, 1, 1, 2 } })
== std::vector { std::vector { 1, 1, 1, 1 },
std::vector { 1, 2, 2, 2 },
std::vector { 1, 2, 3, 3 } }));
}

static void test_case_2()
{
// Input: mat =
// [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
// Output:
// [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

Solution s;
assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
std::vector { 23, 55, 17, 45, 15, 52 },
std::vector { 75, 31, 36, 44, 58, 8 },
std::vector { 22, 27, 33, 25, 68, 4 },
std::vector { 84, 28, 14, 11, 5, 50 } })
== std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
std::vector { 11, 11, 25, 45, 8, 69 },
std::vector { 14, 23, 25, 44, 58, 15 },
std::vector { 22, 27, 31, 36, 50, 66 },
std::vector { 84, 28, 75, 33, 55, 68 } }));
}

int main()
{
test_case_1();
test_case_2();

return 0;
}

We need to return the matrix, but we're given a reference to the input matrix. We +can easily abuse the C++ here and just switch the reference to value, this way +the matrix will be copied when passed to the function, we can sort the copy and +just return it back. And we also get yelled by the compiler for the fact that the +method doesn't return anything yet, so to make it “shut up” we will just return +the input for now:

-    matrix diagonalSort(matrix& mat)
+ matrix diagonalSort(matrix mat)
{
+ return mat;
}

Now, we get the copy and we're good to go.

Naïve solution

As you may know, C++ offers a plethora of functions that can be used to your +advantage, given that you know how to “bend” the data structures accordingly.

What does that mean for us? Well, we have an std::sort, we can use it, right? +Let's have a look at it:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

This overload is more than we need. What does it do? It just sorts the elements +in the range [first, last) using operator< on them. We can't sort the whole +matrix using this, but… we can sort just »one« diagonal without doing much work +on our end.

What is the RandomIt type though? If we look more into the documentation, we +can easily find the requirements for it and also learn that it's a random access +iterator and allows swapping its values at the same time.

Random access iterator

What is the random access iterator though? We can find it in a documentation +and see the following description:

A LegacyRandomAccessIterator is a LegacyBidirectionalIterator +that can be moved to point to any element in constant time.

After that we can see all the requirements for it being listed. I don't feel like +reading them right now, so we will just use it and see where the compilation blows +up, i.e. “compiler-assisted development2 if you will ;)

Now we know that we can use std::sort to sort the diagonal itself, but we also +need to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to +someone else3. And that way we get

matrix diagonalSort(matrix mat)
{
// we iterate over the diagonals
for (auto d : diagonals(mat)) {
// and we sort each diagonal
std::sort(d.begin(), d.end());
}

// we take the matrix by copy, so we can sort in-situ and return the copy
// that we sorted
return mat;
}

This solution looks very simple, doesn't it? Well, cause it is. +Let's try compiling it:

matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
for (auto d : diagonals(mat)) {
^
Found compiler error(s).
make: *** [makefile:14: tidy] Error 1

OK, seems about right. We haven't implemented the diagonals yet. And based on +what we've written so far, we need a function or a class diagonals that will +give us the diagonals we need.

Implementing the diagonals

Cool, so we need the function that will let us go through each and every diagonal +in our matrix. We use the for-range loop, so whatever we get back from the +diagonals must support .begin() and .end(). Since I am a masochist, we will +do such functionality for a matrix of any type, not just the int from the challenge.

As I said, we need to be able to

  • construct the object
  • get the beginning
  • get the end (the “sentinel”)
template <typename T>
class diagonals {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& _matrix;

public:
diagonals(matrix_t& m)
: _matrix(m)
{
}
diagonals_iter begin()
{
/* TODO */
}
diagonals_iter end()
{
/* TODO */
}
};

Now we have a diagonals that we can use to go through the diagonals. We haven't +implemented the core of it yet. Let's go through what we have for now.

We have a templated class with templated T that is used as a placeholder for any +type we would store in the matrix. Because I'm lazy, I have defined the matrix_t +type that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to +type it out all the time. Of course, we need to store the matrix, we are given, +as a private attribute. And then just have the constructor and the 2 methods we +need for the for-range.

Iterating over diagonals

Now that we have an object that will allow us to iterate through the diagonals, +we need to implement the iterating itself. We need to go through all of them, so +we have multiple options how to do so. I have decided to start from the “main” +diagonal that starts at (0, 0) index and then proceed with the diagonals starting +in the first row, followed by the rest of the diagonals in the first column.

We need to be able to tell that we've iterated through all of them, and also we +need to know which diagonal is next. For that purpose we will pass the indices +of the first cell on the diagonal. That way we can always tell how to move forward.

We will start by updating the begin and end to reflect our choice accordingly.

diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }

For the begin we return the first diagonal that starts at (0, 0). And because +we have decided to do the diagonals in the first column at the end, the first +diagonal that is not a valid one is the one at (0, height). Apart from the +indices, we also need to pass reference to the matrix itself.

note

You may have noticed that we also include the diagonals that have length 1, +specifically the ones at (0, height - 1) and (width - 1, 0). We are implementing +an iterator that should not care about the way it's being used. Therefore, we +don't care about the fact they don't need to be sorted.

Cool, let's leave the iterator itself to someone else, right?4

Implementing the iterator over diagonals

We can start with a simple skeleton based on the information that we pass from +the diagonals. Also to utilize the matrix_t and also contain implementation +details hidden away, we will put this code into the diagonals class.

class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}
};

In this case we will be implementing a “simple” forward iterator, so we don't +need to implement a lot. Notably it will be:

  • inequality operator (we need to know when we reach the end and have nothing to +iterate over)
  • preincrementation operator (we need to be able to move around the iterable)
  • dereference operator (we need to be able to retrieve the objects we iterate +over)
class diagonals_iter {
matrix_t& m;
std::size_t x;
std::size_t y;

public:
diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator!=(const diagonals_iter& rhs) const
{
// iterators are not equal if they reference different matrices, or
// their positions differ
return m != rhs.m || x != rhs.x || y != rhs.y;
}

diagonals_iter& operator++()
{
if (y != 0) {
// iterating through diagonals down the first column
y++;
return *this;
}

// iterating the diagonals along the first row
x++;
if (x == m.front().size()) {
// switching to diagonals in the first column
x = 0;
y++;
}

return *this;
}

diagonal<T> operator*() const { return diagonal { m, x, y }; }
};

Let's go one-by-one. Inequality operator is rather simple, just compare iterator's +attributes field-by-field. If you think about it, checking inequality of two 2D +vectors may be a bit inefficient, therefore, we can swap around and check it as +a last thing.

-        return m != rhs.m || x != rhs.x || y != rhs.y;
+ return x != rhs.x || y != rhs.y || m != rhs.m;

Preincrementation is where the magic happens. If you have a better look, you can +see two branches of this operation:

  1. When y != 0 (we're iterating over the diagonals in the first column) +In this case, we just bump the row and we're done.
  2. When y == 0 (we're iterating over the diagonals in the first row) +In this case, we bump the column and check if we haven't gotten out of bounds, +i.e. the end of the first row. If we get out of the bounds, we're continuing +with the second diagonal in the first column.

Dereferencing the iterator must “yield” something. In our case it will be the +diagonal that we want to sort. For sorting we need just the iterators that can +move around said diagonal. The simplest thing, we can do, is to delegate it to +something else. In our case it will be a class called diagonal.

Implementing the diagonal itself

After implementing the iterator over diagonals, we know that all we need to describe +a diagonal is the matrix itself and the “start” of the diagonal (row and column). +And we also know that the diagonal must provide some iterators for the std::sort +function. We can start with the following skeleton:

template <typename T>
class diagonal {
using matrix_t = std::vector<std::vector<T>>;

matrix_t& matrix;
std::size_t x;
std::size_t y;

public:
diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
: matrix(matrix)
, x(x)
, y(y)
{
}

diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

diagonal_iter end() const
{
auto max_x = matrix[y].size();
auto max_y = matrix.size();

// we need to find the distance in which we get out of bounds (either in
// column or row)
auto steps = std::min(max_x - x, max_y - y);

return diagonal_iter { matrix, x + steps, y + steps };
}
};

Initialization is rather simple, we just “keep” the stuff we get, begin is the +simplest, we just delegate.

In case of the end, it gets more complicated. We need to know where is the “end” +of the diagonal. Since end should point to the first element “after” the iterable, +we know that it's the first position of the iterator where either y becomes +matrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal, +duh, therefore we can deduce the first “position” afterwards by minimal amount of +steps to get out of the any column or row, hence std::min(max_x - x, max_y - y). +Final position is then computed simply by adding the steps to the beginning of +the diagonal.

Now we just need to finish the iterator for the diagonal itself and we're done.

Implementing diagonal_iter

This part is the hardest from all we need to do. It's because of the requirements +of the std::sort that requires us to implement a random access iterator. I have +briefly described it above, and “in a nutshell” it means that we need to implement +an iterator that can move in constant time along the diagonal in any amount of +steps.

Let's go through all of the functionality that our iterator needs to support to +be used in std::sort. We need the usual operations like:

  • equality/inequality
  • incrementation
  • dereferencing

We will also add all the types that our iterator uses with the category of the +iterator, i.e. what interface it supports:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }
};

This is pretty similar to the previous iterator, but now we need to implement the +remaining requirements of the random access iterator. Let's see what those are:

  • decrementation - cause we need to be able to move backwards too, since random access iterator extends the interface of bidirectional iterator
  • moving the iterator in either direction by steps given as an integer
  • being able to tell the distance between two iterators
  • define an ordering on the iterators

Let's fill them in:

class diagonal_iter {
// we need to keep reference to the matrix itself
matrix_t& m;

// we need to be able to tell our current position
std::size_t x;
std::size_t y;

public:
using difference_type = std::ptrdiff_t;
using value_type = T;
using pointer = T*;
using reference = T&;
using iterator_category = std::random_access_iterator_tag;

diagonal_iter(matrix_t& matrix,
std::size_t x,
std::size_t y)
: m(matrix)
, x(x)
, y(y)
{
}

bool operator==(const diagonal_iter& rhs) const
{
return x == rhs.x && y == rhs.y && m == rhs.m;
}

diagonal_iter& operator++()
{
// we are moving along the diagonal, so we increment both ‹x› and ‹y› at
// the same time
x++;
y++;
return *this;
}

reference operator*() const { return m[y][x]; }

// exactly opposite to the incrementation
diagonal_iter operator--()
{
x--;
y--;
return *this;
}

// moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
// can just return a new iterator and subtract ‹n› from both coordinates in
// the matrix
diagonal_iter operator-(difference_type n) const
{
return diagonal_iter { m, x - n, y - n };
}

// here we assume that we are given two iterators on the same diagonal
difference_type operator-(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x - rhs.x;
}

// counterpart of moving ‹n› steps backwards
diagonal_iter operator+(difference_type n) const
{
return diagonal_iter { m, x + n, y + n };
}

// we compare the coordinates, and also assume that those 2 iterators are
// lying on the same diagonal
bool operator<(const diagonal_iter& rhs) const
{
assert(m == rhs.m);
return x < rhs.x && y < rhs.y;
}
};

At this point we could probably try and compile it, right? If we do so, we will +get yelled at by a compiler for the following reasons:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __next;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
std::__unguarded_linear_insert(__i,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
std::__unguarded_linear_insert(__i,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__final_insertion_sort(__first, __last, __comp);
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
__unguarded_linear_insert(_RandomAccessIterator __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
__last = __cut;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__introsort_loop(__first, __last,
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
^
matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
std::sort(d.begin(), d.end());
^
matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

That's a lot of noise, isn't it? Let's focus on the important parts:

/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
matrix_t& m;
^

Ah! We have a reference in our iterator, and this prevents us from having a copy +assignment operator (that is used “somewhere” in the sorting algorithm). Well… +Let's just wrap it!

# we need to keep a different type than reference
- matrix_t& m;
+ std::reference_wrapper<matrix_t> m;

# in comparison we need to get the reference out of the wrapper first
- return x == rhs.x && y == rhs.y && m == rhs.m;
+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

# same when we return a reference to the “cell” in the matrix
- reference operator*() const { return m[y][x]; }
+ reference operator*() const { return m.get()[y][x]; }

# and finally in the assertions that we set for the “distance” and “less than”
- assert(m == rhs.m);
+ assert(m.get() == rhs.m.get());

We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.


  1. just because I'm used to it and don't care about your opinion ;)
  2. exercise at your own risk
  3. me in 5 minutes in fact, but don't make me scared
  4. me in the next section…
]]>
+ me+blog@mfocko.xyz (Matej Focko) + cpp + leetcode + iterators +
+ + <![CDATA[2nd week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/2nd-week + https://blog.mfocko.xyz/blog/aoc-2022/2nd-week + Sun, 25 Dec 2022 23:15:00 GMT + + Let's go through the second week of Advent of Code in Rust.

Day 8: Treetop Tree House

tl;dr

We get a forest and we want to know how many trees are visible from the outside. +Apart from that we want to find the best view.

Nothing interesting. We are moving around 2D map though. And indexing can get a +bit painful when doing so, let's refactor it a bit ;) During the preparation for +the AoC, I have written Vector2D and now it's time to extend it with indexing +of Vec of Vecs. In my solution I was manipulating with indices in the following +way:

  • swapping them
  • checking whether they are correct indices for the Vec<Vec<T>>
  • indexing Vec<Vec<T>> with them
caution

I'm getting familiar with Rust and starting to “abuse” it… While doing so, I'm +also uncovering some “features” that I don't really like. Therefore I will mark +all of my rants with thicc «↯» mark and will try to “lock” them into their +own “box of hell”.

Swapping indices

Relatively simple implementation, just take the values, swap them and return new +vector.

impl<T: Copy> Vector2D<T> {
pub fn swap(&self) -> Self {
Self {
x: self.y,
y: self.x,
}
}
}

Pretty straight-forward implementation, but let's talk about the T: Copy. We +need to use it, since we are returning a new vector, with swapped values. +If we had values that cannot be copied, the only thing we could do, would be a +vector of references (and it would also introduce a lifetime, to which we'll get +later on). This is pretty similar with the operations on sets from the first week.

Indexing Vec

I will start with the indexing, cause bound-checking is a bit more… complicated +than I would like to.

pub fn index<'a, T, U>(v: &'a [Vec<U>], idx: &Vector2D<T>) -> &'a U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Let's talk about this mess… Body of the function is probably the most easy part +and should not be hard to understand, we just take the x and y and convert +them both to usize type that can be used later on for indexing.

The type signature of the function is where the fun is at 😉 We are trying +to convert unknown type to usize, so we must bound the T as a type that can +be converted to usize, that's how we got usize: TryFrom<T> which basically +says that usize must implement TryFrom<T> trait and therefore allows us to +convert the indices to actual usize indices. Using .unwrap() also forces us +to bound the error that can occur when converting T into usize, that's how +we get <usize as TryFrom<T>>::Error: Debug which loosely means

error during conversion of T into usize must implement Debug, +i.e. can be printed in some way or other

T: Copy is required by .try_into() which takes T by-value.

And now we are left only with the first line of the definition.

note

Skilled Rustaceans might notice that this implementation is rather flaky and can +break in multiple places at once. I'll get back to it…

Let's split it in multiple parts:

  • v: &'a [Vec<U>] represents the 2D Vec, we are indexing, Vec implements +Slice trait and clippy recommends using &[T] to &Vec<T>, exact details +are unknown to me
  • idx: &Vector2D<T> represents the indices which we use, we take them by +reference to avoid an unnecessary copy
  • -> &'a U means that we are returning a reference to some value of type U. +Now the question is what does the 'a mean, we can also see it as a generic +type declared along T and U. And the answer is relatively simple, 'a +represents a lifetime. We take the v by a reference and return a reference, +borrow checker validates all of the borrows (or references), so we need to +specify that our returned value has the same lifetime as the vector we have +taken by a reference, i.e. returned reference must live at least as long as the +v. This way we can “be sure” that the returned reference is valid.
Issues

First issue that our implementation has is the fact that we cannot get a mutable +reference out of that function. This could be easily resolved by introducing new +function, e.g. index_mut. Which I have actually done while writing this part:

pub fn index_mut<'a, T, U>(v: &'a mut [Vec<U>], idx: &Vector2D<T>) -> &'a mut U
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&mut v[y][x]
}
«↯» Why can't we use one function?

When we consider a Vec<T>, we don't need to consider containers as T, Rust +implements indexing as traits Index<T> and IndexMut<T> that do the dirty work +behind syntactic sugar of container[idx].

However, implementing of traits is not allowed for external types, i.e. types +that you haven't defined yourself. This means that you can implement indexing +over containers that you have implemented yourself, but you cannot use your own +types for indexing “built-in” types.

Another part of this rabbit hole is trait SliceIndex<T> that is of a relevance +because of

impl<T, I> Index<I> for [T]
where
I: SliceIndex<[T]>

impl<T, I, A> Index<I> for Vec<T, A>
where
I: SliceIndex<[T]>,
A: Allocator

impl<T, I, const N: usize> Index<I> for [T; N]
where
[T]: Index<I>

In other words, if your type implements SliceIndex<T> trait, it can be used +for indexing. As of now, this trait has all of its required methods experimental +and is marked as unsafe.

Another problem is a requirement for indexing either [Vec<T>] or Vec<Vec<T>>. +This requirement could be countered by removing inner type Vec<T> and constraining +it by a trait Index (or IndexMut respectively) in a following way

pub fn index<'a, C, T>(v: &'a [C], idx: &Vector2D<T>) -> &'a C::Output
where
usize: TryFrom<T>,
<usize as TryFrom<T>>::Error: Debug,
T: Copy,
C: Index<usize>
{
let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());
&v[y][x]
}

Given this, we can also give a more meaningful typename for indexing type, such +as I.

Checking bounds

Now we can get to the boundary checks, it is very similar, but a more… dirty. +First approach that came up was to convert the indices in Vector2D to usize, +but when you add the indices up, e.g. when checking the neighbors, you can end +up with negative values which, unlike in C++, causes an error (instead of underflow +that you can use to your advantage; you can easily guess how).

So how can we approach this then? Well… we will convert the bounds instead of +the indices and that lead us to:

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
usize: TryInto<T>,
<usize as TryInto<T>>::Error: Debug,
T: PartialOrd + Copy,
{
idx.y >= 0.try_into().unwrap()
&& idx.y < v.len().try_into().unwrap()
&& idx.x >= 0.try_into().unwrap()
&& idx.x
< v[TryInto::<usize>::try_into(idx.y).unwrap()]
.len()
.try_into()
.unwrap()
}

You can tell that it's definitely a shitty code. Let's improve it now! We will +get back to the original idea, but do it better. We know that we cannot convert +negative values into usize, but we also know that conversion like that +returns a Result<T, E> which we can use to our advantage.

pub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool
where
T: Copy,
usize: TryFrom<T>,
{
usize::try_from(idx.y)
.and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))
.unwrap_or(false)
}

Result<T, E> is a type similar to Either in Haskell and it allows us to chain +multiple operations on correct results or propagate the original error without +doing anything. Let's dissect it one-by-one.

try_from is a method implemented in TryFrom trait, that allows you to convert +types and either successfully convert them or fail (with a reasonable error). This +method returns Result<T, E>.

We call and_then on that result, let's have a look at the type signature of +and_then, IMO it explains more than enough:

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> Result<U, E>

OK… So it takes the result and a function and returns another result with +different value and different error. However we can see that the function, which +represents an operation on a result, takes just the value, i.e. it doesn't care +about any previous error. To make it short:

and_then allows us to run an operation, which can fail, on the correct result

We parsed a y index and now we try to convert the x index with try_from +again, but on that result we use map rather than and_then, why would that be?

pub fn map<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(T) -> U

Huh… map performs an operation that cannot fail. And finally we use +unwrap_or which takes the value from result, or in case of an error returns the +default that we define.

How does this work then? If y is negative, the conversion fails and the error +propagates all the way to unwrap_or, if y can be a correct usize value, then +we do the same with x. If x is negative, we propagate the error as with y, +and if it's not, then we check whether it exceeds the higher bounds or not.

Solution

Relatively simple, you just need follow the rules and not get too smart, otherwise +it will get back at you.

Day 9: Rope Bridge

tl;dr

We get a rope with knots and we want to track how many different positions are +visited with the rope's tail.

By this day, I have come to a conclusion that current skeleton for each day +generates a lot of boilerplate. And even though it can be easily copied, it's +just a waste of space and unnecessary code. Let's “simplify” this (on one end +while creating monster on the other end). I've gone through what we need in the +preparations for the AoC. Let's sum up our requirements:

  • parsing
  • part 1 & 2
  • running on sample / input
  • tests

Parsing and implementation of both parts is code that changes each day and we +cannot do anything about it. However running and testing can be simplified!

Let's introduce and export a new module solution that will take care of all of +this. We will start by introducing a trait for each day.

pub trait Solution<Input, Output: Display> {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;

fn part_1(input: &Input) -> Output;
fn part_2(input: &Input) -> Output;
}

This does a lot of work for us already, we have defined a trait and for each day +we will create a structure representing a specific day. That structure will also +implement the Solution trait.

Now we need to get rid of the boilerplate, we can't get rid of the main function, +but we can at least move out the functionality.

fn run(type_of_input: &str) -> Result<()>
where
Self: Sized,
{
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = Self::parse_input(format!("{}s/{}.txt", type_of_input, Self::day()));

info!("Part 1: {}", Self::part_1(&input));
info!("Part 2: {}", Self::part_2(&input));

Ok(())
}

fn main() -> Result<()>
where
Self: Sized,
{
Self::run("input")
}

This is all part of the Solution trait, which can implement methods while being +dependent on what is provided by the implementing types. In this case, we just +need to bound the Output type to implement Display that is necessary for the +info! and format string there.

Now we can get to first of the nasty things we are going to do… And it is the +day() method that you can see being used when constructing path to the input +file. That method will generate a name of the file, e.g. day01 and we know that +we can somehow deduce it from the structure name, given we name it reasonably.

fn day() -> String {
let mut day = String::from(type_name::<Self>().split("::").next().unwrap());
day.make_ascii_lowercase();

day.to_string()
}
type_name

This feature is still experimental and considered to be internal, it is not +advised to use it any production code.

And now we can get to the nastiest stuff 😩 We will generate the tests!

We want to be able to generate tests for sample input in a following way:

test_sample!(day_01, Day01, 42, 69);

There's not much we can do, so we will write a macro to generate the tests for us.

#[macro_export]
macro_rules! test_sample {
($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {
#[cfg(test)]
mod $mod_name {
use super::*;

#[test]
fn test_part_1() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_1(&sample), $part_1);
}

#[test]
fn test_part_2() {
let sample =
$day_struct::parse_input(&format!("samples/{}.txt", $day_struct::day()));
assert_eq!($day_struct::part_2(&sample), $part_2);
}
}
};
}

We have used it in a similar way as macros in C/C++, one of the things that we +can use to our advantage is defining “type” of the parameters for the macro. All +parameters have their name prefixed with $ sign and you can define various “forms” +of your macro. Let's go through it!

We have following parameters:

  • $mod_name which represents the name for the module with tests, it is typed +with ident which means that we want a valid identifier to be passed in.
  • $day_struct represents the structure that will be used for tests, it is typed +with tt which represents a token tree, in our case it is a type.
  • $part_X represents the expected output for the Xth part and is of type expr +which literally means an expression.

Apart from that we need to use #[macro_export] to mark the macro as exported +for usage outside of the module. Now our skeleton looks like:

use aoc_2022::*;

type Input = String;
type Output = String;

struct DayXX;
impl Solution<Input, Output> for DayXX {
fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
file_to_string(pathname)
}

fn part_1(input: &Input) -> Output {
todo!()
}

fn part_2(input: &Input) -> Output {
todo!()
}
}

fn main() -> Result<()> {
// DayXX::run("sample")
DayXX::main()
}

// test_sample!(day_XX, DayXX, , );

Solution

Not much to talk about, it is relatively easy to simulate.

Day 10: Cathode-Ray Tube

tl;dr

Emulating basic arithmetic operations on a CPU and drawing on CRT based on the +CPU's accumulator.

In this day I have discovered an issue with my design of the Solution trait. +And the issue is caused by different types of Output for the part 1 and part 2.

Problem is relatively simple and consists of simulating a CPU, I have approached +it in a following way:

fn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {
instructions
.iter()
.fold(State::new(), |state, instruction| {
state.execute(instruction, &mut out)
});

out
}

We just take the instructions, we have some state of the CPU and we execute the +instructions one-by-one. Perfect usage of the fold (or reduce as you may know +it from other languages).

You can also see that we have an Output type, so the question is how can we fix +that problem. And the answer is very simple and functional. Rust allows you to +have an enumeration that can bear some other values apart from the type itself.

tip

We could've seen something like this with the Result<T, E> type that can be +defined as

enum Result<T, E> {
Ok(T),
Err(E)
}
What does that mean though?

When we have an Ok value, it has the result itself, and when we get an Err +value, it has the error. This also allows us to handle results in a rather +pretty way:

match do_something(x) {
Ok(y) => {
println!("SUCCESS: {}", y);
},
Err(y) => {
eprintln!("ERROR: {}", y);
}
}

My solution has a following outline:

fn execute(&self, i: &Instruction, output: &mut Output) -> State {
// execute the instruction

// collect results if necessary
match output {
Output::Part1(x) => self.execute_part_1(y, x),
Output::Part2(x) => self.execute_part_2(y, x),
}

// return the obtained state
new_state
}

You might think that it's a perfectly reasonable thing to do. Yes, but notice +that the match statement doesn't collect the changes in any way and also we +pass output by &mut, so it is shared across each iteration of the fold.

The dirty and ingenious thing is that xs are passed by &mut too and therefore +they are directly modified by the helper functions. To sum it up and let it sit

We are collecting the result into an enumeration that is shared +across all iterations of fold.

Solution

Similar to Day 9, but there are some technical details that can get you.

Day 11: Monkey in the Middle

tl;dr

Simulation of monkeys throwing stuff around and measuring your stress levels +while your stuff is being passed around.

I think I decided to use regular expressions here for the first time, cause +parsing the input was a pain.

Also I didn't expect to implement Euclidean algorithm in Rust…

Solution

Again, we're just running a simulation. Though I must admit it was very easy to +make a small technical mistakes that could affect the final results very late.

Day 12: Hill Climbing Algorithm

tl;dr

Finding shortest path up the hill and also shortest path down to the ground while +also rolling down the hill…

As I have said in the tl;dr, we are looking for the shortest path, but the start +and goal differ for the part 1 and 2. So I have decided to refactor my solution +to a BFS algorithm that takes necessary parameters via functions:

fn bfs<F, G>(
graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G
) -> Option<usize>
where
F: Fn(&[Vec<char>], &Position, &Position) -> bool,
G: Fn(&[Vec<char>], &Position) -> bool

We pass the initial vertex from the caller and everything else is left to the BFS +algorithm, based on the has_edge and is_target functions.

This was easy! And that is not very usual in Rust once you want to pass around +functions. 👀

Solution

Looking for the shortest path… Must be Dijkstra, right? Nope! Half of the +Reddit got jebaited though. In all fairness, nothing stops you from implementing +the Dijkstra's algorithm for finding the shortest path, but if you know that +all connected vertices are in a unit (actually d=1d = 1) distance from each other, +then you know that running Dijkstra is equivalent to running BFS, only with worse +time complexity, because of the priority heap instead of the queue.

Day 13: Distress Signal

tl;dr

Processing packets with structured data from the distress signal.

You can implement a lot of traits if you want to. It is imperative to implement +ordering on the packets. I had a typo, so I also proceeded to implement a Display +trait for debugging purposes:

impl Display for Packet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Packet::Integer(x) => write!(f, "{x}"),
Packet::List(lst) => write!(f, "[{}]", lst.iter().map(|p| format!("{p}")).join(",")),
}
}
}

Solution

A lot of technical details… Parsing is nasty too…

Day 14: Regolith Reservoir

tl;dr

Let's simulate falling sand grain-by-grain.

Again, both parts are relatively similar with minimal changes, so it is a good +idea to refactor it a bit. Similar approach to the BFS above. Also this is the +first day where I ran into efficiency issues and had to redo my solution to speed +it up just a bit.

Solution

Tedious.

Post Mortem

Indexing

I was asked about the indexing after publishing the blog. And truly it is rather +complicated topic, especially after releasing SliceIndex<I> trait. I couldn't +leave it be, so I tried to implement the Index and IndexMut trait.

note

I have also mentioned that the SliceIndex trait is unsafe, but truth be told, +only unsafe part are the 2 methods that are named *unchecked*. Anyways, I will +be implementing the Index* traits for now, rather than the SliceIndex.

It's relatively straightforward…

impl<I, C> Index<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for [C]
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}

We can see a lot of similarities to the implementation of index and index_mut +functions. In the end, they are 1:1, just wrapped in the trait that provides a +syntax sugar for container[idx].

note

I have also switched from using the TryFrom to TryInto trait, since it better +matches what we are using, the .try_into rather than usize::try_from.

Also implementing TryFrom automatically provides you with a TryInto trait, +since it is relatively easy to implement. Just compare the following:

pub trait TryFrom<T>: Sized {
type Error;

fn try_from(value: T) -> Result<Self, Self::Error>;
}

pub trait TryInto<T>: Sized {
type Error;

fn try_into(self) -> Result<T, Self::Error>;
}

OK, so we have our trait implemented, we should be able to use container[index], +right? Yes… but actually no 😦

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:26:18
|
26 | if trees[pos] > tallest {
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`
--> src/bin/day08.rs:30:28
|
30 | max(tallest, trees[pos])
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`

error[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`
--> src/bin/day08.rs:52:28
|
52 | let max_height = trees[position];
| ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`
= note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`

Why? We have it implemented for the slices ([C]), why doesn't it work? Well, +the fun part consists of the fact that in other place, where we were using it, +we were passing the &[Vec<T>], but this is coming from a helper functions that +take &Vec<Vec<T>> instead. And… we don't implement Index and IndexMut for +those. Just for the slices. 🤯 What are we going to do about it?

We can either start copy-pasting or be smarter about it… I choose to be smarter, +so let's implement a macro! The only difference across the implementations are +the types of the outer containers. Implementation doesn't differ at all!

Implementing the macro can be done in a following way:

macro_rules! generate_indices {
($container:ty) => {
impl<I, C> Index<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: Index<usize>,
{
type Output = C::Output;

fn index(&self, index: Vector2D<I>) -> &Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&self[y][x]
}
}

impl<I, C> IndexMut<Vector2D<I>> for $container
where
I: Copy + TryInto<usize>,
<I as TryInto<usize>>::Error: Debug,
C: IndexMut<usize>,
{
fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {
let (x, y): (usize, usize) =
(index.x.try_into().unwrap(), index.y.try_into().unwrap());
&mut self[y][x]
}
}
};
}

And now we can simply do

generate_indices!(VecDeque<C>);
generate_indices!([C]);
generate_indices!(Vec<C>);
// generate_indices!([C; N], const N: usize);

The last type (I took the inspiration from the implementations of the Index and +IndexMut traits) is a bit problematic, because of the const N: usize part, +which I haven't managed to be able to parse. And that's how I got rid of the error.

note

If I were to use 2D-indexing over [C; N] slices, I'd probably just go with the +copy-paste, cause the cost of this “monstrosity” outweighs the benefits of no DRY.

Cause of the problem

This issue is relatively funny. If you don't use any type aliases, just the raw +types, you'll get suggested certain changes by the clippy. For example if you +consider the following piece of code

fn get_sum(nums: &Vec<i32>) -> i32 {
nums.iter().sum()
}

fn main() {
let nums = vec![1, 2, 3];
println!("Sum: {}", get_sum(&nums));
}

and you run clippy on it, you will get

Checking playground v0.0.1 (/playground)
warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
--> src/main.rs:1:18
|
1 | fn get_sum(nums: &Vec<i32>) -> i32 {
| ^^^^^^^^^ help: change this to: `&[i32]`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg
= note: `#[warn(clippy::ptr_arg)]` on by default

warning: `playground` (bin "playground") generated 1 warning
Finished dev [unoptimized + debuginfo] target(s) in 0.61s

However, if you introduce a type alias, such as

type Numbers = Vec<i32>;

Then clippy won't say anything, cause there is literally nothing to suggest. +However the outcome is not the same…

]]>
+ me+blog@mfocko.xyz (Matej Focko) + advent-of-code + advent-of-code-2022 + rust +
+ + <![CDATA[1st week of Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/1st-week + https://blog.mfocko.xyz/blog/aoc-2022/1st-week + Thu, 15 Dec 2022 01:15:00 GMT + + Let's go through the first week of Advent of Code in Rust.

note

If you wish to have a look at the solutions, you can follow them on my GitLab. +More specifically in the /src/bin/.

I will try to summarize my experience with using Rust for the AoC. Trying it out +ages ago, I believe it will be pain and suffering, but we will see. For each +day I will also try to give a tl;dr of the problem, so that you can better imagine +the relation to my woes or 👍 moments.

Day 1: Calorie Counting

tl;dr

As the name suggests, we get the calories of the food contained in the elves +backpacks and we want to choose the elf that has the most food ;)

Wakey wakey!

Programming in Rust at 6am definitely hits. I've also forgotten to mention how I +handle samples. With each puzzle you usually get a sample input and expected +output. You can use them to verify that your solution works, or usually doesn't.

At first I've decided to put asserts into my main, something like

assert_eq!(part_1(&sample), 24000);
info!("Part 1: {}", part_1(&input));

assert_eq!(part_2(&sample), 45000);
info!("Part 2: {}", part_2(&input));

However, once you get further, the sample input may take some time to run itself. +So in the end, I have decided to turn them into unit tests:

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_part_1() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_1(&sample), 24000);
}

#[test]
fn test_part_2() {
let sample = parse_input("samples/day01.txt");
assert_eq!(part_2(&sample), 45000);
}
}

And later on I have noticed, it's hard to tell the difference between the days, +so I further renamed the mod from generic tests to reflect the days.

Also after finishing the first day puzzle, I have installed an sccache to +cache the builds, so that the build time is lower, cause it was kinda unbearable.

Solution

Well, it's a pretty simple problem. You just take the input, sum the calories and +find the biggest one. However, if we try to generalize to more than the biggest +one, the fun appears. We have few options:

  • keep all the calories, sort them, take what we need
  • keep all the calories and use max heap
  • use min heap and maintain at most N calories that we need

Day 2: Rock Paper Scissors

tl;dr

You want to know what score did you achieve while playing Rock Paper Scissors. +And then you want to be strategic about it.

Apart from the technical details of the puzzle, it went relatively smooth.

Solution

I took relatively naïve approach and then tried to simplify it.

Day 3: Rucksack Reorganization

tl;dr

Let's go reorganize elves' backpacks! Each backpacks has 2 compartments and you +want to find the common item among those compartments. Each of them has priority, +you care only about the sum.

This is the day where I started to fight the compiler and neither of us decided +to give up. Let's dive into it \o/

Fun fact

Fighting the compiler took me 30 minutes.

We need to find a common item among 2 collections, that's an easy task, right? +We can construct 2 sets and find an intersection:

let top: HashSet<i32> = [1, 2, 3].iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].iter().collect();

Now, the first issue that we encounter is caused by the fact that we are using +a slice (the […]), iterator of that returns references to the numbers. +And we get immediately yelled at by the compiler, because the numbers are discarded +after running the .collect. To fix this, we can use .into_iter:

let top: HashSet<i32> = [1, 2, 3].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();

This way the numbers will get copied instead of referenced. OK, let's find the +intersection of those 2 collections:

println!("Common elements: {:?}", top.intersection(&bottom));
Common elements: [3]
caution

Notice that we need to do &bottom. It explicitly specifies that .intersection +borrows the bottom, i.e. takes an immutable reference to it.

That's what we want, right? Looks like it! \o/

Next part wants us to find the common element among all of the backpacks. OK, so +that should be fairly easy, we have an intersection and we want to find intersection +over all of them.

Let's have a look at the type of the .intersection

pub fn intersection<'a>(
    &'a self,
    other: &'a HashSet<T, S>
) -> Intersection<'a, T, S>

OK… Huh… But we have an example there!

let intersection: HashSet<_> = a.intersection(&b).collect();

Cool, that's all we need.

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
println!("Intersection: {:?}", intersection);
Intersection: {3, 4}

Cool, so let's do the intersection with the top_2:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
println!("Intersection: {:?}", intersection);

And we get yelled at by the compiler:

error[E0308]: mismatched types
--> src/main.rs:10:58
|
10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();
| ------------ ^^^^^^ expected `&i32`, found `i32`
| |
| arguments to this function are incorrect
|
= note: expected reference `&HashSet<&i32>`
found reference `&HashSet<i32>`

/o\ What the hell is going on here? Well, the funny thing is, that this operation +doesn't return the elements themselves, but the references to them and when we pass +the third set, it has just the values themselves, without any references.

tip

It may seem as a very weird decision, but in fact it makes some sense… It allows +you to do intersection of items that may not be possible to copy. Overall this is +a “tax” for having a borrow checker drilling your ass having your back and +making sure you're not doing something naughty that may cause an undefined +behavior.

To resolve this we need to get an iterator that clones the elements:

let top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();
let bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();
let top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();
let bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();

let intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();
let intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();
println!("Intersection: {:?}", intersection);
Intersection: {4}

Solution

The approach is pretty simple, if you omit the 1on1 with the compiler. You just +have some fun with the set operations :)

Day 4: Camp Cleanup

tl;dr

Elves are cleaning up the camp and they got overlapping sections to clean up. +Find how many overlap and can take the day off.

RangeInclusive is your friend not an enemy :)

Solution

Relatively easy, you just need to parse the input and know what you want. Rust's +RangeInclusive type helped a lot, cause it took care of all abstractions.

Day 5: Supply Stacks

tl;dr

Let's play with stacks of crates.

Very easy problem with very annoying input. You can judge yourself:

    [D]    
[N] [C]
[Z] [M] [P]
1 2 3

move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

Good luck transforming that into something reasonable :)

Fun fact

Took me 40 minutes to parse this reasonably, including fighting the compiler.

Solution

For the initial solution I went with a manual solution (as in I have done all +the work. Later on I have decided to explore the std and interface of the +std::vec::Vec and found split_off which takes an index and splits (duh) +the vector:

let mut vec = vec![1, 2, 3];
let vec2 = vec.split_off(1);
assert_eq!(vec, [1]);
assert_eq!(vec2, [2, 3]);

This helped me simplify my solution a lot and also get rid of some edge cases.

Day 6: Tuning Trouble

tl;dr

Finding start of the message in a very weird protocol. Start of the message is +denoted by NN unique consecutive characters.

Solution

A lot of different approaches, knowing that we are dealing with input consisting +solely of ASCII letters, I bit the bullet and went with sliding window and +constructing sets from that window, checking if the set is as big as the window.

One possible optimization could consist of keeping a bit-vector (i.e. usize +variable) of encountered characters and updating it as we go. However this has +a different issue and that is removal of the characters from the left side of the +window. We don't know if the same character is not included later on.

Other option is to do similar thing, but keeping the frequencies of the letters, +and again knowing we have only ASCII letters we can optimize by having a vector +of 26 elements that keeps count for each lowercase letter.

Day 7: No Space Left On Device

tl;dr

Let's simulate du to get some stats about our file system and then pinpoint +directories that take a lot of space and should be deleted.

I was waiting for this moment, and yet it got me! +imagine me swearing for hours

Solution

We need to “build” a file system from the input that is given in a following form:

$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

There are few ways in which you can achieve this and also you can assume some +preconditions, but why would we do that, right? :)

You can “slap” this in either HashMap or BTreeMap and call it a day. +And that would be boring…

tip

BTreeMap is quite fitting for this, don't you think?

I always wanted to try allocation on heap in Rust, so I chose to implement a tree. +I fought with the Box<T> for some time and was losing…

Then I looked up some implementations of trees or linked lists and decided to try +Rc<Cell<T>>. And I got my ass whopped by the compiler once again. /o\

tip

Box<T> represents a dynamically allocated memory on heap. It is a single pointer, +you can imagine this as std::unique_ptr<T> in C++.

Rc<T> represents a dynamically allocated memory on heap. On top of that it is +reference counted (that's what the Rc stands for). You can imagine this as +std::shared_ptr<T> in C++.

Now the fun stuff. Neither of them lets you mutate the contents of the memory.

Cell<T> allows you to mutate the memory. Can be used reasonably with types that +can be copied, because the memory safety is guaranteed by copying the contents +when there is more than one mutable reference to the memory.

RefCell<T> is similar to the Cell<T>, but the borrowing rules (how many mutable +references are present) are checked dynamically.

So in the end, if you want something like std::shared_ptr<T> in Rust, you want +to have Rc<RefCell<T>>.

So, how are we going to represent the file system then? We will use an enumeration, +hehe, which is an algebraic data type that can store some stuff in itself 😩

type FileHandle = Rc<RefCell<AocFile>>;

#[derive(Debug)]
enum AocFile {
File(usize),
Directory(BTreeMap<String, FileHandle>),
}

Let's go over it! FileHandle represents dynamically allocated AocFile, not +much to discuss. What does the #[derive(Debug)] do though? It lets us to print +out the value of that enumeration, it's derived, so it's not as good as if we had +implemented it ourselves, but it's good enough for debugging, hence the name.

Now to the fun part! AocFile value can be represented in two ways:

  • File(usize), e.g. AocFile::File(123) and we can pattern match it, if we +need to
  • Directory(BTreeMap<String, FileHandle>) will represent the directory and will +contain map matching the name of the files (or directories) within to their +respective file handles

I will omit the details about constructing this file system, cause there are a lot +of technicalities introduced by the nature of the input. However if you are +interested, you can have a look at my solution.

We need to find small enough directories and also find the smallest directory that +will free enough space. Now the question is, how could we do that. And there are +multiple ways I will describe.

I have chosen to implement tree catamorphism 😩. It is basically a fold +over a tree data structure. We descent down into the leaves and propagate computed +results all the way to the root. You can also notice that this approach is very +similar to dynamic programming, we find overlapping sections of the computation +and try to minimize the additional work (in this case: we need to know sizes of +our descendants, but we have already been there).

Another approach that has been suggested to me few days later is running DFS on +the graph. And, funnily enough, we would still need to combine what we found in +the branches where we descent. So in the end, it would work very similarly to my +solution.

One of the more exotic options would be precomputing the required information at +the same time as parsing. That could be done by adding additional fields to the +nodes which would allow storing such information and updating it as we construct +the file system.

Post Mortem

Things that have been brought up in the discussion later on.

Rc<T> vs Rc<RefCell<T>>

It has been brought up that I have a contradicting statement regarding the +dynamically allocated memory. Specifically:

  • You can imagine Rc<T> as an std::shared_ptr<T> (in C++)
  • When you want an equivalent of std::shared_ptr<T>, you want to use +Rc<RefCell<T>>

Now, in Rust it is a bit more complicated, because the type that represents the +“shared pointer” is Rc<T>. What RefCell<T> does is making sure that there is +only one “owner” of a mutable reference at a time (and dynamically, as opposed +to the Cell<T>).

Therefore to be precise and correct about the equivalents of std::shared_ptr<T> +in Rust, we can say that

  • Rc<T> is an equivalent of a const std::shared_ptr<T>,
  • and Rc<RefCell<T>> is an equivalent of a std::shared_ptr<T>.

You can easily see that they only differ in the mutability. (And even that is not +as simple as it seems, because there is also Cell<T>)

]]>
+ me+blog@mfocko.xyz (Matej Focko) + advent-of-code + advent-of-code-2022 + rust +
+ + <![CDATA[Advent of Code '22 in Rust]]> + https://blog.mfocko.xyz/blog/aoc-2022/intro + https://blog.mfocko.xyz/blog/aoc-2022/intro + Wed, 14 Dec 2022 21:45:00 GMT + + Let's talk about the preparations for this year's Advent of Code.

Choosing a language

When choosing a language for AoC, you usually want a language that gives you a +quick feedback which allows you to iterate quickly to the solution of the puzzle. +One of the most common choices is Python, many people also use JavaScript or Ruby.

Given the competitive nature of the AoC and popularity among competitive programming, +C++ might be also a very good choice. Only if you are familiar with it, I guess…

If you want a challenge, you might also choose to rotate the languages each day. +Though I prefer to use only one language.

For this year I have been deciding between Rust, C++ and Pascal or Ada.

I have tried Rust last year and have survived with it for 3 days and then gave +up and switched to Kotlin, which was pretty good given it is “Java undercover”. +I pretty much like the ideas behind Rust, I am not sure about the whole cult and +implementation of those ideas though. After some years with C/C++, I would say +that Rust feels too safe for my taste and tries to “punish me” even for the +most trivial things.

C++ is a very robust, but also comes with a wide variety of options providing you +the ability to shoot yourself in the leg. I have tried to solve few days of previous +Advent of Code events, it was relatively easy to solve the problems in C++, given +that I do not admit writing my own iterator for enumerate

Pascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a +pretty nice standard library that offers enough to be able to quickly solve some +problems in it. However the toolkit is questionable :/

Choosing libraries

Preparations for Rust

All of the sources, later on including solutions, can be found at my +GitLab.

Toolkit

Since we are using Rust, we are going to use a Cargo and more than likely VSCode +with rust-analyzer. Because of my choice of libraries, we will also introduce +a .envrc file that can be used by direnv, which allows you to set specific +environment variables when you enter a directory. In our case, we will use

# to show nice backtrace when using the color-eyre
export RUST_BACKTRACE=1

# to catch logs generated by tracing
export RUST_LOG=trace

And for the one of the most obnoxious things ever, we will use a script to download +the inputs instead of “clicking, opening and copying to a file1. There is +no need to be fancy, so we will adjust Python script by Martin2.

#!/usr/bin/env python3

import datetime
import yaml
import requests
import sys


def load_config():
with open("env.yaml", "r") as f:
js = yaml.load(f, Loader=yaml.Loader)
return js["session"], js["year"]


def get_input(session, year, day):
return requests.get(
f"https://adventofcode.com/{year}/day/{day}/input",
cookies={"session": session},
headers={
"User-Agent": "{repo} by {mail}".format(
repo="gitlab.com/mfocko/advent-of-code-2022",
mail="me@mfocko.xyz",
)
},
).content.decode("utf-8")


def main():
day = datetime.datetime.now().day
if len(sys.argv) == 2:
day = sys.argv[1]

session, year = load_config()
problem_input = get_input(session, year, day)

with open(f"./inputs/day{day:>02}.txt", "w") as f:
f.write(problem_input)


if __name__ == "__main__":
main()

If the script is called without any arguments, it will deduce the day from the +system, so we do not need to change the day every morning. It also requires a +configuration file:

# env.yaml
session: ‹your session cookie›
year: 2022

Libraries

Looking at the list of the libraries, I have chosen “a lot” of them. Let's walk +through each of them.

tracing and tracing-subscriber are the crates that can be used for tracing +and logging of your Rust programs, there are also other crates that can help you +with providing backtrace to the Sentry in case you have deployed your application +somewhere and you want to watch over it. In our use case we will just utilize the +macros for debugging in the terminal.

thiserror, anyhow and color-eyre are used for error reporting. +thiserror is a very good choice for libraries, cause it extends the Error +from the std and allows you to create more convenient error types. Next is +anyhow which kinda builds on top of the thiserror and provides you with simpler +error handling in binaries3. And finally we have color-eyre which, as I found +out later, is a colorful (wink wink) extension of eyre which is fork of anyhow +while supporting customized reports.

In the end I have decided to remove thiserror and anyhow, since first one is +suitable for libraries and the latter was basically fully replaced by {color-,}eyre.

regex and lazy_static are a very good and also, I hope, self-explanatory +combination. lazy_static allows you to have static variables that must be initialized +during runtime.

itertools provides some nice extensions to the iterators from the std.

My own “library”

When creating the crate for this year's Advent of Code, I have chosen a library +type. Even though standard library is huge, some things might not be included and +also we can follow KISS. I have 2 modules that my “library” exports, one for +parsing and one for 2D vector (that gets used quite often during Advent of Code).

Key part is, of course, processing the input and my library exports following +functions that get used a lot:

/// Reads file to the string.
pub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;

/// Reads file and returns it as a vector of characters.
pub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;

/// Reads file and returns a vector of parsed structures. Expects each structure
/// on its own line in the file. And `T` needs to implement `FromStr` trait.
pub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>
where
<T as FromStr>::Err: Debug;

/// Converts iterator over strings to a vector of parsed structures. `T` needs
/// to implement `FromStr` trait and its error must derive `Debug` trait.
pub fn strings_to_structs<T: FromStr, U>(
iter: impl Iterator<Item = U>
) -> Vec<T>
where
<T as std::str::FromStr>::Err: std::fmt::Debug,
U: Deref<Target = str>;

/// Reads file and returns it as a vector of its lines.
pub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;

As for the vector, I went with a rather simple implementation that allows only +addition of the vectors for now and accessing the elements via functions x() +and y(). Also the vector is generic, so we can use it with any numeric type we +need.

Skeleton

We can also prepare a template to quickly bootstrap each of the days. We know +that each puzzle has 2 parts, which means that we can start with 2 functions that +will solve them.

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

Both functions take reference to the input and return some output (in majority +of puzzles, it is the same type). todo!() can be used as a nice placeholder, +it also causes a panic when reached and we could also provide some string with +an explanation, e.g. todo!("part 1"). We have not given functions a specific +type and to avoid as much copy-paste as possible, we will introduce type aliases.

type Input = String;
type Output = i32;
tip

This allows us to quickly adjust the types only in one place without the need to +do regex-replace or replace them manually.

For each day we get a personalized input that is provided as a text file. Almost +all the time, we would like to get some structured type out of that input, and +therefore it makes sense to introduce a new function that will provide the parsing +of the input.

fn parse_input(path: &str) -> Input {
todo!()
}

This “parser” will take a path to the file, just in case we would like to run the +sample instead of input.

OK, so now we can write a main function that will take all of the pieces and +run them.

fn main() {
let input = parse_input("inputs/dayXX.txt");

println!("Part 1: {}", part_1(&input));
println!("Part 2: {}", part_2(&input));
}

This would definitely do :) But we have installed a few libraries and we want to +use them. In this part we are going to utilize tracing (for tracing, duh…) +and color-eyre (for better error reporting, e.g. from parsing).

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

The first statement will set up tracing and configure it to print out the logs to +terminal, based on the environment variable. We also change the formatting a bit, +since we do not need all the fancy features of the logger. Pure initialization +would get us logs like this:

2022-12-11T19:53:19.975343Z  INFO day01: Part 1: 0

However after running that command, we will get the following:

 INFO src/bin/day01.rs:35: Part 1: 0

And the color_eyre::install()? is quite straightforward. We just initialize the +error reporting by color eyre.

caution

Notice that we had to add Ok(()) to the end of the function and adjust the +return type of the main to Result<()>. It is caused by the color eyre that +can be installed only once and therefore it can fail, that is how we got the ? +at the end of the ::install which unwraps the »result« of the installation.

Overall we will get to a template like this:

use aoc_2022::*;

use color_eyre::eyre::Result;
use tracing::info;
use tracing_subscriber::EnvFilter;

type Input = String;
type Output = i32;

fn parse_input(path: &str) -> Input {
todo!()
}

fn part1(input: &Input) -> Output {
todo!()
}

fn part2(input: &Input) -> Output {
todo!()
}

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_target(false)
.with_file(true)
.with_line_number(true)
.without_time()
.compact()
.init();
color_eyre::install()?;

let input = parse_input("inputs/dayXX.txt");

info!("Part 1: {}", part_1(&input));
info!("Part 2: {}", part_2(&input));

Ok(())
}

  1. Copy-pasting might be a relaxing thing to do, but you can also discover +nasty stuff about your PC. See this Reddit post and the comment.
  2. GitHub profile
  3. Even though you can use it even for libraries, but handling errors from +libraries using anyhow is nasty… You will be the stinky one ;)
]]>
+ me+blog@mfocko.xyz (Matej Focko) + advent-of-code + advent-of-code-2022 + rust +
+
+
\ No newline at end of file diff --git a/blog/tags/admin/index.html b/blog/tags/admin/index.html new file mode 100644 index 0000000..7e56e26 --- /dev/null +++ b/blog/tags/admin/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "admin" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/advent-of-code-2022/index.html b/blog/tags/advent-of-code-2022/index.html new file mode 100644 index 0000000..d5cdae2 --- /dev/null +++ b/blog/tags/advent-of-code-2022/index.html @@ -0,0 +1,25 @@ + + + + + +5 posts tagged with "advent-of-code-2022" | mf + + + + + + + + + + + + + +
+

5 posts tagged with "advent-of-code-2022"

View All Tags
+ + + + \ No newline at end of file diff --git a/blog/tags/advent-of-code/index.html b/blog/tags/advent-of-code/index.html new file mode 100644 index 0000000..208449c --- /dev/null +++ b/blog/tags/advent-of-code/index.html @@ -0,0 +1,25 @@ + + + + + +5 posts tagged with "advent-of-code" | mf + + + + + + + + + + + + + +
+

5 posts tagged with "advent-of-code"

View All Tags
+ + + + \ No newline at end of file diff --git a/blog/tags/copr/index.html b/blog/tags/copr/index.html new file mode 100644 index 0000000..3a160b1 --- /dev/null +++ b/blog/tags/copr/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "copr" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/cpp/index.html b/blog/tags/cpp/index.html new file mode 100644 index 0000000..7776db8 --- /dev/null +++ b/blog/tags/cpp/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "cpp" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html new file mode 100644 index 0000000..4a82b73 --- /dev/null +++ b/blog/tags/index.html @@ -0,0 +1,25 @@ + + + + + +Tags | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/iterators/index.html b/blog/tags/iterators/index.html new file mode 100644 index 0000000..400c077 --- /dev/null +++ b/blog/tags/iterators/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "iterators" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/leetcode/index.html b/blog/tags/leetcode/index.html new file mode 100644 index 0000000..12ef649 --- /dev/null +++ b/blog/tags/leetcode/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "leetcode" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/red-hat/index.html b/blog/tags/red-hat/index.html new file mode 100644 index 0000000..778decd --- /dev/null +++ b/blog/tags/red-hat/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "red-hat" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/rust/index.html b/blog/tags/rust/index.html new file mode 100644 index 0000000..586fc4e --- /dev/null +++ b/blog/tags/rust/index.html @@ -0,0 +1,25 @@ + + + + + +5 posts tagged with "rust" | mf + + + + + + + + + + + + + +
+

5 posts tagged with "rust"

View All Tags
+ + + + \ No newline at end of file diff --git a/blog/tags/vps/index.html b/blog/tags/vps/index.html new file mode 100644 index 0000000..54bb7df --- /dev/null +++ b/blog/tags/vps/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "vps" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/🏭/index.html b/blog/tags/🏭/index.html new file mode 100644 index 0000000..0162360 --- /dev/null +++ b/blog/tags/🏭/index.html @@ -0,0 +1,26 @@ + + + + + +One post tagged with "🏭" | mf + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contributions/index.html b/contributions/index.html new file mode 100644 index 0000000..276a3df --- /dev/null +++ b/contributions/index.html @@ -0,0 +1,25 @@ + + + + + +Contributions | mf + + + + + + + + + + + + + +
+

Contributions

Many of my contributions to open-source projects.

Fedora Infrastructure Ansible

Description

Collection of Ansible playbooks that powers the Fedora Infrastructure.

Contribution

I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions.

Bodhi

Description

Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution.

Contribution

I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser.

Gluetool Modules Collection

Description

Modules for gluetool — a command line centric framework usable for glueing modules into a pipeline.

Contribution
  • I have proposed a possible implementation of git merging that was later on extended.
  • I have tried to help out with Copr module after they deprecated older version of their API.

Pagure

Description

Pagure is a git-centered forge, python based using pygit2.

Contribution

I have added an API endpoint for reopening pull requests.

Copr

Description

RPM build system - upstream for Copr.

Contribution
  • Supporting external repositories for custom SRPM build method.
  • Allowing admins of Copr repositories to build without the need to ask for explicit builder permissions.

python-gitlab

Description

A python wrapper for the GitLab API.

Contribution

I have contributed support for the merge_ref on merge requests that hasn't been supported, yet it was present in the GitLab API.

PatternFly React

Description

A set of React components for the PatternFly project.

Contribution

When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users.

Fira Code

Description

Free monospaced font with programming ligatures.

Contribution

I have set up a GitHub Action for building the font on each push to the default branch allowing users to install bleeding edge version of the font.

nixpkgs

Description

Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution.

Contribution

When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core.

Darcula

Description

A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs.

Contribution

I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now.

Packit

Description

An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions.

Contribution

Have a look at my pull requests.

Snitch

Description

Language agnostic tool that collects TODOs in the source code and reports them as Issues.

Contribution
  • Environment variable support for self-hosted GitLab instances
  • GitLab support

Karel the Robot

Description

Karel the robot is in general an educational programming language for beginners, created by Richard E. Pattis. This is implementation of Karel the Robot for C programming language.

This project is used for educational purposes at TUKE.

Contribution

I have contributed some refactoring tips to the author of the library.

+ + + + \ No newline at end of file diff --git a/files/blog/leetcode/sort-matrix-diagonally/makefile b/files/blog/leetcode/sort-matrix-diagonally/makefile new file mode 100644 index 0000000..07bbd28 --- /dev/null +++ b/files/blog/leetcode/sort-matrix-diagonally/makefile @@ -0,0 +1,16 @@ +CXX=clang++ +CXXFLAGS=-std=c++20 -Wall -Wextra -Werror -g -pedantic + +test: matrix-sort + ./matrix-sort + +matrix-sort: format tidy + $(CXX) $(CXXFLAGS) matrix-sort.cpp -o matrix-sort + +format: + clang-format -i -style=webkit *.cpp + +tidy: + clang-tidy *.cpp -- $(CXXFLAGS) + +.PHONY: matrix-sort format tidy \ No newline at end of file diff --git a/files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp b/files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp new file mode 100644 index 0000000..209b02a --- /dev/null +++ b/files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp @@ -0,0 +1,229 @@ +#include +#include +#include + +using matrix = std::vector>; + +template +class diagonal { + using matrix_t = std::vector>; + + matrix_t& matrix; + std::size_t x; + std::size_t y; + + class diagonal_iter { + // we need to keep reference to the matrix itself + std::reference_wrapper m; + + // we need to be able to tell our current position + std::size_t x; + std::size_t y; + + public: + using difference_type = std::ptrdiff_t; + using value_type = T; + using pointer = T*; + using reference = T&; + using iterator_category = std::random_access_iterator_tag; + + diagonal_iter(matrix_t& matrix, + std::size_t x, + std::size_t y) + : m(matrix) + , x(x) + , y(y) + { + } + + bool operator==(const diagonal_iter& rhs) const + { + return x == rhs.x && y == rhs.y && m.get() == rhs.m.get(); + } + + diagonal_iter& operator++() + { + // we are moving along the diagonal, so we increment both ‹x› and ‹y› + // at the same time + x++; + y++; + return *this; + } + + reference operator*() const { return m.get()[y][x]; } + + // exactly opposite to the incrementation + diagonal_iter operator--() + { + x--; + y--; + return *this; + } + + // moving ‹n› steps back is same as calling decrementation ‹n›-times, so + // we can just return a new iterator and subtract ‹n› from both + // coordinates in the matrix + diagonal_iter operator-(difference_type n) const + { + return diagonal_iter { m, x - n, y - n }; + } + + // here we assume that we are given two iterators on the same diagonal + difference_type operator-(const diagonal_iter& rhs) const + { + assert(m.get() == rhs.m.get()); + return x - rhs.x; + } + + // counterpart of moving ‹n› steps backwards + diagonal_iter operator+(difference_type n) const + { + return diagonal_iter { m, x + n, y + n }; + } + + // we compare the coordinates, and also assume that those 2 iterators are + // lying on the same diagonal + bool operator<(const diagonal_iter& rhs) const + { + assert(m.get() == rhs.m.get()); + return x < rhs.x && y < rhs.y; + } + }; + +public: + diagonal(matrix_t& matrix, std::size_t x, std::size_t y) + : matrix(matrix) + , x(x) + , y(y) + { + } + + diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; } + + diagonal_iter end() const + { + auto max_x = matrix[y].size(); + auto max_y = matrix.size(); + + // we need to find the distance in which we get out of bounds (either in + // column or row) + auto steps = std::min(max_x - x, max_y - y); + + return diagonal_iter { matrix, x + steps, y + steps }; + } +}; + +template +class diagonals { + using matrix_t = std::vector>; + + class diagonals_iter { + matrix_t& m; + std::size_t x; + std::size_t y; + + public: + diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y) + : m(matrix) + , x(x) + , y(y) + { + } + + bool operator!=(const diagonals_iter& rhs) const + { + // iterators are not equal if they reference different matrices, or + // their positions differ + return x != rhs.x || y != rhs.y || m != rhs.m; + } + + diagonals_iter& operator++() + { + if (y != 0) { + // iterating through diagonals down the first column + y++; + return *this; + } + + // iterating the diagonals along the first row + x++; + if (x == m.front().size()) { + // switching to diagonals in the first column + x = 0; + y++; + } + + return *this; + } + + diagonal operator*() const { return diagonal { m, x, y }; } + }; + + matrix_t& _matrix; + +public: + diagonals(matrix_t& m) + : _matrix(m) + { + } + diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; } + diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; } +}; + +class Solution { +public: + matrix diagonalSort(matrix mat) + { + // we iterate over the diagonals + for (auto d : diagonals(mat)) { + // and we sort each diagonal + std::sort(d.begin(), d.end()); + } + + // we take the matrix by copy, so we can sort in-situ and return the copy + // that we sorted + return mat; + } +}; + +static void test_case_1() +{ + // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]] + // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]] + + Solution s; + assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 }, + std::vector { 2, 2, 1, 2 }, + std::vector { 1, 1, 1, 2 } }) + == std::vector { std::vector { 1, 1, 1, 1 }, + std::vector { 1, 2, 2, 2 }, + std::vector { 1, 2, 3, 3 } })); +} + +static void test_case_2() +{ + // Input: mat = + // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]] + // Output: + // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]] + + Solution s; + assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 }, + std::vector { 23, 55, 17, 45, 15, 52 }, + std::vector { 75, 31, 36, 44, 58, 8 }, + std::vector { 22, 27, 33, 25, 68, 4 }, + std::vector { 84, 28, 14, 11, 5, 50 } }) + == std::vector { std::vector { 5, 17, 4, 1, 52, 7 }, + std::vector { 11, 11, 25, 45, 8, 69 }, + std::vector { 14, 23, 25, 44, 58, 15 }, + std::vector { 22, 27, 31, 36, 50, 66 }, + std::vector { 84, 28, 75, 33, 55, 68 } })); +} + +int main() +{ + test_case_1(); + test_case_2(); + + return 0; +} \ No newline at end of file diff --git a/files/ib002/algorithms-correctness/postcondition-ambiguity/test_sort.py b/files/ib002/algorithms-correctness/postcondition-ambiguity/test_sort.py new file mode 100644 index 0000000..c616f8f --- /dev/null +++ b/files/ib002/algorithms-correctness/postcondition-ambiguity/test_sort.py @@ -0,0 +1,139 @@ +from hypothesis import given, settings +from hypothesis.strategies import integers, lists +import pytest + +import itertools + + +def compare_by_value(pair): + """ + Takes a pair from enumerate in form: `index, value` and returns the value + + Args: + pair (Tuple[int, T]): Index and element from the iterator at the index. + + Returns: + Element from the pair. + """ + index, value = pair + return value + + +def maximum(arr, n): + """ + Finds index of maximum element of first n elements in list. + + Args: + arr (List): List of values. + n (int): Upper bound of index where to search for maximum (inclusive). + + Returns: + Index of a maximum element in `arr[:n]`. + """ + first_n_elements = itertools.islice(enumerate(arr), n) + index, value = max(first_n_elements, key=compare_by_value) + return index + + +# Precondition: n = |A| +# Loop invariant: +# A[i + 1 : n] is sorted AND +# all elements of A[i + 1 : n] are bigger or equal to the other elements +# Postcondition: A is sorted +def select_sort(arr, n): + """ + Sorts list `arr` using select sort algorithm. + + Args: + arr (List): List of values. + n (int): Size of the list. + + Returns: + Sorted list `arr`. + """ + assert n == len(arr) + + check_loop_invariant(arr, n, n) + for i in reversed(range(1, n)): + j = maximum(arr, i + 1) + arr[i], arr[j] = arr[j], arr[i] + + check_loop_invariant(arr, n, i) + + return arr + + +def broken_select_sort(arr, n): + assert n == len(arr) + + if not arr: + return + + max_value = max(arr) + + check_loop_invariant(arr, n, n) + for i in reversed(range(n)): + arr[i] = max_value + i + + check_loop_invariant(arr, n, i) + + return arr + + +def check_loop_invariant(arr, n, i): + # A[i + 1 : n] is sorted + for x, y in zip(itertools.islice(arr, i + 1, n), itertools.islice(arr, i + 2, n)): + assert x <= y + + # all elements of A[i + 1 : n] are bigger or equal to the other elements + if i + 1 >= n: + # in case there are no elements + return + + # otherwise, since the "tail" is sorted, we can assume that it is enough to + # check the other elements to the smallest value of the tail + smallest = arr[i + 1] + for element in itertools.islice(arr, i + 1): + assert smallest >= element + + +def check_vague_postcondition(original_arr, arr): + if not arr: + return + + # check ordering + for x, y in zip(arr, itertools.islice(arr, 1, len(arr))): + assert x <= y + + +def check_postcondition(original_arr, arr): + if not arr: + return + + # check ordering + for x, y in zip(arr, itertools.islice(arr, 1, len(arr))): + assert x <= y + + # get counts from original list + original_counts = {} + for value in original_arr: + original_counts[value] = 1 + original_counts.get(value, 0) + + # get counts from resulting list + counts = {} + for value in arr: + counts[value] = 1 + counts.get(value, 0) + + # if arr is permutation of original_arr then all counts must be the same + assert counts == original_counts + + +@given(lists(integers())) +@settings(max_examples=1000) +@pytest.mark.parametrize( + "postcondition", [check_vague_postcondition, check_postcondition] +) +@pytest.mark.parametrize("sorting_function", [select_sort, broken_select_sort]) +def test_select_sort(sorting_function, postcondition, numbers): + result = sorting_function(numbers[:], len(numbers)) + postcondition(numbers, result) diff --git a/files/ib002/graphs/bfs-tree/bfs_graph.dot b/files/ib002/graphs/bfs-tree/bfs_graph.dot new file mode 100644 index 0000000..abaefdf --- /dev/null +++ b/files/ib002/graphs/bfs-tree/bfs_graph.dot @@ -0,0 +1,17 @@ +graph { + a -- c + a -- e + + c -- i + c -- b + + e -- j + + i -- d + + b -- h + + d -- h + + h -- j +} \ No newline at end of file diff --git a/files/ib002/graphs/bfs-tree/bfs_graph_dark.png b/files/ib002/graphs/bfs-tree/bfs_graph_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2b064339c052ddaa82908aac2faac3149edd325a GIT binary patch literal 26144 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

fsAnAoP7XZUv;2Dl9Sy) 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 literal 0 HcmV?d00001 diff --git a/files/ib002/graphs/bfs-tree/bfs_graph_light.png b/files/ib002/graphs/bfs-tree/bfs_graph_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3a47c3412cec3a2893f63cdfde54fcf433a2fc03 GIT binary patch literal 24964 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 literal 0 HcmV?d00001 diff --git a/files/ib002/graphs/bfs-tree/bfs_graph_with_additional_edge_light.png b/files/ib002/graphs/bfs-tree/bfs_graph_with_additional_edge_light.png new file mode 100644 index 0000000000000000000000000000000000000000..63d9ee2d67b20473abe99ca9c923e5b5906db26d GIT binary patch literal 25963 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 c + a -> e + + c -> b + c -> i + + e -> j + + b -> h + + i -> d +} \ No newline at end of file diff --git a/files/ib002/graphs/bfs-tree/bfs_tree_dark.png b/files/ib002/graphs/bfs-tree/bfs_tree_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..443fea5b2509ba4a8d1262b2669e141e8a735970 GIT binary patch literal 16932 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%0D<5 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 c + a -> e + + c -> b + c -> i + + e -> h + e -> j + + i -> d +} \ No newline at end of file diff --git a/files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_dark.png b/files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1fc639711fd8641a5b6a64ec77cac579315d33 GIT binary patch literal 18530 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

?;r{ zvwH5sa0UKtx8oxw3W}O&^voR%dY)4k95Qr%li<3TaBnIrA9bZS=2q=6bai!Y?*_Mq zktou|wGSrlGUoMb1{^wOUGjP2B=Kc+w7%w+PeEJ6$a90UTN1WX&pvtPi$sb@9!MOQjjjT# zp(p)xJ1~$v$?;)CL`0A*uY~~vD;rzckGt%O$D+vJ5zy;J{tiW38{ef%m)7OOXriJY z`N<79Nem7(Bz<+r1L^g>7(K+u_XG7HR@2?vy9Jhnv5AS#4*NUft`uGeAw~rF4h|0^ zBU$QsQ;P#u?sdOve%-gM#{}t(Ym;s;p51C~vn}uI`-8u;vjg?m@YXGgCfHDrbovxr zuP(Arvb>Diocqc+Ix3pm-#9X!m?KD@nVBgV`!H9KIYAw6NaqYaG>ipLx#(mU_CnRIv8o?~cfG z3b0erQ$+zUICymwMnoXIacDKUhdZM&NS;G=)`L4-lQ8eSvnDC`w~$94X_WKv|Nh-g l>+7pD%B0-h_G_;Gr`tK=+M^=jj|Smssp+bgC|f`Le*nxI1ZDsL literal 0 HcmV?d00001 diff --git a/files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_light.png b/files/ib002/graphs/bfs-tree/bfs_tree_with_additional_edge_light.png new file mode 100644 index 0000000000000000000000000000000000000000..fe546931ba38bdf68653f61177498fbb20f48596 GIT binary patch literal 17546 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 BT?POE literal 0 HcmV?d00001 diff --git a/files/ib002/graphs/iterative-and-iterators/.archive b/files/ib002/graphs/iterative-and-iterators/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/ib002/graphs/iterative-and-iterators/.editorconfig b/files/ib002/graphs/iterative-and-iterators/.editorconfig new file mode 100644 index 0000000..11f2d95 --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/.editorconfig @@ -0,0 +1,206 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = lf +insert_final_newline = true + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = false +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = false:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_property = false:silent + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent + +# Expression-level preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_object_initializer = true:suggestion +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion + +# Field preferences +dotnet_style_readonly_field = true:suggestion + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:suggestion + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = false:silent +csharp_style_var_for_built_in_types = false:silent +csharp_style_var_when_type_is_apparent = false:silent + +# Expression-bodied members +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_switch_expression = true:suggestion + +# Null-checking preferences +csharp_style_conditional_delegate_call = true:suggestion + +# Modifier preferences +csharp_prefer_static_local_function = true:suggestion +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent + +# Code-block preferences +csharp_prefer_braces = true:silent +csharp_prefer_simple_using_statement = true:suggestion + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# 'using' directive preferences +csharp_using_directive_placement = inside_namespace:silent + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = false +csharp_new_line_before_else = false +csharp_new_line_before_finally = false +csharp_new_line_before_members_in_anonymous_types = false +csharp_new_line_before_members_in_object_initializers = false +csharp_new_line_before_open_brace = none +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case diff --git a/files/ib002/graphs/iterative-and-iterators/.gitignore b/files/ib002/graphs/iterative-and-iterators/.gitignore new file mode 100644 index 0000000..8bf1b90 --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/.gitignore @@ -0,0 +1,448 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*[.json, .xml, .info] + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# Ionide - VsCode extension for F# Support +.ionide/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/files/ib002/graphs/iterative-and-iterators/graphs.csproj b/files/ib002/graphs/iterative-and-iterators/graphs.csproj new file mode 100644 index 0000000..ce937de --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/graphs.csproj @@ -0,0 +1,10 @@ + + + + Exe + net5.0 + + enable + + + diff --git a/files/ib002/graphs/iterative-and-iterators/src/BFS.cs b/files/ib002/graphs/iterative-and-iterators/src/BFS.cs new file mode 100644 index 0000000..68901d9 --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/src/BFS.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; + +namespace graphs { + class BFS where T : notnull { + private Graph graph; + + private Dictionary Distance = new Dictionary(); + private Dictionary Parent = new Dictionary(); + private Dictionary State = new Dictionary(); + + public BFS(Graph graph) { + this.graph = graph; + } + + public BFS Run() { + foreach (var vertex in graph.Vertices) { + if (ColorOf(vertex) == Color.White) { + RunFrom(vertex); + } + } + + return this; + } + + public BFS RunFrom(T start) { + State[start] = Color.Gray; + Distance[start] = 0; + Parent[start] = default(T); + + var queue = new Queue(); + queue.Enqueue(start); + + while (queue.Count > 0) { + var u = queue.Dequeue(); + + for (var iterator = graph.GetEdgesFrom(u); iterator.MoveNext();) { + var v = iterator.Current; + + if (GetOrDefault(State, v, Color.White) == Color.White) { + State[v] = Color.Gray; + Distance[v] = Distance[u] + 1; + Parent[v] = u; + + queue.Enqueue(v); + } + } + + State[u] = Color.Black; + } + + return this; + } + + private static V GetOrDefault(Dictionary flags, U u, V defaultValue) + where U : notnull { + if (flags.TryGetValue(u, out var flag)) { + return flag; + } + return defaultValue; + } + + public int DistanceTo(T u) => GetOrDefault(Distance, u, 0); + public T? ParentOf(T u) => GetOrDefault(Parent, u, default(T)); + public Color ColorOf(T u) => GetOrDefault(State, u, Color.White); + } +} diff --git a/files/ib002/graphs/iterative-and-iterators/src/DFS.cs b/files/ib002/graphs/iterative-and-iterators/src/DFS.cs new file mode 100644 index 0000000..626eba4 --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/src/DFS.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; + +namespace graphs { + class DFS where T : notnull { + private Graph graph; + + private int time; + private Dictionary Discovered = new Dictionary(); + private Dictionary Finished = new Dictionary(); + private Dictionary State = new Dictionary(); + + public DFS(Graph graph) { + this.graph = graph; + } + + public DFS Run() { + time = 0; + + foreach (var vertex in graph.Vertices) { + if (ColorOf(vertex) == Color.White) { + RunFrom(vertex, false); + } + } + + return this; + } + + public DFS RunFrom(T start, bool reset = true) { + var path = new Stack<(T, IEnumerator)>(); + + if (reset) { + time = 0; + } + + (Discovered[start], State[start]) = (++time, Color.Gray); + path.Push((start, graph.GetEdgesFrom(start))); + + while (path.Count > 0) { + var (lastVertex, successors) = path.Peek(); + + if (!successors.MoveNext()) { + path.Pop(); + (Finished[lastVertex], State[lastVertex]) = (++time, Color.Black); + } else if (ColorOf(successors.Current) == Color.White) { + var nextVertex = successors.Current; + + (Discovered[nextVertex], State[nextVertex]) = (++time, Color.Gray); + path.Push((nextVertex, graph.GetEdgesFrom(nextVertex))); + } + } + + return this; + } + + private static V GetOrDefault(Dictionary flags, U u, V defaultValue) + where U : notnull + where V : notnull { + if (flags.TryGetValue(u, out var flag)) { + return flag; + } + return defaultValue; + } + + public int DiscoveredAt(T u) => GetOrDefault(Discovered, u, 0); + public int FinishedAt(T u) => GetOrDefault(Finished, u, 0); + public Color ColorOf(T u) => GetOrDefault(State, u, Color.White); + } +} diff --git a/files/ib002/graphs/iterative-and-iterators/src/Graph.cs b/files/ib002/graphs/iterative-and-iterators/src/Graph.cs new file mode 100644 index 0000000..220779c --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/src/Graph.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using System.Linq; + +namespace graphs { + enum Color { + White, Gray, Black + } + + class Graph where T : notnull { + private SortedSet vertices = new SortedSet(); + private SortedDictionary> edges = new SortedDictionary>(); + + public SortedSet Vertices { + get => vertices; + } + + public void AddVertex(T u) { + vertices.Add(u); + edges.Add(u, new SortedSet()); + } + + public void AddEdge(T u, T v) { + if (edges.TryGetValue(u, out var edgesFromU)) { + edgesFromU.Add(v); + } + } + + public bool HasEdge(T u, T v) { + if (edges.TryGetValue(u, out var edgesFromU)) { + return edgesFromU.Contains(v); + } + + return false; + } + + public IEnumerator GetEdgesFrom(T u) { + if (edges.TryGetValue(u, out var edgesFromU)) { + return edgesFromU.GetEnumerator(); + } + + return Enumerable.Empty().GetEnumerator(); + } + } +} diff --git a/files/ib002/graphs/iterative-and-iterators/src/Program.cs b/files/ib002/graphs/iterative-and-iterators/src/Program.cs new file mode 100644 index 0000000..64790fd --- /dev/null +++ b/files/ib002/graphs/iterative-and-iterators/src/Program.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; + +namespace graphs { + class Program { + static Graph CreateExampleGraph() { + var vertices = new List() { + "s", "q", "t", "y", "r", "v", "w", "x", "z", "u" + }; + + var graph = new Graph(); + + foreach (var vertex in vertices) { + graph.AddVertex(vertex); + } + + graph.AddEdge("s", "v"); + graph.AddEdge("q", "s"); + graph.AddEdge("q", "w"); + graph.AddEdge("q", "t"); + graph.AddEdge("t", "y"); + graph.AddEdge("t", "x"); + graph.AddEdge("y", "q"); + graph.AddEdge("r", "y"); + graph.AddEdge("r", "u"); + graph.AddEdge("v", "w"); + graph.AddEdge("w", "s"); + graph.AddEdge("x", "w"); + graph.AddEdge("x", "z"); + graph.AddEdge("z", "x"); + graph.AddEdge("u", "y"); + + return graph; + } + + static void Main(string[] args) { + var graph = CreateExampleGraph(); + + var dfsTraversal = new DFS(graph).Run(); + foreach (var vertex in graph.Vertices) { + Console.WriteLine($"{vertex}(d: {dfsTraversal.DiscoveredAt(vertex)}, f: {dfsTraversal.FinishedAt(vertex)})"); + } + } + } +} diff --git a/files/ib002/rb-trees/rules/rb.dot b/files/ib002/rb-trees/rules/rb.dot new file mode 100644 index 0000000..f494cbc --- /dev/null +++ b/files/ib002/rb-trees/rules/rb.dot @@ -0,0 +1,47 @@ +digraph { + "Node(value=3, rank=2)" [label="3"]; #done + "Node(value=1, rank=1)" [label="1"]; #done + "Node(value=4, rank=0)" [label="4"]; #done + "Node(value=7, rank=1)" [label="7", color="red"]; #done + "Node(value=0, rank=0)" [label="0"]; #done + "Node(value=2, rank=0)" [label="2"]; #done + "Node(value=5, rank=1)" [label="5"]; #done + "Node(value=6, rank=0)" [label="6"]; #done + "Node(value=8, rank=0)" [label="8"]; #done + + "nil1" [label="nil"] + "nil2" [label="nil"] + "nil3" [label="nil"] + "nil4" [label="nil"] + "nil5" [label="nil"] + "nil6" [label="nil"] + "nil7" [label="nil"] + "nil8" [label="nil"] + "nil9" [label="nil"] + "nil10" [label="nil"] + "nil11" [label="nil"] + "Node(value=9, rank=0)" [label="9", color="red"]; #done + + "Node(value=3, rank=2)" -> "Node(value=1, rank=1)" #done + "Node(value=1, rank=1)" -> "Node(value=0, rank=0)" #done + "Node(value=1, rank=1)" -> "Node(value=2, rank=0)" #done + "Node(value=3, rank=2)" -> "Node(value=5, rank=1)" #done + "Node(value=5, rank=1)" -> "Node(value=4, rank=0)" #done + "Node(value=5, rank=1)" -> "Node(value=7, rank=1)" [color="red"] #done + "Node(value=7, rank=1)" -> "Node(value=6, rank=0)" #done + "Node(value=7, rank=1)" -> "Node(value=8, rank=0)" #done + + "Node(value=8, rank=0)" -> "nil1" + "Node(value=8, rank=0)" -> "Node(value=9, rank=0)" [color="red"] #done + + "Node(value=0, rank=0)" -> "nil2" + "Node(value=0, rank=0)" -> "nil3" + "Node(value=2, rank=0)" -> "nil4" + "Node(value=2, rank=0)" -> "nil5" + "Node(value=4, rank=0)" -> "nil6" + "Node(value=4, rank=0)" -> "nil7" + "Node(value=6, rank=0)" -> "nil8" + "Node(value=6, rank=0)" -> "nil9" + "Node(value=9, rank=0)" -> "nil10" + "Node(value=9, rank=0)" -> "nil11" +} \ No newline at end of file diff --git a/files/ib002/rb-trees/rules/rb_dark.png b/files/ib002/rb-trees/rules/rb_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..450a9830f0345cb08c83ae6980836e3a12df283b GIT binary patch literal 45636 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/rb_height.dot b/files/ib002/rb-trees/rules/rb_height.dot new file mode 100644 index 0000000..034ac64 --- /dev/null +++ b/files/ib002/rb-trees/rules/rb_height.dot @@ -0,0 +1,47 @@ +digraph { + "Node(value=3, rank=2)" [label="3⁽³⁾"]; #done + "Node(value=1, rank=1)" [label="1⁽²⁾"]; #done + "Node(value=4, rank=0)" [label="4⁽¹⁾"]; #done + "Node(value=7, rank=1)" [label="7⁽²⁾", color="red"]; #done + "Node(value=0, rank=0)" [label="0⁽¹⁾"]; #done + "Node(value=2, rank=0)" [label="2⁽¹⁾"]; #done + "Node(value=5, rank=1)" [label="5⁽²⁾"]; #done + "Node(value=6, rank=0)" [label="6⁽¹⁾"]; #done + "Node(value=8, rank=0)" [label="8⁽¹⁾"]; #done + + "nil1" [label="nil"] + "nil2" [label="nil"] + "nil3" [label="nil"] + "nil4" [label="nil"] + "nil5" [label="nil"] + "nil6" [label="nil"] + "nil7" [label="nil"] + "nil8" [label="nil"] + "nil9" [label="nil"] + "nil10" [label="nil"] + "nil11" [label="nil"] + "Node(value=9, rank=0)" [label="9⁽¹⁾", color="red"]; #done + + "Node(value=3, rank=2)" -> "Node(value=1, rank=1)" #done + "Node(value=1, rank=1)" -> "Node(value=0, rank=0)" #done + "Node(value=1, rank=1)" -> "Node(value=2, rank=0)" #done + "Node(value=3, rank=2)" -> "Node(value=5, rank=1)" #done + "Node(value=5, rank=1)" -> "Node(value=4, rank=0)" #done + "Node(value=5, rank=1)" -> "Node(value=7, rank=1)" [color="red"] #done + "Node(value=7, rank=1)" -> "Node(value=6, rank=0)" #done + "Node(value=7, rank=1)" -> "Node(value=8, rank=0)" #done + + "Node(value=8, rank=0)" -> "nil1" + "Node(value=8, rank=0)" -> "Node(value=9, rank=0)" [color="red"] #done + + "Node(value=0, rank=0)" -> "nil2" + "Node(value=0, rank=0)" -> "nil3" + "Node(value=2, rank=0)" -> "nil4" + "Node(value=2, rank=0)" -> "nil5" + "Node(value=4, rank=0)" -> "nil6" + "Node(value=4, rank=0)" -> "nil7" + "Node(value=6, rank=0)" -> "nil8" + "Node(value=6, rank=0)" -> "nil9" + "Node(value=9, rank=0)" -> "nil10" + "Node(value=9, rank=0)" -> "nil11" +} \ No newline at end of file diff --git a/files/ib002/rb-trees/rules/rb_height_dark.png b/files/ib002/rb-trees/rules/rb_height_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9c6c736890b7683a5b42555155dac36062c9f2 GIT binary patch literal 57425 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/rb_height_light.png b/files/ib002/rb-trees/rules/rb_height_light.png new file mode 100644 index 0000000000000000000000000000000000000000..1b611c7276f40819293f22334037c630bbcc7ffa GIT binary patch literal 53848 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�jFk275a{TDgBHE72U{|eb zsB3&-}fCr5M0a z!^ET{Tmh0z14>OYZ@sW^FQYU0pn5rfKIABQuNRWFOvDz-biP&NkB^VF+;4<2F?si^ zk207u{7O$#zs*DE|FMrvj00NHf4)fQ$nohU z?p(_3gCDZ&?d*&x+g?^?nLn@$4PZh|qDuAuF3HHq*m96Qg3Ti`gzN9Gc&8Y7+}`}< z=by(jh~~?odz;R^DYee;%YFJRo1~@B_{4;S!Nc>C1Ikkmebq7I&%l$j<}&s~1@;hL za3u8Q+19&yA}g>mDKYU|UdwYm;x!-^Waq(B3$5V?5)&_<_|B_Oee$N0P1A<9Q7G0Z zN>%Oy5kWuYkUH!O#_|3|_f342oBW%HpS zIMFa}uz2&`+n0O(dAB(ko;p2yCeyLo-u+=LmOC?u!p;)rQ#=~1D(_eS9(YpkooDBt zn$9I8hejHDG`;D8c^cyhX>Iuz*f2wZp-u$)a zrj@_Fcd^6wrvc-Y((=HFCjjlMgQH^^ z7ZfOGZ)6xi0MPWtjT?)pm9#=GKPxO!53DI{w~lYKW~Pku1xcMi5qBLFuRvLHhsQ0L zend_@-)QKQ{r#?~liyXIS{uYeRJ>Y`t`V>D?{*?x1~yPppzi9PaKYsJ(=MbvC1mV6 zUAxY6_^`hAT5krMGzuPX*oQ6@L+rQyg|ekJfWyJB8V8$_e?XmmbGb2DQIEoDL+0)@$+Y$ zJMWKqoi^?HqE&qKY+ z+jH?c7a1Y*%P;Y4JAZx(32-qRzCii#3p(pAD_5SqeSVdS<>tp}KF2wCs~yviC}EWQ_~TpS$u}}q}{`u(0ec!(-kW(`Wn2UPNVuu&31dG$4oUR z{+}Cqg!VF3&1AX?r5Ms*Q9jz5m}pGf-2tkzasU3Vfq}ezCd3W&VEMJxT^mCS z?^Q3iRFBl>7OWYCYyN)FjAzJM7<5xaVPJ+0Ny)+qjc=cBl_g6nfgF0WfbW!B84woD z7F1lnKELU0L~ZCgP3*2KaCLL@ha**yHg^*yzWX7P5U?iExp%@pdcEc78+R8OF{Ykc zO7uvsQ>Pw41T&8g?@r5*R3LAy!kOEw)0@}y9ml)DXO__gfFR_6nUNc8XIR5^H^On90y?BZ8y1id6}HKb)1MVp(g0eEjdU)ZP=gJ;o_)QrhHu;(GtQM z61Y4jHueZ{oTxv87_j9aPeVnojR}M6F_zmeu^Apns^>BPiu8meHx)6_DzwRj9m1;; z&Ytxmq5~l9z{l7qHvbUq{BN*o0oi5^Nl*Y$oYYjh_P+Vc=F=qG{l<+O#>U3QEH#=J z`+3~Y*f?^W0A3J3YwqTJl<75KtgY=)w7hVCc8F&tP<{fZ?Xy2K)8OXn=;^5tfnD~` z*x8t|?$W}R2(HL}Ir-HyIYSj|DpNEYP|={&JQ&5DAENr~88kvxyW-ACZ?$!z`=o?b Tm;G+be~ceH+4lIDnd|-wO~6TS literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/rb_light.png b/files/ib002/rb-trees/rules/rb_light.png new file mode 100644 index 0000000000000000000000000000000000000000..a73079ecb4e917adaaa7d9e2d1012d53bb977675 GIT binary patch literal 42611 zcmb@u2V9Tg+dlkl@4fdRX;2YT+NBawqGYs585L4#YVSddC@CVNB0^KCs5B@=(jXxX zrPA^qSDxqp{NM2(@B4ZEKELPr@cZ8Pecji6UFUh6$8nrj)UKUIY|O&U6bgmS#Mr=s zLZJzvP^d*1>G3b-9j12pfAkKfMh29>0-E6(~0?Vz>smlEQ;mM5B z4y$b##*22W5WSkzWT*)W0cY{SpE~f zvfbE=T6+0UyB2%Mzkj8VtdZm*f0C%yC5Z(^M!McFF6Q36d2_?dm%0G~TJj1C=GNAc z(b3G-Ha5?jnppYy`CZy`nQTg2=|n_Cx|5o(l z!6PGWv9`n}ZiP|2-Mf1S)!h3i7Q1(w+t@IRh+ICWpLyW|4|(*tbLYCcyQ}N!=(ld& zTKMQucvKYAiBA=A?d=vlPfjsZF3l<2J5(O+_U@jPhK9(^omcd>Zl&Lur4?6PyiWCG zuV}gNZ@sbJ^8Oz`Vk#HDC=~~?L`FvD2N-w?u9UXO){kJfe{*9;WPE&GM}gHu K` z`g(@m-rn))>3fq>cXM*6Wp`%kI5aw>oxuU@855CC}MWHDg(7E{tSs6`&1$J z=g%L(E#AuKLqggr0|W0KmXemv@vXK`j5L0flOr7(5#d;Uo^B@mUKEdPj%{T?@pYM%XhEvV(EHm0;vTDtw9D1B6J zldm<>)z93{+2nsCFVB9o=SgH#lrAQ`$nTHm>7VcScqw9``1&UKy_V!kqCI-_=y2P0 zh8x>6&Sz&!IypPr_m=rYi_=n7ef%hfXRCRQ2r8~w({|m6gO-6|g|@b>mnyk_8+r6Y zW5!^^82)QU3F3u?g;f)S^+nzj4lg)@IZmBARkO4>Uu0iH?>GPR@o;+{OY(&a&h@x7 z=VldoWz!QMpN3J<(A(jSWo%Q+i=gOyswv*TBE_PPl zxG_~M4j<@h5VnH3rbgh>7T=lCxEnhz4~+NMxVyV2irspB%Tj*(<&A9d@$rnTtOh4e ztbKH>o0^Ab>0~(8|1Ix~)wuGh*H7U?{=fHhefY3KMa5i+p?aQ8XdP`)QBhZko4~3a zmuT1CStX72O}5ML&(l9Y2&%bD3ah#VUC}t3V{&0t@rt8{_YakG3JFEsub5*#_4Rd% zSOi8U9y_A#``|odW;l0BbM527xE$fX9EF-2zKgL+u`t#j1%i3BW zFXmiNMIn<$!@yqKkhG%6XY#O|keE{+r52#w>5L|@zJGh zqf<~&nELjH!L>vf*XUyjB1$)+3|i(z3lvaMx%Jq;FuT|EbMSP z7JlRAjywC-fBy2tq?rsZuy1*A+qP|^=)8KcaJ#+GUjOuuPB!dr#MioCUmEj6b4L&Q1)vdwF%vO+0w;peSI`x9N(;Oj1I|<;#vQlVxmLPFFsBsEPo% z?LS_LEGu<~!-wfNZQ8U_R@QWLfPn$6)}PNjr^kB5Fhvo0c{1u=Baw)u(koWb96EH! z!jme9lUhzru3h4pE}52HOj4mEoCXGS4zDveTUQ2Xu02pnaddR-_TXJ1B}JvBrDbep z77-H@v%L3c4SqF|mBEY!lcHc%c=D50w>huOmMx+OpLuT>e0b*RQWAD=XvV z=U=4}?Qo#NPsrTdJYCuT{K#rN^|ZvHRoe_K>$!P&`VrZ>x~$87y;3M1G#23H4aF+% z!}d{Lzy88hw*y!*ohlzpdM{FeTF#huM9Eosl5J*%d!?l3d@an~)&;uVd2jhS`y)qWHP~_cJ;6uFx^7FBF;(`Pb!Qb*=fx%} z9(=1IMSH_6D;}}Nu`zYca7RJf2WZBkv6q9T^urtCagBi)$t3w#GcH|nKvJKr*Io*)s?s45?aP-h#f}}fVg!_O z&W`nV6*)3^jrP23zJ`m`Nis;{7Zeh*$I7yP=CvkO$(CJ7Ny+K(;aBl{WOH(I`i6$W zKLyOQy?ps{_}%@i`-y6W6jj^7gnlVSa<&X`M!~n*xx_i z4ZgmjQ9QUu4gqidk=LPEfMgE;Onx1#jp7-fm`GZ_i>r=IC}*)gCzsGug!sV=W?I!l z&6n++ox_S8>m8nlGPNr`Q&dtiI(AHP@BKq@Sk~8kCWq3s{MCV2?2jIm+aQ7u+p%pW z84MlfraH|wAZmkKr=)@cic(zamG($caIP*Bb1*GdZu3-|FpT~X}-Q7qbzPtWKdIwX$p|0kaj`D?Le z`Oc3{e2m7j@LT--j**eE>g5I5BmleGS_6dd{_hETwYHTxeKT;6z`%$ zJ%Wc1A1-|OFf=1Wh?#{2dpH>H!^_J{(h5*?>FICW0ZV_5Tue!+uC1lLqJHN5f(8fksR8(~3-+NfO=3>jRQT0g6RYM>$75nG33tzSW-uiV4 zaW(Pk)%e(0)=cd{@pt!a>k(rTFI)%##K8i~K@I|#EG#ZQf9saqox6A2ki68?)UtsP zTs}VCfJn!9kV~n~eFu_?hXEeIx-4 z)+ZQQTc`hn7MrC1xG>?n`T(wZOb+cZFf^2N;H0Gh)ZaN&E=({$U7X0jP^0c3twG`9 zI;wc^DK93b>%ozPfzg(8lg*owE?x{pmM?ww>^d;ca-cC^GqKJbH#Rmg3C0W!y}lB& z@4?}h@w@YYR;NZkiflUBYvAfCkGFC*BKYvqpeFK9@yAjR8q^W)K$2%a`7@+!lhJ5* zbUt#Vrly9*e}4J}@P^ZJ;QROcb+|GBB^%B9~*+pnneA@3$HM_|{;v?y*alVZnu z_Srvw?2&c_wFAmV)XWU;?j1z9tjB8d80k_$<#E6ZkX+hVz3d2J zK-E{UjFl>8rIDVBJilz~_8#Ex#2Zaq1%{aOT%0>YmMehH?9kkDiAqnzF=iQo8 zk3pyUq-~7Bfb@t@Qft<*O;1lRZ=@u8@_lZbetmsKpF|JWx2yjxYs1xwiUyBQd~7Xt zHZAwBlSawUz6?mMfceJTO_i=8of>c7j!>2{VjP`>KqIc{+n4osL6%?9T5@?PR7ndz z_5o6Hi;Bi#ulJ)U6s46I`2IbbWa_4LmEq32BH?TztH`HMsvabel3{87)8B!D`xVdQ z#Wco89<;oQziy0>gIA>P_5HC18L;N%OOxe&5mMKPAml2yVFMp3^yl+ql?fc$3%k5T z4Hed`d4a_hi)bLKApi@$sr4 zDw;x%!L7@Sir(e?|HdAMvA6BU z>Xr{!m@x7~)CG)B6*E#I&==6+ISQhpvtx(;O$$AV0k>};`${V-bJ_+jZU97as&CV9 ztc$G%VoOR*rDtGZSpM;p7+GOYZ7~jD4GEvW-4BkmmAF}LPgkb;`==#v<;pjKs1=8M z%Qb{IxQ2#?(yF?&_9eCW^ki|6fUtplveViU5)ythAJ1}>-A5X#31>gwD*JWxT=-nnz<;l-xHsqY;u*b*Um zd0%)QKT1tYJ5{inU>#C+(w{`xo8X`L1oMEDr{X_%T2#Y}^~8x2Ham}~p`Ko~Jv|6$ zlh5`nCTTJn3au|Bv@UO7?~fQ8hb90fN>%J@W&^%KY3y zYQ8W@;y}oD!>!l60j!eJ($0>xe8;%zFr5V(?!2=KL}ENGM4lTBG$+z zkr5@b>BN@tvM1V(Cr-oz)+3@atzEkowQ@K>F<6s@Dt{NC&*$J?Mz63fAPjTz@=kS~ z>oC4bYMAwho2rod?46uwrDy?-RgS#QJePI-=MwPfw?bo}p_M5%ck7Z?7!|s`TPv#O zP65-qdd-@!xVYwWf&QI4ce-@k<{SC>6QvykA`|MS>i6%30kcZ|=QnOMHTA#>UYPrF zzts1){Jn$E!be7qWvZWH77`Lt^Pf|F_3Bk?na?S*M#|64grn*K1II=orPAKJHevX$ z$&%PLZ5|1UgvY(UENN>Go(B<(_ms`kuBfP(ZM0pIo_`zy0_XmK60$vKN z?hicqdNm{=fupRv9M$x}uS&%V^78HjwM;8lt&&C!&&0&EdiCm{q9PRpy>Zaj&wG0- zb|#qo{)z-te{QTiLLzX1i<0}h9$0N@X-QDSOL1P`z~E^(*3eNib8{|iopHh?X=;kK zX#d@^u(+sldUzLz2-gj!`}PSfEzMM3FDny8`Kt#`ot{HH7N}%u?2~Q5zI@-?-_1~Q zw>>#^q-=ilnN73B-o4?A^D~2&PgYbT3U*6?!!<-%nZLxx$0r3UfrVeObSB4Vpf+l` z?sTE3Dveyfe!a-|x2xaZ#ToZAXI>z)a7WjXrfdiyC zD1hLEEk}uHcl2l!aD$|pnjo0$;_E`Z(*SMxOCEwNbJS%*t8xruT0s+ATU+;m%&{)> zE*h|{)dpd~Ha{~~59~1h^YNz~vXyu4OcgU7E7C^1e^27l_a>w#WxFa$6JR+3NkDNF z)HB^huG{l0?5Bp?{xLBu_|Al3?k<|*C&SM@xT=_jGbsQdtgb4U1~EGb1pl`Ve+!VP zg!Z zZ)9XdOHVJ2(tQ7;W5H2Ofw7&-PhH9II11Muc;>}MN>lJ44vvm(xh6c_N#8$KhcKw% zMPdb2r~w|o4AQs;FWO^|8(%UWY;A4b)h!okyy;_wzX-|=DoX8(7vFl46E3-ekL~H{ z8LwuL(7C&}roP_DYvq;Nr9#Zm$_}};iBdVjSgij`ida4B-?P>dEW7~}6Acn5$$g(b z*?Nf{#U4mZPCgH%BBZpo=w6|=Fj+w+gi~*O1ER9#?XBHhf`a+K1%8p5%-dUyo=uo` z{rdI!mhxD3Mg>BnkFgR_k2)+Z{Aph|EWB^=iO=LJ$UG@0i|JL!#5$3^g37-%|VkNZ2HM~ZuaI1#_3%3cAu*T+LRWzT1lacwB?nSB~kHI=!#)+!^0Ra^k z6)9wi{6fymxydac5J6Dw{lLY7i-Uo`JFGYkth!ChCakKnYZoW>_^v~T)@sD(yc|v7 zCd+aq3rZVbdDH}9H*d-O?5X_kMylpJg|<89lL@w1DqS!0!d#o5`}k%O=}#gyGT6?ysjw>8%y0w=MO-T(f-c;i>` zImSxmQ{3zlT8bLs4sv@BSCpoU`4>$EUEUC`nAe z=;Hepf=f?QM#gZ?k>}!euRyK&k@YC7Xh>cW z-gJT$ni=HNzUv8Ede9$*Hy&FpBTz*aiKx6(XrkEp$kX+in@<&j8z)aA!EA8#R+L(P zet!6t>;eJ;V6I~pZwZrmlx;=7P zK!^v^Ft`sj38iObyo|r@J<<}geCw6TxOYb+s&ztYifa1u4h;=~kiLK*bXD^lwjFhF za4_~h>$FkGqLj3B6bZ`BPDhRmh6x<1LJ2zY=WAAD{0c)P;+~Hm`-g`k!D{K}S-gzT zUEd`^qDAf?wUG4f3_?C2=2%zwZLV0FbL;kaxDy$%r_=+baV=8MtlpAbkv91(FOQIt z;M+Z}6&Q6g{X+ELd~h9;dnIYse=!K-8y_VyBnf ztP)zH*vE!`exQMV?_>-HkaI*GLUxt!@9#g&4t@PkFMy0j@=nLV<*6W5O-J_DGgL{r{Zo_N{MdU^GottOjf(qH+01%l@yg`$uw3 zhQEH1S*Cs{B*C1?E-d8yI}`Yq0UROWZ5z{+jQ%gYxb^>l7tecFmmrYg1swp#L_Pf})uE0mY?&8Jp@sVF+}QN1ZkTLM;spoD~k5f^%+lkikVtCo}CcsuXgCcL?6 zR`cc!&xKVxK*`hG*m)%yjPaVAftIM)y+*pIAQWwxA9*nQz2H8luy8bR5BcoM8#bhf zwPk-h9@z6ScyT`1e?BNiU_)B`&P%kPhg@ewz`}>z;6A@;4QE@{GgQ%9bHgj(MyP=U z09>G4nQI~A3RzhOOsGufoqZv=>*wWDkzfdnn_G>lxAZwOD{2Duv!Eg)UsJ zWt){xiYp&x-PQQF6Dx07oZqtpfdr%>*gRcmAmFx?onKu%H$&T5Lhg?u0}&C){yCB~ z6=mbbjVSeKY#tqpLP*MnIl`rX7B>JlB;7(6{aiSWO$Fxj$N zK_LWY7wAN^Cr_S4IIeDNWI>+&{i{52`rDqsdk3hr<`@|{7`AK)GSjB>{e3&j5u}6^ z;o=e?vDQG!BT<;(l)(h;fDz5$-!e){9N)fuYiMYwf*j-lu9IW~$QR`Cc%A6zXh0u! zfWP!hm!2c9#|dvBON+b!im>ZQzo;~~f^xJ!eE3GkSn%hzn5Eo2sy8=jCMK$W+^4a( z*Lmjko`|w@v50YtQV?6ALDixX97j<|Fx*exg@IF`0ldLfRZBQp@~FSbDpj+4uiDon zB)OV#cGj`kITxG0gy-e)9D`7Zk#_C5CPc(cynHzZBopiot9?0Ft`l6GJNlY?tu4FX zj9A}iTEzp5tEad`PzGpV>k1W;wR5196G~Jqvdj3FG}{3L_zmy5w;B9ysHII;GoRe@ z{A@4P(CZG?FfOj3_LgJZTuBZHHS2Uhrhve5d3R5Yf9-)t&|ZT8yr>3`-F+O&ZLaCs z#mUHqHAO?uN~ud=czTwBUHsyeSXAzuShh4gfR}3zKDC2}Hvaqf3tY~{&24dVzg|?n zxSATJU@w*S0>yeC)uBUGebtxNN8n{UK&mw8z)58XA#C_lr8c1{ci-G;k1EdQ6NY@I z;iFhrr9{_bj#6)~;U1xMRi=jKl;vkq@J!8_anE#6HftlK+BY3ohy1(&VyLm1=84VQ zm9)w(8EbpIWCbNBgV^F5-e@1mDw@{B$z{F)uiL)j0K2}yj63jn2gn1;;h{2)ArF|MCNKGoXgoGmUz81U z)5tp+-^2}WA0e;cn?Rm;8Zt_b?{oaX$^G9C@Q$|~$q(rN{Q!b%jym~)!Aw7S#0zXP zOH=ZLDO&Q9xz-q?YcR$Xc{_^Sk{21?oDJWzujJh!GJ82UUy#{~#@L4CdMZVSfUL>& zmb=OIE5+~tSMts|zE$LR7PmtC%=YKh!_3uH>ahZ0W|xgkbYdds_KbC5Gql^>e}CUo zwlw!+wUSchOa+ukQhti5pZ4xM^|7Z1T+X$hk-2sw3Gt<#bhE=NB)1$mwfS4J4CQZo zTx5QQ!KH?sI=PnMy3;ov7lz#-1h~*|VWPfFc9%39cc{v+aR-wUu59u76>OUzsG_&O z$k?b*TYX?OIm6^a(6=`mOb;Il6k}we@!qV(WqxJQImdtl-|&ktD3k5muP&UmhHVRQ z&Ssmz)6m5>spVPX!z=~Ve^Gw5$@8Ad#^6OGxhPh=HOs~L_b@e=~7^19n|MrmMh>f*%;zF6iebV-OgJJH6973^Eb!%gkC zph7-*2N!#YQz6uuLKLVE-QKZ-Pp!okCJ8)NOoLxOWt-O)-&n}!Tc%q;mJG&i>TUIu zhT|%M-K}fade*C(X;=j*u@W4o$Jj-;tkw|X!s1dkrk7j0mK_vGIuy76!UOK6`Rv|3 zF=wDg%+AhMy?(v3G0HftP}{c;vn3Hod+a!7i=Lx1bMs29gXegoZIFTIroPpDQC4s2 z?Bs`j8CFy@u|h&*{o&Y9gIv=t3C)2K){*ziYo>(E!Sjz_l!>4X=!@AXg^)DZZ+-7$M(DP?y?F70k&Vp|IRA<0)&y3V(?EO91RQs8I1lmX8Z2ns zyOZwO1x|4;U&DxNHfx+6g}Cs7NBis27v-$LrOjFkjXGjwS2EZ|}*wumsQKRhoHve3poSnUW@Vi6j zcKn;u5&Q2qjk(<0Q7$ojcioO-`Ec+ZTna zAQV)!w{sI2zpzjTScJ%jU0q!+YxeKm%TMflSoXS%MAlcdE~J2kCZhXzn~?;e;_%TS znSIs__RYT?;03iDB$g4TmrFoE_HI_L-$+96vu93+2e%@5B_&-7+?he0o=zDnzxiaW zu-M|%#oLp#EO^v!GbB6Z2+QA>P zaxC-ufw!}D9voLy+`iuW_bA(){S5gXfqwBtD&w8|FR|sFxs^+6yn_xxu$m8dLjz^q z`e2bwsx)?IGA`5H-S3wAxwO>fbRKMxqWwv^4E;mEF5{6aF!TLkrk)x3^h#{OujuP--J(OjGS%U6iw!Gx=4d zZRu!rk8)~=a(NR?US2{#PXi-DX5ZhX`$P4+3W8S{sixf)SIZWnH8tIEWO|g{W9QCG z*WUJu7e097*VMpR_^2~8qs)K*hL0(?>UGN3MVLwvUH8J_lP6>;nlo{4=qP}%lB{3R5R~-|DKtLhlh~l z&>(wV7w7-NmlX=9EM>fF6aJS87}?%Up4B^Jm^EkezJ6)fl~=F%pEqr1Y`(xK@%QjC z#oE!2flI%cS;Ao1V6?JouAEtz)N8t;5E>c~-EOgCD2gYnu!QeE&5ydT^HgU8AmU)A)%?lg`~0$Z->vuQrma@^%GQG*UlOj!C|#{h79YeWn}7_ zFy&1G(vmuibia3BOl2-QewlM|j_I1k(eSs&KZIgbku}+)1$XZ70?qP*I^zMZ=7uE2 z4|1#6QL_zndg%T8_hH7%0m(QJArau+HwgW|U|P}z zAjJIa4A1$+mFrH6(x2(ZV+~*(2!q4}U)R$C+m)Iycke(FV+2Jo@wjqv2W%>)_?XXL znd-;I#)jUy^{w1?Kl%iKZzGv_Rz>ESrbQ!tMIm`KETs->&2^czi%&;to*BR0w4Bv$na!sik#k?DxsQ z<cp+HkTAFz(6R9Z=F1g{&%*4hNxV?B8GCp zY@!S4rEheU-OB3SxeruXK0`wH&RVVZ|9KO>t&JypW77`#ns_Oe*DWQgIy+ywn<*ru zmUbywhVd!dz4zW8qwO%%b4l%KO26h4-#^rh;Oyjrk-Z}V z*FcKZAueQ92Y5?-PnjX5Ujk3b1!zH*7FlA@y|y6^HO6l>)3u$4cU1ud`pWIwx7UKG zfabn`ghS3kH<(jSPS0;TgY)Y%pjk~-Rn>CZ zcw5JXD_7!(d*xM%LS$T=p^i>aZ>E?V6gi@6z>G{RNiLmtgz932cHd1I%VnMGF*7wa zjTPO@y?5{4^bKzO_iQWU;j^!T3(8Biym~3oAtU4H>zo~zZ}@b=uTvEv;d+%WpF?p? zaMB7Y1qHiK#lE>SkT4eiEJY5R?3_q>6i;;U|2^aU^Wa?!g;|y&c+vNNCND*lZaU5^ zs>M2NuTA#GK_eqcWzL3Xx<|*_woF}(oDv=rdP{``sgEk&-pwrrc39P;?FL@CzGq?U zV--}Utk@b$6PuVdd6KN-yIloA^@_!PR6@|j0u=l5a2^VeM- zpQNdr;qmYY3ZCLQ{(<_$i7EyOit7f1@NW-xi_-IrUOC&V>*={JIXM|tL?w;*y(K3< ziGzgJF*ardA2-poz6H)y4*UN$&~snKBsU8gZ=+_tljZVB+@+10k%_9ToND@lvF()s zjFSIxY{Ab7y69|kq*8m0q;3F%%Uj-K&x_q#(++`vb; zwB^w4y<;r}2MI&Q;zRgYVAbLj5s87`%?tH*<3@gnJVf$NU3>6$$Ck52Ssk(uv}YO{ z8*7N$2{f^3qr1TTbxGF^oc#2(3^X>QU-1aZQ18#jp%TO3((6mco1toQ>aQf`ElrJ8 ze%FBmqKLeqFecu&(VhmY1+zy&e@%oVm}=rqg`f^jj)sDw@p|WaDjmE$=UV54-v8QGJu1yIuAo<029YA{7l9JNYWJ1{^bm`v1J+(!Xq%@Qq|eH*M@%j zfiIM@ng|X;wOKzpmhq64!!eN8;m6*pH$1xMPv)sVR`bz9l7qzr^tcUqPqmZEfp)`>?UC-%qez842i3$;e;=!wT!HG^%@0wie5QC8KGn z2f{qWeqBAi=QJF@yiT2>p%@q$L2$CiCbMbr62OFvErx#1I!ST=^UHbUeF+OXOJ?|; zOpZ9y6=oUuM$}|KS3UlomqI9Tx%x4*)=~OCoUHWkTZCaAC2BAbJ<7@}yIwao?rvfU z)L;25D`-ebhNwBHnBfko0i9rz8c~#Gw(5a4hwbP+gOLO$q$O?y;S#T(HlR^n*@~X3 zEZY*axUyY?EWyz)yPrIHViEuMz1#h3m?1QEK8Gs43x1;5*w}L|v=^S-<-!M8-Op{P zFY_!5QJQFYu;y{WcSAflFDKMSzFv4al8}U3xg_{I^v)6_JiprGI_Yxs6A?KHHF!EH+ja5Ut3_jzigYYJK>nuQ#+vmldR zj9*N;l8L4-5?09X`BjP1pObeT!}bH7|4!VE2bndt@sE55#Z8@v|i zF?=PkEx9ObkE3=$1d(yCb0W&6C{X7AWRJUNyIHZHH}FMWLA_aB9l4DK>jjtAeQ8WX zuUQzdc|*Lzcvp)N5>Nfomgq%uP9vkLMix8mzwUq5aq=y%PdHiSEm2@#xxr2wV|B>K z&`b0i+~B1B66*5S@BT5l)d59)ytB_a{j2Qc#Ik#2>191s=b&<}!kAL)%7_wH-iFFk!>@ebc~#G?7b zy13v+$Ac3&vmK3U_Gjkob$d;F_^|8RG-o8c4mqA~rs0=}OrQwj?U2k0(RGRs=nTU+ z`T!gOWV@c7RT>!?ajL&2Uzjy=NJ37WAeHE5>R1tmuJ_dRZ_Tz}1<^-0@{xtS z_>RN@)b!Ej*S9jcxw#bu{tbY^{ff<9e%O7kqJfqFliy?^7WBymyN&BF(Rd z7Cz#CPMMQ?>nhcI&WzE~Q3?x7zc8*QJ02<$4?r^~HiQFQndrE>jMiz`dR9Y*lSCc0 zQiFXD&%8+qDuJAo6ebmiQ2bVJ*hAa!=q=9RU_Jbb7G=-sNASmsL1F%XBRfOZ2(Z9Q z=epF@RTbLn1ZXKc((kg!@tF!0|IH(yy>S@0_?csb2ek)|!b4Vg35u zUU$?<|0Kf20@Pmk#kN)kEIJwG-2BhmZ{1pzEQ7+J>erV`3~zpzXmjz=Ve?il(yx@I zK}^s^ObGc8iTUEii&Y&Rd;pXBM~~hbvEGpUFZ->Kl%!BmQK2ay3_XV<)|MdNZy0Z=*p=dX@6Mg=iZ&08kzAs@ ze!eG-z1xs>8{+q@L2EpxlvKbz|7ZW{1&~5(vL5<#_Ms!HG2Y-z>|!oT8RNEBuR^WS zMy;SA^}d7$Ui#41q=0CVO`(iTT(}_e^%VkKS%m}|hC=`}RZjG%*<<@=W@gsHW@=z! z5;bDI=jrKh$>}PN;b;%yMlr&Pz>tHnc`4pD`j0nCy|SjZ)I%>low5J(N?fV8`eD{U zyNuM~rdHO%H8zY~{5OPLqZ$&yQ^`W>;{gy8K>K|TY&ioT&wk>QHM@FI%oKEK6dH(C zyvOZ`^8gy5oYvyhZu0{N6g7m8!sht3cK^w88M4kG-gcS!%9Aqi$tk_E->HXrZpOuN zj#VgxQqRfZr6Z%b9LDXEoSarJxgM2!C9sAYB!zU`abk7xza`%h2LeCaEKAF!t59lT zVWAL>y)Y78gC0pb>=UK*(W7@Gh0Q!KQ^5+#%BQWdu2Z9eU{)RJuTw}PgYdvha&sgl;6 z>eXIVC>0c!v3d7s%Nd`aGKG^pJwieilbMrS{`@gEHr6?PS`{BV4D^R2)=%K#4_g)Z zwLvQnYtjha#5X$DRY*mo@~o_>+SvuE>#0}Rj&)J|{^WU?9h#r6YDlWGUCJppj*+^j zb192s!vJtuCry{8fvKi;3wXt;Nh&x^8^38Qm+OuB;!r zaKQq1^ZHn9)A_A5qFeIC8XO!RK0c9e#WDQGX#VE@O~C8mtyUGn!(RKrCNK~;vYEm=l(c9QV> z6rsl!JtS81XE1O`?0P7@ab!di;2VXg(uDazrzQY+4fZ!YIHV^P&Ne$R2@4B;MAU*^ z2DOzwj)*`*HIctbAMI*6xnPT1wWnG%8DN+o3J#zs(!@q5J|{icD1rf@`T^Qr$y=tM;y{=J-aUu^EzWbnC}pjg(QLJdFO1=|Ktp%FWe+k15L&qWS@zlVXYvwyrm zU=y~Zx3?E&+wk)8a;g|f=@m8ht#4skVFoHB(nHaa7IAbvXiop#1X&+G?rPL99&is} zXAoy1vBAR4ikdO@U)$jGwl>gH%wXU1_di}s98{Pt)VkL|;0<>btx!KbOxeGGzh=N= zr?sT{8NQ(HSz2Ne{!`{9wv%ctEeJt~o|ZlV@4LIn6G+oZRu=#FgqAFLcM!_1pZU?* z(AaqH^W;~PfC@fd-fTbt@-R>&r3M$p%?^pX53#yWE4qKddZZ(UjX@=J)!y1(X?ymW;{KdEhZ{~ZVF+v;d7v)0-U4>&S>ym zI2_dwiFM)}K5H+I;}jt21)1@*^XV`A@`J~b@ZkiWVK>~Ite1WBixj`8nozcc9}@rj zJd6d%w+=>E(v?;&8lsp`VH?=^Y5O$ViO`TVZg6rHPf~Z}z>cpw-oi9OTt1kUk&n;P z#=a-LBs`J@D_=Zza!^e+(>8RaVei8{7KZ40Z$|b)5fCWZ7udrcKbGY4 zETXWZC8eZvPu5GmA)goVxdxuz`}N>NSqT$Jj7jK;_0{B0x<~jM7~dOSz0!lZ6`iF{ zXse_dRCaN|MjMw}rNhpx`=i$qHP@c3js z+8-xgDcm1k^fq|f4)G4I{+#S=3i<;0tOjMIC+qE74Imsc0Pr)iv)AF;Y)g4`_xUOc z$I&AT?vhXGdU%wFmpM!~{sRsmfW6ZFQ+8NPLV^*9)av+mFcp(77_`TQ8~<^?lFXZL zoqcPAKUzef;=X{9rw|r0>wOd2LK*R}JUV`B&m$vjD?fKOM55B~Q?||Bjk8526&Ek^ z!j3KMCrJD7`uuCO7OkPi&(qB>BJ`@epTfHM!E!@#%puw4RIi> z#O*Vg;yGQy9QMW^_@&FmpofK(orp79K3ytdB_!8a_+za6)M4Q>wh7bl0 zW%vO=PK?VcAosCzcKWDE=r=4J9Jz5}g?qMLZVyuV&KoBKu5SC|;J5q=TDh*9%U zY)r#;gaAFFS;Nw*a(489;=W=7FVP&?jX3^=oVkGRI&!{Cs{XZIsACi6>DRPk9zBru zZq-O;mnTBy^$$JU>%#zxLCU4DVH4Q5NG~99Z;^gIIPJ)csguuwE=y|CMuYii)=k{r z4r3HK*oGu}@C&J846woxj7rehYA2m9GwD;L=bo;=zn>JIfT1lco{2Bv=wtU9>x~16 zSA)_TfigubD)KZ+AFh39Vk3>w(4S%ZM5l6&tk>Ms(S_gl17DzTiAz*eQG=cGv!WUz z^rV0w%LO#BgBHw&nXULbg+iRf4_!N$k;+%g%cFC7I0~%{eV`p9($WOzSp|cz&B>7o z>d)<4jY-!w5#`1w>Lnb(YZMQ1Y8IhsSbF73S|lLSxG|!}_x|D05Ns&VTlrxsQ;T#G zFM4~$aXP~+nx1ih%*lp${i#}X1r@>5KRY)ky?Qkxd~oR8Ok#HzRHY{N3v_FZcUal> z!w`e+<>4qMDdpquRpEdeK>v%%({uK7^Yf%gxqEa>~EpvrgE*0oqw}ZYHOvM}nqyz#&7!A0FQyQS12r?!E*(c*JJk zZQek^=}|ZbAPgA&RlLPrh|g6h*h$AFPDVkKa2wA9oVY>lHV(prkmELBA6Wr;6Dh}+8Cv~zP>JXd>Uwls1a`#Oq39R` zv)lg;*$Bt!5oGFD^D=iQiOWk$25riEOhM;xsrN)q+fRXo2fzW#9ZWFU75;1Oz8bA} ztx7h_?>y-8SaD5Zi%FHX% z=of%Jww}jWujciGTE-%V5}nzTR4&e&cH*;(dVSOHRZzeg7*~c zB@GFPUg0)(hdKqMd9cWJ(D_Upus}|vEZ>ZtMf#j@IovkeJTha%D2u29z1xE@Z_T+s;7{lw^kZV zCGaxSk#j&mm)hZI5mfIN@Pu1y4wVU_Z$yiHJM<4?w;3ehM3vto=vyVJ4g(_S7{_Dm zChKvprDZ7oi5!gp@Ro%031a8zo00O;+<(5`a6y=!3Y<6-w(oHF16f2ELhvF)UwvQZ zGl@(`oSOP~_lo>}@gfr8=nx-2ze8;#m$9iS0ljFd#TUDsLNErtj~cka$O`yfVtxq~#q*PS60JBoXqVo54-a8lr9m@_-p0MBeaPl}pWY=n5oGHnwWK z=QF^iUMj5J1dvYup&gO`Md+KHUq)Apw0%Z; z??zZ?#W_%9&CiT|N)wC7--~=i?BB%2Ob*h*K@7L6?RV7^l!R}G9V~)W5e~Hg+r7jS z{VBxYjAk&Em^>}aClX;e@h-z;eW6k(4FwI9pFo1WiF|_tFK(BRh6B>fUgSX6>o>Ur zDRmgB_WLd%EL6$_QvrxRJpN%XR)$TRiz=U$S`QAuSw3Im_J+W~ztPpfO-6oxTX6PC z1l|b|%8jUm5Z2>>xCSvnNFn*1cxD9hn*$0funY96!f_-*X|RW=CqtA*DN3pt)CB=sCm#OHb)oY-LOF8DSW-u9`V9|Ry*;ybH!$GCAWwxQEx9M9>4!Fen8 zDSGxZV3uN77Bs!H4O7BoK> zLS@Zg4sIDoEE*J9#kU9oR+F=C(4nTr$!$_+U&xPsA!c;pp>9JDkPrlqB&_I8^v!Y! z3p0}jg8h$odWn`3Rs&3~2exasxiJH<5RMRZO%)jNM9(J{1Yv8jonOW4=kkz4Mc@f2 zL^%immIHqa;(E*r`*FF0Xbi$y3P!^{=at!;&(9G_-9!Y2-yDQ&NRHNzs$%WQIMssI25N*v6u(vUe7G}x1Nk_pAt#E9VT zt}MRATT+8N$qo*H$E7{Rsq4G8;Km4m>D2h^)Y|Lm^N=OBN9*NXsk=w^^JfhVEt2?umSQ zP2Z_1;HlPUXHUZJUj6Q!06=9O%x_pfYc;MO0tP3FEZSOolI;#F{`ozFmQ+DyI|?Db z#l+a)c}4tFG`VQuMZNnJP9q?72^N1nl3LUECKJ#m=1@*VGafu&7gP}%}f>YyVya@-s zX*BdIa_|uH4PVPwvfmIE$k(52(dJN4nA|^G43P&duQa3&5OEAqZTA;9*SVP;bR&&+}xd_ayNJ|7mTdZ4d={)2&VfgmGtpr(Wu%38)dBw*l zB^gTkjwsL-t*oqG9{pxdy4Lb6n4}C|?7Ik(ITzj-G=`FsLSWoc0TO>{a;60w1X91+ z*-=ptHCEqF5%+=SxsAQ&#xza7jsV}S^;PY zkqylH{q71kKI|Gew+6rRG1EOgJNEj+k@S3gr2(ul(vOG(YiuVz`2xI_p83I#nr+|D zZu;FgO^{~`#6iAKC;yCFK`^ar?&v6ae~!sj^-^^II2NA%u3d@Ot_z{-g`r}0fCa~I zFk?`36rxz;AUM)Q1O<83W+}}zrh$t;{~c#ZW`&lPwhxjQGR!_&_K?a(_!rPKSWtfY zEJ|Y(QLP15N?_;GfBR13^$}0RH>@ox2Kd9tTx^-qr)A{jZ#yt`!vMw@7#K(n@9cVV zN)|_#xOUDblJo3TUEdBTH8N~w6@H9G)NjB4Bbz3@ z;2aFHna}{q1#=48;G*Q%(8qD7uHe^ERbk}1_f=8GR_MXG9Q{BRjT1P0uo^p$82c{& z%(&=@1IY-ElkmO2aa2e(0JY(U-n8x4c4Z$b_qBd-I4*d%P%qv$5)v3Ery%a6J#PZQ`sN%?BK8lBT2kcPV2pl{*S!(v^oJ9C~^VkQxcCG28OE|Ki9m z=lYfFP+eT}k0@EVayV{l2num&6d#1hz^Or~yTqT|`jAPS8VH32UbZ`NP8WRQEP)54 z=ZrAt;5TqqKow3g^_Uqw$n=f%D~@wR*gsWbTI5~1YtZV=xRe7`U609 z`0Xtoz?$8IyZj(tXKI{%UG>sfV0La^n^>5zUV%js7y5{(7r4lWR{|WZL8kHcN;GCr z3=nLBmj#eVevL-Ei|Xvs{1__SV4Q5T|E;9;2{ga#dCiSu@cNYk|HR}PSnkJQZN%_$ z2vOHheyTvrk+R*on%lOOS`~BO3tR(}h5~d4tv&``|Mle>{2i%@4emH!str2^eH2@! zKCMfOzO=DoX~_(Q969g-*<%2G&M8-C$TW`qUDS^H7TFZ?f+Ga{#{Fr-J&eI9+Xo?7 zq$F;uAgBMPyq1k)4khSu2CPnYYY&0Rdsd$wZ;rs>;8|*zC5nxwQGN8sF2E#1}Y+=h)AS? z%1}~DgNUROg+ztIE+RtaGB(dis3eslX+m=;QY17N4V1mVziXBAKF<5Tf4sl*`8Y(vioe(orHDa_wJ^MOJ{Q8SHz(^eY~Y zboW6hgA@CBX=4*p1~m8;~=aH#O6Lu$<{2Q_$z;uPDU9 zaU?rSNrBpRAkeHrA&PX_s%^45a6B|hu3q$Wc~)x0KI`jCKalpD=H?P+p#S$p2796oxTWD5p&R9T*|Cb`+e5qVvWin|kxc9Z_=dJ)Hw z8Ph{0%cvstzT4q0`^k})K))ChlyvEy=g!DU*PIk4Ke1{>q4<1&`NY|vYK%2!%fvHl zSFXDik;w%W#u`Ra)MrA5EbY$Th@}A?S+OV9)>)%1;^agC%Ri_)5vk_ErjQf{W@coX z1hO*>MWnE{R%3}e^o$`d0*50hx}f!wU|vCW^T_56Ges9XDBZbycb)H;I871G6XXgs4uBYE+W#0xC$;Ng5Il! z5417|GdaDJ2{I!)WvoV#fe*}~N^ec3aXVwUI;>>+qHvp!g zEFvxROlPs8Z`M{{uIaYIVM8z@tc0Gt=}%dt6vTi6jkJ)DMeq=q;o4YXGgP*3yzq{V z79`;UNL8DAzFvqZ$^F3wK1@bbII61I%BW+g_$5g;ieF*|mZWnxNj&8?Z-vhyC0?y{ znbLX@4@=#Gkdc_FF59^~lRaKMM2=q_%?J^I6~cfzL|8ibT>_(DAa%*X5#@3$9cdo< z9X^0Z0?Hbw2Rln-=wIIXdTE_GC&1rd zqqj;umc4enLJ>Q{cs8>9YG!(W=Fx#iKj9D)*nj8<*F3W5D}zuIcjO$$d=ex#fo$$! zo~)f)*>gu(v3oiIOK*pF0u-y85D|HnBgE_QTdO5xetEBXNH^ zSvqKH=U|`Bg;9Kbi?+HkypAcMqy%0E0r{kH%tW*^Ca_>Mng+Y|WY`8QIyCR7QZM(! zi4!Y<2R=&_^L@~x2>^3}^Cz9&qOX}N?z2;4TNubpCxPU@=+Gqkmm!eXuKe8wRy!PM zhIx_$<-jcWBTpv#?{`@64;O&<$B!R5v8Hjr%WvIJOq>9}y78LapJDf;o>l@w%t7+B z636~Ytq@_ldcZbXVI_HfkrN_|*|xUfD6-JeATq%X&Sc?%fU}&!94?mqehWPY$(B}( zi7zN!57?o(<^$I23XQ_|c?ljOyUl2oKLKSs(pQ`!BjdG~zsR$=J70{IDKyBdC zVB(e(wL^~+V8iTxz)pReY1wKuuU9cZw%ZD(Bg;0Oe-*=4nw&hD*YNg|X~2fOaTtT= z7+Jyy|4xKSGx`m)P#nWP<}p!wTh|zR|8s%=`8vb!g@!7$|46feGRYe>2%SiAs+)uYQ4}KKDU8(l< z%NJi*1oLBQA(5I1>&<`eVen%^4@<|r%Qm|nk$WYM$dyO~Uhlt?xGHR%yxCo0!u9^w5C8a?U61g&5~jVxPJRJM%j)Q<%kyT=Tm_-dS%?mr9&~htISoF#zkU`s zA(P>rZVfY-4W!h^BY(Gjaq7%jv&P^&S%B6{)7o)wH3w7{^$y+SpI0lsfw3JY6HkUG z{6Z9hPc@eD{U z@u!_3E7jJITJ;sxrzpZG^z17Nx~eq?0?z#Vr9B*&b+)V1F0_u#WMHXm$A&sJ+V(27 z^h#hhenQb`8?))(KZaM9-yEc%_d0tUwi}^DV(?C#Hr%ujlwah-W&^22d1gibZ20sk z^hX1jRGSes*T5m!{Og4+6M7lV)*w#di@~-1fSnC%0^jS4c3s|ClN3Y33mi4Vkah_> zB-hkiD8w_+`IF4+G?Iohz=TdCXq|Stb?=m_rqA zPCy(5B~@*U)fxqA@f*!PE0Q=3S9+UAc?MG!ZX)0x(Ju z)(aGAV*_>hvwICE%`T07Qdj{0ijRmN4fmPmzczco>^|l(mO6{&l-|V)PRz3l%zXc1HZU3< zmYLZ#wz8SrM3yHGYcaJAOSO9jFJwOI#}zA9xGyEnCwdNKxDQDy%lw|@GnC$BK$$Vc zFyN0-!&GHu(}Y}WrsD6IciLl5rbFZu|t@JS_)SHlR1-q z50vY)cmdVZFXO*l#JTmqJ_TB(OC9RURiYkixk_Pb<9J{I!BM=KU`E~WN?z39%$ z`eVI=10oE1Z1hfjTW{?U2b>)a%LyADLWBT4 zI3bAECKI!`TE37x0Mnq~rEZXp>J!Cjd2*;dI~+ zPiTcKM`B@+2ymjQ=Vd}G^AV?Il}c|B*YP>dI}K$(CJ41!glcMQ%l8VPO+Jz81JU1? za^4RFp`izCk{rJXVufOdMjj0+VL(}?`5RYvdvb>!QWDs`h_uw96hG_`fqH~Io~N|o)7BC`dn%DqH=wQ@h}e(0*?uhM|01T)=c-mj)0-uQ9PFYP`^U( z1Zi@hsHVoQ_SXfQ@YLC4C<|KHmX6%*jOkySekiT6%j4#2Rk*yFKYO+=OBnnFmCrGH zValjKO2F9Zs(&^d^d64+%fG_c;ExA{AfuRI(J)`mTNoMm1lYFFI3-Fd$ovkqcn$zU z0e8#ZgrO_^>z4!Wa`Qvgj)l zE>>`%gtUstQ1zi}_>kx=9*q2Ts^0@(XRP?ijL>EVM&7>3k6 zK=NzIU(f2FqC`iv&xIZ~&_)Borh%7iRoI&T*4F9NVZi646X#hznCsy5dN^Hu(*Je| z2I?F<05{1#3;@A&i!ic;#9llLc(TlNNk&0_{y5|}6JY)n3LuYiShw(5|6|384$LaO zQ8V^LBhG^tm@njwq7PedJDwoI)EZHt_ya(#M6u6BKr|$wJIDg1pQ{2B|FsGR@9d1j zI+g5gsc`xCMd%s>dFe-(L}OLhO>7BTtEWf)M=$PMXL~0nCxbLK0p4XH$lR_mEL_>SZ(^6m(z`>c?%a$0EUZ>fQ+iD1p1qgF$)Vz z$A?J9AZSy!hwvZ31e+wIfO?54Zq>o)F25;DkAt0dTkY_8BnIR&4UH@{nh+IgkJ!vS z{;$>gkt_|d#t5V*pLcLSdKGV!^akA=jfo=NZDU&Bk9u2O!M!CLdq*xq@C4f*?v>%; zGcfvxyx>4jVUb}hIlq8jxAQ~#Qa~YuJrG2PnF^@Jaf+@63!ia&zm_MR@)MM3!e_iP@B)n4ax!HH{U@o9>)L)iuRfsF+Vwr|q zFP`D>Q<$nMaX&?6+XNj`F*mW_iRtNTh}pc@IXS>;FQN^D$V@*@%w%Wh1vFg*T|!te z0?I(2I0PFK-|ho89l-WeI5x7NyEwXRrqACO#BQT3`+qQm`<(j~hb+DZs)jdl zq9S-W1H%IYk==QQg>j!+g!)`rhVcsH#@)Dynw`3zNS5Aac&JS2=`1_~1Q!MHaPG~S zJ|6}&UG3li1`b?e{nXO}9$V+Oz<1Zl@7Cau#2F3e`TCg#??5s@g99#oy=u6q(0bPN8IT2L} zIe>4o%dxtV2Q4V()Ulc?(O2;-46vIevoJSkH(dm~6KUr*^h`*i4}J@6*k$7_#+#eB zNolF5WYtMOK4j!3qhtdIC1fVY`hYXZpirO^2=j{OEfcheg%bDe#;jV&Z|_9c7zW%q z{c0kNwD1q>fAAt7y7V;jI6K2iae3yktfn$NY4M>aJ;@1~AJIEL92?jpc-&U4xtzzX zgID!nW&1QWKtVD}3kR# zAMnUb_u_KALbQ`pf~Urkiy15$jl6}abxc4bkuM?AB|28uRUz+Z&(I62k@p*4aom{3 zipj`m|6%SS={|*G)*6qRXh7nQj@!y+wlRW}BP9h_pSyU+SAXcKJ>*B2qOnReF$U!m zid=M|yIt|u_1*mN#tq12M``18SvIqayS3ILfd!FXUt^qTj zb`5zsd4in!5mgLb4$vadvX#qJJ0)2t1X1m7}Wl^}!jnIu_!cAAPVC zFAXilnRDS>2_S%wWt!&+?k?yF zxjPoA{Wu49(@XnTVt6J-VM*rVP>c$CkMJA}Yd4~arPNX-gc<`ZC3r%m(O)~hosUyM zY^kxwDKNZ~Jx1q;cFpCXMYHr@e4{1&jD1!(4i-IWj~NPz{wuI3h?M9Y(61iL$ z5)=xw=$c@l&JA!~L*Z_PLooh(YIk?H9$R{u+ue}u76ND6nUkWPa82v)VaJbqrl-eR9cbVM)ACf&Dt9uyhj+2Xe~1?i7pjtwH$Dd~Xu-bv<)Dm^ zt=x9KY~oG=B?PrOYqMG?1=B=LzC}0QABpUmZ0VjnBsrzyT9jUSbq70ZGkj3?xAG~sI<^m(8$qn zTYoPO^Q@<(rZIH!;u?z_$38t9-X^@!Af~)s{`W_|!_{j<|9q(vAdG8!zi)we^M9iYpvNl0HlK41 zhIXgz1ZBqGXEfy$MnvlK_@0#)I_}xq;nDZKHCUV`EgXKxG$ zs>{m%d|?0n=g9r%@Q#Pl7`p5=26ju|G9B%8e7u6?f*uv=yM{0KaNAcRbK<2;ExEVi z%aZ>OJ$YLTg{MrY%(gt?smjUC;?FeaXf8YS$@}BOOK*mP#)(vro``qQHojzkqiE;+ zmRmu^#P37Nm#MU-xr;U*>%pP?RStQ;EeRaJ>1n)h0jUoiuNe<>Jz%g{eBC zSURR_|F2zdYCx3dZhEkN<#~JRY{G|z(m{+N-G`6h!MfIh3(cK#=EsIw)bPEp?^$+3N8A z``{t;Hq&a^M6PpcUrE@tB0+~mS!`}t21jRmsGG3Dyvo38dFfATYDxA3Hy4kTP^moj zra;fb%{ZofYhL8zjUJ9?-=%oH(y#xrZtC>mOAZ<=TOX(?boDChyadnDfni)Ov`0HZJe%n@#5L*7^@(xnsibS!|0|B3_th|IYM^q+M1wL~u zBxAzvyPLJdp&f6|6D~pmucmhOIj(yVvC-c6#&U1Y;lPo%trrgey$H;D)CWavd zqX1FS)VMB?r!lgW98q9jz7;%AE8t)y==_Wm7oSZ$@13gFqdBWrt)jV^Xzx@0R-MTM zFj+>^>NFbH`&>n|VkU-~%1=8N%{H=BKqg1l0df=3mA=bKOYOGufF&e0r~XAiUO`8D zZ(wB9I3T|wh%GXTiiU1?9Uw9oeSXz+19Xu=keG*-Hk6r@231jQF*l5vMgS#W$}`u; zo&4FlaGIs1cl2g+bg!p<|L!d(ck#~M9kUGh7aV!)CfD6N>G{=xD$qJ{zmZ?i-J$dp zwR9IKfD#Z`#lx?p2j6pC02%6*M3`u}hNG6uM=ZLzf*psUKtWX8HQ z4ZE(z^vfKUki`(J+4(N{52_GY7JgU^bVN6V7QPpMsSeZj13Hsb{sh1 zh?X9*A`%QkwXhogsHj`vO3+}DKG=V~Y-h{j^z*3f-PxhI#Nq0%_wQ?;@xT&$ilo=C zA6|DAw$(3hYg1ClPF-E6c9If;RF|gl&;k;qH3bwcxT!vz-gFx>AwVHCDsVeEHF+S* zB9uwDNICTnqIH+IJPFS@<8gvF>tnX3c(2gOVb>S(9qP5%_I}A!716g(w|JC!jL90H z0!BQBxa5Bf0(v{@E&%N+^b0?T`Oab(y-wsB@?&TgpNiJN*w@$lb6?+D9;C56`&7-s zRN!ql_2YVn{Dgd+bXA{X@b zSViHVw=u0&yf#hJeI2liyYP5PS=yRcWe(NG9$q&_j$xhWy;za?@%G@kZtKnMV7Nla zUA4fxL0F%&%x^_9=wIMzTvu_DLVP2X{DeJyuBfmQ`a@eFwID(I~+~Rfk z2g}N8`6}kr0l%S3dTPCtP~2=*Hd$C z=?5AwmuPAX2;{vQA@H7o28dYxRPWPJA~;3S42b+$L0QoC2}!BV-zmkak&lL#8EnwR zV%g%KKYXQ>v;eX*7&VR=R16peu7PV(`2(xQ+Od_tZ{$oDYMpP)KY!+n~L^Mgkdw7V5o&nOyPj%OY} zUP6Q`AP5gzCJ@|Dh~?_Yb8*? zkM;E==iCM?m*okc#uN6#Sa095Hbjy`ZGXGf_`%S&iVV>HtGS-5=Gr_FG&0mk#L=Tc zy1>7|vQWk`YS!2S;)3Na#j8nc-!acXQ~e_g%8>Hmm;=zXi{_$ZX8q^)X_x}_)DO45dZj-CQwBgkKGa#yLz;GS8wSPL zeQDslFNDRoxx1Y{&wkyPpFLXS$5H6UyErZKmu9^-y? ztOu`2b}}pYpwsdo&RUvwcsh@t6wzAzhYlV3*4PDctRH3&i(=RAERP;X^TIJr=xb2V zezh%lg_6+t#QxKnEN%Lvs15Wm?8Tl@;c~{58hiBmy9d6 zXU5ZfnQ@oK5&4kS_BvqQI#gk>C=@!sDlEkYhHs{pwp!9}K^9H9K(8hk8$B3b2!Ox=JS$ALONLegvbFq;Gj&a) z?(VRkoaUBYw%csWuP+KLR?mC*r~-bK2@Mt%yu1nG=O9dNo4u zk5*0Zl}vyZv*U0aTUJ(gpbzil>Cyw?duy8;rpleE(!t$|gVf=B{=BK4o^O+!MnhE4 zvC_-3YZu{=ypXVx5e;Q0rdMZbX-B->c!tY-jS32vT|2|6+lfEn%rI8HHqiGtMDKX` zO#`!1mdt&OD~Y#ATm>QH#q5urKi#|88vQDT?>LTan`X~5*z`avl!>h^Rdx)QTo(J( z+=5ZqAvS`Ql?#IL@{uD)LR6cGvDfQz7tCC?Y%@A$H(|DlVSE{n=5fqJ*opc*2|UBY zj}P1R<4f#>Rg+^|ch8==>ZYdE_Z`fKoca7L&xF}?<`{!{pbWBn2E_J}4PsCsX;1r9?yy)a%bggs2C>x@AUu%>6yE|p+80RX zJ3>AY0b`G&V4*pH_jgI4+mMO;sl`aBZNz9^iN*R3C0Y*4IgaIWvtgX~eQmx8^TC#f z#R@X9u-K*kJ#V@h;(9#5m0Nxd&hr8aB`_wzF6CW3&ZirG+RUkvOzUgc{Co1I`&T5z z*eQE*=LQr$e0lDHLR#&^BO&aLpVtSs;1?Iwcwk?f1%0wNVSIAa5~&Sax9*jlIdc=R z^h)F)+f?5y?RJ{Pnf%3NQ)T@#|HgeA&D7iL<|wAzeW6o0n*Y9nRdd}BjW2@>bbeax zJ?Q&DRM5w{vBARP2BNQR%DZ)|58MJFXe{17s4mb4Zoq7?rZr!SGcCHEuGh|!ov|j@ zPq*QvuAQB!xnX%2*L34X*W(Um{#X5H{xW6)`_u#83}@9hAh%p(^HLxK8ZfZ1O~Lhp zSjR@ye>3Uwu$cj5K8DXhForhY@^j(oS2@ca`{T!z9j`8aIJ{bKUHp^lPXoIXWY>mA z%Qa!3T{dsN=s@56Q!7}k=F>P6k(wzR|CjrX%+qoe0b#;qcPq&iyvW_W7xK!+_*fkaNBCW-OC2aBq=^TgAce&$A=EhDQu^B&dexOrCYo-(OE$ytFi;^m}6|QjOY!YYo+m zT=jMyZD*PXqgimEbE@U0%wrkkW{hnYbN~K&=u3RhoH5eZKNlJnCL%5#gG{s1;ST(L zVGg?)hCSwPZjXQ@M*+PlXxtxzT3&C>8i@0c?|u4fN8geAs>ivnL)qDuaDeWQ^@0#P zHg59q6A{<1$6A$?7~6)M6mm_CrnP;TyQglRo&DODO5M#VX7P1lt1GUFjT&XF-NF>i z7Z}D`U$+PR7xer$VV*mT%D@*>&>cN$lo9Hza=eXNm$G#Z6|vXQ-fG;pq#WYUrBehU z_KOV-)dFu!6^wT%TTG0NiA1prfp)*@9hgs4?MbPP#6ghr^5q;DL*gbD|BgAzH@Fe# zf_6B3W;j8r(n~|_{iGB653f009&(~Q@;rXcIL^#eJ1l#e@-E|^y3*3vkc1=?Rc9?| zJ8Qh&rx?~GuidZeT3Kf`>ilF!o!xgo`HYQw(tn)m=!-DrdFl%?fr8hsO)+Z|X^|^< za&!)Y?n76KlmYy)*-P&jU|q*RA5F*dy^P*XwfnNiI)DhXH@$1sNgp41_{IRpyPW-T zKIcKR0Bx=eFun|dMwFn$>M2(5TLX{St$|mA6eZQ<+Ul&7Ki^qm8j>LTBej26y<2LtJ&GdulUxCdIt);X`|dmLr-r_Epz-tPZ+^?# z*SotvLCOEMs|VoGJ@nw(5Z8`bHGI?%Kr#XPWCE~(Ir8!w%*_1FD`7rvg2i$5=FM0z zo!-kkRyzOrGth3Ozlo!+u_C!8ILGn@4lq{M9wezqEVMW_OPhxc{aN`X;dQx7i%^Q8%^HbL@h-e>{H?^Fziobv>KqIHCNz>wa-xsF z+;pTw85Lmc7z3pdeVQ z`YBr5(~``pxS{Ux2m+g<{rx17&**$U#=Rvz1)iO@s(yxl{zxQl?XtbD)_i5Gq33Fu z3Q6V$Xq=7UE!-p*AOcq~QL7_HAY0uVJ$kf$ZkKo~ViMkyjBD3b11pW5a^XLpyn&a$ z1?rGe@GJCJ$1Fhp0AYwO$PUHmSKyPQhCUhn0Hi=l?byE?q*=Iv!wx)p3V(@38jh+3ris1tIYZC7Q1!^q`zRs0K`?d%5izo%d=vI*1$2H#0qaDDU4Q=P4{t%lcQ5seggU3Y zEHdnI4#;*_0|V~?|GnY2U0~>EV_o5r18jv}ygN)?^mCnWq14ZZtsNXBlq7RT3_V2? zCpg_ZR6mRWp1w=fcXI}G5l{~&T)lM3TGe;lpJyMA1kCkY@d^w!afga&84jt5&<3SKc8KEN4)7M{gvA_dV+)$h) z%@CuhcYH;z(%+ZK?2)_nb-~aF-(!`;qxPQ-Mks2g%i-XQK|->ItVJ6;I-Hh-*t<5B zt`t)1^n{a`VnCrRUOsp=8zH`?n$7k;s!AZZ(bxZVHJM;ayJ=l!WB>(>Ww-kX}^qI0l8*$Cei98y?R z6!3b-2Ke496qW*hP68?Tq_=l;aB!B3S^~9*VL=r~oE;MR+F9&RwY(gTU@B(tRebOX zE+3u(a_t@btM?sHAjlU!Omc3Z!>R@LYw;=C)(FnfoRmiyN>lW|{KjK$d0k!5Q1sy> zAwHhv{suw`YpQbiwS_~p1jT7#VZK@vhD-o+Z>~;^B1>akq?(WGi=g?Nt*Ke}t}Ffc z;CJlI!s%Jmc6y8N(Ar0sYK<@nv`=~0gEk*}Hqq!WVnQ4`)`e?h(ucy{&MXMI`8(S{V)q4I9Etf79g!dg^_o%@wKwxRrEu_W#{Z}p-N z!PXCts-UnvxWW{W3p%34h_MyG2+neEU;{bueR)DBKZ~_93kSZU>Ik}UuvXF99xWiS z=;A96j2w>!Ybgfo7SXoQ^mI$up3T4bDv^>?mM8CSJWU*wUpcReiVWdcR)rH@F?F+9 z9jF=xxI$10)4ti?yD-aFX=stX1!(-)MYV|Y0Ut2b_!W+pXvNfdx0nb#zMa5qP^zmr zO-*{&*7IGb%#Nx}M?TJqM!Fh+hZK%_mOudni#dvl=4;mErA`aQ?s|f* zX~m;Go0Ip}ZUSh6_qhSJD>iNd`q6QCb3o-w@a&|a0c!!b30G7KonA;?vrntVLJ8IN?~2e3^(?Pa$`qk`is0RLglOeGC?FUXu&u;%AqnKN00FC)x>G3;2xxsbj?@f`1=nz>mWtDp~Ic{U8ELji6 zq$#@cwND}y(@YpjgmAWnl$V<*JAHV+r^VF71k#Q@lxLseiVvnER}2ExV!#~2!TG@$ z%_s^cFlB1?;*(mBHlg~HUL4YI(zJ`4TpR!cL11-*N(hQWY=-OJ91}&`{lbm~5s{qD z{<2YJvwgBZK2X@&KD6!UljG#gh4y}2ZeM25z-k7$aRu=IvXU95V`pN60Q~ZYeS|zP zG7B7=Rk-twiUtx9Y$|kFS#fw zvO&aMl#Zs~nA zC%PY)j4dcDxyR25x-ht@JLeZZ#0-cB%Pv{S&ri8GJ~3upJz*YoObmFWC}{BL^-AIz!MJ%AVWM zf$vqVlr3Q*oSW2e|MkC zM79M-bS3BksI9C*nK2c??5z_<;`0ue0%i)GWsns6w{w}%kySt{U>CIrVmq9;m0^x0 z%t?n*&B01-{aWZ~w9{v@@z z0RazK#((>v=WHuOHKgAkXPCEFZg#o`*dJ^@ldW6ZFDXMV)%w7EiEMx7?dE>_!BoV7 z9KMlClq2?>x1)CF;e+q7XmJAkNDtc5DtrmFnSvdOvr!yE%YanE9nq-v<{mV92q4@X z^lNRmRmOjP-LsGTAZ*oxaCE+8qc5eSC}P&blW6ziTknFLEd1fFuI|=$LWikHwPY5@ z-8=GQ9F}OO(S(`$#qgNyCdSF$6ri~aVVD72SF!QSmpMvGr8X_aOwN`_CTA#*PlgmR z9JrceW5Kn^u%B1q5D8l9UMa~DxVx)`|2%eM6uIb3T)TXEyQ*)|;1EibwCBYZJa723 z>IvCLoVbss8`{^qz;UO>35p{u=Us@WH4kijrU?4vR)sM?DuS7up~!pd|AOGhSTjR^ zod$Q47?fucpksVE)G)Tp`5Za45H=p0SRxw*N(_1Bo^*>?4DF4 z&u|^{273yDXL)gbi}c;nwm|iaboDxp3}od>c-%-eZuxy#j14I<=8QW3#mXfAQ`FslixQZ;dmE;uiAi^3((N>jKp*kV!?_Y`KQ+Z!D4w_~Bfn z+6SrPN*$f+n8(qdxn$^&8?!g9Z80Duu)l@X>i@>oo@${xMD+iKIyQ5#ACn`_Tx zj^Q9Z+&JPDz#=k@RYXLjCc`5I$oM_Tf$6-*e!Yf68;8wR zi22blsXg-Jb^EVvt~$g2937pegca}D5lNjl91A!x*Iou!xI9FgFL_tlDwSH7E0EMj zfDZ@YRv7~!(al7xM3J{1B?TB`A)%o%I49t2cNCKJfZGO902E!{?Mb1u7qe!m8Hm2? zShho*QPIFqOl$&gVO6ctrrXC*^fLB|cU5#;n$K%-D2VTeIEK)o1rGoAnv zqcn(0u_tK65z>Sz0eGw~T1wryu?w3mhJpdBm^Jr{!zjE^)=tl%Y9*Lw`(P~g "Node(value=1, rank=1)" #done + "Node(value=1, rank=1)" -> "Node(value=0, rank=0)" #done + "Node(value=1, rank=1)" -> "Node(value=2, rank=0)" #done + "Node(value=3, rank=2)" -> "Node(value=5, rank=1)" #done + "Node(value=5, rank=1)" -> "Node(value=4, rank=0)" #done + "Node(value=5, rank=1)" -> "Node(value=7, rank=0)" [color="red"] #done + + "Node(value=0, rank=0)" -> "nil2" + "Node(value=0, rank=0)" -> "nil3" + "Node(value=2, rank=0)" -> "nil4" + "Node(value=2, rank=0)" -> "nil5" + "Node(value=4, rank=0)" -> "nil6" + "Node(value=4, rank=0)" -> "nil7" + "Node(value=7, rank=0)" -> "nil8" + "Node(value=7, rank=0)" -> "nil9" +} \ No newline at end of file diff --git a/files/ib002/rb-trees/rules/red-node-black-children/correct_dark.png b/files/ib002/rb-trees/rules/red-node-black-children/correct_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a6473fa11e4310db1637710b2d8af347b87e6d84 GIT binary patch literal 27612 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-node-black-children/correct_light.png b/files/ib002/rb-trees/rules/red-node-black-children/correct_light.png new file mode 100644 index 0000000000000000000000000000000000000000..26a58d52648e10e9aa2e67876ddccc80b6b94955 GIT binary patch literal 25572 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 Lb7tn*a(?;~u0H<= literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-node-black-children/incorrect.dot b/files/ib002/rb-trees/rules/red-node-black-children/incorrect.dot new file mode 100644 index 0000000..a2428a0 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-node-black-children/incorrect.dot @@ -0,0 +1,40 @@ +digraph { + "Node(value=3, rank=2)" [label="3"]; #done + "Node(value=1, rank=1)" [label="1", color="red"]; #done + "Node(value=4, rank=0)" [label="4", color="red"]; #done + "Node(value=7, rank=0)" [label="7", color="red"]; #done + "Node(value=0, rank=0)" [label="0"]; #done + "Node(value=2, rank=0)" [label="2"]; #done + "Node(value=5, rank=1)" [label="5"]; #done + + + "nil2" [label="", color=none] + "nil3" [label="", color=none] + "nil4" [label="", color=none] + "nil5" [label="", color=none] + "nil6" [label="", color=none] + "nil7" [label="", color=none] + "nil8" [label="", color=none] + "nil9" [label="", color=none] + "nil10" [label="", color=none] + "8" [label="8", color="red"] + + "Node(value=3, rank=2)" -> "Node(value=1, rank=1)" #done + "Node(value=1, rank=1)" -> "Node(value=0, rank=0)" #done + "Node(value=1, rank=1)" -> "Node(value=2, rank=0)" #done + "Node(value=3, rank=2)" -> "Node(value=5, rank=1)" #done + "Node(value=5, rank=1)" -> "Node(value=4, rank=0)" #done + "Node(value=5, rank=1)" -> "Node(value=7, rank=0)" [color="red"] #done + + "Node(value=0, rank=0)" -> "nil2" + "Node(value=0, rank=0)" -> "nil3" + "Node(value=2, rank=0)" -> "nil4" + "Node(value=2, rank=0)" -> "nil5" + "Node(value=4, rank=0)" -> "nil6" + "Node(value=4, rank=0)" -> "nil7" + "Node(value=7, rank=0)" -> "nil8" + "Node(value=7, rank=0)" -> "8" [color="red"] + + "8" -> "nil9" + "8" -> "nil10" +} \ No newline at end of file diff --git a/files/ib002/rb-trees/rules/red-node-black-children/incorrect_dark.png b/files/ib002/rb-trees/rules/red-node-black-children/incorrect_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..397fdc5ea5fba775095890720bf1eff3799cb80e GIT binary patch literal 33063 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 j&;}w677o~^y{xU^u{||&@QVz_P1YF5 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-node-black-children/incorrect_light.png b/files/ib002/rb-trees/rules/red-node-black-children/incorrect_light.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5e452be3ab5f51da305e507544d4ce49b85888 GIT binary patch literal 30168 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_0.dot b/files/ib002/rb-trees/rules/red-root/br_0.dot new file mode 100644 index 0000000..8877a45 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/br_0.dot @@ -0,0 +1,7 @@ +digraph RBTree { +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +R140399805603280 [label="",color=none] +140399805603280 -> R140399805603280 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_0_dark.png b/files/ib002/rb-trees/rules/red-root/br_0_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f905901525b4293683dfb56f824dfd790bd0ef GIT binary patch literal 5162 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 T0Mh`^pCBk@Eu~TgtDye@I0hlP literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_1.dot b/files/ib002/rb-trees/rules/red-root/br_1.dot new file mode 100644 index 0000000..c7ff4f0 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/br_1.dot @@ -0,0 +1,11 @@ +digraph RBTree { +"140399805603280" [label="12"] +"140399805603280" -> "140399804142928" [color="red"] +"140399804142928" [color=red,label="5"] +L140399804142928 [label="",color=none] +140399804142928 -> L140399804142928 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +R140399805603280 [label="",color=none] +140399805603280 -> R140399805603280 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_1_dark.png b/files/ib002/rb-trees/rules/red-root/br_1_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..895ef0e5b6f467fcf79d1cd6183915d0261c6575 GIT binary patch literal 9728 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 LRi;A9{Nw)uhM)R$ literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_1_light.png b/files/ib002/rb-trees/rules/red-root/br_1_light.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebd25e7c31c86246319c2c12525b618c0c25487 GIT binary patch literal 8851 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 wIQ0cD)6ZP0vh-IDF6Tf literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_2.dot b/files/ib002/rb-trees/rules/red-root/br_2.dot new file mode 100644 index 0000000..f4387c8 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/br_2.dot @@ -0,0 +1,15 @@ +digraph RBTree { +"140399805910672" [label="9"] +"140399805910672" -> "140399804142928" [color="red"] +"140399804142928" [color=red,label="5"] +L140399804142928 [label="",color=none] +140399804142928 -> L140399804142928 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805603280" [color="red"] +"140399805603280" [color=red,label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +R140399805603280 [label="",color=none] +140399805603280 -> R140399805603280 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_2_dark.png b/files/ib002/rb-trees/rules/red-root/br_2_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e31c48266cacc0fd056f5c737f3dd3d4421bd97e GIT binary patch literal 11797 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 "140399804142928" +"140399804142928" [label="5"] +L140399804142928 [label="",color=none] +140399804142928 -> L140399804142928 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805603280" +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +"140399805603280" -> "140399805700368" [color="red"] +"140399805700368" [color=red,label="18"] +L140399805700368 [label="",color=none] +140399805700368 -> L140399805700368 +R140399805700368 [label="",color=none] +140399805700368 -> R140399805700368 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_3_dark.png b/files/ib002/rb-trees/rules/red-root/br_3_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec0154b6b73469a770d7eaac92f2b5cf072b1fa GIT binary patch literal 17194 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_3_light.png b/files/ib002/rb-trees/rules/red-root/br_3_light.png new file mode 100644 index 0000000000000000000000000000000000000000..a6470aa7a0175a8933aae7cb9aa0066a442bceeb GIT binary patch literal 16030 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 z "140399804142928" +"140399804142928" [label="5"] +"140399804142928" -> "140399805700304" [color="red"] +"140399805700304" [color=red,label="2"] +L140399805700304 [label="",color=none] +140399805700304 -> L140399805700304 +R140399805700304 [label="",color=none] +140399805700304 -> R140399805700304 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805603280" +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +"140399805603280" -> "140399805700368" [color="red"] +"140399805700368" [color=red,label="18"] +L140399805700368 [label="",color=none] +140399805700368 -> L140399805700368 +R140399805700368 [label="",color=none] +140399805700368 -> R140399805700368 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_4_dark.png b/files/ib002/rb-trees/rules/red-root/br_4_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0878a0512e4939fa5403b56f87fb58d2cd53bcb2 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_4_light.png b/files/ib002/rb-trees/rules/red-root/br_4_light.png new file mode 100644 index 0000000000000000000000000000000000000000..891c0441a502bca461f938709120db49719acaaa GIT binary patch literal 17974 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 "140399804142928" +"140399804142928" [label="5"] +"140399804142928" -> "140399805700304" [color="red"] +"140399805700304" [color=red,label="2"] +L140399805700304 [label="",color=none] +140399805700304 -> L140399805700304 +R140399805700304 [label="",color=none] +140399805700304 -> R140399805700304 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805605392" +"140399805605392" [label="15"] +"140399805605392" -> "140399805603280" [color="red"] +"140399805603280" [color=red,label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +R140399805603280 [label="",color=none] +140399805603280 -> R140399805603280 +"140399805605392" -> "140399805700368" [color="red"] +"140399805700368" [color=red,label="18"] +L140399805700368 [label="",color=none] +140399805700368 -> L140399805700368 +R140399805700368 [label="",color=none] +140399805700368 -> R140399805700368 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_5_dark.png b/files/ib002/rb-trees/rules/red-root/br_5_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..df8d5455e91283e544536e42e01e2fdcab9e2728 GIT binary patch literal 19823 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_5_light.png b/files/ib002/rb-trees/rules/red-root/br_5_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2d18350b7fae275dc87fa2976696e956fd3177ea GIT binary patch literal 18300 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 "140399804142928" +"140399804142928" [label="5"] +"140399804142928" -> "140399805700304" [color="red"] +"140399805700304" [color=red,label="2"] +L140399805700304 [label="",color=none] +140399805700304 -> L140399805700304 +R140399805700304 [label="",color=none] +140399805700304 -> R140399805700304 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805605392" [color="red"] +"140399805605392" [color=red,label="15"] +"140399805605392" -> "140399805603280" +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +"140399805603280" -> "140399805605456" [color="red"] +"140399805605456" [color=red,label="13"] +L140399805605456 [label="",color=none] +140399805605456 -> L140399805605456 +R140399805605456 [label="",color=none] +140399805605456 -> R140399805605456 +"140399805605392" -> "140399805700368" +"140399805700368" [label="18"] +L140399805700368 [label="",color=none] +140399805700368 -> L140399805700368 +R140399805700368 [label="",color=none] +140399805700368 -> R140399805700368 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_6_dark.png b/files/ib002/rb-trees/rules/red-root/br_6_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa01947f56ad1f560b00ca9be7544fe133ab8ff GIT binary patch literal 28436 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_6_light.png b/files/ib002/rb-trees/rules/red-root/br_6_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7483fe8f8c8a3e3d7e4bc6a5a5dbb6a1665e8770 GIT binary patch literal 26112 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 "140399804142928" +"140399804142928" [label="5"] +"140399804142928" -> "140399805700304" [color="red"] +"140399805700304" [color=red,label="2"] +L140399805700304 [label="",color=none] +140399805700304 -> L140399805700304 +R140399805700304 [label="",color=none] +140399805700304 -> R140399805700304 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805605392" [color="red"] +"140399805605392" [color=red,label="15"] +"140399805605392" -> "140399805603280" +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +"140399805603280" -> "140399805605456" [color="red"] +"140399805605456" [color=red,label="13"] +L140399805605456 [label="",color=none] +140399805605456 -> L140399805605456 +R140399805605456 [label="",color=none] +140399805605456 -> R140399805605456 +"140399805605392" -> "140399805700368" +"140399805700368" [label="18"] +L140399805700368 [label="",color=none] +140399805700368 -> L140399805700368 +"140399805700368" -> "140399805605584" [color="red"] +"140399805605584" [color=red,label="19"] +L140399805605584 [label="",color=none] +140399805605584 -> L140399805605584 +R140399805605584 [label="",color=none] +140399805605584 -> R140399805605584 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_7_dark.png b/files/ib002/rb-trees/rules/red-root/br_7_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea486447e9bbbeae7707ac0f9c961544f543a1f GIT binary patch literal 31255 zcma&O1z449v^9!_2udg&B1j{Rw4k(rAf1AAh;*mYjYzk2HwZ{~gEUCDNJw|wxjg6G zb8h_i{?B$l?q@%1ec$`N-+bpBbBr;U|66IX2dIRoNJvNzUW*IMAtBv#Mnbw#gMtkI zr-og=9{xhskrWd~x<>r-tu8AZ3F!&aYvET44hfqx_6`dAS692oBYLb|UN$HUe;$6x zr5O^&7I|qW>vYeLCY${Z4tDY7$h&j7+aj-C-A}pw?rj`)0}6^4B@H=c*w1vz*e@L6 zT?ccd+4LR~UA?irE}G*j8B*3JDc8wQoWK@zM6>XHxeItRm$?qDO*$xv5|CEWI(^MGKUymx4Kma)wFD zKTbsvnHhc7EXqnxUtaqfC8??T_|Ba>%WG@$Dn^;<>9<2WJV#C1R;;v{@qca{dU<=x zrinf<8IvMsVF_Da){~Pb`Vto>;feg<=ei9x4o->nn)LUNQ~f_|H@F@5(ud@qcwvsJ zX2PSlid2}`vb}IVN|%hTc`YHaI8mZ&I`ut~gx9WES4=4~nz=wpa;ZJocsTR<$6w_s zAE!8kMMX>P|7t1~sP&cVCx1;&*2>UDB@;$L?8OOb+Mswce;om<9&<3^^To!`xAHaX ze4c+8v)Y+|)nG8VZc}bPmt;2cW2it~S&Hfr5r^sfCJ&j3TE{@GG88i5=T!PKD3*oG z5Ac5`v*?QIvc{@3xZOg-W7O-3Dv%Jn)sNG__->nufgxDk{Nq5A=iOL-SL8gUf~fs- zFU-Y(*OQOPBXUMfkTIlno4vArn%KG=42t!}vT=SZiugE|PrK9+nq|FKGf`%UA)m?D zk@UhjB81Wl^Rq;E5@t%SYFTFO(XTvq;~}qVYXQC0Uez1#_S}k$hpB3Jn)l1iX5zfj z*c=W=$7$&4<$0no1#c5pzl+065zUZeF&PoBKUuVfAgMmzF09?_7RXZ^ymhkR>w2)k z`N?uA>Dz~K#(ec-O3pc#@SzefO!9egSgn_^m{@qy)xAg5(({MobKhi=-IiBZ=}0yL z9P2ds&o|k&Ys=WUxw)UIM|E|Eh0>8oqLAGTXx9sHlU;`Zo|BZ8Hdr5O8_87+f8~i> zX0<|>@l=r@zOOw1hdw(y`~BYXYYHl=Qsd!qt6d*V!A7@gPajOOCzO=ly}gtXQBgx_ z9j*!7)}rg;iv1ghdrfz(x!f+e*bM81G&G3Q#6p`^tY}Hzppaox`dWIUSo!<=>*=M3 zCnw7kX}Wrp{=OXhRiX7YiX%okaeKaETvH@Nj+W&0e|=mB+4D2p=2O6pTgZwvfy{*? zUE$P|mF5EBR4+W$3JlJVNF>A_3Zi6eMwe0xV>+L%L>rC%F>pHkBjV=vdC2nOPiNTE zm_CC{so35S64eAQOTl$tU{qDA9ucANMj?Rc;_L{OnTAaN3S{rYw7*`EzJ5>6hTI2`&Yw)ZdH zA3l0CXi`BzP0eOHaZAsDk?h&C-XcdN2}#LVj*rL~{9HjiwkGGUE@WPBr3@f9BG%lgj+C6n>OH=?3Ga~)<=-x-j?sot!f|2@_zo1CaLCruL# zMxH0VKJlGnyTO$x9ra9ABAMUyr-{C^ESa!T*uP5*rrn*KoFwLnSUWD!)iFU@EA+Z7 zfKb$_P%|FO&(S%bWq9`^;^c(uSEYGY=Lu{*Hm$SZ?bxvbbM5_AhJc{U9)7oR4eLI~ z(D593A~^gG4qTR&B@)6*t^VP}FPtJEP0+H|V+zuUzzKUr!NC!AcDNCqSf?Jg>pod~ zqIK=$P4y-Y^YLS8$TG3q)>P=ew?6ryq>)b|*==>NX2zSznIbmN1F?DHi98juISR!5 zo7X~BNc(H)MdLlSj->QaXipd!rAvgS5wC+gh+Y_z z+iDrbt|l?_P5jsR_&jkRT!uI{i}_DzkCS<93Fq9-3vT*fWkGTy=CXJ@cpu82c`4#p zSaK0x?6hD^yOdc?1qP8`Q*4Zze}n20*e0l?gd57YM`PY_Y2LD{%lHJ5PXDZJV zfGKzqiP#4{L=5)DJzxKs;yEOHvm2@dA`wG&lMsUv-S980xgq_is;UOzvuLc-+(?7? zvH9zUK|l}~5kl^T=|+vX^}%Yq`Ebe7N1IKDc(_or*F70o6(cG(>)0V#Sl{1txS3aJ zX(^(1FxBqxX=`gsbjT|7L@}(-)Zi60T(uV+ui*&#y(LFn?YVw;83iTf?q*qdWJoH0 z+F<9wy8Pr1TY7q>{I@(I5IBOmtRfBBHc+2N>6w_;mb=2GlK5h4Yx%6KA|~x+XiX~O zRLf?`AgPv@H>nih{7Y(-o6!ZzUMM>BN-q7uoU@(f#`4_GN6*wN-O_9*8XQ+5qt{1r z9(f{Xz|xie-9{9B2^DKu(`j8Fp1N(i+S+KmFmcGzMLI)nciMUY(yZTLTE~~j3i*Fo zkOpxSxkEczPIhHVEtizjvzX>*otDfkK0>5kA?ox;4T4LhF_m8|885t5{H6}APb1fcsNSCa*3HTgP z5K%W229f=CGrFZp&?}}bF#2cR`P@AW48x`N!yuw#E~h%pbrt1w&AK1G$pWFrbIE<( zk$F{XNe$ugL~6<;Xk@KgVUaJ$1bs)CT9NtFNzZ7v z8w>`?(@K>4S^pO+l389K}3b$Zg*Y2hO=5xtAH# z^#tG~>sC%hhS+@u)a3KP`P2DdQjb0ZU8wxM$=4+jd}LlHy0HkXh?Jh5zB8e#yFR(k zpRYvU6Xhx)+D_hv5ol7OX4X*m)Y#bA=8w%?!+|9Iqs?R0;`v9W9Pz1>UYMzb2w=pe zB`C;ud46p8^V_SDJmqL1-#wK&r{^EW-MZ>s&n;?Z_y;fv2wvCNeOwxK*f*J{G1(}L@@raMUtFgm z)?JL%FUiU7ic3ZnYK7HQ-aZeAhD!A%)hg=|+4h@KURVDt9K;VQWd;ufE^SgJ_?ck0 zSP%~yoeAj^5U3B{@DP+v=J%e|5LQ*?M)xI&FL>zNBCV%K zK^W}Q*(px`^yzD9X(}?Zq+b;uthXx0Q-{|rCQTJ)tua*l;=yR# z=Fz6J0FX`~x@8zDmzbFudUdq`>wYh7p>_4|1eNgl$!%2x0{M53)n3Qs4@GrR{fRXv z%iBab($qw#{meWZAx!tN6tB(%QLsE%_2u=+S}CF6(ZX)7z*#+*{5WQ1%flb)_g+wy zRxLRQ@N$Y6RFB24e1{|Qn=|LPHpU8$*SXBaMC1on7VA;-WIC`QpOC>lccazHjb3F* z+wZg!nV(&t6N#0p@dq>S>8TR@FtOmofQ`06Y_$7&tYMPDc%doB$6w3QyP0uPBL`LM z>aq*byYQl80Cfmn2KmWq!M{X|LWoyv8NL~B~aJ&dG+ri z0sroll9lA-QB;2xke{Cz5Ogga;g1sPo1zp*z65;^^S?ePyXNn9?*q>1#)j(`Z%Xcq zm^?=#Ps3N#6iv@Z+zSVBuc}WH8H-)i$?vy*Rk$3_*asLmGO?m2;yo^pppO$mA&QlN>w-1g<^c=+Kkg z{lpz6>+lJy^anM>>6?F_fqO8Gzq4l;&ZM<3oc$Y_H(E1f|u&q}uZ{WfXHvVUJ&4;zQ>IYxBPpCn8{4Rpl1v<^4MLjj+#eT>^%`*W%3 zEz#yIE6Zn8@ntz`6#B#}g@364VzE7hq-C*960maBkR{_EU0n)zh_vNt#E10$BVS}Z zNHyrAFz9sgFER6!kOO$9W>rS1dtWMN^cJ>Pbg5IdEWjtsC*mAao@EH|(sho~F3`C#o{RepXb zq9MdxVx)af1q8I#xuW%Q20K}TeJuZNm-}njF0$&5d_SUB1~wNUkCq2*>_@ zr@dm%n1$FZ@^1*N>m?#0vfKF-gUzsCqj!}&V@V@w1xs|VoTojq3$a%h1c>_;V?Fgr zQ_72FGb|jEWsD~}sq7NQP`?wL_#d|uM%<1LaPmS6sSadB=$sXK`f*hC{pLSOcRX4d zWorOf;0dTsaOC%3nnkq+bZUGVX&Nj{JKt&J7&(YIxrikYhw2jrqV!DmW%+R1Y8zK!&wcUPdgcnCUP)zB~`c{_56!~69&WveX(3> zw_KItkByC$5Zm=1ml~X2F1B{o&p==l^7jb9Ck)8>IgkVKm2+-HhF{DCYsHGz@+@vW z>XDG8B@u;A&kF&2r3%z4jAm;m?}Q4RE<1#f3iR)-&|{0Q2o%Mp8vn7euwOaFOE&sc zL+82Vfeisj3{iu^$~kRu3p!)H?P&}|YDLP)$vOBv=vg`ILi+v_P|D2{!fvZj^ z))66Vc;+G^WhwLb!zCqu8x^Ie40rVxGZR+Tj@Z?36^431$;#F^zK28@FE5{HO=1iB z&4nYn6==T}AXFUcG{=hOUXB+YGg~dwK>syazD}PhlZ;!Q@fX)OQOf#8V6Qjv*q`4? zUs`Wj?rsjR)5zt~D(7Wv-XjwX`L~~!XNTNQ2NOl^M-F`X8r1>Nyy^_4ca?t_k9red zPtNf1iwA996!J-SXRo369f!ArPs#j0@7{AM8c#m1eM-nci#V2Kq7dS*gp0<*6Ep&K zJ3`*=utfK?&DJ>&ZX81Dd(3}*fp+KNnGaD6j()0CLHh&Zk#)wiT3t0nrum78#wT(` zn(szT4jt*88;k~1?*!s8k#llJlL>8S)z)f!_Nosr7`N7PArID&X6?H(vg5$$&@WpM zgly`I8g-JOp&D@3D-;6V`&%5=q zaED~rB!(r&>M)d>v5r~I_G1Z_MmkDu*!p)&qKn^mRUajHuKg44>%s6&4dCZe_)qlk-6Q%^S++&v6Qr0^4-7q2)r*iO`f= z0~3{z^-|VkUewo9I+EkpS%J^d>Z3xH4X^GG1Z4x_P2;MR4sUIhCG8^3fn1AQJ>)^llDm%tPm*CZxnBp3(q)oo?-Q`bhz1i{&Ntpr zD$;BL_|5IG^G&7$9Sx1w9OFfzwAlI47GQdMpo7}d8YgoFlVxJi5DGuI|6MKStx~`k8mWjVD>W+}g1cR{VXn^)>W}0&`h6(n zAEF(qS!DB!On3)4gVsnBfbK{sti1xogz0zQz`M##> z;q&h9?uZcEt~hRzS|vHDM_J+3?cxTau{VD#Uuw!{dE!Y(8hxxR`-$I`mub|UE9*uk zTmhKguO~w;2cLUSmP$I|rJWrI5N%|foXUvBX2=be8OkI%o1xm(c(UlW7k^OxK2&lQ zfr@WTYpA12JL&WyJXN>zvhUPk)F1V?s%(?BKIMcg3l&GyyEEnt-Fsvnfe<5%V$kpX zt>+Cq+M3!u+c0N#K01G8*{^PD`b<9SDn5k7d zS1y#}k&7&uG|g8j@dyY&rIJY!*3lu4=Wr!?E5b3kWne5zRxxdc+(ubEgqdQKPNyrM zqk@I?%3G~(dFbK87mqo-i9Av}QOU3?wYI-O110|YH5r@rJ)i>)ep`|n_9w`~_4l3X zTy~m>5ul|v_Ae%&xZi`i7Izw5_2e}ep{hmXjvk1MFG^u)N=WF8xu(ER*oNiKW${)`p$oE;Kj z_l5tq3s+U}Q%y^O$|>?n<-l#@i;|d<3cgHKq}=$5PF>SC8wxVv!|z&9zTKPOGk=M# zzWtWved9M1+lsAGF2_9zIEIEp>4p%yz>Elm5hE8x1FHC@^U_79;>WKelY|kY$*f_v zoLcOP@tz~3Nv5|bvJ6lP7YAxD_9V+eP^oh|Bo}CSxz6QgyWEM@YrrO-DP_F5;fG;{2XIEllQ= za*KOJoqNRpeN@EhOmHk;wI_&Rm^oI;jikmpV{6){>$whh%DukSaI+x2U@{MaHjx;< z#~Dk|Z9({n_yvLpWcup>r^f!T!RAEAC5IVA)tvkFjEI1ere^=)IOnc5loP<1)yfXh~Tk z=MT4bi@C4aC7%Xeu>J5EXvY$~T_B|jTSD%GUYDGnP63C{HY1Iuu)I9Nc-R2QrIu{@ ztnXUw#3s;O+3n|cRj#Zi+Gp-Vqx&;Qp4#Td4;JejwZ8IfqsQfH*-KF$ti3U#W#E-H zK+}OBMA2|vnsel{u)E;>0muF)@i_Eho>POkj7*0q2b<0Bx5=Ry$f7FUs_%oABSHs; z>FMZnb{8q{lbj(1;xe4|tkECVrxOLojGFkUJ>w^pM8R@_y1dIv!ZR%a&1+X@=UX0$ zMhl)qz*Q0au4ms4cfD_tY(@gG?P4Z$TO~RJvr1qBY_S_l04`j zC;KJQOQLsZWVv@CKZf9UPUO;z*KXf zJ-v)F-O?xM*NEuK=HMN2&_xEc_(pPjZ5%qO*4Qx|&y0sdl>;r4f#8MHeMkc-AWrg~ z{Z0#5K5JWO@y$`M3>naD2$}Lm<;q9PcRjqh;>w*rDyLl7i6f{%h1fAsDXC{j!0QDB zX=!Nm?kr%GeNg7W4fJjnWJ9p2kU>6K6TP6%f$kwD1|Jq0bUxkQ)ON#8z5J!4R=}u< zj-EA8I{K*j$=QN5z3;i~3uF3}axA{?Z_QpZXck4EoH&SB15qn1EPS$g_#mNXXvC-6 zP*;J{y@5$7G7hDhP#MKC7V!dzC@C|LpnWQUFF!Y*C61I3(bi5$<<`+Lc`GNkST@ci zn|L0k(4ziAsp#UezSUtm;`T&t7AE=5oiTqFK^kB`D@#f&WBNqgNUv9-uSpH8v4Ccu z2b~pUTgx7X%AIDkfm=H((Hj>@>y?X(i!M%n=ZG(vVHi}Hb1Kvmf8MKyba=zwPaOs8 zBYAVx)p*s$;^h%3HoS;a99h3P zi~mz1`1>92lntmD^1pSQ@o>?%nwlVOQ-h`r9c8>`-Pv1N*%Wa`B-kJTeO>+iN0ayf zeo1Y3%+QO2J#Q_z%HCigL5FBh4yE)$VRUzO;rTBw079hio~#$VKmdioA}y_7<;K2K zTS`3AjYa^_;Cd_lyu9Jz;Y($fR1uLwMa>fNab2C8*D^#kiTbNIx25u5hmb10@Wy=g zR9@-G>m-pZ{RsTv0BU{9c@l74X55Mrf3#_QyGsQ`Po*ad zA93`A@&BDwA9yX6SfJW)knqlmc7#;Yl2AU8irK;T_BLQ;i$2w_RqZlEzbEQodnOP_vRl5%+dXkOxa|PD zm?EMuaTnuJDs8wBw2iGiJG$cGgsB<|mI@*;?q*6kMnSSoaj!Rel8v3;8<>iIM;o-u#!$aZ}dOk(*j3NpEkt zYk6fQEPUzO^*ACO*q-MbByw_c;*vx`qkrZ;YC#tyZBik{$UrHRg;tIBXrwWJkz8)t z3|gb&++}-fUWQd zbVFM1r!@&l2f(y?8hl#5Z<}xgPg>m&F@TWS07)246qCsay!Z^c^~|M+I|E2RAQ>dC zuP*U9x9=$xYGl|@)HcF9dGL-giIE9%Em66zjjblruw?&GL#l@*i)B80r=t_F-Qa2P zlU&$!P=WLapc@1;T+gP)qb=SY2R;e0JXYI3BL-I&jsP6cF!)a}fm)X587ktV!};(4 z3o3aMJwp?c>A3I0z0^GUjjDIOOmwM{GfkeByZLPR5uod!paUOKr2u)Ys9_c%i4q97 z5hMC}=xpTG)N*ag^Tz7VUx4P!!WbRi6N;HCu~l>>KAur?|!|8x=S;%tv|92&(>i_6BC_Et~yzTj_e@k`R)+V;>GSc2X;pUFjZh1U^b?*DVY%+%18W+@O zjgJzuZ6j7Su_{Uu1E}=SAsUFps%ZN)KK|533jjJMBjLON7f1lMG^t)ri7w~|6%g%d zuDFB*YB)0bx2bDak<*6jH>*Dm_4J;}T@+_4<*gh|@qUep5`~7`0uGA7fLrn%H2x-o zGTOKTx{N9fJ|#_28TC6#kpcQxqO9aW0i?L2PIc2}MHGD|EB*0miw^TQX59=P?zc3T zyhhwI32{e>ca?#Z-rf@jJY)Q)*e}F_zJcrp>PZI>d#W`@lF)WQ!aZ_~0!#twjbx?S z3}8>j)U>qI)%cI;Sy}r~pa2Z<4}6Qb9U6b7MDLle^r!kA@z5WYkIcm!(~bOfkLL#X zg`Mik%an)u4AQJKf{j9b&6}IM{h#ba8%=5XzU%AI={kc*l63*pO9tmm*lBNavGOc!|RP()xHAUT)iR#35U)?md8D#Si zAnMzgg<4)y{@B}0xuv(Cx7OUnoa&5fHOcEV$zMGFI%D>b&&;G|Mq|S&W#7s2hOZ6J z_l=fLRNmtO(wWtKV3@$%vkw$Ii_1xif|AmiCDniOoXTnb!>@g+KMARk2rWG-)@bKe z0ZD@0WW>+sfjp3qWMpKYfzbH+1ycqDLtv0VjQ|l^DGw*Q$Gc6ZNvFhOwKq1oXTcbq zr28o+r|OLOS{2?)@-y1KM~|I}6~P$G5vF6f7e z$h!2Sz3Wd}G{i%sJAPK(&gbWvyaGoI@87y(Mo7AOd*it7edGIc>8~HLvJQ3i@b-el z(56#zqDKtozMhCTk=|7|`$*7nW6=O6uuX`G$lPvlJwF<(u_ygAUeqy^5tt*J=7Z?8 zUx`C+61@%tbjIq<(nD=NY$BNq>=%|e@Vsf}b5|4;6vale$gpV$bHHtcgrecYVaJ;s zgLcX@-6&LId8690DBBI4lwYbyv(7&x#9(*vKET0$37#AgXu_4sN?$bkxI7rXcXqVpJ7}agS=y^rG=>Z1282&PNejb_V2pt{)ep=&4yMGVIE6dj;nXri zWrpUpnoN?>jG4f{{9DNlM9uTw{*KDer{0={g~f;aR7B=PNn4u?G`EfwtKH;l7tuN= zTZDlidli8)sGTP0Vr;+riC~E)6=DU7t-mCvz{ZVRpL0jTmE?|%mCVsk)m}ln&YX8O07AcTB$5{Mk5rXkE3 zAAEOlagrFf5cVL~YkXtH8&9)!%Z|@hTur*>mN#FGU@@?PAv9ii91UObq zya7(R1K}^bPIVUz*T)Z)@*+Ve1LhH-ydrFyC`fWg!as){>w5Xsg?W7wp@?h_`6B#> z$&MQZl{wkj^L?Cijqm;5&(=C3f`$fkWfT*jbE-uQ%xrkX10~;A0*^>R=CTb*@78=q zw5D*HESvqdFDf;B8YEK`H7rdgQk+=mi#Ms83JN;|?)4snM$2G%Q$+Z8?m*zY>R8_W zqNyPMt}^~=*MC`j@DbT2sKJ)i)3sM;)v46pGXIpK+mTR8gHi<_PMbNkQCkVqYb^>s zQ!7USn`gQ4wP@Pl&R$Ou4LtXP*dAvJ3gPZ!PSC)F9cvGQWtL;GA@VC+PObPJbFvvo zQInH<(8?#ZE$!04rZ3#xt4u*by$4_D^Ty}XJfozr(0Ho#OYmZLE!q7usHvC7hG~P@ zj;pa zP5*t*vJ1Qs!fL-T!36uL%%Cr#8C+|?E9YixXfR&MtGx7A>-%&f+@HH5sp{7g85!C3 zh3wdR>SN{Zg0J;Gv~cx%s8~S?-~a-nkf2}BVB?BjN%faxb~T^Y4*5dVkksgih*q%F zB_79gVT*u#0lt}p;}e9s3AU+y!`g3n-TQO3j@D2ePPc3RA|4S8zW-7oPi(0fQ*I=c zG&RBMO{horgJl|1!Tg%j4K{7qF@Hb5_kD2{c&;H}Jy`G+E4JHe6JRXVpc%MEbm)zr zJ)x}>cRIW2gHGZzYN7~s;?#gn*fI_vr}bjcx(3(r38Ozf_Y0V10zRb+l+UUKpD3=x zel&i!^R3GLE^5-@`pW`hfvfPF_dM0J2i$>{2KYwJ^q2W~P5?WwEfwOjb+qSx$dVTM z@8|YhDte51p_&8pPZ*q#dZLS-(9s0|v0U@J<8RGhP4L2!M2I}a^g6rvJ5?DvTX+7p z!R-ZtFa{$xB960f!aI5iP}(6Q{UlZEO96>pR2*98nD6deQ@+SoY6nQti9BtE?D~a2I4+^y)dKKe5GF6d+!KhakNN14b(1v^_g#`qmjZW&?vWLO z){TYvn1N~OMxM8_WWedi$Pc=eWsMr0nHIM&+S;`-7E_M{ap;vS!1DpE?SOMFIJv=T z`F^FF30nej3o=lvH0zumk&yH)wh^?pwOyW-czN9h+hMCG26~!EATDYqP#biR;4Lj5 zV+a-Cj^W=w$Sd9(8u0#m)GaX-h&qXB_Fl@AxDb=Z2}#SP(FDAE zLfR>+DS9cdR<9G1-FRNj)n5W`gW@X%TB=`Qpl;V!k;ZDF`lXJ$12|oRx7iT43XO=C z&5>haqzVaRvAmyC%v#ym>ucDT&w}s3$AKO_M0WWbv=7tCQg7$Kmvbqt+1cXTRZHkf z`6?;zOMgDuzZQUAJl$|$7Nl<|JKc+Ifqs6>2-h{|tV4Ls_78b5@?;}JZ5C;B;F~tD z*fEQ^mnYGt=J|P$rNpMNJS=N;&q2xvr%nqj&>o<6pB%d6Y|qr(f}o6+Xh$Vry}p)z z`?hgs;i1UV~!(3rL(MQ+!hWpBJg ziGbXJoGMCGnmRN(nl?rn;lxGH8h#D^15(xTtn*}*KP2#k(NMK7Ex1W?|GliuJyr)1P0G(--$j*HSEzVL^%*XQ z=|rdN@!=D|ns!^ikS`U#eHLE5CWcD4w zMv-|h+W?e}zTJUl42F@&ma9r$0Lt7T!AO3lM9|kY3FAS@PEIpF`Zz}nmdqXs0 z>S8cW4B#DO9dRsLviRSCs&Pe?rQCbfEOfxP{o3Tgl z^4LWN3==+ZR3qW$A>meIaJF@F8(BXoW6H%3_1!X*W@*9hs|k}8cBs2wuI4ZyC(Te9 zU)22Ig15W%*y(cAEq7EC;iv28Wve<}RTun&nabqt>pPq(f=0+$p9DV1uP`_xA>j(h z`==4(C2ylyrS;i?@!lRf(2qjW(&)~|SB+30{Kkn~1e8Wio+Ee`ge?{9l~?C;@4%&1 zV>(fc1te0gqLu~te=uIKU&v^Qt!kk(^hA{6-5hBQM!%a#_p!WUs=8_Y<=;cORHbW; zA)9663Tz|xVDU0HrHyJIPifx@U>0NYrC4)wu$sX4>TA- z_5}|fZ%gw8E^hx1i(Az0$G0wGOXY_0aeq)#4R)C5$BcRmZmggQ-5ySrBEHuo^xa*! zK#2_|RSfzQGHfDDB>&elM_>NmW{v<3KqcE*@Fh(d-?)c{1|tT9Bl)oi*$}!f@bo-+ z{yY--0pU0B+<@G&)}Q!)5&yq+&sa&)!*|*e?d`~cIi4(=>(D7-wcoyL^Y4QUz~)4lZ5QRd+?rP2=unjA= zX6c{4d4~w-=44cQp?q9OM1T-gKKi|XQ}x-CCsC{Hcdh2HsV$ql^1(i(&s|FkAca;i z;t3d+yI>Nu>7-$)`%NRiIZ68eaudKsYeeh~cB;EytcI^k3%InHf4WgHEsQ}MsBpyG zmF9O;O&SKW?j^>+@B-m@wm#o*JFF2wIpPN|x8KI?;c2Qf^@@sseU-U!% z7Gz4``BM*@#lpgR{eynw((Ai|?MN<1Zg6D%y^AVABK^nB!Hw95BrT7t@r5*QfQtoe zeF(-~tso?n|ICludKLK~G7e16`WGj=HrpnhL$#@`XY8VTxwLVmCJ|aR zdH>s^V!5MR6M9$P*&OMciehyAGxB!-?Fu;DKXp(PxdY)nUtRieGaLUAQBNUejl544 zAE;_!Pf7I`Tkq)^8nPJ=VS~~W8DcA}MP$O->QE647TOiY|%;4J1F;JA;_5%37LQOXW6ADzN!2Wntn8 zVc9}PCvMy*YG`WpANZ%N=jU00Nd@{c%l$r1Hp|7^n|8c4c3W~hVxK4U<^6a;Hu^MWEsU0nu7M>clWNwiO3B3reL@|#F zW)clnx)mkFa#=azg8|KfY}5n;6(H~H4QCeJ`m=Zg@g(4&92E)ZX)|2CNvBA6)=vFZ z`3=U@Rivpa{@p_-ga$ORu2(>IGju4$YY`NQlg%=HAgqQe&E5C*_98--A5BiyfW79) zBPu=-sLu#x@^R?i+zr-iL4^-;N4cKhChAQU>?M3~x%epWQhTbwN<8l={j(tI9*LX{ ztCCsFxZ`%5HJF|I3jTnyNhug5$-UHWX|VeJ_AwA~e5cEgMheuU!9hb42g!XBDi^Bw zB$^F$m;XOzfs^Q__fNpe@J*-j)2q=xCIfkv;Ee(Xb|C%r0C@8!>s@`xx%I9h6JaC# zBI;fqTN&RgAVznhr1(m@Oz+fSFPztwuf&#-A3>tMknqKM)h8iZ%gtY@z${a_NE4t4 z4M|5)2r;(@%#3wMbU`j_1B>`Y(yRYiX22#!uzspZ?*Ga=usj|6W$52%-NZSJ)_JY= zZ4M9Pl^XP^8T7{Zbm_s+8tZj;e*>oC>u$|YU;#q#6MKFrO6R)?6~OyJG-=A>& z`pug|RsOdIaNtZzbF4lQn$fO7Ni>tpZKD-Q=tfrel!Ux0M&oId`Zpy4C5ishhX@WPJKnmP^?FEO!&ZX(E^7Yz| zh^u;h4pV%X%!-9J>bQqa{aasyL<)6lX;d+GY$vx592cW+u>O;wsByaqIkj0Qiyu@kZz ziEoU3R4rMw26}d>LtuM2;VQwM%;i;-_|3O>ohd73%vgg&8$w?I34+IWbT}S=x+b8t z0@jRS=z|*!Z(8IkJo9H}ZFSo2Cu5A12qSJj=CP@Y1koToENo%Fy10gnV|u*EDZc?ZTn-q~F~Wc@2HEKb|ug>}@c17?a3u%z8XK<=Jpq@L9(C z%=*fE=Z@+m+RGPobe&@x-02Szg2Ua<*13>i!bb5~i(FcmLumXFdW{Z&*WW|1HE(X3 zqLZLr1Up}zx|Z0i%fS#gqZ3UT-JQjYwY9Zd8Wv)KT2~rxzx>_5e-(##UU(5ETg7GE zjYpB^E9vXk7i$6m`dlf4Rtk9;k?*=SnLo^&MQJIU-%J!}V1iKW0@!Ojnj0z8aj*4s z4%!-+oACf*eyH#rZ*xlvOunoFvvcRu=|0{GpJxNWJ*_V-RX3={mQw0_M85M&tn&AX3vbyycM>NiRDe>Ju{$!$NV}kNp9fnuM)P_u zPDv4NLn^75Y#UM>!J)~>rMCJDKyv0de!*XOi{79PXGmQ8y*^OI_Dk_Wh8tN#;_Hucu z5wa?A6W`rdw5|DYU)oAf^tvuPH@AJ=#%FU)?9WxhpWHm87`{`)w7uw?HxFQFpYLd5 zsrGpG+-7?^7Dh{a`NXo18^p7-H$`Gthd*CS{<#y(>pTi)OVdG{`}yN$?jmV(bM7ih7w6wo z@R*3kkTT5~oCMQ4gEXes7Ov(qCP0siVi2fFKsGsE~e9 z*V)^9f1PqneC9gYy&mmT!{ruPKiATIFxP{T!(b#kto)-hE<#_fKcidb7OcA#5u{{I zy7|TPNTt9*ib^`CKtGG&Vqx@H#Y5K?Q`SGUhbv&n8ViyAMqJ<)hurZsXasM@3-R_h%g~@^9XB~2 zaeVC7{rRn_H)dC_lg&%_I?yX1$8st2$JC4Fpgfu^cUzn-B93Nrn;4X#*(Gfe*&FZv zaO(NqFnmGD*B)Hsd3AX{SnrDN)^LSjcxWues-mmIa|yR*`-W2TSeAY?SNT# zIA_=qrW%t5WyzbXEbZT_sI)@rYA$`TbuHxWd>uIQJhBcYGWkp6neg4?i0ClPwLp~0 zU8i;RcWo^>#tv`V895jh!jh8*fcJyJ&Kmexjf4Sz4ngRoeos|mUw~md}wDVUO$x`B`+1`x*?JWd@g?Ad!JDv_e5q(bx9; z*LC~0dl=7wf48RBly+Gd?tRvj)C2}QUM=+{Lz2zA-4g5Tc5Ga1fr)D3+>BdbH7_q` zr;@@SfKKQHDqm0tHU|cug#e)U_dD}M6V?0HLaavDL^anUfBd>N*&Wze!dC0m+7%Rv zN0S;kSu{_i8sDwx-_Om}Q!&6br=TDtd3_%-_&iv9nhe079mvQ=&bd~*1#p5++m2&H z-`!cP-Qoy8BJ!Xw?b3Yn3NPmto%7%mlzbVRpWSP^9(f5&1!FOF=^xOLV`Y_^BS%Mr zqz5R*Q_c?--!bFsfdi@BWHjL3qxRhu@PBTq83IBlU`v|sraxzMI#98)9>*tn4N-HJ zvndkzsjHR8H+^u} zF>d}+hq<%e!!^iG@qOq}#YxEVxyoCORsqR?E?cf@_L>{Kx(5#{MuNe?Iaue6ffzli zvU~vsp=Ps6B9e`4Vs{sL+-EUhlH-n^o_?<3WQ<|A9kiLHS#d3r8rr`plJl_4o3fvR z&w#D6n(p^nVP>zXc2=J#`$&E7%TFwYsF~4GNX+a{15dlUPIP{kmU~IRetl0e>KTYN z7NBYj70uy*Zvf#z@Q~dJlrb=%f~MQx?0_2Sk&rLC;nl^R6Bqupv`fZc*W|J*@Z$pQ zZ=PP8XI|tkUAVO?M_4=B;%KQB^h&(ek8JU$z8NV0v>~}ElCiKTxAh|{3mawRo!4}Z zRtF)x+g$CTq#Y~K$E%QdbjI>0^VJSnABT4QHu5zFGbA+fi;!MgK*FUKD&pXcRMD2G#Kb2w zH>c}O(>cnCfpwrAMELcwt%n+nc%V(Z2UzQ)6;-BI0Cm&<#w}!vraNmef6_c%eXY09 zyaxK4k3pU!wD-Epol{j8d$Vv#OLW@Muqv->D5&OL&x{|NUm4;)JF}PCau3r=DaDhF z!a^=6!q)A%z| z{KJQ;AQI*Iqnjx1rH7CtxZ6M97^~}s6Vkui!Kpu9I0L`+LJvReLI+5@<1fbL+$XSb zSXuG>EKukCVORGB(g32K45o^}kB59185{HA^OS`mSp{FK2JbDo+4Y*h8BL3o@_w?H zuxPsB?*NZhw8%P@K>!7iJOs71vBovnKEV`T?@RR}Uo$h#=&Bj^-E)iBzS<8m^Y3aB zL$~bs%YIFmmk$R=3OE2s#4nTFLe>ydRh`6YC{p~$KvMhomm^=o*5S{2-?`$RUW58#HCkr%lUb9L zPSccTz4i|`k1?*L(UD7Tds5tmKR4O;&b!c0j5m+>sgp6(nf)*(^vg;nlU}+te|AUh z>rkQ)aqIb;bgfhXznAg?tlUeRWm7}nUfn{1;g1vOH)+6xbN;s>Ejv3V02NQO=x${V za?!XD$bVolhIjWhJRA|^las3KX45eOm+LYUrW`K(q`-ja?62B)4h&EW2qZT*r&??W z_~E`jzh*CrZfo;)F{-qd7sY-4f3)|NQBkg6yeJleAfSX2iiCu82oeS@AxKNdAcB;1 zinJgh-A7Woq(ngJMnFosJ4a%ux%>5;|62F!{eE38Ke*m`XP(}B|KeeBBNM6!h!yS$ue*Czv;HKL*kPfC&p_Adl# zbPNpVtH(q7=j$OWP_bWn+q0Mka<=w%Stu^-KM}+v1L6w12cg5pF;(Hv&3dud78sqQ z$>l~=sgkOy>f#ahmlj75fM5otT%0@!EH#cYYsw=*DA0yq4kE`UfR3EgdP+YhCuha& zCUTHL_{?i&>z0JI2sa{*#yG0;WTnS4en=R^^h8gRt?Z`^mX)!wv*=e0H1BGTsN`(P zSZEbUM5X;Q%Svkg$PhGA{`w}+oZO`e?dZZ~(H!;$)m@U4Yln$b``d0xXLb#jW+%l@ zW7>7E2_3DKgZxbyq)P3eSCf;M|IiyQUM~rsF^d_HtjjwzK00AzW}(;dRWuB1*Nrrr ztQF}IsR%20t4KIy+vi*Ur<^ISZTz{W)oPv=$ysynK(WptHN# zlzUs*;7rRApB2do#A0J6F}uctd2xv50FRWB_-740i4-r^(C2ZfFKcN@HgAH4uEuw~ z!}Cv46Wevqt&Ud4h@J18zsxq7|B&YAWCLR1WAbLrf6+!jiK736ThZ=UAPK zLV*w9-Qoj`q_{k#m|rMUh?7m1c)}Rk;mu({hT}46PXbERetK_D1;70u|`S z;(CEQPEIb#g{Wde=pDj?hr^wcT87?&7fX^)c&(OgP>`yVgFQ6@`tW{~h>3$>A)_IRPRnfi-UPPG2<7!|GNa9Rj3t|WY1=a;%y>JVClpcnOrgq-T zwQptmV)EU4&5y(8yXn)60;$qV$QdEF1D0*yU-I>h&P;h{NhuP%n_YE{UvF{V%coIg zBn^#;);|*s)7a;s<+Hd2T-aZm4uUqJd z2xxg~3Hd8Re`H=R0FJ8v{q5@TSNq)mn!WwfL6#*}ZtR8bd*55=kI#cc=xr2CID8Tn zn6QUKJc%wV%-Zg|IFLf4?C8UbdXJw9CnP1lqpi&P7K|hW%-IlC-p?!{rvu_4keWHb zZ{x>x^*@XKieh~KHd|sUrHxr7K~DIYnyfNst9P~;@{tTc-yjM_mN~e^*v?0(mm0MY zrrinj`LLij$JE2XFx$}BV8VdI;%0a$szxX}I=UIKcF1OdMy67p zF*AnD2=77_M}Bf|IDPl$wSiB0d2+xukdu{VIXTp6Q`d7h`L_u{$0bn;OlL@iHMQRH zP|S6^ET0P|WUzT+QWygDeJEIwP!Tc#;cgMi@Ld13!DF<8kjXM4&@-A!!^zpOhTys= z9=^M_7BwR0=cqk63xp^TCjB=zc8>BD?X2Mda?j0mF8QKis!h+PvKOL+6u)cTC`D6J zJWdLXCu`mR8|PNqeHTMI0hF;#;AmF_1DskeEUqp8fY%+H-l;HfY5uIcLiytS{~qr> zs%sR#V2tX|Xzt4UXqfloA84~*_8N7@LRSL1?Qa&BeXF+71U|h%GhVIfWsNN9LE|5*TGY|+#45#O59ij6*K0aSS z3c;JpzaVN4vzP*~<&t%C#3kZV^yWTKUFA~Pkh1rg8<-O}R2lWo;UfRdv_77CN{)pl z^ihwQE*xX{n4gx5nZazY9USwdG5W^Iyp}H^uVJ&EXrrTjqXPg>yk=I^t`w_Ws(5LRON)4agW!fMaUAuJ3X= z|AVVhWqX~OnHduK3F5kmYDbQ8%kdi#R$q2HW>BZp3d(2C2sytBIoO@pcvb#;oyFxg z3A}&wHUA-MXz^TK=wi_2&*VQ@+>`}W_B_Jk;@Tj?@*i_f%SX3PLW!`SzGA(u|+dF=A5>f_(Sa@%}id)9#h| z=!XTFkLB6XQ--mLE}dL-(0u);Cr7b-vgc#!m2R9B+V4pxe6be*haTTKw`a_1K zxp2k=EPE;>Re+bIFMi5A_H^@#<+p7{VVY1c<_4pI993<*UI}^zYL{oLzjq(Q#!^+4 zdqtM+FPU7FZ1~jaBi0sL;5<@57kO>g&Hr zm|xS%Koy7w*uNEZ+%DV)ElDnzt+07;YId58`>QgD@Q&nCVJ(U z`wW4o!xb1SyOq49;9R_Ta`n6Mdch>_v7=h>a>mqH?NlI}IErPd;a7 z8~j-+Cb-G}4mqlk{T4A5f}l6}1|JBo>~O%k>D%t$i$5#7{TY#wk;dI(ST}$gO!T?& z&Uaxy$#$Y9WTpR6-&KsUeg5uDcVV_c6uMP$S$4els7LXC@r*tk-A{uqTVHrb(AvHb z{)-oW_Uc;lF}sc4USEHI)#>4CtcWWi%V4kyYv60ncdW3=@ z)GIG!@^nM$D*5{LJy6r*{sXv}#aLzd`^z=OjU-*z@R}8CWqiA%PjkCD1t=p!y6aL- zZzWceCp+b^SG!2cKDIb-j zwmH+YK3dTaxr`qXtzXByA>RNF^;FWAO5a`e+0es~1Y(0sge zNN?G*W@2m%(f;l+Iz>@Q$9*YY3&;fc9BcLX9C=f}%`bxGlv*u@k)M3~m=7%VXn_wz z$vuYxq3=MfuHLs|lSWOr}rcYRlD$_!2`yj{30MZ3gODCXl!vzr~ zCug<|(2onhl|<(jeEk@st7T?KmHi|h+o1WDtuAHlZOX5QSMeW-mW&9tJa33m!(ViH z^_eT~u0R}fk;dKr6W80+(KZ3VIKkWTOlg~ zDcIhAV!2Q`8v@FGY(p$p1-e&?mXdnF8cca+>hY_K;HXVYlco;b$0!n95FB5fH`cqC z|H|A<^Tku1x=^{g6uqyP99oFGrNjQWemXv1~_|?znUfxG1i+GJNGsB!Ky50MOzd9+r;Id_B=ixw#BQM&MJ|4S7 z5@WInapkiYFP>UjvcnuR0DoQ(sua7}v-fB9=mRN6QYx4tfq$OMYJ$hczECbNr~)H^ zYwA*?{cJYVyQP7$On2?aEfW;a0}Fo9(h-eW>u37KMU#e~e!5NNN#Ix~bP?F7ZpqnR z-qR0*ZQjKT=L)XJ%FzjA?`F%n8E-x$B)E%O{J7PG;@M=R4~q$FH4h}L9dK8XlHU{) z!^2r6rG~ntHB=LO7KF*(icM7dEpJrhUMj>~`8^RHQWaz*mcxB}k)TW{Vk$a}4^~&yBfN`1DF6!o;8MD(-7ZGh;ovtQ6%NqwL zZYE_PO%@pnYU5j1ILK(`4u5k308YM zzn&|W0yH^hxo?H_r{lUcxG2U$wu#&O zuwPHd2#C8yi4X@;Bf!uLO=gH_;$k8@J0pJuuse%6%I3$ows*W-+}_$uH>Q!5?{6t? z+swqoh&?n>6i*GpqflEmbdwN#vF5;-kx|OixqoNiI;pj@J)fg$4l>h8T~W6xvRl!H#Q>C(2hRv zA$&r%WA?DrMuOf2rmJ&pWf&At3)(svho*Ujl#^@{ml7rkEFIc;Ohi44LjI+1Tc_Ayvr4$jy*XlcsasZp#UZ0T+HEPs_T=hX#m$DB#<` z#cv+$&@W^Vwc^l?jO^6%k6?NlBy;5)JZg}R89E+fK*sNWxqevoyh$ENSem9UjW}>~ zb5|a&yt& z%vf5Ce~pSz6pcHBTYzV#(1k62K0+EEU|W#o*X$t{^u*2in*LmC@0d-?eSS+f>d=;> zpvelG*;OzbiUeRYX|oOs?z~;Dn>9T(`x6%*0`&GczI4#oFpejXH7B?DLfJ11Hu(0< zpPz958c3&wo(7GsgEjX$5S`Dy1&4G$-mC@eaQ0fDw0KqC*LZ-us`Gl$&M8p__h+}< zlu0zth*8(LaC1dV%p7NB(N-pY1CGWM-O1|x7f>m@4~ChXagVF%lHnzvk(Zb)?rx!c z3Ufj91gz0%2%$+J=335(d0g97L)PXc`x*y_@-uQr0IQx>{+9vnYh3q87VGlz2;Pz^ z3U7xECGeUd*dO9WjzanHdjI$0#@0*c?*CXc3KIFTbXV$E%~1vzb@DxM^k_!+a5Vij z1>xL5PhRQRo2+2kQs3mzvy50G%SP8ZqaWZ1A55Jf2Jheut{{pr27+whzQ41b&=b!Q zO|<796&Q3wsJU~V(Hl;k4Xg%L0Zfl;S6zEhV zMSaNG9;~^Z0ro+E<~aFI9?pNP1igr_*R#)p-GB24ZCdn}-N&=U~>8sAG>0+tU22(&qX2`dvC=BW(%6 zlib{wlSRZHX$|6Gdo)C>?=LSY*WG?lZ#^g#{0Sq*-G$}SEZ~7-O(|M1;^or*8%rpN zE77(8%OJ4-C&(rqd#C@H_9n7L--T0Wj)~s-O-9GkUEOcMba-#-B%P>|+ z?a2Y+iBiw|mgcfQMM#+nOnuL&fui%g&~OuyC-P!j6yV&YQ}B3v79z8;=em-Q6FE|U z1IT1$f1M~RbDB?L!mwI-pBF3EdpvXn`BrJi!KYbXlRc5|xzo}p7?~-ICC#|3m>5gi zm!aP46TYB_){8+F7M;6kF=v&okT(l!Rj1BtyTl?M+=BPmuBOiYYhGjTD)V?gmh+I)kW*4Bo}xC}?ZXn`b21nhD>NFfKX!w*mj@DD6qrK783)aNelo~Gx! zioBTWJIeK}7ln&ZVc=xTyBWjZF5kw&;+o6}sh8$(y6ULX6p=QwobwVOA;nC*GLe%I z)Dh;JW1v^I3^~QWHaQT6%5C!+#ZSA`7j+!`H>~ItW1u5ZkA^T`x9$w2a5wSy zxPGg8iO3GoJ($=uf}%4P;)f2ER?Rk+ZFbGa`Ti<(IH%+ZGf>v``ASUXRlQDVpkDX zX6(<-MWgiGcOBycDsggo){Mo&amEKGx6L`FO%<=;=HyiV(<~p@R6jO%jf|0DcJPtH zO2C4ihcC>=#%RdjSaWkKGjrb0o`^za=-Z5S5qs|shiYn13T}V`=bTLtLlM#2>gP+1lcCZikIbWuRi6JwuQg99s({8t%n2Na|cs& z-uvLK4*yM{Sj;g|9Z1ol>BH+kV?1}-mJ=N(oV9J+GS)^bdWMs()*%yXkJoA9hn_8JYr*@Xrv*4S_dQnj4bkuEL|vJ zay_|*Q7hABlbZhvc8tlQmp$G*t`Iq~6H-WMjyX9DSJK)^K-cvc3O*ye7d@GX1=kt1 zLXWt1S#lserInWtz7=~thJ-4^Bq81%nx-dFQJ`A=h899Mk?Z}!^pN9afi0Bn$?nkh zP+j?zwjL|E#sR8yn&lRhz_`V4;<+#Y3{V_45f4$a#XoET0l)l`zq9eS)xT%z4om zj30<6+|c=9Rva8wJk&y8TGEgH(7#WzAJhb%xZk(6Gja(I94T%)%!*#;d`(>GK7~c}dm--IHLi76Fy#O?-;o@X z1s6Hcht>JIx$cl68|o`SlEAoe3XOq(*?w@k-#y-2Pl4Pv=V*^U#~ygz@I!rHyH2|A zQ-g==KT@F^1UGm&Ek-{$B5Pp)I2{NTn1b8*5}5QEj9T8hdJC+g_t#~9*$O2k+B7fE z&A%pGbr1l$!r>oE1QmNdntXlmbqg!<^;+b*!@hvqf$#rwuyVxuxgS9*7@4wgqm7QQ zoh81L=)N}sgl7KNmrqVy!~~3*BaqS~1RD{Zot;HiViQRCrvfBcE(qfsp(fY{Q8Pgs zQV0PG|I6{OWw%Gk1<3>jsSl3PJ) zN;U*ILoSxHt%ypD=5CK*R+<5&c*vmOq8;yC-b847M@JQA;dY|^pdJv#(+vb?ypU5a z39$cARF}e3W`f_8L-myoVuA}`{b0?kP9G1%F}S*7wP>;sWW*I#roX?qf{EERkV4mf z(lm@iK8`>x2ql!;VU5}iLIuedM0E;>zX8~^hS2R)&(GO?H|7S`o0Z))s7(^Hs(t(3 z8K-D_yeiARM{ zzp4LPJ7I-Hir|bv<$1gf5UP%3OQ0Y!AGYECCE!Hfg=!U)Y#SEQl+?>tot>S(S}CSV z!h{8W2k)^*P0G-t(mQDm2wNaWA0ti)7?4=eAHp8P^cEyQU#MlHPc-Ft3P zYT^gp)Ov-0LB*)xYF^z9YKb|4`MJ3wxN!=>hSI2dpAemV01hOVX}1MTm*5amQlt|M zO+X)GJ}5R^xo!V1I9&G<#XAJn@)!U()Nbu_2~&7JT&k1^(CXa0gyjhCT{bqb1{+=K zn?Gv_rO&ikago1)4mfMf{OMOTTKYL%sm-1?dz=Y(gD3z&Tv_?!2bdEO66u< zUDMLty5%ItiRo}D8WWIxfaf%fzLGrhQ@UYmYy|AKF}AadIIZC=RbxIqQPei(tz8OXrQH`=N zZL5(q6j3U`*j$IP;Ti+S|L$Me`4Qv85GSH{Map@B-l5lruL6MgxGcN?C{eH7rhq; z?fnCwpQfUi)AULmH!Ff^MErDXT#)qRCN&ca^34X4p)^fkX4V11Y_Ox|5>iM4_EF0s zdbyvMJ{4}inIf@dJAQl~EGSny69t1{YQ*#_JQ!HIPmIiM0-J6@YD6RBIO(palDB|$ zRaI9v%`Gg@1t3YDuJRf zuqRFJ5``*YuO6>pB2KekjgV1PH0{qEW^wg;_!iD`gW_1{nZP>`EKRa82|Za-Q6wJZ$a z2F!v0WG)-<*{_Hsy6xyyE@vhHz``q}Abor=k|rqVKT#0_U?d(>qW&|Mz>8UleK)Gd zJzC9SEQh~gs9_;L%6_~Gi6eM+(dr)`*!(3j+t49X)JMKhH--zajWLfSYPVAiELopm z7{89_e7lujfkEsm?clAbS$C=`dTh-~uICosyG`#WaxjJKw$s)ED$&{w`b z!sS>u(IbNHtOJ~t0Sq>fI{;yey$@Tga+b%kcYA_>Rd)js_5+}Ew*?&KW1su__b;bI zkb`)5&W4yvL$N(pVABj_n=PYOR&*2u%G%l%c5;CR5)w_YkNMZvpG8nl5P!TKw*Ee6+o{Hl%A?#i}E`jJsdS+O+pCBZiN0;5I}(-uYk?*7uJ-YPMHH? zB2V{(J1UAD)Fk9(v_pTMg6O0Nh#mLQojh>OA<`Kjpd0?e914!-U>*nWzMSImH3`a3 zKrEi%6e?-_EJf??1K2#mjm9~~^mM^OM6^+03!4lp9IigoEL$Ga#Wc}Ih+O-pZ_)!Xu{Bq?=?Mq)O_v>o1MfgC z?w|Ld!hGm&K3?zJ1Mn=UwC*BXbbiGIH>b%Ga<>|gtH5HJP4sZ74sM1ELRPKd8&rS! zy5`y###uO8M5pW_pRgP=~bXYLv(7m{RTRRfJQg~nM6Pbx!2iNzc?SG&f|G{md0i2 z%;ElK%kQ$nFu*O~!nBtoCFhY-SIF>hxh-iK?q@R}{8s;w;py_gsx4BGg#A|In-iW@ zEoFi!iH8b^C*gCIGw*954`A?j7vbS~y1ypV3f4vuadCld#zJf6P?4eqI#Kmz@{Ln{ z0|$r>OQG~4ywlo%)E1LPIE;X73ylGr+OIdMIo9A*O;`A0G4c^cBrG8TADjwDftjle zq3@M~uPY#qqjhM+eZ~fN_uK&*3LTNCli2Rcz=Jt+P0ctkx@nvb4Fx#OPMYGdu%C62(F~%JX`uY@b=>%A+-=EsYuq%?;ad!U*F56qVU1(}zqNI|3 zv`hcRFsNMeqfKWAYnUC1D)L5#EI zLqZe6I%m*7eMdGd6ZqB1_Vr?Qj<_pQUXjY z2tH(|29sz=M@l`h9xi{D3?4q7g^jw%J@^R(|1jzts-wJf8JR|Uc1yC1jW;x2Zt={OmXAN~mp?WllLiyba7Ai@FD zuTPMh`MWFLx;ho5KG;0&?h1R9Z6_4BF%1l3Pdpu z4&KUsL(t9Cwt@n1@1^35Y%AnY5M8%*cHVcwI5fQ{H$2_BM^*X0$heK9`#~X33dE@$ zF&scnUrx`+px$w>sxl{>FrwmssWlgS;)FM}xsNNB)b*lb<2tNyooZe1XA!-oPQ(P^ z6Ch@GTeg-cROZG=MA2Oqp`zpV&=@PMqs_DvC{S7pA;o%!=&n~#FwG{Z`NZpsp zam)r*Ft8qHK(@veqvJs7e)z|r-Y1aD6SEfs+t)NCuBD)ChX6Ca>dj(Uc=&e1^QzUE z73BgrPN*U}*dJKq?azjap&+Eo(~Nkks>(pFV}}O|P0*>FLl;V;URiIRKYwoDlk6j5 zV?%sT>o^W!5P;@FvV}_pOv^|a<>nB)AhRnDyq_)S8Tz-ux(T^<#i*&Wi$ zdKy!J5YWNgYZ6=uZ#xMmS5`&l!b_#{VUI=##R&7x?Qq!?)beLwwmdM_VHMo6+jxJS z}T1DNyhhf5CLE-sER*#7^A|DQTc(`#PR|0>e;VNQ$K aGlTXPMBxE}H{hmc92p4(@q)+t@BR-=v#b*U literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_7_light.png b/files/ib002/rb-trees/rules/red-root/br_7_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8e75618a385e2f5ff3f701be8e38baeea1884998 GIT binary patch literal 28524 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 Wf3>dIE{fyxDBF$94GXtApZY)E#2ruo literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/br_8.dot b/files/ib002/rb-trees/rules/red-root/br_8.dot new file mode 100644 index 0000000..d025321 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/br_8.dot @@ -0,0 +1,39 @@ +digraph RBTree { +"140399805910672" [label="9"] +"140399805910672" -> "140399804142928" +"140399804142928" [label="5"] +"140399804142928" -> "140399805700304" [color="red"] +"140399805700304" [color=red,label="2"] +L140399805700304 [label="",color=none] +140399805700304 -> L140399805700304 +R140399805700304 [label="",color=none] +140399805700304 -> R140399805700304 +R140399804142928 [label="",color=none] +140399804142928 -> R140399804142928 +"140399805910672" -> "140399805605392" [color="red"] +"140399805605392" [color=red,label="15"] +"140399805605392" -> "140399805603280" +"140399805603280" [label="12"] +L140399805603280 [label="",color=none] +140399805603280 -> L140399805603280 +"140399805603280" -> "140399805605456" [color="red"] +"140399805605456" [color=red,label="13"] +L140399805605456 [label="",color=none] +140399805605456 -> L140399805605456 +R140399805605456 [label="",color=none] +140399805605456 -> R140399805605456 +"140399805605392" -> "140399805700368" +"140399805700368" [label="18"] +"140399805700368" -> "140399804318928" [color="red"] +"140399804318928" [color=red,label="17"] +L140399804318928 [label="",color=none] +140399804318928 -> L140399804318928 +R140399804318928 [label="",color=none] +140399804318928 -> R140399804318928 +"140399805700368" -> "140399805605584" [color="red"] +"140399805605584" [color=red,label="19"] +L140399805605584 [label="",color=none] +140399805605584 -> L140399805605584 +R140399805605584 [label="",color=none] +140399805605584 -> R140399805605584 +} diff --git a/files/ib002/rb-trees/rules/red-root/br_8_dark.png b/files/ib002/rb-trees/rules/red-root/br_8_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f68c4c219c0d208fccef09b5b4397c375f803506 GIT binary patch literal 34025 zcmbTe1yq;o*DZ<-A|fbAgS2#asB}mPNOyxsi8LzR(hX7~0#YI!(%lUb($XMZcfJ1a zcgDTve&^gfu6ysn9tiLAyicq(=Uj9B0uF$44l%FL;^rhVpOBCo8X1XYfG!kQL{t;Gy8* z?kNS)gY@|0uBkl_Arg{u)2UHcp+kwi6w7a?m9ilOoM>d^$e+^ZU&mLj|NGzF)-PQ_ z{_tl=iEi&de;GBrf#DI%#Yirxo+B)YTu3r>~h8b3GQ95f^vF#)f6&w3PO-)oz z?(U5nH^e1yv9NOXm6ya8-lAb(ET#uBr5kq&_g6dHCvaMdD-BdMwX_%%sr4K=Pg!$I zgpnA})E2aNby2djM-ubbF60)}lHcn)-4zoR?eUhX8uxE2U`_1){%SJjn|8rx!`4tO zw;i#u4aeKJZ`ab#sjp9#g(W2s6_=E>cXwxe`h-$9BX4g0Sf}8jU*r2<)-;rq-Y)xp z6ze?5(a_L1tj0c?bTfTYFEP=w`FUf^ifeaoZ@lsieInN@lkS94B3`?u6&Y9*r59OW zyMo%xOD*3%zIOA@r#GVY9VSm{f-OU&0- zWOxgfYz)58zx-w}UR>7J)AMbJ72d>xH`*ENICXp5<|amEjDDlj}Rnw4FH3}dVIJ(&q zO6)bbYP2!&hC!?RBL*QC0Wk)T`nv1>A1P_++b^~H1K^n~t_MV_-?Xy!_u-XdbGm|t zj7>`7(?njx@z`Ef%?){}@5 zMGaPB__2zgc)$=Vb!0$)hQ!Xa>z0y^j$Cg_jq~6BRtuHzTSvQ{$y%Q0dMzPUe$zFs zMJC;+S}v=pA)!<--+Xx4KOet*p~Yoz@;cp2YzxMhXEE#BH!?QHCtkxuzkap){9w{y zZN#gqOE!j4#(3xpfAGKGe8nJVI@BoccQ5?wXraDH43m50O^iS6Mr{hJd1~eknbPxi z6>7C^yvD}HvMB-q-rm=RPF4(ScvVG3Km1}!Mxj@_MM*^!o>1xC(D3YJf33I3ur)YT zdG+dh6z1w}a=*L82Afl!ScHU~ajb?rE;Zs3_hEC`G)yS47qGFh)xMiu86O|NL&QT% z8*~6Og*l|@oMLw{%}!I(XS0m(azyy2W=FWpR}uF@Of;=#>aWZTXR%T54UKT znZq8xpe`|%;q${J<@)z{1Gva)vuo9x1pRyZt#$=naD$YG3x@FnnXX#rz+;pi;IaBxgGQ0A#u9~ zS5GZpm4M5t%^!<964v$O$B!1>*A&#$+Va%x%NJv?IIO3>Ote0PWt4`v^R&f^i`{PF zRaffe%^8o=SEZqX22I@@<^ypMAu{DtYqe~i+Pmyan@s+A_1$VbA}Z?9aKf@HIxYhl zEX7=-A0b;UEU}7W{6jRhWPaVJ8R8+ZD~hFIzlsbcP^h0LbUoBvuV1t)vR{@H4P*yyp>O^gPM;T-~Ua%=%Og&$<=JkHzN+Vr-j-G_x79UKH_7v$K4 z9gnuLq-A8x2S1nUpVl&KS4NeWtMR?5ocg!}SNd^&1@NZPCGB3 zFYL605Mq&#$eEeZ78S9Ii_UM)Q4sOiymQ=`!2i#*6=2%rtgNg_uA3D`Mpo=bXIq%2 z30xbB8l@Iu@N0~kKa4h~Dx3sJP#PK2Ss{DT@fr3)lz`jXyWQyb zT0yR707kuKK}`?b!HVq$bmzh%sba0>OCb?zGparBu^acxI{VdR5E8Dxw3V~zYG{b7sm1Bf zL)ua1>h21<9{%COGn7BW>`UK=b=j=O6p)x&s9%%Do1U?DzD=zSuc-G4dBs{?o%{Fi zTdMieq`G~eFIbl~GNOcK3np?V#1!K3c|ukX$;4WX>D}0vT4M}Z01R-0u>=c^9PUi( zhT~x68_VM2;ydj&{bCR8=0m*Xo!yqY)ZH$Qmv2&@q;kE|C~-X`5n+dHs7#Ga3@fa) zF;>^3Ju8-=?ELr9&SA0R1|Q@h+Q*L{2?{1pzOM7iPH~wiltqDvC&N_X9UOc|#QuN$ zdVC0>@Z8B-f#IK_y7|51ukL5b{BPL|niz+LHeZ|1)C%tZ8J>@n=fWq3e?F!D{i zRRr@q`QyiX8S{95B4n86CM<8U8MfSq^OiA>ybT=^ia3osydWp;&U!_Lgc`&_YBT9g zX@|3|Uh7uTZwoPtF1dL%*kx?x9=XzSU{DaR-2!SPjl9WBt-Fy4LCIFNVwVYfufQI2 zL_~z76uz{%dHlanM>omz>iJ{rrWj_=*dMPZ*(^t7LrH~uT0&Csh;t?cPF5%!HYTDU zi72&oceC?_BB8Vo38jZ&o&pUW(e%!%Sr04Db~{5tUo6T}-+z%UBq`l-uO%2?#^ppc zg914P_{a+^AD-e1U+4%O&5GbM#P#Z4PV}xws=bx*FU4qz+Z_Iymy&UvS&@Vj zs3L6%=?Fm=8X5$0*^xOfNSo$t3Z3_G&phh-`{|y~w}d!tl)f|{-DI<_SX3R!Q#W*= zL?Yu48DpKyP}J*J-OhGgLP-QWj&|l(M)DEN@wu?DZ^g_s|MiRzggQQ**EdA`?#}P^ z3UmL9;cv!}82+X!@ikN0>zTTH1Oy$oNb`)R%BzYdAvK?f^zde*71SKi^$H7z;n1rN zWcTW}b$r#VI)Fv_^*P=-oNomNW6(LHwk}KL-y-UKGm4S^>C?x&Jcg_9-}Uc!ys)xj zm~Ra;9LbA+7r?)X*9{lOcXW-DF9DwLX2RHF=!;bMWe+2{%4axLQ*UQPZ{Aty{poef zc`4phz4lCd%DSw-U#=grtaxyFe4;ghZ|5Q;M^jjeQI+3fqM6^MRpK9Fp}-!OuYKdk zXZa+Ym6gSyd4L;)%gE(69yn~V_%*lkV?@NW(Qhy9&yH-Dx?NL__hukC<0m{96>ZXk zIJEm>XUBHRrV--~KAX3Fk9os%&8b?c1&+D-RtZFKHzD0;xBuPzl?Z26QA?|9BtNzI&6;ZM z*{;mNdOIaQ|7l)Jkw$*fTOI7~MDAs{2x;!8oo2&daR5UF2fxbGsYw{leYw}o?MJ`3 z1~>_g9Hwe#lED31t~HbxkJk=@QNO6T_*Df3h5Aul&*yS-OcG%pGCDd!Vq(os0@hmJ z>;y=-0obWA;KC7uH~0k55FmE{7e$H$u2+HGCXH)$iqqMctFM?Shv$(X19#S|&H~OA z!E<9B(H^Z5lWw&#YYfAdVB`4~d9(iX8!%al$BzS!j-39C7RbA~5rv0`173zqQ8;cD z6%+G&-{tY+$7z|F-Tw1tzC30h$TVWM@yN{LvTlMN40-a z1%Skq&(9MFG9(Jq=uwENJWJAsx*Tba%nv}c< za?Fp$B|Fw?c=v;D7pb(AW|)Nhiy|5Ypv z<{n(ltet6nV{AOkmI8=x&xv#n!ap{8^8!D>G?^T&BL$LJ- zhqpZYihxWAGllRD7Q}B=Gb7dNQXk|eLpD4XLr!5(rNinoK!0((_9mra$%aLRWC9=f zgMw_#9CbuR7rrCYdH6ie29wm|=+Ww`CIILDJE0x zkwJ=wON>7LZnw#jgeY5Oxj$-m4M23~O}Otg zr2{d#9|1bP4?(@{@yWqPW9r3U8k3%+R}K&4;<~HxuznI#HH)hBx0k?bmqsHm=G|;C zm*ToP_v`J9;pjJQ@zyJ|&Hj>S^^*U_JM%_yN?bF=`Ve}le*G2L2CN^F;t4W0M8sfhR-+E#e7_g$Q> z({!1LTW(bQ`=cVqU`9#`|JnITKv(=8b4JD)d0BfCd$^o$bWEQ@2|`d|w5yLEJqpHW zPvD+bt1p}Juyjb$EoEUyGBiPdi}Ubbc5AYMA8Xj2Xhbfg@6Zn#2=wof65CBS;RvKn&}Iwr5zoA^xO8d4Q$)o)nEu7T!%>w*}|jVOy!qN zKU0hIdZ^>{bA{Hl>sD8QgWW6j$Cu0bEdL&*k36cdtxeLp?)-K2(QlcB#YIBm<+si> z3`y>)g!6$M{LJL!Z(;!>5_194jq5hiaoeGSH?$U-HP4Rp_{OH8`tMl%p@w9|2f#FN z(z+_zc`qd!Ng6z!ZPF5WRj;@x>LoC}n!&XQ&@NdXI2Pc2g#%*v=K6=-=~w3O~HPS#BBlk zhUUg2D^#?_T5{y-g;$C|`n-$JZB5h~Y8;u6VBru&w^Pm@DC|0=rJ`f~4+dGJ!B7%O zZ>OE_5I8W(3+_L_dFs+O;8>N6DMCE;QrW+Kg$2&a@DpQzR2*h~@6eg8>^tTUr}D^7Otr)%Pz>FEneHQ5N?>Di_|PiLroz^WsV64t!(4#tjdvv5Gc z%F&XNT2=zu!@Hc+2mrkLbkkK-VsswTu0eBPw0LVSE-bZyb`LA{L)^Y*ZMnU`+dq80 zZQgS~p-7Dt!9DM%fe`wX9iTZi#CYv0$Nt=xY-Q6fgxv|+_0cbN+5x5WEGO9qhrVRQ zJ{JnrV3^WT>cR?&UhqDdBDsI7zT)XcA{s2cCM^92StTXxTX%`b?x7X}l65)UZ2Y2_ zAtfm}n-L~tbg-`eRPzt>Ub$3vr@pNYldk5gzajDqOJh8a6IKg}-47DG;WUwBDno^Lr$yB`W( z!&b#0-ImRaBrm}yEo?R6-&iL84swmZqzyv&$d{7_ua}IUMaCa*X*=|bRUa=I0L;hZ zTBimSiXo}?hHc&Pq?M|#LG!7F&fWd9ix)!6?}nu#V4pz%@Pm7F4>XjkJjN!qkRbtq z$Mp(z>aFx8(lRn~l4%cj7LS)RF}=T@8pge67jUkgCTvz}_iZ%yT9&9Nr5WgF*TXY2 zDedg{fEOIk6-m7{JfQoje0#e)WrX4Nj#z9 zJg-?%F(tEK3=R&_iS;jtjFK#U@k`{KkZc|?F@+u-@g()oGT^e$&0(qK<7zQIBnk7| z-L<=o9@N&}p7!a}Y}93~?R<;F)^rFubM;3FQupBHRL`HE3O+BRqQ%gCU!uHJhRtTclx;g5HQ0L?%4g#LNUA zUtc@mbp6GPsbHhce6ayDn3fS)sBSts$zA7w{bQcJTukf8fDByp z(>yM=S6poQs*YppZpI~w+@6?l-NjirErvvA-im(xIBxa%)#ML{4Hr&ge#eF1LCg)- zWiJ#Io|u?W$H)Kw)-O3MNABbfOG`#iiN5BA00lVhf(5r#z{Ulo0{6yjamyd~XjQvHtNUOfrwJ#18k-mUD~8Ho?Q z5+bQ#Cex9^_q1mB4bZQ*aVL%wU^jgJs4(Kq$Fs}t@dUK4<76e3C9$uPRgST2di5wE zuu2&ikl(^2F@lL$jTiecY7WrX7-eVP`MK)wd+&IqFYOwWccHr)`Bue#g`AY$xgDL(g*qHGbhbIcIA*ImeLv?vdrdx< z2unn*OC@&Xrxzh+Ku4$1Y=%oqhvZS?+nAW9eV;7xxvXdzHNNW|ZvM*CC`=m<(lNzDb)^A(x) zk^pyZ?1;|&V33`-{p8)xEUI9}$1U(+uA!d|+csQ79|x?^udk?Vl4pI7qMuq^FB*>{ zUNy?1kX>676J4-^pp%4AGTzmf_85r$mE7SLfG-U}%(V_3a_pQ^iCp>k!X5&GE)J$3 z>dMBmMT3Yy2qG%$H4zz^I5lN|PLu*s(QN}!qmXIy&(D4QcErT~(!MSFWo;_0%rUv) zm|+;;FS!9C->yWd`5+=>%7IMiw3-zg&wm(Cp#9tP8*nFqzkM@^kb(Y?$>8K~>ti}P zHog&j%NKKVJ0I?U|N3P%Ya4Y*oX_%~Zj3`hLdWo_X0p3s8}&1P2JKfdz%iNP5WJ3S zfVXFe|N7~E_?(i0!b>Xh^T+6DV~0H9CL=ahIB=ikl0Qst=&z3z0r2iVayZGnr4lPJp&X0Y4`o&KW4z zVv1qbl~Y&82Q7pg5LB4ZNxAs>r-8m@Lvs%%3^yU)rk0WhEE7bgW{X!N!4;1m?^`8<$EYY#i$B=6(a~2&3xt7mvhyirA;S1}Ll7Wp{|fs{ zF#vl&4x88Z35Y`|3u1?=iEekBoHWzeF`yn=VxlmMirTeV7;o;l8Jv5xG&LEV4MQ4E zkOhcQ2e|tE&=3_sSKIS_ulC+vZa$^xiK@4xtE;P1u3Lg2A9|Nsj^ZcK{9LBs6pj@L z@>!e5Zo_OKzch5s=Nb@sR$lhyBef2*CGlNEc#-Tb1ubOZB@fYE(4A1IZ(@=t@?o4l!p67yk6Wlg-uh4G(GGCJWsA zs&mJW@l8n^6Ka@VDMc_Z&93dqIRdo92_!XN1Sa`HUO|u)sMJ%=%fE)XtYu~I=(_F9 z40`01m&Xa8=ctq#AL}S9KUf>}Y#PYQ5jYt8Zh=3Di@L4Y!}?=2S=b=eZ@9ywLG=0F=$DBA6+39EtHj${Dk$ zI1bET6GFs)42VA!3UP?Iy0={S6CqlXzC%OC9M*0<@)v9dsu%wk{r%;!nu(r~6zg6i z#nF$z(e~x#<-Mgu8JLj?F0;;AV(ROmwPG@XB!QCnIVvg@p%@@mOn@eZ2Z5w>SPc1t zc!^J()dJN9z4nN#I|Ll4mN<1-B_&l!;zFcB4UHfaysO$IXaybNc-9Nkwn|V%Xqr?- zpRI_JA?c~Hv6^MyQyp@00|8{(a5+fv@$uJxRrRjWa&`=4$pi!iWx>tQbx86sHinq7 zUOLic%q*@>Kq8kkBS8~3xk3xK%nQQmne6F7Y>~(LO%Zl2TQM3oHX-B73wNurZC2#| zl9M;|$wFymuKxYC@0O$Aq+89mY)fi=H*>8Q*6hX%76DiCmjT!HKMRAS8U|Zwvstkm z5nj~YM}$GZLB`68mDt_lyqw&+(x2h9oLm+V%<-eo6XXofi@ns`^<%>`kDh&(_Ci19 zaXiz;mC;3ZS5(h~p{d0uFu`-kGai|?^Wt%`)U_8Aaa3IIpS=72o#W(?^aD+yNS|{qzTws9x}V>e0m_Jk#mHM(EH7Rnno)}?t;L%($2qSig=p@f-h24a)GTyh zfDP2Cuj|LeNmDt^J~m;O)B(MU7I8Y!%qbd<1Dy4OymQ&r1&|Wan#^QPb1sPPEF)${IEKV?i38iwbk! zX@1z1c<6>a?mzW}6j&yRJb)cXaBz&qzj~w|yKdt53LXYuwi}}3c3mz%svY?+FTh-C zLFFF{&{cn#4kT_aix+BZ+e8>OHzjc1DleunTKqlAvv{`rWuuixO@|7XLo(B&f z&O25?O?@Ht(k&2JnWCzyi6j$BWP1};tkyGeaq;MoIo9~20h9Rw0!J35=T6$P^;9I7 z_>Qj8VNiN4^~+JrpmyPoZVN-o1fb=F-X&&gUEaed&Tc`lTxSepmS!0Vpl8)_9?Z+2=`qR zz#=Ld3s+*ieO}BgXV^P;PbjvTamPd#|FV7=4p}G_!2={df;lDhN2GV%Ji`YQM4J`uO~-dsyJXsTp+IZO>jASd^}Gs2G58 z8{jCz`K91|qh1<(Xk_$2duq|a*3ywgj!CeCQ&SQVtHV=)M)HRIztlofEb!R{DZNY6 z?gES<%M2xra0qB^EH%#RvJszS9S&{$4w~5s5lj0rY0l-&NiA8Vn29mQ!bYwW}@r0C3Z)#BV!1Z0M9t4oLlOW^n5<&qUf^3HK z-qMukrRZHE9)(5Me8Ogv5>{AH>+(4l#7OWDXa%4Yat%GTFNi%2Lg&>hy}1!Vs7Y48 z{$YMfLA9lPMNO6GyBrV)570;3;{rZm@?{_{f4KZneI#cy}iBd1lcYUyeqj`Olz4g zqu%OKr%A?=uDk#KDZZ{&Q{Mg7D{XEk=HHTpi0vg&Q$0@bg;INGy&>1htg`{7&g632 zx}Q@-z+qMoS)k>cF$H<@zJ#oX|a8c-jsZ4ykA5Fg$nD ziCI|sT|6mS_4evD@la&93!$o`ny(?IF>$&+RZ*f5qX6X`o8v`dDLJ{%0B=Rb#CD*7 zuU4pcWvi~vH!v`eu2(P0sVSGa{!x1;G*cb3IG_*oEqA2$FS&7B`w_Vhf1oy&kAsO-B} z19M#bX!(PMk}2iB2|ECNxK&iVyz$`t87#M@fY>%(x&H!;CLKtTJw-6y$ka4-cuX}n zdap+&9WK3=T|3qH*Pi%bL29t#iVQCbf%;pC%f3bJ@sdrJTYjkzzS*)ZGQY{i^rBuF z2!g7vsG1v&wcjVl4NJpc@m3A0 z$Bh0UkUXXM88?dh)0#kl5Y(pCaD>Izj1 z_LjO=$BM22tzL#w6Kojjlc!Iw=z5-W^72*?37#-IJ0Cy5!I|GFx2@>dahig?&?`~{ z!3xntd@%^INl7KZq+&Ml{V`V}M!{$&EDD%^(1B@XW@kqxCcaFLO&7P+QG5yl$bmI? ztn(D5$01<^XmJJks&-wtp&E<}@r)1RyPRZaPd2x(-lN1kdFTJ+9f&2qLZmw$q#m-JBAKV)dk-Lbt6sjV9fKvHpt>f?NVBz>WFc3qK8AsHGv;FHnJkLCl$Vy>tSPaesH#${tLx6~IDOsD#bE095N4#KGuzB3YhR<9 zUe369OC`wmPm+rH_%8pArL^!7Nehw!$U^W8fKe^n0wi|3o0ZX3PRC9p=67$sZEgC^$@j4>42*UCb(c>* z%Q}CYYkW=4_zDMfOHMxEX3E##Ak6fQsr?m5#l1Xrc2EM%GNo}MF?zs+B+HtT9! zow1jR`0OM!0s>PjW^nC&5ON|W{1U&HsMpk1jpuMQ=;vz(vhbO0sF>rkQTp^}wDx7o zvq46m>!9Z+{P#ls@IuThx~eTn^T*W>u-Y?S`pvjs=R61Fp48~KUx>F7h>Z~hRDUoU z{hJ#b0`u@7VkO-_uD-Xr(Er5+IQX#$2=L|S2mE-fzj2vr{`R^Z&GA91HAHqOM-)Ns z?0Mh4ThT+=nFrcAOryZE(laqpy0!v^3(Ju_V;BPQbL8mO)%F(wl*2}#T-yd!vn(^u z&lf$kIL>HvVq#(dM6N;p!$|VdY1l@Io&b>R-@=viGU9Y_Jw(@)C(lVCUF^&8Z1!gMNc|07yOWz_@19 zjFbHDm9n8~@y7Q?oHKc9U3o`2FIOmM8r?2=9VJw@tj0CLFq8~lt74}eau8a@YFzlR z)I~F?6=8lqaZy>eoJeZ4nXE%Y4BaKafCtIK2OP!Xq1DNX8RCOkozckAf#TRJ$0_!u_~t$IS$jl`ldvUj-DI^F!hKLj6Wy>INePm;PX6L^R5rLFFYXGoKq*s}oXN zn{i02gF{Rc0mo5>f7(vHJoC%__NSx4Cn!$Ho#1u#4j(wV+2ATjCWAiv^s&Ib+5Iyu z4P__12eI{zIL_hHi*^-pT(9^>b@=_MpZDnhsw|yyS!0arKKTLHH2H7#x9h~&Grhm7 zi7tBA7JbXFJFZd6gwyS85sfo*9D`U(FklkNIQ4! z{P&M5poVr%hfO|g0hIOc+Gr|x=Mq>A#Y-%PZ!=YIKSR#Ybx!z|+mO9vcJ0s(Z5>v~kh)Vi9M!@3TrrT3m;{-;<&wb01tiJx}`dxM9 z1+id9ux|rN5Jv(WIF(w!OSQP$$;^!`T_2nUjr{Ol38)C_$Z9=|t!E8t1^~aC4A32x z8YrX%8+!?uLs>x>mJ=2A?(c_Up)Xtt4M1N?_V%=_@#S1X?}=c+2_EzFCu+W~34!wy znKYFcCVYWe;LSq#?HlE8%3VK}ZJWTKBCnhyATQmWcgZyR)E*_`j#n?FR zEnWiy1LSlo<;D|mT41yAdADuZzAyU#RmbBN17kHUqUO)Dw7UTT0o5me=!KoTR)aIa zKeRp`c^uhV2jAMPb=7*)g6>jzF`TPe_Dwcb2m?I3ph&h98^6XUmJ-e6k{;&2k)>*` zqWCktn&?2|)t#`QY!KN&MsDxvX)$2EkBi#^e&OtMqM+u6nG3Fn@81VKwJvzHFaPZS zyhS>YuZf9-mqB^qX0XsULW%J=kQ^k>Z$Z+;Kwcq@cN zFc7xcey2HBK~d4RqZKp`x@o8RH(;IpAmUfcN~Ui!xX&#Py4z0EeRhy$W}$#=2!#Lo z)sqoQa=V*KUWV=;uGgRolHe{cf>>Z`_7T_l-P>t(IWT}~S86#=gdJ{Oz6A5&XL5Bh zhx3r|l-g*Wnh59lkQ=gz2Y8(^Sp(nAUmyo;2stbiO(*998aBVba~lC7%yQ;68WSn! zqz>IBW86gn|1o2#d(2bt#|SPOf+YU;&u}DEVMpH?z47{1XWP-)84s5WAynWT8Of6} z{JWy4_FX0#8W)t}V+rO$f0H9@*5xOfht@EE`LC|t&czIcTV*XxzwiDgzpPp8j2(mm zRYPN==dKf2*U-?>4VwcG??|h1ubdECF83sB**_NsuMqWp>Z#7JD)eSxI7U(u5-C}= z@@9Is2e4K7iL`W8JA`ZL|GtclEg=(*eUo;#1%}AKCPp$_bEv9UHn}=oGbvB9HFH^D zHFbnmQQ>@(DwhyeXL;Yn`Cxn*Jc+lOo13c-r>npfkB0C@4p6csjCJn3b+yG>q`p6& zZitUV+*w$xq|?zmzc}xl=g3pe50In(QEoqw{qaKmYo6z8moYBjdb8Odep%vnYxrYUyex>a401RWsMe0&7&YTZw-evCP&4KMn0NBc6NaqF}+U=$0Ke$N`JPQ=jBri zuDdsDLZ3i01e>2du(8r0Y0iQDf{Onq!0|Z3=r}|~jc?`Y_hI04XhOM3g@cttf}73$ zM?XVE@|T0WEf&D%a(3#Nz`^Q@H`(2C=`+165eDEK{4p+aN79@qwYL*I9VkbGsT#ZW z*Dz=IN1DYXTKZtbj*bpc0&eg-uFrl>^koHuJ&}-GTtV$gAXo==-1m)jJl%z$8XjA< zRT~7NGH`x<2P-hN7Ru1n2R<@5^WY*qjT!HuO$qToYj2f(QfBusBQOXNz`L!N$0cdZ z)9xBJ5Hwkr?af?TQwRtod0w6pgW2b`LnfctXq_WeMWGZK|477o!3$HU$%@PV=Z%Mb zHLjR|LoP24C&xCpzEvz00Ef?*5A;|5p`6=~mbp}jV*8KJ$a$imUuihMl6T!EUe-yL zy5l+Z?dK+T47j(uJl(H~Eer(U`=%dh6V_o*&7Sdprkqu|Tz3s+PMgLyU0R_U`t z0TN6oVw!Bv5*{7a&9L&x^_8eGG&MH^qwyQW_h~j*3SxFdFa|V0pdf7o&d$6(K4J?C z3*hL~b1=FBq`Ca^;uc~>wO{I@rl$6dib?~E<<;%7x^sk_?kq&I?kyjn{R=yN1Da34>XV?N{BdCqdu?yW^}xd>QI@Dw4T|>R z<|X0grNxaV%k+sMx~FgCzr&S}Fj(TrfSiMhe!aZtyLVmmgTeac`9_6X^J~r9J_k`I z$GeM&w*sm#hs-aw%{p@H@J-gB?PQ?31pOYT3qQ9ofBi%|SCpP$?G{@POtA*vnpUE;Yn3t}>_< zZs)ZeQyliLBCpnwZp`)O9lqJxPG9Mim_%7(5WT?IwJW!~mbRqJL)=yAd2!LfbW*Vt zS+eQzX~?Pt9jq_w?@=DTN7+B~_;cz`dF00N_tHCp1gA_iO+xZ$m%wl z@$)ZU6vC%B4*~E#&Y}YG%1FWdF@>}YD&}>kUaXcpNt)CA6Z}0_P#Ay-vcBD92Mb#% zn9YICWPza+h&lxrTCu<$_Tj^aEoo(35TYq)X#CdKtq|7^Ep7eQA+!h`P0on#?sgVH z=!6EAG@Tlkp@LM&XV0#Jz?2DK+6)%)p_a`RAiHO0ZisFH><(JX7@?fWdV)QK#%?O~ zJeKLD-Tv?|S_TGz#d#!vLwdwxnbr95dd8!r*Olw=e{`#*ol1y)mHyh{cJIG)L{L$B zGd@boj#@7w59SXM~((J^^S_vI6W|^=ndI*E(vOr99 z*8&`sJqF`)EF~KGF7u0||0<<;EbriTB0yIHFZcL&b9T)iR{EVWf7zL&OkK|NRq3I{ zBvZui06N>=hZ6JO!@~LrU(_n>a5`gZ#2g(D#y!;S2q4wAH~65JZ~O?abHaT$Ze{ZG z12-aJ0E6JM{XIH!PgDJ{H-6xpf*h!gTOk_ebv$L&j=}+K4Q1uRNfX0pis0e2y9Z-d z!wJo}sD14l)D=@=#kqF?je@fOS%-N>EwB0>R(s;yT)A9HWJnt+G|u#VdOC`k6O1;#AGxudSm?%;#x(!OkSB7%#gR?_QZZib><9=1X0cU-Se9Zf{aWwFU0QTiD zQ%D8wPz2plpsuV>loF=)9!Ba4-js^7%ju$FK?@=I+=hF)WGt;F@R0M4}^1nz=AOFT( z)jWF0J9}MAa{bJ7Id2?1AYTQM$qZZO3`pIxS8yz zMGP8@Gyuo`w8r)iGaxFWxCxQIfAZwN1`q$Ad?L9Cqm3_d|0kcwpE0R|-BT#3iicDp zjfaxr;y1y{_=ujqb4AS)>W&8W@2-GAc%y8x5d?{2sETG7-r$7l+WFy3>lekhA5&9% zp}%bQU~;SepCtWu5U#+Nu2CVlmc1ms*^#Z?cT69EdD6?E+c|iqx9fiEs?w%`xUyi% z>3B{dIf|m9BJdk_hd&Oyh!3UOx%XCc!dzTj9O)0$B(STbxLT+5hkuCJB*j8|mh&Gx z@S-i=d}XhQLpb)P5UGg4y!sp}Vh6E}mu0|2&*-u;vD3eT<{?b#!}sC$Eu0)8L?&My z;5P63BqZW{#~87nN_^!2u>k<-3suz?kc<%Q4RqmdV7mGXy98p3>2q-;E=$(n7QbsYy&d$zA3n?`6hJ-3-Aqpe3LVw`Z!@T98RvYz@1=uGX6Hx1yAd`Vd<3duBh~9 z;D)vvv*6^5P%eRj^R0~u?GA7X0JQ?JQ94oQDGakmFcA3Vc-@W)`@=1W|MS>)+HVXK z%3}T~Zt^*kDc9iL)%;@;u6>W>r-cNbz1+h5&_pj^*8k3=V(yTnA$AzHNg7`H%(&JU z3~K^fYW4j3`gvblIOp~C^{1TXLm0GAs3(88w*WRDE4LMdreA6{w)6?RvoZJm^rBl= zr_}SVDgL<)4uwWc;U@mA>c+2^z0>Zk+$vk1M4rY!q#nLn)ytr@5ep~P`RtWXUTlm@ z8*Plw_5f!ncXX}!z5k~>H;kfxC_GW{W-Cbl@`-Fk<;v3^&kiLMO)f8- z3y@-xSYW$M&sMc()6BT_p6u)J%R$5gQQ5dXLJXR+<05Iopj&S(h$MUAu=&2cKtR8l zQCD2Qj-VWwqNXQGus8*U#OGq;PU^cPQ@!7`bwPlc9Lm=mwLE@uLLtiX(S1q9;!9Rk zwsc?xP1xAcKsfI1=ALPSW-IrE<)rV0EW6(|A{cSS zLYdtpa)*(e7{j3cXZYzIGGXD=uC7H&8cdJ@=ZnK$oSc#~GKN%F3q(Xl*0>}+`P6a& z^OD)DE}`=A@%g)z+SJWG3IZW+p7yEGO|SPr=3F?l|4R7RQ)lz2tXON_7}jDMXl!uv zSU=u-sO2!(O8R&ooQRcL z3`@$(AD$GExI0W8d%gyXs4;2w-$S3qIlbdu9K^K+edsvZgR8^y$LyR3%S(y9Oj+vX zHdvEoo>!B8*_sSwwu92+lW1Kzp39ph{OmdxFMGi=?T*gzR~&Yd1u5tvU_l{z2TD*g zTOKNUM)72GvSXqFzW3pq)d8PhRd4NAKAteI&v$MGL2+22!fu@^*1~`0OOdc?Ptuk0 zmB75^3x1mA;8Au-Pj6H$wys07P1PXESTh~}TKPL?sFMA8U%gP;IbGcw=+qdJK#P<|AHU4)9(q08OX zuzT;Ne4V2o4_P_f?(pp9O2pW@vVn`0HXtfKkRrM8t6fz9TXG4C|VGRq#oz?9V@s zV@W}~-=b@ysWI_-@;cBSUvTK;E}j1VF=@T%M|$9T&T}E1e;yBQLCO5Wk`Nu#%Qnx0 zYI~qZtLSL<&&UAjqpOigzm@T;#2Y;^ZeB1w6tDEZX=YVcGHIsF7q|^I#2%0ebT2O6 zjtgxaLKqDp-rF>H}7Fhvf0 zImhtV;g9n7zjif67`Vj7_6rozF=aJ=k+e??iFW4w9wfi;?&_8X>P#HZjx8wrVtY%B zwiOHfvq@0nFR@#^4Rs*M)3>5RGc*QLWg_8`g~f1*ZZmTGg|FDzzV)eeG*Zy0+hsez z4`FM&RleBy@*|Kb2zU7o4^+T!$PAP+^6C2ROyO8+i1s$^ECtV6_gx%)y;-`HzB)V@ z{_@+dzg+>wxJX8Q}iVBgLVDOfTD7SbTpmApT8)ptN8HBf~&pFnMlyXha_ep z`XJv5=X-JcxHC`HU)qROAb!lTA9}0eR2JI3Jc%_v3|@ zBywpY^>wmf{6gNLCi`YF@9W265d@PPe;JtPquXfL35=OPQ@I&}+GsUh?X#S6dJCjZ z=~hK$C{C@8m)wGuGCId9?NuI+rzd-a$fc0?b;fb6RN_Emde|FveM?NJL4d^M!P1_& z8Lj1FhtJbRs2?B>V$+oPJckF(-abC8hAj?4=YL;-dySXc&!@NmUmdg5nV z8ab++k84ueo12Na@IGvMrE2J@>I;=>Geyv~Dt-=674(vVPj-P%NHN%5Xh*cFYqzTF zUY94Bm1>xDyF^ZuT1G~3yelrY%c3~OSq+2iMYdCOXOHe}y&hS|{9Jp4fg@oE(dez- zH?mGU5w3-P^D zWb5|o&gRBKQ!@x~q@LBux*o?qfH?ZUX=@5WRR@e9(V>prd~aOdQOV%WJMiJL=#hby zqI4kqYUp1HRIE?6hnJ68P>mBBS01E3`O?}rk~A1h&-imC+qHkxfmb~WTFh=7=ds5- zlQF&bx>D&asYMze-?=)p`t+HI2z=fTI~?j}GY&f9HRc@klABObUf2NRhV?H$f$e%P zA^|+Ds&7XcPY$wmbsf7>kS&)4v?i?bX*gW}ZsX@+w$I zB_EoUI7x`1JdW#l&@*nbF>zQlZY3>IB{}?61$u0|K0Un#-R{-#y>2y>Ty<~EjSu~8f*S!uEyb+hQ;PHOK9K7;G(cWG9aSej$= zR|H8kCg~*U=rdmVL|;t~t(e0CfZIwZQe7@*G5W1LQ%b(SX#N~j(unBNh`)dDG{+LJ z?7L``S&Kn8BIFQu!|)*#ydwkH#r$v6PIu;q9C&#%xeKR_$oYqw z-ilK&ks6^LI+>a0e##h@_Pb55XwA+4?3ol4UJSpW`Bm5ZudTaX<}VtVzRq+#+#JeN z_kt8x;&JX$T*AEzL4MB8`I4Uu6m9qG-4|Iyu>hhw?6ZR461g;XL#rj&UuB2nfLNs)*|8dOL!-DSuanJJPG z5-Nm{%tJC}3K_$V%*yQBuby{3-~0T&?e}im_wTp1^+(%U-S>6f*L9x9c^vz(@B5Lx za=+f77BwL=)AnFK#S9T$yUp~(o?$yU@-4Y!`X}SS;9x@`X(tl$s}B!=$(E`&o^6mk zZmsjW`Tdu@#e#8xYfO*FTK64^Yr5FOwR;q`5}H!*fo+$2PEg7?slXxgYC{w(yc#ksVO+G60$E^RVvGw14-b;Lg~}++@5R0 zgTwUGatf`{K>CX1Ig_6WFBPa+=kMw6;`?gSx-8*A`E4@5+VjzHe9GUKKx|X`nf3 zYvD>v-9UBCV}8bt=|m1xzzHV3rw;L&U9sA6xcWnq!n`cw;L2(E zk)40X5!{vcN7$@V7@fHge=her6?|-zSDfk9Nu{adP8{X|o*Gh#jQR$y{2%FxNjQHj z;J#4{fyexO|1YSnbVC^=>54DJuPGR^bu&`i`uh&ed8x1p3G|jkiFJ-VsdJ+24KR!N z!%5Kh1#WHy3=SKy2J2=OI$h#J#yGFq=>j|1!XI4RFlucRVW{KRz{yAUnB>9Z@`hy- zq`fjQpJO~~7ey_~k%SwZeD1b+Ls#EUd+FCZtHN~N+tf{x-irm(x}11)U#>p6X#@Xx z;TY6}Q^Rqhm0mp@D-6X;ouA*oz5Shs%i192^38EZqeHx0r)nFiVjWP68ior-M@oze zh>D8dpRQ8P>9R`T+}bPFNMd&yb=TBdtG?ss=lyftb*X1{QG=|{oGJ||C6Mctp`a*- z&sT&TX&unZa!w1CleB@WRIyQa4~X5Q-?`9ol}lDAJa^N=$uBfb3Q0l8l$r}kB=cG) zw|hS#D}04kFOZKY%!kYxQ~vyU?XI7fH#heOQBrnCTbRvL%@*r~%Uju9l#v879l1>* zR4C&?1nugO@DP7acP+f%)8WWtzL)d7KlH7%)75Fu&mpAFhgj4pr}&V`nwNU@=Fc|n zdZpobaWf;GEuMDL8E?HW!J#k7XQiG?Yi{YV)(qA)myfd*W_PEaxh86D#tXL~@jAIR zE%Ta)WLsu-C$&W(_eE#Aoy7%H-titDVhKr4GM5cs=b3pPVh`ae$yf7Zj;zLkGX-m) zy5$9`e{OA(P4DreLxI|}Ug|G=n#xGEQRZfrTcs1+w$jDVs%@ba1~5c8N_f-9>=(1i zZM@??d5By{yK0%;P+2gwl{z~_6g{^k-Z!WG{Ci*gcwsBf?&=d2dG3i)TrWT(f&l;` zWj|i;3*z;zNl7r7E1zr>5nRXe_RtV@u)2>(rQUmmc|YozZ4Fn&QM%8>$5R7juc)jx zNVer-cT!puI(e!6mTo)8a z;Rr>qk&i`{G6pZ0E+Xo)>m=p(3Z9_E=68~RsD*Yhn1p4_D%gio&m4QzM2?XBCE+kT zT`@86nEYmJ0wI3_XlA4mR9RKu%}Tm4i?myiN3qqpn%4ZrcUGWPm9;G|M^f~ zlxb=h51*o#u%!Q5Mn{{=AVW|!zgor4;t2!|MRW>1sJauh<2uN#LWFVR!T)-e?1De# zVq-HklZvrFjd*#@AkhR8hNa(|jj#~}#s~ClDnKgjhhu-hi&6_&|GXcz%#<=RurnNS z!;B1C+Y@~SEHuSRb$CyB(~=%Kb=%8>sKUtjC5Qa#*>F=Lo80oG+rMx1nzJQ!@2B~V zgC3qUr&L8!tZj0t$fu>lXk8Q^EsXNR2*l6t3Y@nZ<0?)dP#^#I6)oDunT!Jb`X1(N zRG54#GDJ={faGtE!>ll`x??E-=+WO12qm6Zt3pl+N{RB-S-vJx6NT zADcSi-1rDuDRrUJD^VqM0zj*=VVcq#&7PD=;T9^+hLP%ykzG3&6X>pw(R zYoLA~@?K&{T;Qf8o@%Tb?lkUN^XtISEat=}#dIU*BhHJN|2&)G3o=BYG~m|leemP+ zbUrf?C=C%P@2q1SOqWOAS5FH~Dc&9V)(eWv8C~6z0Fa$1$?o&oxPJ8VJ9 zGD|?f>=Wl!R1bGM(F5isAU_}mItEO8!{annR4(-v-xJC~(00XNghtHc0`=;Ae}Es$ z(c17SceRZ-)-DR}863KJ`$Bw$#@TS+6^D{d*=tvYg(aoS@fWI9NlqyjJwn5Mwuv~% z1JbQ6AX&hinq`$_qGL@Q&SY75RjIh>9MKydQ zYg#wqs!Ibo#Q%VMT~*|QTrbcaZdqqW!Y)Kg$^(8;37i-20d*HeZx85`U&)=Rv-8N} zzcwcLLKKo`)*7^*e%A^@1ra)9XnnPo^v6Fc9+EMn~}v?@ZM z=7lo9`>v_Mp0?U&cjVZQ0#Ei6k3dZ$^Nbvygd5vT^SL~7OX{fN9}jo;+uhE8-ovPL z8yEc#t`)gai)jCJKX%)UFk@R|uZj|^tCk3}n`t@X9b_@f15+38A31jNCF z@K-MuVzQMXI;sug_FWi`3t$vAJNRLL&ebwN8o6j?ZKcYaR7^xW9xg#GsY}OW&4`qy zQ2)B5O?tCh+r;npw%Cy}7Exj?L-qj<^OD09k@L z1)vW)Es}SD9w9h$)I%<4)p&SAFe7LE>b<4&_cFp}EL9HX8c4PB2x=|H$s{V3jCrYi zFXKVwGA(blgE;T1%U+#)5ai+b*^90u8LHmSoUNVCf4XX-k3Pc&X@m!FOS*C0{8YfE zulqL;hH3CCgeBZX{k-2}L2#qH{XNsNBwjUmwCwoHR#AZ5Um=sKw@l&iS^ zl?G%dyo!8Lnn}^K%Ci2$bF*p8T7{xiYX=2iI(vjx@Rm(xH6-DvPD^SBE`=WX|dIcF`fiQUfGHS{CQuWr;x5DNqpViiYLX#;=8cC^vhR zn(8`iETqy@)tAnECjC*p3(d=_k&&PFsI?^hn3rn}(8V%CV7cPAayksnD94^Rnsv&jz)F zVu`s!qIo+kA4Ga=lF`-~>v*EDtSDblGuWwL1?{d;X7dj?PSlfaPem{C!qE_cOg%QF z`t5msICz9YqXu(BbF?tzuZWuvPinW=kX(f*aIK+zqBzksi|Mslq?b&>d(FG zKC4`SDsYT?Yj4?0j>Z{leG5^sWF2vjwHY_Pm}$}R_h)a1r@G22aqj!cvOCuLV`XL1 zQ0R`>5CF+%h#&69=vYO?h4pX`90FlvdSE+@wPz?l45_}88x{ZR6~UjlSyFol=&wKCPrOz_Jo>Z)o6dV z?VI}y1^4V3cz1+9ifwLld05z!o1)tL*$nrL%sJOTj|}kkW|z88D`s93pTArz`%r>u z`>*d=+!7L@s43sWpF=Z>@{=#u&5qw}@WFYzt`VqAv@u+-w?I0m z%X`&xfsXUh<&1Xli^&TevktNdZQK%bbR*3v6+|~et-1uTtYT4oH7dC`#)S_N5+{E+ zUPnTk#z|f)vps$#-1kVfuS)h77S>N9dy%;nX&3nC-Q2BvReaa=%ztsL%Lr+snc-n#CMGq7~8M#!932 zcypc-FtG65Atg>w{!~@DMM%wP;5i^|f}&T{XVCPZ$hxotF0TsRx zM$&d;ZLzky?nG~NTstAl3iG4fGV%*R0T(^pz6kpsr$<~PLWr+4KLG4Su zdB^aa({ETb^Yu3|abY#ydqRbZs_<3+ za_Fj|&#dxt`U~bkWxu`tXf5Iiot@mX zO!rN_bbDo46=Ya>bGx`cUM$Ts)V-UVG-_M_vA9||k>0K1#3#KkX-{Z@eqK3~LEYTc+6!1^H2^ zO1N?inVUuzYW5a0u(LbS?R01svUcdX_C0-z)w>Q$ICgfL$9Z%q<#c?_R^nuP^z^*t zj()%Vw~O1!T9a3=q+HTB5RMi(&apcZt@3i4clt%2~Pw_;rG z6Wf&x3mtFxb$opk)wGN>>7e9}Kir?fW|a@_&v~>kJbab#a1G*C*Uz?!j=H%=p8LrX z+u&4vc1`hB^+UkCpPkTvT~I%LX#Q13Tt4M(kglEG+Q`c04PqP|3-xAUbE&-hSGF2S zzwj@Sr_Xx~Yduhuz3${4YP#BXnYvd!E>P%%LYpOZQCdTNrIp29qaC+AlqVg`cI{uG z^Px&J`C%ps*3QGBZQ*zJaL{ftUCa9XK$MDJ-KW8^r)%=|poemjL!xH~vt4<3NPTQ^ z^|83X#JHDh-!S3jcl>vjDsGutBM=q4b<+x zjF0G2;tYQIQfjz=E~(Xb^RSUoZ3eeuTfMOKfk()B)GD@JZDhM6ApSX+y9}SGYQ45l ze#z|QDSk=0{1+j!JeMkQZ-J_pBYSMheEoJ>O_zJn zUHKr(q5Z0)(kyiELaQ4Um6T-DZMU%l+k1fS`_}IE1 zTLXG>jOs3+Z2Z{e=i^=QTDH234UgnH`wHDP9t-^Z*Lx7gR8 zNdrB`Dy&fRN$$0M-)>9xZSzXuME}Z=3XP@;8YiKWd|HL9Q>-+&;Dbk>Li<;)WqVz} zqn0>y)Gbgoq3o(G>#=iHF3qb-=pg0pX=Eb@#5^%EqKq|K;}v}A-K80jGyfuQ*8*L^ zbD7kzM0KA94z7@32mRd(7OJFpxmE>yY>K{nOGQAW0%c)SY_Y>{*JGikN0O;(8GZ+MNhVS8u)X!POp>EKExDPQ4-O(Go6*^Nm8mD zIBcl%03Y>lL6_*NEXzO}GDAPD4+H+da@JC!xW$-TSY%CJ0YEQAi*&n&0? zD^myZoM(ZU&E6R4hC=N+!b3 z&+p5zS~xrd^#=}qD)_+HoP|LLP^#VBwvb@zw0U--yDmklskpeZ>6+??^ZEax)u0@E zkelRI?C4YnH6(32Rm+P|Pb+-(@JG(K7hksb{2FQ}-E zOf*L!iwkCZ=T7_DIy=?%njixjJfGH24#)M^t~tUlT5u@`K;^r;qaUcOmcUH5@AV)B zhJA1c5qoAlkE$T7=|4y~WY2K_KfA%GvEEFrLYy3s9^^lNC&;mq>u_yM3vDlo2ysi% zZl@Um3RE>Lu#ba1-LXWQq1x$X`T;b&X%)_X3<*bjVc-c+u8s44&mDOdhMs305Gl^S{+@C(Og=XBM%;yyFvjCZ(>e}c$C+lTIvrd!jrGfLSD!*2w zK&EO;H#XLcI#Puuz<5T#8fi7cU}B{05m3L^Bk1@B2Ibo6&`+e5KKjMH~%2Hbu{rJ&Dbp9N+bj_@Lq`O_)4SK?Z{mcMaQ^G*SVTeoYJkbVgenJntCjhK*ruwC3Ey3g&rk?J%3cHlmsxKi;{x#PhW|0YD_T>nTme8dq4QrubK=|&Tvf*M(y zBepUP{rKU3C%3A};g72TseCkDs~@CR!k>^>>F};t7RlFI1{Sf44Cr0&?VW&4lrq5H+|Q%FWvT{{{Z!=l#yw4`?29S`4%y@!SV2Ldc52Sx18x#cHNS+hDl?$hlMF)#au8j?T0PwPk8tokdtFeX|4vL zQU3#fH0Ib4!!Ob;>M0)ovI8-~NG_}p9Hm-D;r&~W2Xad`#_*l7A(aP^{NTrST2~jo zp73ak_S-u}+4QPlJh)$-^iAVTs=@XJaW`58i34G~n)34f1_AUOVo_3j3g^U{FR>S$ zIJP+5ZmBm`B?)RQ+T8t1htbaB{~LNke+~-oyeK%HmULR$=k+X~(B+thgF^A=_OIlM zBZS}x11qBI@AIs_Q}8^Rot-)(gqKB8;&qOp?fbCcakmti#iM`OG3T@vZA8cci+^`U zbTXZG=KHht)dwspdd4oS)UpgT$#bU!1qa_2(b}@*H?GgvHk16z zI#5^2U-WU5!LHHUb`O$`ClAQ`Pua3G{_t^zKR~1 zsYx$LKaW_SwUbaI5ufo;VUqGiF1})YIO_u{m5{ z<#B3Fg}nH2do0sM8>CB(Y;uzz$S6>rouNQ}{LM!C{`<^`I0xs?pMKt)w2#o%JsvY{ zU9MR1zLslLH$8M#nYh&C1|r6Nt4nP_4NXtBo4Ij^?m&;tWy*1i?-ye~eyMu7?DVv4 zOosVFq{e|@a5f(O>vN~2{w9}28wh6`AqUxhbstNMl%9+yr+uv_!l`xY7a*!*mU zf|VB0RW%##Y-Ogd&z@{X#+2qUtDF=V70IA5AH6=+pW0@xWNMfQBt!4R&crw0slW7@ z%}DQZmsNRq*rbxlI*Nc&U2_xrBefI`9Y$aOE1Rr#N>A2HeI#eAMaeFh?DM6Jp1aIe zNT@%;sP2uIO3TxlHr@GR-R7ShWjfU_M5)kM%I4tE-*rIfrCQLxvP#}3+&Jtw_M-(H zxr<(-f^_ulL6&3%iWEZL9{KQoKcRhI>ea4%7Z*~pa)@%>Bq%6*p<#?yZ zctyaOrk^;sKRX0_kDaFPW_+CE^n|;!KQu7cUv#I8cvjDC_if5~Li(ePzA`QK7^$;Inzg z#hIA12Q`U(OUgs!uB@r)foTaB_xAXtq~V}|l%d=8#a3~VUzN_}J>J;bZeylsARtGc z8@PHGe5Am{X6=^^rmYX=T1k%_Wrk%~i)C4hyR2S+G%U@%sB4p((?Blmnd;fNgOS?F zirU1YvfbF4arX0_G`SL^7^Rv|&L?Xk))`i;?xohv|HFDTT#)=3DB zb9Uwab&%ha&)|yVCBN+WRw{NI#m~;v-OTP%b66CGYu0gV>umr%2}XbrI>nT|F-}va z-*RW%&_Q@M(tO?MPrATzUH<)BHvNweJKStr?Pl9^Z2nT$-L=KyLi?qKq0Xu&C7vYH z`WFLocSTPosf8Jet5Npe!+ZD&uk3sVVOy1rkxI5F%}Q{717tADp-W8pfc_QzzOkP5C47_F@G*h z@M1BD>lT$yV&BudO?qQsPc-n|$&r*ZQ}+3JqI2N75|+Ugtd7)f#f~AqJ(Cc&Lqn(q z21{klDIQ5lJ+exlRuJ*b82&e8&g;lU72`0H%(F0((&aSUpnOc~2Ue!)sZ$snXLL;J zIW3Q7RQ$R0A3&nsf#Zvukhn2d;>Ma`e@);f1cT%Ti2fH?+X) z4?!;h<0Eyw7Hg=WH{;Ia{@&SLu&L^5B5zIB9-VIyfM~s;@5HbCt+T};ay({ z{S}}fMk&$I$;sPg)?PijhK8pKT~wovIl~Y7oHo3d@pWJR7T~<#e)jwfPehZt1LE|c z#yclz8$r?h-L?_Dj`qBJ=`Zym@%AmcG|=mLX4hAC*E3+D!h&!Jx{>!z_cxQ4I=b;o z1?7ofdd+XINL0Ad)8b6a^e_8`b~WLJEdRPiy1Y0GE^qAHw@=_>HC4&U2`o=X+MiMZ zd~YtE#K{txCH-9MO>pwikq(+?`TH^n9Q;2S4|MUi(k%1`PW8Yxq-SZO@SOAx3aEK8 z%SsI5kAyg{{a3OKR8{XsAUTI;q7rD1q5fQ}p2R{cd;EWJAzU#z=3?@hA*CPoCvvl< z3(pxCRAWz+fUlEmsGnAQCiS-|wuo z70oiN926b>wb)~#@pZGTn({VKW~kVmG~*heho}n<5{;PZXXE6%o*|3uI?6ciLtwQ;G3znVhZk&k7FM&LqNExF0U zezrkGO_^>zwme2=eQ8XvBpPR|vJSw_4iZW4p56MS2pwLMe#R@%T0ZwrO?KMU5#RxAf|Zp(| zA6%ut#I3-7w*TF35#mq(gg}Ydj9+o z1hg>RoSu`D%!bWeaJ9MsZZK|+fsM2*V(c`v2~*6@N&C=-&#f-8;hhm2$gf|7wB%Dl z>1G`Q3su=mC6W!YcvH@$E2OtJ;Yf$%B9?f;*E@6G0s6p=i9%j=F8z~qXx{k8VBk?G zHNC!k2g@F>D-rT?Z1c?y1^l$Rti=0WzJg7Tz#^rY=!={K7qldvv_8(4ICzHDL`)s{ ztCwhPh8}UciYI2el%5_zu#^qHC;Ond?I(5?ez<78@fIS)tOhYjybcb{TJKw?fQ%?G zIG9*~tMxf|`oV#r*4NipQ=al6cEZu|tEYh2{{6B=@C8)Vm@tarCP5Np98M>4Coj2F z2&iD?at#(0!yVajAfgkyjiw7j)MRE)Yau>Bl6YF${~R$u_h!dx3BA^-lW`3PS(Lrx zG64)Aij~U#=`3;GG=p>nOq%XS-4wl&I9p0~_cb7)f79<$?_ff{*Qm4h7rH z^>=pRJD^?wzcB3YS#5V(6B$-F65wQ>6^_n{y5zD-d;k<%76K0}bXj^?j+`5lpb?p%2 zB1=h74;S=fl|Arc%l!wi6MP6ui0AgE93W?`djb3~LfB+I8k>Euo{eBS(k{(IEr02rI;Ja{-;1O4TL0qK1f~UKL|6d zp=uh=?nvpU5&en2_z#%NK|cmNNfpl>e>Ro$ylpY0+Gu`hr+J>u+tqd?1uGhbabE{+aqioHuyD6k%Cla=#AEnS*5lj^&o2bS z108ps{l+RA6w&)$!0ODM_~ehoJLKctTZ8aRB(fLmU0#+to}D}U;8A6~SH$#4qUOq} z3jb)35O+U-Oz}{ZrlICrxiu&B@@K~uXmNU*0d3_y`#Rp1tB@Thiz}va8aYiFhv$1K zXP9f~|C{Ce_JL8|{Qp3=IhO)7j2V`RI0Xm4ULc%TR5Vyr5fa#(GaoaG{h(}%{e;}v z?1}&nCuekwi?jm7LX0v;JSILZ`2*UA!uLwVIg$IT53!@00CM*A^+DspBQ3r7vI2QD z0O&Q{{n3B%Rpcp3!uGdCg$l%fx?U6}XvP1Hog?{7qbTIlJG);7;{|_=U|tT2%zx+S z^j-V*`mAr9GAVC88usR0A89N*KFETG`wH%Vs1PKBf)@EArWYH@wip4mUN7CqqvKbs zdbkzggNCDX(6xd^$~puM5I%Yx!`--JELgd{(eQ&fSR7La#p0X>3X;OcTsqELt4;90-l%g%Sp@bvgLN?# zh&34Wx&fFa)l+%a7tn#gy~aK5BFQo3Cmlx-9*I z5&3PHyCG(sw6siKzqP;uQW0V@G_M)Zob*vX0NL12K%|@tkhM`EL$V zs=P#H48$}Bi0C#h1?Koxipts_NoM?aHVxHEudUWNp~rImlZ;#Xr|&HFY(2-Iu*B10 zhmBoLjUQDQ&*%2SaBP~YO$oYqdM?4i!6l&ddHMQsN=iN=*p?{%!2c=7A29*#O(We| zB3E%ee{F;lBOSv8HI9-xJlWDLkYpwq7aqG@aqRUa>7O@1uJSCA$0@uHZkBu(vaJ&0 z<4^XQ^#u?Dg3iu-st?4l0s%`)^|p_9F-~F!)qI^Zp{RqECoL;$IZVcqbrPxeWMn{8k{vy}R@t@giyv)aAF}{^ zQ@F#iZhv|&5{=0`84M75>oE6v=4e~gQeI$!a0y(ReETZy3FA*ro1mk_;75AueUjfQ$RXKSL&SDQ4s%c_`~A%h zNz{UTNf+~478sV1cwztyHNyDRw===6eWu!Le1{K*d$NvbxVW%R6lD7#4bhmiT@hI&47-tU3t=a>O!VP^gDd}*EI{kN3QkIpLKEbBM)C>&4nx-0u z2oMX+ADv0jOUHLQ{vPWs_5Pf%QpMK(;g=lpu17R%$G?iJU}{%M2+3b{x@EJmRvPGbS;y#dT#t zIlVQ*dC3kJ$8(_ra~!(FyMhj#Xhjf=oxO4{`Rflg6PdMZJt%t6hGFp8?D9>Ag6H`0 zRbc|p2-TlKYFJ2!C(_>wr(Gtit+Jts+Kf{b&qaxRq;DJki1Y`e;O&Th@8kqY%jB;h zARz~Cz%Vv=OIlk8K&SMocs1m7v}1L0dwf0MA=8v;Y4hB^PZcWqYSL;(DC$gWD9sHg z&+8v0I_vTX(N6~k|NEmJjW9DJv)+Y zwSL_Rv;86QcA*FKH!p1;D^4@rBlTo!tU5!V0{?xRI>(DKJ%y3?Tx9ZRYQD1d)yEpt z)Yg{P)TAK0)5T2X^XKO|_0FBUY&KxkU_-?@7;9$L#pDC~)yGPltTH)le0=It166hJ z^7D7{Xu0g$u)!^6*~Uy?KyY<;e?NV~La&)Qk0x_KS6A0w#$1Luhk{|LEt(nae!aaN zB1f0LS2^u`F30xk*RQhWWd*~WNoT`+`$H|Qt^Er#-VrftvVz8+c4@_|?zE_NI`_S4 zp*oOL`OAVRd&ucjJ>P_cG7Q7;dj9-*TW6O~zK9WUR$y?=3Wv9Gs8S+TBN%apbHWl9R)hwN;1M-4WL)bzZ(rC`4B3!S!E!<#;@ zPD*d5NKG?iXQQ*qSV!?7vs8wHf{S}_9mW1bA~X~fs^0f0C{)yHHc%YbF=eHo2--PA yLGdIcVhhEC`2R=#YO_~_puA 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 z zA^U=s?TcD-5COXg4;*sAWfgk)-jDLsb+`!-HCJHKGeFv*T6z94%AbnFwP<640Mh7@ zeZPqpwEv!X(Y*sJYP-MxR8Jl5l~ho;jFMh&TG~DEm`M{K1ZFFh`st~u;|5FAKYy#! zgDoflw;*$zc$&LE-n6tj|#X*AuCN=tFb8boRr?YfDE@%$ci4+2{&RfX5hn7AyPfoqP8DPN%@_P3_pfJ~;es;)e}TxDnC@6HYf%7$2-ZBk zYZ6;5ar7Wil+3V*MIHFHA?F9LgLHr2sxS&l%DFi2asO&RyTqoyPxPgObw-4&;lC*8)}(j>&Wy$5?=8*sACZQG^-(BnD5r*dz&kJU{sx1DmFPh9zBQ13tb9EP zqKbMH=(%la4W9--6^UgwkZs=osR+aGPG;i!!ECKZSpb;mh?iv5EFJC)v6KO+1-&lJ z!Q6=h4v^`OuMUWlYb_pCo}lzeg>Fm{9g)B?CXD{yN2U>cs8O3{U?S@xCF?e(?~|Cs z#Jghq)s=&$JjwV#1ejx9i!2GJ7LWgugqk6@u83EMYXv{VR!YLB0mMT zcmGQ7ul8SYB}iJnc=W3+pR6SUFVevPQ}&5gT;;kVWWS;Xe^ zpj1UHiIv3C28@Q`#~;U#D)bo{85I?0XU2!WeU}m*U;kAVwuWDePhRDJgi)sC=i@t^ zjQHugjo&8!qhK}uBKdJKL@$T@B>(S6{zslm%H~TjjU_+bx3jrisjG}q4IAZZ43Xy9 NwcS`hXRGa*{{x*Vdw2i< literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_0.dot b/files/ib002/rb-trees/rules/red-root/rr_0.dot new file mode 100644 index 0000000..2827711 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_0.dot @@ -0,0 +1,7 @@ +digraph RBTree { +"139660435791312" [color=red,label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +R139660435791312 [label="",color=none] +139660435791312 -> R139660435791312 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_0_dark.png b/files/ib002/rb-trees/rules/red-root/rr_0_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3c63b655644b3faa1c92c11da16136205e8baff8 GIT binary patch literal 4968 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_1.dot b/files/ib002/rb-trees/rules/red-root/rr_1.dot new file mode 100644 index 0000000..4dcbf83 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_1.dot @@ -0,0 +1,11 @@ +digraph RBTree { +"139660435791312" [label="12"] +"139660435791312" -> "139660436098128" [color="red"] +"139660436098128" [color=red,label="5"] +L139660436098128 [label="",color=none] +139660436098128 -> L139660436098128 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +R139660435791312 [label="",color=none] +139660435791312 -> R139660435791312 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_1_dark.png b/files/ib002/rb-trees/rules/red-root/rr_1_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..895ef0e5b6f467fcf79d1cd6183915d0261c6575 GIT binary patch literal 9728 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 LRi;A9{Nw)uhM)R$ literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_1_light.png b/files/ib002/rb-trees/rules/red-root/rr_1_light.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebd25e7c31c86246319c2c12525b618c0c25487 GIT binary patch literal 8851 zcmdUVg;&&3-{$}V(j7xLNDm+)E#0kz#0XM?gtTcX!XeXa9mdrrgu4y= zA+XogRD)b&zlu96Ga(QTh_>22v%vg=pTX8y_pb;KCrR<}qDoirIp=QBJ)jIX@vu*_ zc$61lIX0Uy`}8EEC7I#4+|o9Qtfl`8=HkTaQ)1Pvzwm;?XA^R?s?!z zZl4cY>d}y;1WiazhAh|5by#~JhxlFu76yrKS1~$}#!w>tYt;EUV!X^WR31l-XeH>m zs1b4;m(1-Mo0vppWKjQT^CNlQ$(Eg+?c(C1{Psa@@$8dF4i3?+PZvvlwkN#2yeL^M zjjIq&RTUKk)z#G>1CO}Ae*OBQurT$<59=Qvz44xRb}e+LwY1zWe7<|@V|)AO(NU7Z z!otI&qkHwXoy8{A2sFPDA6lS*X`4V3EY>H-1+J!wi; z38$yNj~_o)uADAWjVEW6a-obPg+>{dX{=I&qoYyXxTX!6BUSL>;bHXUUVUTmxd$yh zec$*v+11q*qkNz^0R`KSHC|U2mmUfwOvL(N8aE6^m6(`VRaMm^IVm6A)1$0cC=Z>O zm=KYzh%$m^Z%q`)p?BZbH+cM%wQlnzT3TAVNlN-~M9^k3njPjLbQFu<<*w~nm znAltU@PqiX4Xv@4FgzR_oD3%zj$Cg7m)U~{P50kEfbsM5J3W0m9u*Ze4_2=>*!H%r zF7;r(F}m~gtFB(T3Cz>ev(;gc+)12KO*1o@)l7q?a&B+ody89MSsAz6bOl-P^}lmV zOUpczMVjx~zNPe&8G#Cu>iMFpQ-1%;Q&(jAM#PBA$V8#S=;fciL17V*g&&`M9PRq- zRwJ-mzS5jqYqd0%8(74qhMC< zKJqq{rwTDKvAFxZxS5$5$KAWof0ut~SgZTrdoHsDpZ`)vob6s8COBru29bH{2Iy(H60r@Wd z9Sv_9BQvv@T)Qyrjmd;zK5``o*25eII20AxyuH0&N*l#=@zZ-&{S4AKG{?x^1w@?HQ=``f=z)59IhH1UW}6IyMd3-$;*qMD{5nMoQ@;X z&S@@NK+eg@307WeoE&(vrSJazJ<;cQiuea_V|B{=dZP*11MTkLr<3;hk-%UZhy%7U z^`r%bEF%O5WNd8w=zR#JA?)Atnb}!RVd1f=^_%?Y@5Dg~2?;ly92`E^*|a;&c-w|u zI1;RM%|+r7vIQF9U(8Es91;theDwlsejKFJ(YZ&LS9~D zwv|XB%rN^Hs!VV8Ff`}hOf}8)j;{v0F60$-)8+5k!Qr1jvGMWoD1q+khaWs39K(4_ zw@fQm22z-{w6w%8Ex5q7puQy1@SPk!T^}yg&g6rJz5|;t1<|CXqa*R(Beu52Uk{Cs z$JW=^gPC^X*~5C0=!6b)yD|7;ou?T*4&;pD5PrkLtjEID#!yE-B_(zQ3>2{B)MG94 zI_ut{bnexIgOn8JJ37)HlZ6W2e|GN=4`fnj8#{R{br3)LlhJp#DiL^)x*`#8Dfv! zot@)rY6P_hvxvdOAh`)40%Bqe`5X80^761X3Owj_iZb@yozXrf1(PP(4CjvsNT$SB zf?SKr{2`{Gz#2_R5m#F)LQPFQ^~uMX^DamW$IzSC!Qh-KG}G7`T3ZJ$PPTcWo=0o_ zM%8BEJK(nmRN8(1XT42V2oypIg(iY#@YvC@x4(b$SN)x?j*bqV;ox6C?hem|XJc3P z-b&>1>>&Af_qDAr?ZP7j2<(0y(ZBLU&tr7r=tZnz#JbS9=JmF>-`<9Y>Dt?KVgCK| z-ucQq>|{@bO7)AzrYG`yIDXXlRFUx9$US5>LVCw4e<|s&z(sf3> z0~KE9GK~}!TU$1euy}56ZbraqXS-wRjv@)8#m z5<1$LBIk=jRS~Fg7xh6#DPaT2rnG3c=E*)n@yh=S!wP`t-mJIN}kI z!k>PBpFT^EqAtO&)=RXi9jGh{O9GK>KmO|W;mL`rhesXCLd1Tq&IYykLCj;hD+PP8 zO^)&#F(WQf6$S-KGc#r&Zi@qcFJa3ZXw+(h&$&`Y1F$tsK;R~T0*9xkw5+e6aeNooaBR%`|Gx_-VS;t`? z3ASlyq_L5KPEqD84)gV_$pHP3ho7IDkBgM_xWwqE}J zS2pWXQc@gpa?Gx-u38`t6KVLpt}sE2qy*^8OM8Hv81Hzn6oy^y`p6cxE3`D%kYz-aANDzt0si}yO z5gpK3i;IgPV2jvZ)zs8fJiSwlbb&iK;DNjXmHYGLGWYp9sRgIO8=pHzVJgi(y-4CcmNdcNt<;M=9p&>K>m-9B=O)p?b#9kDzC9adP5- z(&-B=3j(l}n*&l+jl=WZMGBO6h2XOv;rX`&2f8oXckBKwmg=WOvVPpJwB zAe7Y9xGh%ta&8K^*~W>jPw^xq9brP!O&>lC=HK<9q@s#szT=UQ%B>6D61f+drbMt5 zhfXo$_Z z(Hs%*4mjh8q{9X0ju$>#2?k%?>FMb$K6-Jsdi+cp%@qUajzmiGRU61XbMuvh50T}% z>XkvlfFS{-kD9Ke0K5p`Jr^*hBjIKb9HOG4#vk;bNjd^ypi5vg05qPmJY-gO?un)M zFKbJ?i9p%`#*mPZsoIBkzI^!t&YF50!6zc0FIIW=362s&9RL^=}o0O8EEpJUNvMoDrXpFlj>zzS9J4!5ejeRc`=z zE91QugA(YQ8gofXN+Jfa@&z?1*1WdrDHiT`6W#mpC zF4GDK3zGuy^aWs6b4YK4jvH;r07RCLA=IyTfy+6(beDIpW)&?aB(=`l81+fJs-W-i|6*#HKmAU^|H(8 zgd*@s(AVGgB8xdzzKLAXcBi*q=e!;`7;>I0O!@dx21^^uO?u(t9AaV=Kim9hSR2cc zk7|TBHx3J8nVHZdE1)iws76HN*}0F9($dlOE-XMn+fZ|I;$w6WXC#G000P{*gNPmx z(99LX`}3z8)6rF!d%U6DwKBu(DbSh)&C55ucZ(Rwz0>vXAu=$M6*xeKV;zN9zEZ!F0HAb1q2L&io3GE|Kl;|-tI17 zUpyRn-p0^PzB{>g-#+GAk?9o>tEu0%F~i^e-XdgTVzRQe_3bfdcA!S~h`=37%aBQg z#*^FPp|VOoPY4+P{@&c!h}qb992gYz(_D*$ghaj2_;&qufPQZ$KfjqEd`W)gWRg8! zWIQH18V{h|mGyO>4=;2&zg6wOW+|_j!{g<}`0deO2RZU~XI9)7Qhtl??jF(lG;*Tg zg7tRy)$iXw1)ug4XIj0Sx7a^8@CJd8V1(gU(}W&9BgjdiJ$?zXlOmHc96+Y^}HWrG5Aef6yJ-ZxB!n&0hf z&nIq?Md4eLaAPVXBM1h~E#~`NR?OkGbdRnWj%pmFOatdXng-57Rek;7UVV2efWtt( z(e=&Gd7n9g78oAxnX@|?C5nv=p%MrWhabYPp6q0}&-YMxiU>!1QM;x3%sx@qbiHLZ(EjVk>ZoPN@vzwPsb^p|o*SG__%%b|rE8b$`D;&HrGGc}=Q)eG za3iwm!iUgPoGW9{!t<6nbZAX=b?J0EJ$%VgJ|Hz*@_L=UC+il5?*LHSjt!1GARlt% zgLCX8c9x6S+XVMw;uc_&5)uT$b`#x+Pu(LO1$Te7p6rqvO1cH8`~J37#oOLRhNm0X5B9io>E zw2;qnN2B<|!y)+6 zI{0IS|3<&pl$T?)DPqMAs%W>oUs{>n=)g#H!+}g8@gJEY0v#AOIQ8B&&Gv4@P~7pT zh0QpHe(k%6e}6CZzi+{(IN;j`@Vy7{VQQqSmZU&8!eJ92vZFRV`2_zpw#q7fFc7j zsNeNHNwDwo4<<3aK^(T8>16ByovYh4w8HG!m1ZW))v-3XP$@kgpJXVAlaG-YbrC<@ zdn)M!v1z-RNXf!NIxrt9Rx-J)|C+#ee<=5mqv_3<1e@ZR;dcSA*9ZJgj{U#8|Lwm0 zdw#^xR5B*vu}qG>JpLyzBvzrfsv8X&kAcdo;xUOr8BWaVBDZF0Pk%qYRV_Uht$_k( zY-xE*il)sUzb$|;Bjd{!hrWp|)N^SgS@q(QIK}(lr617rmTZQF<>gr>m9FIl1qEZa z`XX>J{>of(BSH>girxQ4f7%Qk3T6`nHlhCPnFJUDDl(#~O5o$ik1JoxbuBnA6O#%R zBHx<#JN@tZm58mXh5(O;!C;KyaER3hj}*Z29`(f#B_t)`LiT^Qn`_ktctY5p=S0a6lFu9BlFMAy&B6%@yrGS|5Dm<|f3$013;v z%d3udWdADVsHoE7LUq{BfT2~a#W_j-qSmEwZ+-2)ngQ+Q&DpG5A)ISK!sJiS)qjoV zvNlt*G;xC3*x)EBU2PDo*4YvIAFK&g&|qK1f$x~CwEspYAF7@k6hy4Rk=jG50wRGopZBDOSh-lFCE4{rT z)dLK6v;|tS%}z(Li0;3s;kG3y~7_#I>yZ=$}GtcF%^UV=g65p@F zTlWVvOe=A#t1twtzX6cjE}$cTt~uKyM7Kak-VckXh$f!-bpI*CA#u3T(i zkZlzfViME7TOoH|JuvDC;Pdy}#a89s+{s=XtL&jJ1E>PER*B;pR!M!H@xdm%ygggvJ#l0h$-H>N<>4n| zjA0pSNzOb%LKh{@dZf$W>pEBhSMj@?2T;h6Phq7zW&@fMj1e1;Z4>4#!ghL=3YUEq zyg0hIr$>`L4X=Wwq#z3m%2rI>)qlSbb-5?>_7sh<-%0H*3~N)rvQW#ZLZtDEkZI|C zc?ekZ^W5y!g2fLPbF3`rwH^ZlOxS!XYmjS;RTyLS>~UUQN#wPKaj(+f?5snw=S@wJ z0`fmhWCIKHEBZ=G2y*hRTw9d1w9h@q5bOVou6Coj?E1JA3c{C!MYn`Vv$78RW@nFX z>-foDL1(^FyZmHwnI`b^Ufm4cy%ol|ze9Ao8>?jaDrRg<&-$Ym&Xbm)B0EV*vw=Z6 zM#hA9?}W>;H@lkt!-193MFiK^Wq=f47>p0$%<|Jr_2Hlim0Ui$zUMqj?ggnZ_q4HG!(x=rqoRDQH!_LufXz1;o?7 z;(O6py^$0uq1NQ>JdvLWNC&`{Bv!Q#n!FP!!KlOYbFjGH)z9&~tRJeXZhCllSagNl zbsB%gyECu$jM(l)4gQzGL9CYo^xcvThk#!{pwkulsumWEHE-YYvKMJ3I}I#Pb%%!o zm6@{x99`&TI9q+mS$_ zh*tKc1#ij4!*c@*{~TvsEop3{@M%fyBhb01t{g%Kw{* zu%H7C;C*r6N-f8dQUGv-IZv$d2H-KYfZ_>(G!E=wV5zs#c8Sh;sl% zv3zE#M70sPOi1tlhepT0XL$wv-SX%&0eEWU@;DNhZ(EZ^X}~WlDK1v_W%(NA;)D@1 zedVq9h=4yW#c4ppZLUrooDFah)HN^kA3S(q(E!Jh_FO`AbjTyUwMa_xs49YTOeUN| zhiSn75XHayl3)XmfRtKVCiOZt7N1_!IswRfYe4=eU4KCjKa*TPSp2ZMyPNc3IgA0P z5g@Ub*Vxg)f;DvH0_xt0Im_#;PxAssrmClh00V~e&c_(p*vL~fq63yg&3&`@fydSG zc$hlm@4*Lba9}49U(7RhHJnPeO^?8MY{^N+#m4r2`$i8m6L^#6Lq`KOTMP5(=C=(uA5f3^Q8mxxYY5wzZ}JGI$)Qt|K) z2(!<#vvf542DC49WFI|xBolrmf40Bivpo0bxdJel_yy=L^z|aUF1DDlW?q$X**tg# z>VN=pKdi-Syw!7ARHi@*7Y{ElHrMmn8{dl(y20i(7NNKTKPoT6X^(Y+7|Fk0yH zQ>E0?9XmoUBzE`qeqVKTb+I8}`SL;3Y;0_S>nV3=ACA0v!$Zm}s)a4S2AkxN)l-PlYoEBmi8ma&^Q63$2w)nM? zK;SgW@8)M|l-&ch#~Xe4Xnt`~_vIKmBs4TVBO?mrx=I;R>Vj>6QDmCaG)ZW^jJ#Kh zi3}7^FAyEe`Sh>{`B5$KxM^1Ah`0_&jQTcl97|Ua}i){ZXRD+%7rsLR3=b|`1I)$#Sh$y z2XA41yJl+Y>I%NCMz4Sq!UbGJP-XS6@^%n47%&jHzMxD5gx7(gp_jhz?7BgFI$Itc z9wq{2_u=tzTm1{5Z24;3kE1>R8T5OY2uMspCtIsncW#lnf|Z5k#fujZcJ`w7*f(w| z$8V}6cK=-dZPj_$XpfJjgpr9Gy-Q1MnyDFL(-X8!8iHj7I`_H!f#%_!6X|ZnWk54qf zXCG{Fn^PO)>@Ka6uxv%XRNZeO zV8CE^X|X~Y->iJ6Syh!VUTIQYl^{`8B|&XJQiX^ax{;kunO7`9%|-KnKJj1#B}yj} wIQ0cD)6ZP0vh-IDF6Tf literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_2.dot b/files/ib002/rb-trees/rules/red-root/rr_2.dot new file mode 100644 index 0000000..c79d728 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_2.dot @@ -0,0 +1,15 @@ +digraph RBTree { +"139660434247376" [label="9"] +"139660434247376" -> "139660436098128" [color="red"] +"139660436098128" [color=red,label="5"] +L139660436098128 [label="",color=none] +139660436098128 -> L139660436098128 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435791312" [color="red"] +"139660435791312" [color=red,label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +R139660435791312 [label="",color=none] +139660435791312 -> R139660435791312 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_2_dark.png b/files/ib002/rb-trees/rules/red-root/rr_2_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e31c48266cacc0fd056f5c737f3dd3d4421bd97e GIT binary patch literal 11797 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 "139660436098128" +"139660436098128" [label="5"] +L139660436098128 [label="",color=none] +139660436098128 -> L139660436098128 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435791312" +"139660435791312" [label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +"139660435791312" -> "139660435887824" [color="red"] +"139660435887824" [color=red,label="18"] +L139660435887824 [label="",color=none] +139660435887824 -> L139660435887824 +R139660435887824 [label="",color=none] +139660435887824 -> R139660435887824 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_3_dark.png b/files/ib002/rb-trees/rules/red-root/rr_3_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c10fef37b349f6dbfd75b81ccf4c7f125322f3 GIT binary patch literal 16982 zcmd74bySw?+bxP>fS`ah64D?@OT3i6ARW>nf=GuT9TG}NH%Nm>H;77uba$6Xx3r|N zuh-wV&pCUKvA=P~IRBinT*I+g&vQR_Ue}!Snl}N@6eMroBD;l#hIU(8N?aKY?MgcQ z`yAs2{KQ#x?j8JffQD|uQ(WJ$ns5&QY&Nw-%s$I109t|5ROK0O_ zJ;fD&k#{}Azg_0$`)7pWuK4Pk8&wuhGW-XFaLv)KKcTrVYKc*x--5*VxsS0X9F==? zbaOuNvqeXD{GPjTSQrL%xxmt&=;)QtSBWzQj>PNw*nhuCf1O*|2;weIS;s&~}>xq^eh90#M z-MK^fq>7AR0 zD5+~?JEe|=gx{3SC{*8KDYWEGKy1c63PIMUEHL1=$uWF?&T4oM+mIA{ah1Ktb^39< zZWw-vDVec6t@u#Ryras<7R|uY=c=x!!r9*63DqU|ljC?oglbc~si`-yFpW%deD^=h zs@Nd?MUjl3sfDr^V>rmH3o4qaa%y@{#vm z;U+K5v{fBP;sm9+zJVscma-hu8JQ3rvBNx6L=xH^^PDr0a1VZ+)HWaYx^|m zZdE=W>k@v+*+I9=^vg;SLS8HBpPB!ppCgZPC+7brBG+n6VF1#Ln4ZJ#iHl zTbL(R(r#RM>N{+UaQPyG%{J2DvxBcJ(Z~{+tT1R>#yq&OmJr_Df~HfPekF*8M!fx%iDk@7sgsfPZNua}#B z9y;dS&5U3lNiCj`;TrPIRTA=8Tpp)H3JyOGF5Z-%qqYo$#JQogK7ClBiZ{}_RiHy} zDoIGF6g|QT28`Y!#aw8rZsE%Yni)k^Z~7cRYB*fGUz2CxdpPJd`k*w4``XG<$M6n@ zqh@2=^Ki-NsX|03t_W;#XCLVy=d7IY^2SEzwpY9BrTF;xE+-|Ms`ORfbXsbfF)I=f4>IJM_xIlQJtl;gbKG2Ciko4wG||>*i=#Dt zxSgq9nBcbC5idnV1?E_W&(P#QijItS?zmQA>+7EPvL- z*VG6-c<|u(c)|T(Ybvb0oe3>4aJcY@xql-dqNNyl9?a^D8`IgCDcDkQtNf<0=Y`Nh zn_|uUqq2$a9zH&LM#k9rR}Mz1Swr{?PD7Zx++5suWAdIkt%>G7xTWa(qUX~S^ZPc!X+h@wzOoWmB3yJV5F2B z;`zw#DW=8tj=%i*1hX8qTYOR$e$4vU0e|`I1qnZ~iG^nCs$9&!XGdof8)e2l%c7Sj zVP4{wBjfrjIbMev$YaC_p1kUVYK68~27FJYiW0lQ4Cc+rZ;6eKNEumKfj7U(`0#xJ3E0<~(u@ z9t(m-$qtF!&wGV9SlM}9Efj==dFjW|7fVLuyos6qJ{7l68>5#jgd77?U)(HUok=7; zq3bEJg@6UY?~D6B>``2IDLHAm5_rGgnjANDycVnQVtMs;283T5HHay+cYJ(GScV&i zp8EP+JE7@&zUk;16TACLmB;a^;0LU^4TunJLb~)H=wgEy1F_U3l^Aq};#9)hB-7F? zF|kxABr#H9w+Jl@dcSYWYv%a+HM(fjcEqMe0jHa-ofbJ1M}jZ=rVq#W*x}2nn)5J` zED4|Fc>IfS#X8+S$-or5j7B@(>tFM8UOslaD&V>;;_(8*la`xy&ZbX7L%+JEF|tNS z`(}gplKqdUr@oL9xEOdt(F0Sq=zK&YU}!5h7}NrmYM)_27`4axrQ*mSzcAt@M9IWr zgp?zPh&K}9vxD^^Cuh|})erZ5U*S-M6(()x)^f*ZB=}KYXZfXT|G~^nQ1Eh;7vNXHPGUjNQ;f>IfX~ z)yX*Am?sd|W~xfwRM9cu<(bvQx<>@ix5WLmf2jN#)pjLocb`EbeehfS$mlI~HXqTb zA$w$iTkZRA`g7w4uB|ZyLv7j$X+M8pMs=`Ty$`jkj#pLg-t=-qqYMo(aS^}Pi-y=@ z@*$>(cv0r9x(>V@fBv%vNzS{$P2a)F&{Z93JCHQ+G^UF)O}eOp#9uNB!Ka<<>R37S#Bst%EG6m-4cMBaEO$d`f$YnIHg=`OX9I6$K?fKq@( zBx<;##+&>ClDKca18ig+Eb-;=1{=xk#r4|+8wcYKFaKU_<0X7}GUVUS1GpvcA7+Ep zRWZ8OoMFZ<&+y=XW$1}8b% zx5@a)hn)~ojtJ>Dm8Pan;lGORD-Us4km)CUkRDwX&~Q0p zpcykN0$&1u-yTtPb~fu`GV3vIRlYv^1^0=Vu|#7rt8PuWMRD!NPzphp4A%9L{I=gS zf~4HWtk(6lg@g6=xbt~~h6DLK_aG6p3m;84$+GwCj2A352jE-IRK?_~P&JrF+bz z6{7Y^hEKWlB=RkU3R;=82FKPqcH6D=mN{-A801L&CM^F<+W2CqLp)iLPvngW6FH4@ zKl|fySW#xuN6p3-8XbK_SGWkbK?+v!EAQ*c{x3$d#yts3hXy7lCQ%7h2{sF@uOe

`#>pweY$&T{uhY_q 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_3_light.png b/files/ib002/rb-trees/rules/red-root/rr_3_light.png new file mode 100644 index 0000000000000000000000000000000000000000..d236d688c0dd95cd518dbb7540dbd85330bd86d5 GIT binary patch literal 15545 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_4.dot b/files/ib002/rb-trees/rules/red-root/rr_4.dot new file mode 100644 index 0000000..da78acd --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_4.dot @@ -0,0 +1,23 @@ +digraph RBTree { +"139660434247376" [color=red,label="9"] +"139660434247376" -> "139660436098128" +"139660436098128" [label="5"] +"139660436098128" -> "139660435887760" [color="red"] +"139660435887760" [color=red,label="2"] +L139660435887760 [label="",color=none] +139660435887760 -> L139660435887760 +R139660435887760 [label="",color=none] +139660435887760 -> R139660435887760 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435791312" +"139660435791312" [label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +"139660435791312" -> "139660435887824" [color="red"] +"139660435887824" [color=red,label="18"] +L139660435887824 [label="",color=none] +139660435887824 -> L139660435887824 +R139660435887824 [label="",color=none] +139660435887824 -> R139660435887824 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_4_dark.png b/files/ib002/rb-trees/rules/red-root/rr_4_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c5614a0b5aefd993f0bffcccaf32c374901a9b36 GIT binary patch literal 19127 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 KelF{r5}E)Ud%}|d literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_4_light.png b/files/ib002/rb-trees/rules/red-root/rr_4_light.png new file mode 100644 index 0000000000000000000000000000000000000000..80c47f872e5591c9aaab14c9dbd4281c7b8e8c8d GIT binary patch literal 17489 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_5.dot b/files/ib002/rb-trees/rules/red-root/rr_5.dot new file mode 100644 index 0000000..753579b --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_5.dot @@ -0,0 +1,27 @@ +digraph RBTree { +"139660434247376" [color=red,label="9"] +"139660434247376" -> "139660436098128" +"139660436098128" [label="5"] +"139660436098128" -> "139660435887760" [color="red"] +"139660435887760" [color=red,label="2"] +L139660435887760 [label="",color=none] +139660435887760 -> L139660435887760 +R139660435887760 [label="",color=none] +139660435887760 -> R139660435887760 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435793424" +"139660435793424" [label="15"] +"139660435793424" -> "139660435791312" [color="red"] +"139660435791312" [color=red,label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +R139660435791312 [label="",color=none] +139660435791312 -> R139660435791312 +"139660435793424" -> "139660435887824" [color="red"] +"139660435887824" [color=red,label="18"] +L139660435887824 [label="",color=none] +139660435887824 -> L139660435887824 +R139660435887824 [label="",color=none] +139660435887824 -> R139660435887824 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_5_dark.png b/files/ib002/rb-trees/rules/red-root/rr_5_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ce2504002f9786b943b3a134e79717d118ea64 GIT binary patch literal 19533 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 Q8pvnxboFyt=akR{0O&h7!vFvP literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_5_light.png b/files/ib002/rb-trees/rules/red-root/rr_5_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e32514a097b0dcd61cda54ed1c6ba63fbdd2be10 GIT binary patch literal 17837 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 "139660436098128" +"139660436098128" [label="5"] +"139660436098128" -> "139660435887760" [color="red"] +"139660435887760" [color=red,label="2"] +L139660435887760 [label="",color=none] +139660435887760 -> L139660435887760 +R139660435887760 [label="",color=none] +139660435887760 -> R139660435887760 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435793424" [color="red"] +"139660435793424" [color=red,label="15"] +"139660435793424" -> "139660435791312" +"139660435791312" [label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +"139660435791312" -> "139660435793488" [color="red"] +"139660435793488" [color=red,label="13"] +L139660435793488 [label="",color=none] +139660435793488 -> L139660435793488 +R139660435793488 [label="",color=none] +139660435793488 -> R139660435793488 +"139660435793424" -> "139660435887824" +"139660435887824" [label="18"] +L139660435887824 [label="",color=none] +139660435887824 -> L139660435887824 +R139660435887824 [label="",color=none] +139660435887824 -> R139660435887824 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_6_dark.png b/files/ib002/rb-trees/rules/red-root/rr_6_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa01947f56ad1f560b00ca9be7544fe133ab8ff GIT binary patch literal 28436 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 literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_6_light.png b/files/ib002/rb-trees/rules/red-root/rr_6_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7483fe8f8c8a3e3d7e4bc6a5a5dbb6a1665e8770 GIT binary patch literal 26112 zcmZU*bzGI})-{YpC<2N|mmmmI(v5(CAR!3S-Q8U(sg!g{2+|?lNQr=ShXMl9T}rQa z-uvwHe9!xS`}}eI>00-?a?UZw81sJnTwdztb&~67XlOU3pFUASL%Ym@hIXkQ6CM7B zTm8-&{2#i(GpQ$NDCB?XjXBY1XjEv@Pehg7K5R_8YmKU0bnK1?gfPvc2iNe_ym}LN zCoAC9Qc_-?qGa}*n#p>?GdYnIPI`K-4!U@T;lYa5kwI#Lc7m&S+KbTs-ju!*$@w_) z#?SrJh2*%b>~D>;-HmC>3oUI|H%^z@YWH@%`u~#oDala#_q+j9^U6tr`8Zl9h` znX0sW(d6UZ(9m!Y&g5T$Kh%Rsz4cUD8f$fR)$8xHtC5LGRBUW}sbL4N>lPV2uKFBh z@93DRm??Sn>Qy{4GTGX;Ics_ES&oF z>yx43VFqUA_U`U=4gA}9c#qFd4$TMBFCDIpwsm*kpr@y|7|DG-X!d(=u{$O%&SCL8 zfzQz#hJ&LcpW_lXA0OYwY*SicArlT6@2f7O44dgXr;Uk7`4s-a90kfGPV)>`EPuQz z>qJftv0zdeIl0Ad)+SmOmhhiHwUW3jC5?<|Z{51}e3Y=K{vLWB%HY;me;8_-XIT4BOoL!HygYseEb`qot@q6M-}rG zbnJB9CZ7uP;cxlsvUK>#Jhmo_-(w5aO5cPKvJTa|+De8JiH;X*7bQtx>JNWPyd`EP z*K>BffBef2x0vfD>zAW@+I3EY0wn2N-1heNJt+e5a>?9-*>a@c!bm%!6@(eqE&cIe zE9N?34byy17#2DrataGW$8~*EB598_5NFG{e!#F5R2N03XUMo@791D2P=bq_6y&3FHX0k6B3?2fBt@^bStSvPj4Vy z)X2yPIWte5TpiAq8y1MeYyECCEJ#iEL|z_8$n(#ql9Kl$Bg*v}rt=F6ZTTt%36BiX z4LiaYzrMxq`M`&7YHHe;iA7!bIEk2=ta&g~YIP(J-+66B|Mbr$r`5#s?WeJQdTcvO z$+q*`+X_xjoX5wjRUYphURd~>SuFx-fMT)@R>vdoxCry=1j zKK&ZG6sEpDY?gk9WEe?%-isWyY8!H4VPTJs()S_zjJt{0^j^)_JK+-$NN8w~5EB#QaB$rB_luO<_b-v6i+&3mew&=! z`cQJICz0dqxZgJ$hOS)jG7L6!XUg)k{aov{f~6XZt)I1UbJ*SYjI@hc{YwNBVFozf z2ZK@#`+Wjr{7%7exHLEG2wAkKXlebU=@l-P4FAq}vYMNl*VNXkGxw`-nD!ZMOq7xd zy1mbqOV&6)5yK3LN+hP<2%EGr`4&nXO7y5TKMcFMP`#YjeUBEd{l-*f$g_BsQrB%A zmcB8 zapoRQE+83%L+(`T1EB=%bHmEk=U1>sb@k29y-P6-EIw|RUx~N~SW;M&!)|S)O&&1wjo_+Z8 z<&`@7l|9;PnZ={&>+)c)u1|5=N} zKT$dg*q5+LxkGP~a__*8BgC8UTfu_?aems9Nw{fd!`WfQ#Qu1(3MRCd$W9BfUKva+&5st|Q^2;@;PpP?B;~dm5O^n- zDB>&p@#Dv#PE7rve~#?Y=_x)1MPDc}$3eIO#~0LvXB?|;Ux|L(LHIrY5;P>FkWWD> zf%HO4OFK}c$F{mN0)qsG+{CkpAWG4b4yFvu4L1n zva)X7z56XgA|yCGd`uu5FJn)dgT}w{dso-ojOVs7giNoq-42hAK?!^NM{wa_IOQ&z z8rbN5Gm*$L-9@{h|Cxlx2BM>50+;1oUElM{8T-OMD{c;>PP}*T-W{Fo_h&^yEbGd4 z7n>-3eFdY;umdL$oA^yc1a5@zN$yN!;nJw8?tKV;hwI}nKI;fIF2G%Tifn-6aE`)q z7k%0%NOx9~WfI%GcXMJ4AiyIjYhpr;-(@4$m6qB+02y?Oql1G%%bRNlYoj5sm1Ra< zw;O5HL%WO&U=}dGXo--!yI=7YR>-9>^{*k>4NXf+>u9f=)qOEm73RORSv{LwSSY)# z7Rx9gkPN4>)Z@?s0xyjM3)b9YWIIH8`S>1rpExb`CU-y-!ojn@Kffb^{El8A4!Mkn2mk&1_aT!7N=MTvYG~xU7S=mJTJ-q4C8w-> zM^RDnQ%=shi$)Eem>6ayiV8SK#W}J!fHIfm0KB1p{ZNlO_TWA730keS?tY_xIR` z9v$@`KYSqj7ET`0)Fg7_E|cEg@2-s>)e)VYPmv7gL@R)HgBp$3#;_?6o-ad6*DlARwt7QmO66apqoYHC zf{byrQQpsMKYtZsCN>e)&>wfd|3iHiAAgCF$7LxVJ}`l z4_UAVcl)XQbCEbE_A_D9ijIpb7Wt^dqD)zNd7etaU44Ch|A2s7w{MHt*&*2JNPL`u zm36r@k_N$!adDCk4(y(Px7w|^hd+vAoc!HZKwX^IE~k1jF5kcxn;=CHYc)LwM>Jf} z3mB`?^XJVGA{Usi;^PUKHLJe%_eVhDf?V>fNTU)#t!-^rR8>{sXg^?O%>g{y+A8MY z;LzFKy)csZf=t+pD7wqPey~%+)fFcw=!It|UTa(1BGF~)ubW5&vp+2>D??CRX=$n8 z$x0?5lJ@{`0ZZ_C{$a{dNTXwAjetkWJbPB_w0fH^8cRVz0nTZzVkSD5<=7`!|D)sM z!CXa}%U7;oUB8|Ii(eyr%0$M0b=K#G{GQhvy!oo9a2;yA0Vn?2nQQYp-K^$S&zS7| z{-(;Bn)`05NB$lPC5Guq3o&8-4`j$73<|ebu@6;;s%>?+k4wYXbsdMRw@y%fW#Yg~tjtz^B#0 z%%DY9UZ)3ElNm*6ksT!gc-2T0n*Zy(ITaffbz4bEsnD@y!^&*(wn^_BLY=Z4XouHZ0WCuVG(jy#H#i>o)j!6A6>iDFk-M7x{WqKZ&JA z9+PY_`$cGGW(KaaWE$G>@zh4o>;-zJ)Oxfirv7?d7aa~D`V)Y36Sa=?fK^Tcay1Ec ze2BAU2TjZ^Mg~|z@LEl}Ab-vC#3=du`~TYB?)OEV>Uy``x$~+?B$WIH>aXvK$t|&o zd+M+)M@5U>@%z)Rv%A$z=W^Q*er?{Qk!lU11mNnC10SLS*d(TvlaT?N^}}Ji@$Vi4 z$5nDENV71qho750w^vgnG4(Z#ki*pY`OC>W@gSVZZ-qT7l@=|zifo4H9|Uq-NvQq9 zA^|#m<${{&>a}ZwaQ5#qsinJqSl6!mBs9rs6kJ86hDpuIj*MyY&9xi6K4-j;wZ;X$ z+p2snX1<)thwtEcC=ZB{8u<)bvl06(BBH0&Hq%GHqZJOq9Sv2BABWs!(?jz*h@3Hp z>PHkpHeOP{@M$PiJs16Pl)f&Ge$}&q3c{~HkTnitQd{{Wn^NPjcpV^lvrzSSYo4AX`?x;C*GqOQNCx%O<8?sET1)M#J36rkgGfSs@aCh0Ajg?r{1cr84v8 zUDiN93}jvdNU_FSLg{-JxjLM~;qd#Zm$&y}xT9%CCN;pyAWEqAoB5T-RVbKjI^3`O@O@@^GO#$HkxOrbiwJ zW{nGH_M1Qas(A|4GhJ^}`yV35EZhu2wen}3lz3eq_3a0-hVxH?BZ7V#HAZ7X5dCV0}ePh*mcY+u1J=OVN;E3JBc|ZVnqs7(abQNtN|ST@fN4oF0=+>s2L8 zZ2yb%%51nns=v9T@mx%%D$J1r1x;C58IORV9e9ea-rhw>uI*i2mo9Eb$7XSH*?!3@ zO5?M8T)$|<-L|_hwTl7ale#+5zl29Bf}&lI?YWLlxY9cap=J7Q=s;$`WvZFkEnI-8 zG=L_2hKEBw)Mv+@Tp2+wkZsFN{Uj?Ij)Z{Y&M(pL-@g~1e<>`)&bsrX+LoS;?LDNX zKA+^Im^+v^hA9SxJzsjxvf4f*4nsN1C`X={1{TP<)YDD zxCY**VjbZnhCzS6?Cs6^q(ZAFd2s8X8J> zvEFnU3VU!316PA59A7-l^}8@c>m8O*Ht`75XfkV+ z6|Z9eRcd&t`V8ywv3ZUu28QnJ0IxtdzMR+uF~;c+Im}a+9l{XJo9I^zzlG{UZfr^{ zvM18fDKWm`?|=4lpi_rKY=T@sacZm>$>uk9x^C<=fJ@%HcKl6FHuNnk5 zH|Hfb|4K+q`EXHC{93!dwKX-YbhvIA7KPVJhs2}USf~|KQ~O+Jy`@Y{=+xEK$plS}BMfd-c^W8&as14|VXA8*J;bTr;{(GH=&q~&wQyF4B8+qZw^rFQ?*oA<(fp@dyaEKAewEj((D171ugiTBf3vsi_C*DqV15@LDZ?r%O{a^;mJ2 z1A2$-E-fodDc@UH?az^>bSC`&VezRav4}a#a;h6Qc1)az9ST)p@CVUSIo80Hj@K?`Uf9 z_paCHrF4EB(iJG}4o+_9yLThUR7~l`i(^3lZ$m<8czEK0!n#FF zEDh8Ulv1%XMqYm=O|=@_ZbA7L6&3YVMkWKuA&5?Cm#(0*x$WqYaGE{O8?P|W%iCFu zpOTfeDgI;h!syeOS)pc5Z;zX&>dfKyZv9!|i8_L)sEX=Vu^N;Q5gQsh?pV@&>L~nsCaB(3zr-0PQH>nNT6DJznIbiXO+TRhtm?CEy zJvj`%V%E8AS`0GPF|Y(mg#3zDprW}lRW(ZT*5~|J{GqB$vV^^JrPkeOENxe$K36J zn(Qm3K6mo*!LS0ch>xJLv2nx2$$BUm-yV+w$z&8TC2aQdPhJ*j0Co7F+@$v&C#UkZ znrnwupn^!i?n0$Ft*$S*WO&6Ueb}Fk*KhIlM;S41j@r1YjKUt0#&rpEi2clhrwn}Y z_MCBBxQSHKP-FnzP_`yJBGQ z>nm0QXIB*|@j$BEyAZ$W`bw!UKdQ%Vgj6cwSH$6<%;PX*CGa~l!Xr9>v2OJI%Wgfz znQUv|Qv?N{)l5TTzX<9B>U`VxCtOM>{^YjRniLok_*E<~|D4v})=A**{ga%aYdJ2j z`C|Wgd8Y~0;{8`tCASHW`zeIjt>%Cmgb)KUkTnJ#nEuhD$nzZ+FS#U|=k{0VPaJXA$vIRR#SDHpwUEmpC|q!I(vl@Wp=K0+uiM zM@)3Icz>!80}~T17gyz4F-PqsN=iyt@ph;Ti3D7j=;c4?0j0vZjFhcl&c(Q(K+8{GE~yuD6)h#@hW zu-?91Q69OW?NH_-VEyZH0*?a4?A`gXI6j30HvKm<4E`l5NYH`6hz4~;>38P6MopmT zvS7=Qbf3^`0&L77mcudonX)gpO`%7K*Y?Zd?5WFht}}xaBI5-YV#+s9jW3npRkK-) zJODDFz0P@k2UbNOTt(>5gdxHxKy?zCkdUhoteE+0gkkgO5=MbYgiv--aw4a+<_eR4 z4Fm8qU*!;z92oyHt4VfrY@&4FU7kot0AnO6DH-T&TUw-X&HJ>q%y=sDYB(d~^`W5( z`c$&HyUBR2^4z`n^O8XE(@2HW^7BvShxHuqF9XZP<27tq)CW{2Xd1?V2gmAjyFP9H zCMCBXlw1O4t0zq)O{dXgZf)%y5Z}{v&OB#=(_dH}mo4aBG|ORXj{r^BUvXUOp@z`s zd$vI7AvLI-!tYE37Zu(EDS_3g)5106wzHqgO<~k{LU2% zBqn`VEk|{O84;Y|1NAkB;WunVd4O~5+{Fg;PmI!dAD|`*=|B zYgAcvA(V@vVq|gR|HspoZUjU{i!Ptch8EApXUlzbcPw!_56FFk1P;Q!G?9Lgu3(aW z#e4{N2YS+@L|MRZ{tPd&5nATCnp&=9aS)|X0^B6ct;@^(ZKZ}&J)t*;&QJGt+NSKG z`do)l{gw59k+`JT=qHEkQWh4B0RaIYggoPb3M1jRdJ4yBi(aD|Fgvj88e5kqC)4k& zD5H`~6Stpr$LV#Q+)$K2qB83T5nl>4TU%T0;_c1N-gg8K-Hzsh@_=CgIn3}^^J~y7 zE>B7Nc_B*wck%CoLaKSx%HRMg!U5X70gM(JAf5FOzddk;4)DZ^-_0}uJZ8WiosDkSFz5RVSOqC~xKs7o;#kM+K z&(oX4wE(%2mY#ke3iZnaz+)7co@AY!d3DdcsXsyW^^bGEEx*OR@7>j3U8`v)HgTEH zOet9R0W)(J5K%~~$0p(ITpRb@>!Ls2_C~48~^Yz0tHvP*$&^4@f;F9q^*3(Ph^wRY>e3Qi0q6A0SA_}QINm=vd z;NJCClo1g6AxWu8D5d}f^4HIylp?8+G#vJROMgg7ISe=C0EiMC8cIt;-p~^qe28a5GVwV`fvGf4eAXqo#?c2G7)nTiN64C7k+{OR^`~w3usv<90 z|F{^=5nc0bJl?0~R3;&&wn3CGpZ3|=w4EJ0AlW~<-bvnt998ahy!V4&{RDUaZ_tk2 z=5MQy#}}SzU&sm-eW~-Qkf3)H#I0CJS+{TBUKuM&27!qX7)S$ydlDwY5DV7TKqw*}L{tr@6zPLIXy@oSED&xpG&F>HhRk*NP}b@{(GxCK0b46==|Uo$slSj*fO#G9%W=yDW6P4^;p|t2g;H`gAp zhSuatSUUde1t2v$adO*}UKz(FOTTz)Eiw*052-9 z_Mt?lTOk+2)Lh=!kVR-!D1@MJ`UtudY<>L{H2{lbfb#F7qQtbcK5PYP=yXgHpZpC9 zA=K|7dcZJ9F* zfUxuPBajqPsj2edFR-4f&<6?x6w5X8_2Lh__HO`GBN`}h@!&lG%50T z+yQ|p>#qL(Wl$E73JLhNa^vp1!siDseojvxhP!xbR1W#N8o!tzG4$oZXone%{>fAV!a@W4bICfFD_WWOS%D5yc@0ibx7MXM8-hl6le zaquaGk_+7R_4Ng=ulaXZ^klUyWn^Tehg7{I3(M3=;uQ?|Vg)nG?@a}MwROeC@87_( zP0_jCxC@^yu}yO!sluBt?!svnQ;q^QYj0H-C38yfkVw1Wt^zi3E67exP1Y}7zLW%j zhMYbSZ2%Rq16Ku!|8-DMQ1K+==wRl~#p%wd>aSHSKMYF@jx}%43uFZhEw;3j#tY{h zd3cs&6JG7csy3&tvHJTMVdzmaK6A{BG_Q9Zu6DMZaXU7ipPxqxSe1g8p`<+FfZ5bH zxs??aZ_Rq`-vqQR=;Px9mm&y67eJZMKt#=y3@iIAiJtE6XkE21!eE^iSHrvc=S9Iw zHk%JF-=ZsR#0dymcxIdT`~A|={=^I|b}KiWvXsip3zj?58-sA#b)nTvs}?(S~jWH1vG z6G2gn{P3X%4%4ILUIcesoSzOi`TA~wL&O5f&%VgC7t4P4Yk}N@2>7)lh-(u zW8C!|B$evv!I+z+yE{9{6yhb8<1BTq+kJkx!kvIZ^7~pXsjZ?BfIxlvN3_}oj|kIp z>~R=L^|{oI>(`Mw=;6ZjohR#KMfT3lmA?orO|M^vYPqbe;*i_4zjbw3BU(ufGb`&i0b#V_ zOG!cn1?v|3Fp}rx*<&>)$D)~%Q-6gYU}{v4k)-{oFzu&+GcO5hQ-SJdP_c*K=oaF+ z$U&mqno1SYpus1@E>N`$k$*S|6tz3Za*^?Q!c5vI(6a_Xp1pkea&SaM&Np(-HnCt! zBPcLjjmKG5rU=Bu^*1#_IN4h-Kpg-8P!|i~Vz}1P6fq(-(qJjxN3dIpjP&cil*;y$ zhpOKtP3Lj3u(6Fm{zFh8WJ?gQ(m@c-CqtqVzO?jISMPMaWmu@-+k1?n@G)t5`6W;q zoK}Yd030C?%|gKCrbe~Ar4fZMnSo*DwU2Q3J-2FuKtO&M67n`UxaLnqGRQW_uWzcA z1N0o8xyw36(MFIF#brL^|NFNQHu{wm0oNtCk{(jGGh{$93I>Q!JN8xZ?+2LB{Mp$V z!eD?R3H6;lh@SAv`uhk(e);8sB-I`L;>>hY*^u773$q&*l_HtjIs^EaCz6s58xxO^ z4-fygHKDdyD)_87Ky}ou`)d}3?kBqar1kaD$w^c~LNFX{fRyu~`oRcVO^~sMdHqRr z(KH`*&tz;NFzAbGR^BUYvWbJZ_OB#D=Ct^HE=&l zL08hKw&~4`5dIGPkps(W6^KJT(y7bV&phOF z@8EMvjos;?6dA?7^c(x-cUPPnHEyp z=AOh7J8Ep=4A*c4#V&JkHQX+J(CD<;cSVzuR$}M69Hp55{H8VL{F<3 z=N^2#)NW1;AlfHaCh9_<^5=LN8GjuwBeAjadY#LtKqOvlE4Zl!r6@ru?g7N5AR%#0 z{P$R%9ThS~J$7>pNjh4yFxllk5Bl2~O2pXch=4o4y4p4HQ5@Wcdbvy%gg9bJ#QG>% zI=3~3r?UQs>vMBKhw`-k?G4~PLSz&uJ?&SA?(0NvqC*BSk({XRj<3A-MZmSS&UxTV zBMiHwrh3NX2GAR%whf{%1mDOos(=(A@FqS#i%+-JohX+|j>Ni&4EQC7%Z3_2a`*jS z9tPmnK9CJkZvgaY6(%4Q-<~P)ZF2FPE+r1t&9IVZF#S`9xyw%5I1s(YiUu+Q zV3-5bke+vTb`Y=$wD1005ak-Vbg&HUatY;fpSfqp*%6J^clq0ya?d{%l4ei#2T_NVf|XasAnKtcBKWue~ge7oS^pN=q;br^;Ss6~pEDg4(` z_+Jm^_I7ew<-%dJnlX$J`Ua(&dac8KNTpGMlFIHwJ;C|wzonsSA>pcM|8lqvYY@x` zVV|N~gwJlEeq3zu#S{cWDAgdjijmQljSh6MoSkuyq+1>ij}QHT?& zuHSmRm^|bzbD7JN`lZgp*-A@7xV+0P7?cPVi&VZaHGxvuRFm5(-Cw*1ib$`bwk zEcgdqb>frJQqu@-n&CRGuN^;BXdFj>wfH?Eu|2oN_G@|U2NqKCH z;KCswJ|p8E#0mQ!5GPdHinXT#-9CPtD!MOluDZa{FDNb{(Jm)q!$wqtx;QX z6|RFq9B)OM)edJz_WZ6}J-8xgNb;}=fkVjsd%3OP^P9=D9})NI#h3d)SuNDUa`6&r z0&68=nBtl4?3tWQZ1Ka;MyW!yWnS-2%(rv*%LQ#$hOe+6m6!jf$AQqt=g@XEB{g3-bO@>KT5#^j^KdXI?3hn@6Qa^X1y_dQT2x$lZfr+G9h8SWfKoc z7?`BGseRwCi2^|YlFKcq&CShMZTsvPSy@ftSJ(w;oalQ)2NXmvfdQ<)I>ASdA%X1@ zokEoblO_VNz_#SQiD3cZ5U%aeKS#ilMfZzr1clI31%;;7Njb^PNGK20coOiMK#Cja zuQ2DaH7ZuRezA?x`-Z)4R7MR}fsIOEtor);{RzW})eoJeydLMzWMo!G3kbpgQ7x!) zy0+1?HCu!|JvB_8g6ub>^Wq4cC`Camj3G@K&~ToiEF^F9enCeBo>H#z;Y(k3H(Dnz=df%gTNsdY!zb zo=to*DW}ENOPBD-uti1jZfB&VI7Q2Kyh;{n`8}V(^#~Hl*SElAx&A$zj0Et%2Tm-9 zlY`Y+A&#d%Q^AD;zWC#<`t8o19$LWG;B~eKg;bNmc*hc`Da0uXsvgv{;50(yVmP$3 zPQ#7)h!AMfOF}3Ap%b>}5lPtiw2yskrO&IMTD*?v4i0)KpCW30 zJ2Y83u-ia-`A5C87H`n?SWa0V?giFfN` zqspHU*z7->enpyo;!HLhvUB!;T*YF5=<# zJ?JiD08xJd$}hd+y+uT>h0-3FPBkDsvqn)adDx=w2Srx_U;mC8-~ zUjpHx_{!o(RZ$YJea4A=(5^0cAjgWe3v|48B^DPJGD9UZK|W5?09I_YTy1K1p<@)9 zC<@^U5TqyZ*s>fFj#Vfp5ql~se;SdZWLR9ziAhdYQdE?&o=A7iPm7IXwY9YX3m;Ur1b*{1H_y|kbIMx-`iPwfJ0G-H zi`Aj5?^g5+D2sD%Z|~SaGi87;5hJ>4P?4(WNCYT3EEK=@Gk_jWtQ5JnYlV`Ir zbic@bvQaZn*t;TosRbi;s`kaUQO3Lc+}!6t9x8&dEFUTvi=Q?2`OPmoPzs<&7Qy|? z1P84LsIH@ZjDi=oFH!UJ29251F+!udS~R_~u~nYcN*_PU)Yd%U@~GJ4e#BF58le;! zDZ|Ida5(f#M!P26^`2q?^iXI91O_rfa^M0A29YGKLGEK@XIBCyC@)^eLs~o6U_p0{ z)hZaK5H(pi62qW@k55so48_metyK7n`Sz*J(rmd{89BhOCH5xe>T-$f616ooxlrrJ zst0s5OYn=Y(#DV+IRnP93??%kU?I?aq#!S!4Tu$+jQ73!{?cll5KMOVB;-d~k9#Z7 zrU&xWHgkK%D?imwx5G$L6LaAz(!<#U#VIZauR$TxVj}AUmS^>B_-MAqKC_LCWun6T z1;Tm?Y&ZCU4OS^j) ze&`AG^<`*HNC$lA1Tp`NLESl=ns&je^(;oyD1N;)N3JM+~&OZpvckbTRVD4~U>Km2cNEK91 zTfb4jkthq^fGB8Y2)UpV^1ToQt5^;&UNv=f25dyo)G}==tk6H+{;%p;M$pkzG)kEc zwi3|N2CA$z1%-snhdyC}?GD$A~^Vudn&%aM=dy@Tl2Td!VUXgx* z(pg5k!EG?#z4-XZaI+^bn*Ol%OG!R4hsguT*UsNt7n&fMH4!g^UU1&Kyn0@D1lI1@ zK4%R`>z-h7}yc?x~uStCG1GbIgA9TK`)<@NMT+$$$G>3MaFCf(k!KxYcn zFt91UfB*h59TB499vJSu-_9Q&=gOfcl0iysD z4>mb}3=j<*AlM}Pq|ST}`M0^n>S3s_W+4j9=##*%ARboTrc^+4ktr#?&9AQj&Oji@ z-CpxvScp%q0{3mGs6`o`uQgw4jMhTjM)vu%mPVlwd zD=#Tf&}Q;o&J^9|Thiwcpg>e%3<`-%f*01M7vP#Ky*yIC{l#iOXUKB- z%ky?^@SP@C7-2cBpuK+WL0`M1;Cq6P1`SCk0l{xU9|V)(IXh;EW|9TD?b?PMHl5JMMh_o~lofBGl%PQ{#Iyt+Jq;=JF4QCA#U42|eWMcY zfFKKfsFSz@mU=5YMgpc~;MNs{g@NR`w4MRciqm%H!<`!uuu8s=)@q={ND%Vm1`!33 zC_p9BabF~OW!a<=RSBmzd}G+kvM(*ju%jZ8n6%V(Rv0RTZ%Fk71@gho{eR@xR+bbI z-&DX!gOEf}y(_zQh;}+@)3R$@aOmpjNCWN-Xp=jiqVqwMOX8dpK^@})LN1fR0eShS zP-0>!7b44Ey}FWe^%Y2m1JJHFRb}0cm>a^cFl$2H?~#LdH!3A1Oz9mODKUyCb9_C+ zxI6Ac#jm64#S^%JDd3XR{rd%C6sUfMRo4Dl>#SR;oE%k4XYQM-wzl4m>E{9DP;UT^ zSFd+rrl6qkkQ!Q30&4KOKJ~IM32KI$?ZQ^Fe>|YNn&;YGGE|iY3TdW+vijHJVmlNX zwO+^UkSs$fgpv?*3*r)F`;xw*Mbj3qLqrrNDW zf$<_B=8W@V+L;1I{&&3CMGU!@9LTZToiIT1@}5>kg^_32Wo;r z|D8#;Jo)DM4ML|7yOjZIh*HoabD2NCfHe9=}u2qLM1ak;|i|OW)~eoq=Pc-8U(p9Ux){QR7-&^ zN6huW!XOY9Y6lEGz!f98if!}m%>Uh-;^Ki~a;qQNuD5?=#<+M?g$Z#pGDbk;h0|b| z9EzI#r&-Blup`^L@&f)t+5;NS_PU{+R!fru;hPbEP>uZpQ!3)aaP3czQSu1FYhw2i zWYWqNdb6=n=t}YsK|{&OU!OPky=lYRFh5<_C`$e^)8#O zy{|ibp?MNyAw)Yhdl(K7N%HeahyYZ+a@}38J+}iy{eCS(9Li@#%o|{04casoY2Sb* zs<-~Jptyh#{g>TrfJ)e9U{@EU44`&kX9~6J@A^TO`v*7({4d~;@sinW>JD&{m#>i9 z&J|1+_I@Q3$ey;@KNtZFmjNusAVlLCk9B6~5h1sk%L2f_&z}TAEAsvOS2?l&^T^p; z*UP&C=s5o50(zZzJG-x?C;ei?PxnW)O#kyh*?1Ve{0yeSHe)Ly56x+TOmC1 zkH~xfpogtjx2ry9h~=54spL!E%;L5k69`*O?3D>4$%-j2S9+)lHusgnj0`cM(~a_c z=v1{RzY^+OK3NEV%mT)ARE8A6A&S?SVokF1*%D(&c%L(bAG$#W&qr;(+LCILFl!P!}*)J5>(*|TRVz>MXC0sUks@EZawYqHAVL3S>I7w2>H z5=0#6GBOoX)tlx)eH&JrSj91Sf2bCWIauIUdH1+f-OYAQ{RB5bJ+Whg*`5<@3oUx|ARNzOX1F9a%8Ytzl%64~I zmwN-W{_6#R0ZVVY$edlGi&lD(!??Jbr@X%;!>m(?AnQDv{#r+w#=|(Jtu2{Ko1&38 zW+2j4pk)p|E3X1-T0Vd`3m|gy8{UPY0PW-f6aK8WzPyL zOXX3E$FP&cUdMcH(Q-LUM&>}?*)T_*fy*Rx?A7rJBbQ;|SPYhZJoHM9fQcdo%BxG4 zE?GdsUjA3f4ipHEBhYOflarIPcX+760f;S|QTQV3q7@xNfND6IB0U&OC7`ScabA0H z7~eGU?F2ts8ay;HYtx#ZKd1T?@^D3z*M{ylMq>#${O-JU2(DU2XzW+Xktc`GpS9DC zi6qF<0a{}mg`~R(fedu15vWpfStcisL>ztxdt4kZLmSN~aMtm1W3ydd((Z0P7Aavf!hg@m7uhh)zTt^v`}F&`VL4{B)T&ea$bZ$&m@?b z++Zk(dI>F?TF?a!4ln3;Bj&QWL*c@G0Yqyb(y{}zCD7tkT_;UIbNWq9)ZFr z3ALaPy+-snJ3SAr5@N z#{A-<-ET}I6N?}*I{LPm#;HRArvVCv?ODpL+8m`XFR6VtB^PF`xRFL+&}-Fzw1*~< zk$jbqk`gwcOfj*rsKKdG09ty*&hIA?{Lb$n$%8=~dQFgh1lLPzTN@TGZoKu5Z%f=-6Kv}L61V}z zRGTn7S&W9r1l=B#P#x1i#|KCnK&giPK($@F202w--R|JQ2ca7|3YKy*`qVLTQL0+9 zlIq0Tf_%csZS-4yGiArA`T;8;F7VQde2dLLzUMo2&~2N9|B`}bDx zyg=`I1dwHjs}Odq6-3rK9W89ikZbjVg1_eHFGB~Ta*+lB_&p^6gzQ2K02Im?Kqx>N z8t||KrCp!A?F;?IOm}YxZtR@THu;J`r1XcjOR$`#l1i_Uc88|s?MB$cdLi5}uk2Gx zPleFbeG58C<&=$E(1$U=d_gx75BR$q5u zBtt3Rg4cDt0RoSTo*qL~RP^Y0IZZ+;qv@@&WDr0WygPUN0RT~huWH=0E6?uig~ZoP7fzUD-xnirAIG6~QO&U&4L^+VOvSQl)N}toZtMF$4dNZMwcLCA~a;SlK zgU5S*WzVDmSz8R`U$E`JgDtm9xr&U(NCCQ_A3*&W2pkY}n{O=*zx;&D#KDi`YT#f% z=`bA4S7A$(&7irJ7r2l%g7`+MgoMbWXsI7Ozyz3{K{KdrkU01n7M?~>kPPYjeEZ=8 zPKQWd9=IEk7mYwr7^ri$g!3xnL|b=*iG!pX)G?qhF<9YcAi^grG(^~Ex{`f<3u#Z> zfR-u+mlCpN(69?{TKKf`^nlRKWS|5Jz)ZNgZil0)yC5%$MbQpM1}nGiD%?Zdk`q8N z0MQ)=FCSPq+FgKAk(czCjle4=*z}swWIyoUf($}H9`sa&4E5<6fHo0m0exO=qYX{b z=ptu3ek)IvapH(?0xid&<8y2*n<_{Q%;DXCzi}T{K^#1{)0TKNcB_%F6p{}B%8vrQ=qe+9&bV8px8@!?dRBJS#djnT^ zpXARU(K8n)WnJgC`H8UI@LmIAz;w6C-(I{jmZSkcoZq;P=S`#!8Zqt-+6ODQ?<#ow zT3QN({sP!B90=kt_heWlQW$;$Fv(CjLfhljQZ&=s_VPfFkr3 z`P*i8ni!^T#C3hKpN7%{QIUw>DR<@Rll-|O`o=m%GYBWUAOg|czc1lLo70iSc`eeI z7#!AZ7?fVG6u=$^(Ug$?CfZCxA7G22W0FS(zp|mHr$D(o`zVQ`$4c~%u zS`c-%|KG2L(Mqc|xIF@i6O8nH!w)dKL*Es?e29)qfxMW33c9#pS^oRsSXybMBTtW$ z~gyX{jLSSx!b)UdaagV@#86&w-*J?iiOoxK#j^lhYZ7s9U|IH*fBiW>5? zC73uEA22Y$i(F`tD-#oQM-cGjzd!S#3-H@7m)_XU^6$sX zfoN(r<1_#Q4;p8d?vlHFV>hG+LIX49n`}z6NBZ7Mluu)?JkLceqx>;A*;?4 zXo!!55DPIY9o!24PIkqGwejF~zH;6hpz=S0z5(?yK6%$%Nsn^+n>UxiRlEQ^1oBFk zhQ`K!C#-l3?|iwDIT#F5S+f(q2XO6zqtA)USlJ-{X%eF6}v! z16YD|o93&24u==|j1;QB_;+OIj==OwC@CTB=Xewp;Xv=b4gaJW#nfH4g6Dxi7I4_z zLP9be%;%LBDua=XUxAkzfPNHBAMqL>Mu1v?7@w*6r3x4(x((Zz1g zE^avL`f|^58t{OIa0pi5okYN~AmI=G8!UASh)>*V0UP3Asi73urS3g?G*~MCy9w&L zU%E5utkSpPP!uTL8@g^vgd*a_J1U@mMvDbx(+yK$6tq}l=jG)gUOj64-p3Eh^(q-KC>;pySJt{1*KJ(*mXU37RVr>OJkR)tpP= zzV&v0_7y-AFM%#XsC%g(e~F;Z%2%G&wXp9e!)p)V0;6*$Z&vkZ<>b)7zk;z=%*v`z zT(`dvd|^PEC~k?#OJ?2zDNdP>V3M>0WxF%+no;qX4?SUd@Sx_{Lq{idV{!5RmG|&S8n%zwg@%cd#;GgDE)vK7aIs)8v z3r;+QLU>un6`=DS@)xr$#|qyU{(Rj<(Q{c|Cg*<;A9E49FuMiC z$TUra;2XH)Pow;ylLpCpFy%Mx2BPNX3{a6mXTR*=Bd(U!@k9njMlmQj?0{s`)QP7B z>E&Xg$+zi+&DAO>z2F@pM{%AH0FXe7|0^h46!h5hpOT>#!SqEWNOZIy^n``wvFN4d zU0YW{)K7R33n{#0r~_`F&EyHZg8=FaBH(H+51WgH;-_ZWaDi~n9v>NJObm?$U!g&V znJU%|JUT%kA>F+Za&-7$;Fyo0zb*A`S2uiXI(E;&uj?v!I__oOPWAOM!#u8S$MI{oa z-n>whm_KT|qM$&w22lWdQz5__q=@HiQ+$a21xsr#GFZo3z;0M2b|*R89U zn?2oq>NF_cqNL#)++B@LmZ>*W>>ANO*TCB2!mtBQEV8;71>)VHkKe2cMNw-1 zF;5^$c9z9*5}tRtzN6I)eD~0sYJKQsq4Yh(jciBpQ0!P#y3^=W@M}H&=$WaI&d;eT zM7CNEMdU{ud#vuC`e&Abmth02q-6JGHUy*Ld$@bk%7UrS#)_KrY#as89A5Wh+oO2% z-Rk8BE>(ul|I_cLF}?w0PQ=@-p}85Q&T<&@P;D|@2R3@#4X?K?@>3rb5(AkDK`&-O zB{4=A(0#Z1>|d`l^7E5`7emY3UM=5x(9^+erp!Y?Pd_$JFlV0f^~#tml^m6v&o^=& z7HujOT{ETg<$J$*e|=1m!qclVy(51IMw-t`x0*e;-Vq3&HE5^|P@@WFJqc~phDo0m zSpX=`=M+oU8-_QZF^itjd_ICaoT+>+e6*X?bC|AD)j3^-senG%aUA?PKXFNL&DZ_c z`R;^M6B9XAd)H@FN6D3VY*$lqG!?r0g&$dp*U}+wT5_bt(@9Iexkwx`(5Y4JrE1sp zkR}cv=5$==^gZGf+jEWy@Jc&x?&jP3n)0cW+G-}gW{fp78nX{&pD_|E5-CKpN=ued zfhsd$W`n(iMhX8gLXwe}mxz+JEqK#lsJ?#m)U_7@2B;XRz=pX%Q;1Nf?W@6MaAYd; z1^Zn4qX!*&AIu8epK(`H=TKz~+3u0W z*MLqh2R?7A1w(0-UKRf2@yZ@p}k!zLWm&x4sLjhY%4>?V1w3ju8xMXUGD`+*Y z*u$$tWbW&$EX-s_NreP}!X87K^#RbnB~$ru&;6t9C71V}-q_rP9-JsmAc`QCS{)Nl zF0UT{uB|oqq_&`6>)faxR$G?%eGfY8ZQb@na_Lf@Xd737y0uC*x2pS)W%b>%JB_y*aB73LhHL+`CZ5{P5f1k+RsMzhcxkWj}b-kiko#I|~F=GN_!y_B=HgQA%md`^Q>i@RXr>Rs|y=6^qChF7Hab=DeHDjvyZ`!;=|cHaZfwhA@!q>85708w9@p`8)u`!9(rE1GtmoHN%J<}sJb$<<7w zx;z=ivy<79@0~v`v8E^}yc9F`Ym$bz>_Sss-dN!48$$4s8+v|8+^x)GZ%>S~GY1Nn zx3OAU6DCp__k;Z6Sq1}*+OcleTs8G(UD02EiUu?rbBte6vw4QgcqVg_y#IKp;_A(z zNyZRWf$@I?YDf_^ko#3AB5k>NG#O&b<%6s7Ir9v9&}$>KGo%)PebfqbU& zLqsE>Eae@6#Fi3fE9V_zz!6j(P-Jf{$9jYnnqJfBnf>0+&U%xBVw_NHALPoNm-KSM zMaXA3{Jsbb^W8FM%fPgdyI*QWPWZ~;S-rX!xeCs6DG(WYLcRQ9PKh&BRo!K9Gt;P+ zY`NfXSH`-}?5T34fY2vp_xGP8WqrfLiO^O4eZW&(oD=Bw--~CbdB2hu)(zYiTv;#= zto@o-#&a;oNQxl$EHfqx66u*DjaK=P3vbs^0rzF){! z=ygcSGFmGvvLaF_%|=-(-x{A}x~4MkZKW^ds9|Q?Fkr?$f4*^g3XV9v{rz$1X?CI~ z^^LNJi7RG@Qqb7GUOq5d6UukRP2iua6|)tr@i?;m<8RmS+ZXWn99d%YM3b1HVg`La z1Qlc-IbB@80D4Ey?_c`RGPqo7XsE1=tisHw3O!LDfkN~7C2CRBl{Lo#4U!zr%XQv@ zfhFghC9)*@xx_9Ze?OLucf2TH$bs1A0xOlalkXd2V<=KGY(296Rfi5^HdNi%KkMzK zqL^fll+0e>j6h)T6(W94s$b>5>>`@88PrXmW84`(DtwA%mTg3#rZdYPsE+nG{?4 zX_ig$A*v2-m+QR<3};Z17gG1M;|rJ;*jHZ-{h{}z!(T&>8O~V{lW21%VsdWSs9RJ? z`&Eb!6pb<>>QngW^K*X1%O7zHUBs~OZ^8!coch5L(WdnEnY-r?8BC}&axU0%xC+ac zPgm_)VnoXrs32chMwG+L;knG5JIBf0k>ucGhCE_oku0UQYAS403zun;b(yHXO_`n6 z)`_?=#%z6YIR@?LraGgei(oFnN*AQlzrUlmnRp_qAJvi0-r!Jlg#AYHO_gR45H;5Y z-qR7jj#qX>Z<@IH;gxeJgR$L2oU1o(QAWV-BCaPpBOtrOfj7L>}k?BFtn@J8~;ld(08+@apc(pORc0pjmw{IUi zi#ANh=^V~V7STDZ2aNwqS+tt0>(3u*#`|{MS!T4oqvebM5`omit=05XD@0ZYnRm=9 zV9l&7rPwjk`W_2;4%oqUiSvjmz1pecl=HZ+Y_fojgPZ(K2fI1DU%JTOlQ*Q7xL5_Q zWNYFN~=Q0K#;^>O;{HS4{U4^XzuZ|5JxVf8GoO*5R@<{m=`$S({{$m1;f_Mqj$Zd0)5QXtux!(zsr844VZ5kfbcq6GG&^^M+7R!L6MnP}gU z)Bg9Lf{Rx0?{0USh>PguyEuNkMm;xn+xDEilh0hekx0Y-?`yJid%Y*!B&F;ac;sr$+(p(^{VdF>;dJPKG?Nk1{<`@OO4L zNwW8v{d_lhh>O3E_jYtVyL;2wecLZit(hthk!frd|MIO)1O+X+o1W-d6VbV*JJw#H zlMgKq#00vEQ(e4zOnO$iIpzlZDzZ1C-^T=nr(kz*)$R_V^Y-(ac40ZzZ zQzuSH+)>yMm<1#l+=T$WF_eW$%QC0`wCT}Bsf$+B0^HUOe5JD~ z&Gy}6vK|$_K0asRuR*|OIPsRf4z^BRbR2mM?nI*CP_D@3HVBcMdW(pP{srV`_wFlK zxXq1?agd;NA0CuL0oS3_Zng@6S|m@Knfl)w1*6sd7u%l-RNkt)JTlt z2?4r}wCLt?&)6YVrdT3Q@M0b&r=ZrlmbfKP7IxF|AXA8isj8}~gj_;H-)J>xM)1{b)pS(NXjp27RBu6K!-X`i z9OmJL#^Da+lhvYL2>Ao35`0Y7qJJk=$8Etpz|kv+%LUQ$0HtMel|m#7$)hJV2YK!D zbTiBu$bb|k;9oGNFM)zDo=cL(7b?r9qKk*{njd9{@F6YFDsw z9_E3deMunkxx6_6t$eZ+ZN6#LGB?~wL=g{mseg=!aB3BdI0}iAm zcvTITR65t7t6BhGDKh&GGXf=}7LyA1YcPr9Vu_D~oJdZyyx>nh`LuhvCtu)7+4^(^ zZ6ltE{-RXOEs;46VqQS5+C#3|UW0jc_*W4+-QFzisLHCa$$c<|Um5sH(MT-ABNzqJ z_%3L`LB1Sn-`-4qjeLcqU)L-0s9!IlF(#8|I-* z92Lm^6pe&4X?V&x={}n0&_^Sc)BrjP%A`VbF7R zX!U|+Iyw?)MuEby&r1x?BkQ$;Xgff=ihz7vD0k7~-tvpO?O3IT^j6v+5Hm30wj^Z1&`Y|GLj6DDlrUU_rJ1-+Z#ct0R-7(Dr5QN$?ko2 z5`=^hMCNxseFKOB71KE=*!W#8la=_6!2^H_^;EjxW2*GtgTb&`3M<>8ayOe~dMgUvDuOxc997 zqf!dj9CisZVtgWb-QEyhx*Afzq%@^Oe74lXs$2wKOz`{Scx|v>w{9*(0jcor0A@+$ zXy)di%Wo8QmifIJu)^>d7?DaAKqNqkd>q3@rZeBYbFw#^_0bKK=cFLYyVocGva3(LhmgppPdcaOEDf?5ya8tDgEr z#xrqJ^QYi1eGaY4&`V$rj*h)Yyd9ICd@RFA{wqwu;mO?(DSDOZD+7`9CPSHw2@>4> z-VD=|5Ztl1Ux5Q>F}S2t>$oU{h2SPx|%=>Gn# z!m0T6hxzu*=(pSa1sTt7n03EVx1}$0Jd*-{jMbmwlM!F6!B;@^7k2$=&@~x$C;2GL zKxQFCejeb0+^j=P5Loss9xef1DCvpqo&el{!6byVzf}rxBh{`Du-kP2O_gnHF^R1U z2eh^fgGXImav;D+tBSpW#sHMlGfDC!h*5s6kDeD|;eX;m{zk-9(A "139660436098128" +"139660436098128" [label="5"] +"139660436098128" -> "139660435887760" [color="red"] +"139660435887760" [color=red,label="2"] +L139660435887760 [label="",color=none] +139660435887760 -> L139660435887760 +R139660435887760 [label="",color=none] +139660435887760 -> R139660435887760 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435793424" [color="red"] +"139660435793424" [color=red,label="15"] +"139660435793424" -> "139660435791312" +"139660435791312" [label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +"139660435791312" -> "139660435793488" [color="red"] +"139660435793488" [color=red,label="13"] +L139660435793488 [label="",color=none] +139660435793488 -> L139660435793488 +R139660435793488 [label="",color=none] +139660435793488 -> R139660435793488 +"139660435793424" -> "139660435887824" +"139660435887824" [label="18"] +L139660435887824 [label="",color=none] +139660435887824 -> L139660435887824 +"139660435887824" -> "139660435793616" [color="red"] +"139660435793616" [color=red,label="19"] +L139660435793616 [label="",color=none] +139660435793616 -> L139660435793616 +R139660435793616 [label="",color=none] +139660435793616 -> R139660435793616 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_7_dark.png b/files/ib002/rb-trees/rules/red-root/rr_7_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea486447e9bbbeae7707ac0f9c961544f543a1f GIT binary patch literal 31255 zcma&O1z449v^9!_2udg&B1j{Rw4k(rAf1AAh;*mYjYzk2HwZ{~gEUCDNJw|wxjg6G zb8h_i{?B$l?q@%1ec$`N-+bpBbBr;U|66IX2dIRoNJvNzUW*IMAtBv#Mnbw#gMtkI zr-og=9{xhskrWd~x<>r-tu8AZ3F!&aYvET44hfqx_6`dAS692oBYLb|UN$HUe;$6x zr5O^&7I|qW>vYeLCY${Z4tDY7$h&j7+aj-C-A}pw?rj`)0}6^4B@H=c*w1vz*e@L6 zT?ccd+4LR~UA?irE}G*j8B*3JDc8wQoWK@zM6>XHxeItRm$?qDO*$xv5|CEWI(^MGKUymx4Kma)wFD zKTbsvnHhc7EXqnxUtaqfC8??T_|Ba>%WG@$Dn^;<>9<2WJV#C1R;;v{@qca{dU<=x zrinf<8IvMsVF_Da){~Pb`Vto>;feg<=ei9x4o->nn)LUNQ~f_|H@F@5(ud@qcwvsJ zX2PSlid2}`vb}IVN|%hTc`YHaI8mZ&I`ut~gx9WES4=4~nz=wpa;ZJocsTR<$6w_s zAE!8kMMX>P|7t1~sP&cVCx1;&*2>UDB@;$L?8OOb+Mswce;om<9&<3^^To!`xAHaX ze4c+8v)Y+|)nG8VZc}bPmt;2cW2it~S&Hfr5r^sfCJ&j3TE{@GG88i5=T!PKD3*oG z5Ac5`v*?QIvc{@3xZOg-W7O-3Dv%Jn)sNG__->nufgxDk{Nq5A=iOL-SL8gUf~fs- zFU-Y(*OQOPBXUMfkTIlno4vArn%KG=42t!}vT=SZiugE|PrK9+nq|FKGf`%UA)m?D zk@UhjB81Wl^Rq;E5@t%SYFTFO(XTvq;~}qVYXQC0Uez1#_S}k$hpB3Jn)l1iX5zfj z*c=W=$7$&4<$0no1#c5pzl+065zUZeF&PoBKUuVfAgMmzF09?_7RXZ^ymhkR>w2)k z`N?uA>Dz~K#(ec-O3pc#@SzefO!9egSgn_^m{@qy)xAg5(({MobKhi=-IiBZ=}0yL z9P2ds&o|k&Ys=WUxw)UIM|E|Eh0>8oqLAGTXx9sHlU;`Zo|BZ8Hdr5O8_87+f8~i> zX0<|>@l=r@zOOw1hdw(y`~BYXYYHl=Qsd!qt6d*V!A7@gPajOOCzO=ly}gtXQBgx_ z9j*!7)}rg;iv1ghdrfz(x!f+e*bM81G&G3Q#6p`^tY}Hzppaox`dWIUSo!<=>*=M3 zCnw7kX}Wrp{=OXhRiX7YiX%okaeKaETvH@Nj+W&0e|=mB+4D2p=2O6pTgZwvfy{*? zUE$P|mF5EBR4+W$3JlJVNF>A_3Zi6eMwe0xV>+L%L>rC%F>pHkBjV=vdC2nOPiNTE zm_CC{so35S64eAQOTl$tU{qDA9ucANMj?Rc;_L{OnTAaN3S{rYw7*`EzJ5>6hTI2`&Yw)ZdH zA3l0CXi`BzP0eOHaZAsDk?h&C-XcdN2}#LVj*rL~{9HjiwkGGUE@WPBr3@f9BG%lgj+C6n>OH=?3Ga~)<=-x-j?sot!f|2@_zo1CaLCruL# zMxH0VKJlGnyTO$x9ra9ABAMUyr-{C^ESa!T*uP5*rrn*KoFwLnSUWD!)iFU@EA+Z7 zfKb$_P%|FO&(S%bWq9`^;^c(uSEYGY=Lu{*Hm$SZ?bxvbbM5_AhJc{U9)7oR4eLI~ z(D593A~^gG4qTR&B@)6*t^VP}FPtJEP0+H|V+zuUzzKUr!NC!AcDNCqSf?Jg>pod~ zqIK=$P4y-Y^YLS8$TG3q)>P=ew?6ryq>)b|*==>NX2zSznIbmN1F?DHi98juISR!5 zo7X~BNc(H)MdLlSj->QaXipd!rAvgS5wC+gh+Y_z z+iDrbt|l?_P5jsR_&jkRT!uI{i}_DzkCS<93Fq9-3vT*fWkGTy=CXJ@cpu82c`4#p zSaK0x?6hD^yOdc?1qP8`Q*4Zze}n20*e0l?gd57YM`PY_Y2LD{%lHJ5PXDZJV zfGKzqiP#4{L=5)DJzxKs;yEOHvm2@dA`wG&lMsUv-S980xgq_is;UOzvuLc-+(?7? zvH9zUK|l}~5kl^T=|+vX^}%Yq`Ebe7N1IKDc(_or*F70o6(cG(>)0V#Sl{1txS3aJ zX(^(1FxBqxX=`gsbjT|7L@}(-)Zi60T(uV+ui*&#y(LFn?YVw;83iTf?q*qdWJoH0 z+F<9wy8Pr1TY7q>{I@(I5IBOmtRfBBHc+2N>6w_;mb=2GlK5h4Yx%6KA|~x+XiX~O zRLf?`AgPv@H>nih{7Y(-o6!ZzUMM>BN-q7uoU@(f#`4_GN6*wN-O_9*8XQ+5qt{1r z9(f{Xz|xie-9{9B2^DKu(`j8Fp1N(i+S+KmFmcGzMLI)nciMUY(yZTLTE~~j3i*Fo zkOpxSxkEczPIhHVEtizjvzX>*otDfkK0>5kA?ox;4T4LhF_m8|885t5{H6}APb1fcsNSCa*3HTgP z5K%W229f=CGrFZp&?}}bF#2cR`P@AW48x`N!yuw#E~h%pbrt1w&AK1G$pWFrbIE<( zk$F{XNe$ugL~6<;Xk@KgVUaJ$1bs)CT9NtFNzZ7v z8w>`?(@K>4S^pO+l389K}3b$Zg*Y2hO=5xtAH# z^#tG~>sC%hhS+@u)a3KP`P2DdQjb0ZU8wxM$=4+jd}LlHy0HkXh?Jh5zB8e#yFR(k zpRYvU6Xhx)+D_hv5ol7OX4X*m)Y#bA=8w%?!+|9Iqs?R0;`v9W9Pz1>UYMzb2w=pe zB`C;ud46p8^V_SDJmqL1-#wK&r{^EW-MZ>s&n;?Z_y;fv2wvCNeOwxK*f*J{G1(}L@@raMUtFgm z)?JL%FUiU7ic3ZnYK7HQ-aZeAhD!A%)hg=|+4h@KURVDt9K;VQWd;ufE^SgJ_?ck0 zSP%~yoeAj^5U3B{@DP+v=J%e|5LQ*?M)xI&FL>zNBCV%K zK^W}Q*(px`^yzD9X(}?Zq+b;uthXx0Q-{|rCQTJ)tua*l;=yR# z=Fz6J0FX`~x@8zDmzbFudUdq`>wYh7p>_4|1eNgl$!%2x0{M53)n3Qs4@GrR{fRXv z%iBab($qw#{meWZAx!tN6tB(%QLsE%_2u=+S}CF6(ZX)7z*#+*{5WQ1%flb)_g+wy zRxLRQ@N$Y6RFB24e1{|Qn=|LPHpU8$*SXBaMC1on7VA;-WIC`QpOC>lccazHjb3F* z+wZg!nV(&t6N#0p@dq>S>8TR@FtOmofQ`06Y_$7&tYMPDc%doB$6w3QyP0uPBL`LM z>aq*byYQl80Cfmn2KmWq!M{X|LWoyv8NL~B~aJ&dG+ri z0sroll9lA-QB;2xke{Cz5Ogga;g1sPo1zp*z65;^^S?ePyXNn9?*q>1#)j(`Z%Xcq zm^?=#Ps3N#6iv@Z+zSVBuc}WH8H-)i$?vy*Rk$3_*asLmGO?m2;yo^pppO$mA&QlN>w-1g<^c=+Kkg z{lpz6>+lJy^anM>>6?F_fqO8Gzq4l;&ZM<3oc$Y_H(E1f|u&q}uZ{WfXHvVUJ&4;zQ>IYxBPpCn8{4Rpl1v<^4MLjj+#eT>^%`*W%3 zEz#yIE6Zn8@ntz`6#B#}g@364VzE7hq-C*960maBkR{_EU0n)zh_vNt#E10$BVS}Z zNHyrAFz9sgFER6!kOO$9W>rS1dtWMN^cJ>Pbg5IdEWjtsC*mAao@EH|(sho~F3`C#o{RepXb zq9MdxVx)af1q8I#xuW%Q20K}TeJuZNm-}njF0$&5d_SUB1~wNUkCq2*>_@ zr@dm%n1$FZ@^1*N>m?#0vfKF-gUzsCqj!}&V@V@w1xs|VoTojq3$a%h1c>_;V?Fgr zQ_72FGb|jEWsD~}sq7NQP`?wL_#d|uM%<1LaPmS6sSadB=$sXK`f*hC{pLSOcRX4d zWorOf;0dTsaOC%3nnkq+bZUGVX&Nj{JKt&J7&(YIxrikYhw2jrqV!DmW%+R1Y8zK!&wcUPdgcnCUP)zB~`c{_56!~69&WveX(3> zw_KItkByC$5Zm=1ml~X2F1B{o&p==l^7jb9Ck)8>IgkVKm2+-HhF{DCYsHGz@+@vW z>XDG8B@u;A&kF&2r3%z4jAm;m?}Q4RE<1#f3iR)-&|{0Q2o%Mp8vn7euwOaFOE&sc zL+82Vfeisj3{iu^$~kRu3p!)H?P&}|YDLP)$vOBv=vg`ILi+v_P|D2{!fvZj^ z))66Vc;+G^WhwLb!zCqu8x^Ie40rVxGZR+Tj@Z?36^431$;#F^zK28@FE5{HO=1iB z&4nYn6==T}AXFUcG{=hOUXB+YGg~dwK>syazD}PhlZ;!Q@fX)OQOf#8V6Qjv*q`4? zUs`Wj?rsjR)5zt~D(7Wv-XjwX`L~~!XNTNQ2NOl^M-F`X8r1>Nyy^_4ca?t_k9red zPtNf1iwA996!J-SXRo369f!ArPs#j0@7{AM8c#m1eM-nci#V2Kq7dS*gp0<*6Ep&K zJ3`*=utfK?&DJ>&ZX81Dd(3}*fp+KNnGaD6j()0CLHh&Zk#)wiT3t0nrum78#wT(` zn(szT4jt*88;k~1?*!s8k#llJlL>8S)z)f!_Nosr7`N7PArID&X6?H(vg5$$&@WpM zgly`I8g-JOp&D@3D-;6V`&%5=q zaED~rB!(r&>M)d>v5r~I_G1Z_MmkDu*!p)&qKn^mRUajHuKg44>%s6&4dCZe_)qlk-6Q%^S++&v6Qr0^4-7q2)r*iO`f= z0~3{z^-|VkUewo9I+EkpS%J^d>Z3xH4X^GG1Z4x_P2;MR4sUIhCG8^3fn1AQJ>)^llDm%tPm*CZxnBp3(q)oo?-Q`bhz1i{&Ntpr zD$;BL_|5IG^G&7$9Sx1w9OFfzwAlI47GQdMpo7}d8YgoFlVxJi5DGuI|6MKStx~`k8mWjVD>W+}g1cR{VXn^)>W}0&`h6(n zAEF(qS!DB!On3)4gVsnBfbK{sti1xogz0zQz`M##> z;q&h9?uZcEt~hRzS|vHDM_J+3?cxTau{VD#Uuw!{dE!Y(8hxxR`-$I`mub|UE9*uk zTmhKguO~w;2cLUSmP$I|rJWrI5N%|foXUvBX2=be8OkI%o1xm(c(UlW7k^OxK2&lQ zfr@WTYpA12JL&WyJXN>zvhUPk)F1V?s%(?BKIMcg3l&GyyEEnt-Fsvnfe<5%V$kpX zt>+Cq+M3!u+c0N#K01G8*{^PD`b<9SDn5k7d zS1y#}k&7&uG|g8j@dyY&rIJY!*3lu4=Wr!?E5b3kWne5zRxxdc+(ubEgqdQKPNyrM zqk@I?%3G~(dFbK87mqo-i9Av}QOU3?wYI-O110|YH5r@rJ)i>)ep`|n_9w`~_4l3X zTy~m>5ul|v_Ae%&xZi`i7Izw5_2e}ep{hmXjvk1MFG^u)N=WF8xu(ER*oNiKW${)`p$oE;Kj z_l5tq3s+U}Q%y^O$|>?n<-l#@i;|d<3cgHKq}=$5PF>SC8wxVv!|z&9zTKPOGk=M# zzWtWved9M1+lsAGF2_9zIEIEp>4p%yz>Elm5hE8x1FHC@^U_79;>WKelY|kY$*f_v zoLcOP@tz~3Nv5|bvJ6lP7YAxD_9V+eP^oh|Bo}CSxz6QgyWEM@YrrO-DP_F5;fG;{2XIEllQ= za*KOJoqNRpeN@EhOmHk;wI_&Rm^oI;jikmpV{6){>$whh%DukSaI+x2U@{MaHjx;< z#~Dk|Z9({n_yvLpWcup>r^f!T!RAEAC5IVA)tvkFjEI1ere^=)IOnc5loP<1)yfXh~Tk z=MT4bi@C4aC7%Xeu>J5EXvY$~T_B|jTSD%GUYDGnP63C{HY1Iuu)I9Nc-R2QrIu{@ ztnXUw#3s;O+3n|cRj#Zi+Gp-Vqx&;Qp4#Td4;JejwZ8IfqsQfH*-KF$ti3U#W#E-H zK+}OBMA2|vnsel{u)E;>0muF)@i_Eho>POkj7*0q2b<0Bx5=Ry$f7FUs_%oABSHs; z>FMZnb{8q{lbj(1;xe4|tkECVrxOLojGFkUJ>w^pM8R@_y1dIv!ZR%a&1+X@=UX0$ zMhl)qz*Q0au4ms4cfD_tY(@gG?P4Z$TO~RJvr1qBY_S_l04`j zC;KJQOQLsZWVv@CKZf9UPUO;z*KXf zJ-v)F-O?xM*NEuK=HMN2&_xEc_(pPjZ5%qO*4Qx|&y0sdl>;r4f#8MHeMkc-AWrg~ z{Z0#5K5JWO@y$`M3>naD2$}Lm<;q9PcRjqh;>w*rDyLl7i6f{%h1fAsDXC{j!0QDB zX=!Nm?kr%GeNg7W4fJjnWJ9p2kU>6K6TP6%f$kwD1|Jq0bUxkQ)ON#8z5J!4R=}u< zj-EA8I{K*j$=QN5z3;i~3uF3}axA{?Z_QpZXck4EoH&SB15qn1EPS$g_#mNXXvC-6 zP*;J{y@5$7G7hDhP#MKC7V!dzC@C|LpnWQUFF!Y*C61I3(bi5$<<`+Lc`GNkST@ci zn|L0k(4ziAsp#UezSUtm;`T&t7AE=5oiTqFK^kB`D@#f&WBNqgNUv9-uSpH8v4Ccu z2b~pUTgx7X%AIDkfm=H((Hj>@>y?X(i!M%n=ZG(vVHi}Hb1Kvmf8MKyba=zwPaOs8 zBYAVx)p*s$;^h%3HoS;a99h3P zi~mz1`1>92lntmD^1pSQ@o>?%nwlVOQ-h`r9c8>`-Pv1N*%Wa`B-kJTeO>+iN0ayf zeo1Y3%+QO2J#Q_z%HCigL5FBh4yE)$VRUzO;rTBw079hio~#$VKmdioA}y_7<;K2K zTS`3AjYa^_;Cd_lyu9Jz;Y($fR1uLwMa>fNab2C8*D^#kiTbNIx25u5hmb10@Wy=g zR9@-G>m-pZ{RsTv0BU{9c@l74X55Mrf3#_QyGsQ`Po*ad zA93`A@&BDwA9yX6SfJW)knqlmc7#;Yl2AU8irK;T_BLQ;i$2w_RqZlEzbEQodnOP_vRl5%+dXkOxa|PD zm?EMuaTnuJDs8wBw2iGiJG$cGgsB<|mI@*;?q*6kMnSSoaj!Rel8v3;8<>iIM;o-u#!$aZ}dOk(*j3NpEkt zYk6fQEPUzO^*ACO*q-MbByw_c;*vx`qkrZ;YC#tyZBik{$UrHRg;tIBXrwWJkz8)t z3|gb&++}-fUWQd zbVFM1r!@&l2f(y?8hl#5Z<}xgPg>m&F@TWS07)246qCsay!Z^c^~|M+I|E2RAQ>dC zuP*U9x9=$xYGl|@)HcF9dGL-giIE9%Em66zjjblruw?&GL#l@*i)B80r=t_F-Qa2P zlU&$!P=WLapc@1;T+gP)qb=SY2R;e0JXYI3BL-I&jsP6cF!)a}fm)X587ktV!};(4 z3o3aMJwp?c>A3I0z0^GUjjDIOOmwM{GfkeByZLPR5uod!paUOKr2u)Ys9_c%i4q97 z5hMC}=xpTG)N*ag^Tz7VUx4P!!WbRi6N;HCu~l>>KAur?|!|8x=S;%tv|92&(>i_6BC_Et~yzTj_e@k`R)+V;>GSc2X;pUFjZh1U^b?*DVY%+%18W+@O zjgJzuZ6j7Su_{Uu1E}=SAsUFps%ZN)KK|533jjJMBjLON7f1lMG^t)ri7w~|6%g%d zuDFB*YB)0bx2bDak<*6jH>*Dm_4J;}T@+_4<*gh|@qUep5`~7`0uGA7fLrn%H2x-o zGTOKTx{N9fJ|#_28TC6#kpcQxqO9aW0i?L2PIc2}MHGD|EB*0miw^TQX59=P?zc3T zyhhwI32{e>ca?#Z-rf@jJY)Q)*e}F_zJcrp>PZI>d#W`@lF)WQ!aZ_~0!#twjbx?S z3}8>j)U>qI)%cI;Sy}r~pa2Z<4}6Qb9U6b7MDLle^r!kA@z5WYkIcm!(~bOfkLL#X zg`Mik%an)u4AQJKf{j9b&6}IM{h#ba8%=5XzU%AI={kc*l63*pO9tmm*lBNavGOc!|RP()xHAUT)iR#35U)?md8D#Si zAnMzgg<4)y{@B}0xuv(Cx7OUnoa&5fHOcEV$zMGFI%D>b&&;G|Mq|S&W#7s2hOZ6J z_l=fLRNmtO(wWtKV3@$%vkw$Ii_1xif|AmiCDniOoXTnb!>@g+KMARk2rWG-)@bKe z0ZD@0WW>+sfjp3qWMpKYfzbH+1ycqDLtv0VjQ|l^DGw*Q$Gc6ZNvFhOwKq1oXTcbq zr28o+r|OLOS{2?)@-y1KM~|I}6~P$G5vF6f7e z$h!2Sz3Wd}G{i%sJAPK(&gbWvyaGoI@87y(Mo7AOd*it7edGIc>8~HLvJQ3i@b-el z(56#zqDKtozMhCTk=|7|`$*7nW6=O6uuX`G$lPvlJwF<(u_ygAUeqy^5tt*J=7Z?8 zUx`C+61@%tbjIq<(nD=NY$BNq>=%|e@Vsf}b5|4;6vale$gpV$bHHtcgrecYVaJ;s zgLcX@-6&LId8690DBBI4lwYbyv(7&x#9(*vKET0$37#AgXu_4sN?$bkxI7rXcXqVpJ7}agS=y^rG=>Z1282&PNejb_V2pt{)ep=&4yMGVIE6dj;nXri zWrpUpnoN?>jG4f{{9DNlM9uTw{*KDer{0={g~f;aR7B=PNn4u?G`EfwtKH;l7tuN= zTZDlidli8)sGTP0Vr;+riC~E)6=DU7t-mCvz{ZVRpL0jTmE?|%mCVsk)m}ln&YX8O07AcTB$5{Mk5rXkE3 zAAEOlagrFf5cVL~YkXtH8&9)!%Z|@hTur*>mN#FGU@@?PAv9ii91UObq zya7(R1K}^bPIVUz*T)Z)@*+Ve1LhH-ydrFyC`fWg!as){>w5Xsg?W7wp@?h_`6B#> z$&MQZl{wkj^L?Cijqm;5&(=C3f`$fkWfT*jbE-uQ%xrkX10~;A0*^>R=CTb*@78=q zw5D*HESvqdFDf;B8YEK`H7rdgQk+=mi#Ms83JN;|?)4snM$2G%Q$+Z8?m*zY>R8_W zqNyPMt}^~=*MC`j@DbT2sKJ)i)3sM;)v46pGXIpK+mTR8gHi<_PMbNkQCkVqYb^>s zQ!7USn`gQ4wP@Pl&R$Ou4LtXP*dAvJ3gPZ!PSC)F9cvGQWtL;GA@VC+PObPJbFvvo zQInH<(8?#ZE$!04rZ3#xt4u*by$4_D^Ty}XJfozr(0Ho#OYmZLE!q7usHvC7hG~P@ zj;pa zP5*t*vJ1Qs!fL-T!36uL%%Cr#8C+|?E9YixXfR&MtGx7A>-%&f+@HH5sp{7g85!C3 zh3wdR>SN{Zg0J;Gv~cx%s8~S?-~a-nkf2}BVB?BjN%faxb~T^Y4*5dVkksgih*q%F zB_79gVT*u#0lt}p;}e9s3AU+y!`g3n-TQO3j@D2ePPc3RA|4S8zW-7oPi(0fQ*I=c zG&RBMO{horgJl|1!Tg%j4K{7qF@Hb5_kD2{c&;H}Jy`G+E4JHe6JRXVpc%MEbm)zr zJ)x}>cRIW2gHGZzYN7~s;?#gn*fI_vr}bjcx(3(r38Ozf_Y0V10zRb+l+UUKpD3=x zel&i!^R3GLE^5-@`pW`hfvfPF_dM0J2i$>{2KYwJ^q2W~P5?WwEfwOjb+qSx$dVTM z@8|YhDte51p_&8pPZ*q#dZLS-(9s0|v0U@J<8RGhP4L2!M2I}a^g6rvJ5?DvTX+7p z!R-ZtFa{$xB960f!aI5iP}(6Q{UlZEO96>pR2*98nD6deQ@+SoY6nQti9BtE?D~a2I4+^y)dKKe5GF6d+!KhakNN14b(1v^_g#`qmjZW&?vWLO z){TYvn1N~OMxM8_WWedi$Pc=eWsMr0nHIM&+S;`-7E_M{ap;vS!1DpE?SOMFIJv=T z`F^FF30nej3o=lvH0zumk&yH)wh^?pwOyW-czN9h+hMCG26~!EATDYqP#biR;4Lj5 zV+a-Cj^W=w$Sd9(8u0#m)GaX-h&qXB_Fl@AxDb=Z2}#SP(FDAE zLfR>+DS9cdR<9G1-FRNj)n5W`gW@X%TB=`Qpl;V!k;ZDF`lXJ$12|oRx7iT43XO=C z&5>haqzVaRvAmyC%v#ym>ucDT&w}s3$AKO_M0WWbv=7tCQg7$Kmvbqt+1cXTRZHkf z`6?;zOMgDuzZQUAJl$|$7Nl<|JKc+Ifqs6>2-h{|tV4Ls_78b5@?;}JZ5C;B;F~tD z*fEQ^mnYGt=J|P$rNpMNJS=N;&q2xvr%nqj&>o<6pB%d6Y|qr(f}o6+Xh$Vry}p)z z`?hgs;i1UV~!(3rL(MQ+!hWpBJg ziGbXJoGMCGnmRN(nl?rn;lxGH8h#D^15(xTtn*}*KP2#k(NMK7Ex1W?|GliuJyr)1P0G(--$j*HSEzVL^%*XQ z=|rdN@!=D|ns!^ikS`U#eHLE5CWcD4w zMv-|h+W?e}zTJUl42F@&ma9r$0Lt7T!AO3lM9|kY3FAS@PEIpF`Zz}nmdqXs0 z>S8cW4B#DO9dRsLviRSCs&Pe?rQCbfEOfxP{o3Tgl z^4LWN3==+ZR3qW$A>meIaJF@F8(BXoW6H%3_1!X*W@*9hs|k}8cBs2wuI4ZyC(Te9 zU)22Ig15W%*y(cAEq7EC;iv28Wve<}RTun&nabqt>pPq(f=0+$p9DV1uP`_xA>j(h z`==4(C2ylyrS;i?@!lRf(2qjW(&)~|SB+30{Kkn~1e8Wio+Ee`ge?{9l~?C;@4%&1 zV>(fc1te0gqLu~te=uIKU&v^Qt!kk(^hA{6-5hBQM!%a#_p!WUs=8_Y<=;cORHbW; zA)9663Tz|xVDU0HrHyJIPifx@U>0NYrC4)wu$sX4>TA- z_5}|fZ%gw8E^hx1i(Az0$G0wGOXY_0aeq)#4R)C5$BcRmZmggQ-5ySrBEHuo^xa*! zK#2_|RSfzQGHfDDB>&elM_>NmW{v<3KqcE*@Fh(d-?)c{1|tT9Bl)oi*$}!f@bo-+ z{yY--0pU0B+<@G&)}Q!)5&yq+&sa&)!*|*e?d`~cIi4(=>(D7-wcoyL^Y4QUz~)4lZ5QRd+?rP2=unjA= zX6c{4d4~w-=44cQp?q9OM1T-gKKi|XQ}x-CCsC{Hcdh2HsV$ql^1(i(&s|FkAca;i z;t3d+yI>Nu>7-$)`%NRiIZ68eaudKsYeeh~cB;EytcI^k3%InHf4WgHEsQ}MsBpyG zmF9O;O&SKW?j^>+@B-m@wm#o*JFF2wIpPN|x8KI?;c2Qf^@@sseU-U!% z7Gz4``BM*@#lpgR{eynw((Ai|?MN<1Zg6D%y^AVABK^nB!Hw95BrT7t@r5*QfQtoe zeF(-~tso?n|ICludKLK~G7e16`WGj=HrpnhL$#@`XY8VTxwLVmCJ|aR zdH>s^V!5MR6M9$P*&OMciehyAGxB!-?Fu;DKXp(PxdY)nUtRieGaLUAQBNUejl544 zAE;_!Pf7I`Tkq)^8nPJ=VS~~W8DcA}MP$O->QE647TOiY|%;4J1F;JA;_5%37LQOXW6ADzN!2Wntn8 zVc9}PCvMy*YG`WpANZ%N=jU00Nd@{c%l$r1Hp|7^n|8c4c3W~hVxK4U<^6a;Hu^MWEsU0nu7M>clWNwiO3B3reL@|#F zW)clnx)mkFa#=azg8|KfY}5n;6(H~H4QCeJ`m=Zg@g(4&92E)ZX)|2CNvBA6)=vFZ z`3=U@Rivpa{@p_-ga$ORu2(>IGju4$YY`NQlg%=HAgqQe&E5C*_98--A5BiyfW79) zBPu=-sLu#x@^R?i+zr-iL4^-;N4cKhChAQU>?M3~x%epWQhTbwN<8l={j(tI9*LX{ ztCCsFxZ`%5HJF|I3jTnyNhug5$-UHWX|VeJ_AwA~e5cEgMheuU!9hb42g!XBDi^Bw zB$^F$m;XOzfs^Q__fNpe@J*-j)2q=xCIfkv;Ee(Xb|C%r0C@8!>s@`xx%I9h6JaC# zBI;fqTN&RgAVznhr1(m@Oz+fSFPztwuf&#-A3>tMknqKM)h8iZ%gtY@z${a_NE4t4 z4M|5)2r;(@%#3wMbU`j_1B>`Y(yRYiX22#!uzspZ?*Ga=usj|6W$52%-NZSJ)_JY= zZ4M9Pl^XP^8T7{Zbm_s+8tZj;e*>oC>u$|YU;#q#6MKFrO6R)?6~OyJG-=A>& z`pug|RsOdIaNtZzbF4lQn$fO7Ni>tpZKD-Q=tfrel!Ux0M&oId`Zpy4C5ishhX@WPJKnmP^?FEO!&ZX(E^7Yz| zh^u;h4pV%X%!-9J>bQqa{aasyL<)6lX;d+GY$vx592cW+u>O;wsByaqIkj0Qiyu@kZz ziEoU3R4rMw26}d>LtuM2;VQwM%;i;-_|3O>ohd73%vgg&8$w?I34+IWbT}S=x+b8t z0@jRS=z|*!Z(8IkJo9H}ZFSo2Cu5A12qSJj=CP@Y1koToENo%Fy10gnV|u*EDZc?ZTn-q~F~Wc@2HEKb|ug>}@c17?a3u%z8XK<=Jpq@L9(C z%=*fE=Z@+m+RGPobe&@x-02Szg2Ua<*13>i!bb5~i(FcmLumXFdW{Z&*WW|1HE(X3 zqLZLr1Up}zx|Z0i%fS#gqZ3UT-JQjYwY9Zd8Wv)KT2~rxzx>_5e-(##UU(5ETg7GE zjYpB^E9vXk7i$6m`dlf4Rtk9;k?*=SnLo^&MQJIU-%J!}V1iKW0@!Ojnj0z8aj*4s z4%!-+oACf*eyH#rZ*xlvOunoFvvcRu=|0{GpJxNWJ*_V-RX3={mQw0_M85M&tn&AX3vbyycM>NiRDe>Ju{$!$NV}kNp9fnuM)P_u zPDv4NLn^75Y#UM>!J)~>rMCJDKyv0de!*XOi{79PXGmQ8y*^OI_Dk_Wh8tN#;_Hucu z5wa?A6W`rdw5|DYU)oAf^tvuPH@AJ=#%FU)?9WxhpWHm87`{`)w7uw?HxFQFpYLd5 zsrGpG+-7?^7Dh{a`NXo18^p7-H$`Gthd*CS{<#y(>pTi)OVdG{`}yN$?jmV(bM7ih7w6wo z@R*3kkTT5~oCMQ4gEXes7Ov(qCP0siVi2fFKsGsE~e9 z*V)^9f1PqneC9gYy&mmT!{ruPKiATIFxP{T!(b#kto)-hE<#_fKcidb7OcA#5u{{I zy7|TPNTt9*ib^`CKtGG&Vqx@H#Y5K?Q`SGUhbv&n8ViyAMqJ<)hurZsXasM@3-R_h%g~@^9XB~2 zaeVC7{rRn_H)dC_lg&%_I?yX1$8st2$JC4Fpgfu^cUzn-B93Nrn;4X#*(Gfe*&FZv zaO(NqFnmGD*B)Hsd3AX{SnrDN)^LSjcxWues-mmIa|yR*`-W2TSeAY?SNT# zIA_=qrW%t5WyzbXEbZT_sI)@rYA$`TbuHxWd>uIQJhBcYGWkp6neg4?i0ClPwLp~0 zU8i;RcWo^>#tv`V895jh!jh8*fcJyJ&Kmexjf4Sz4ngRoeos|mUw~md}wDVUO$x`B`+1`x*?JWd@g?Ad!JDv_e5q(bx9; z*LC~0dl=7wf48RBly+Gd?tRvj)C2}QUM=+{Lz2zA-4g5Tc5Ga1fr)D3+>BdbH7_q` zr;@@SfKKQHDqm0tHU|cug#e)U_dD}M6V?0HLaavDL^anUfBd>N*&Wze!dC0m+7%Rv zN0S;kSu{_i8sDwx-_Om}Q!&6br=TDtd3_%-_&iv9nhe079mvQ=&bd~*1#p5++m2&H z-`!cP-Qoy8BJ!Xw?b3Yn3NPmto%7%mlzbVRpWSP^9(f5&1!FOF=^xOLV`Y_^BS%Mr zqz5R*Q_c?--!bFsfdi@BWHjL3qxRhu@PBTq83IBlU`v|sraxzMI#98)9>*tn4N-HJ zvndkzsjHR8H+^u} zF>d}+hq<%e!!^iG@qOq}#YxEVxyoCORsqR?E?cf@_L>{Kx(5#{MuNe?Iaue6ffzli zvU~vsp=Ps6B9e`4Vs{sL+-EUhlH-n^o_?<3WQ<|A9kiLHS#d3r8rr`plJl_4o3fvR z&w#D6n(p^nVP>zXc2=J#`$&E7%TFwYsF~4GNX+a{15dlUPIP{kmU~IRetl0e>KTYN z7NBYj70uy*Zvf#z@Q~dJlrb=%f~MQx?0_2Sk&rLC;nl^R6Bqupv`fZc*W|J*@Z$pQ zZ=PP8XI|tkUAVO?M_4=B;%KQB^h&(ek8JU$z8NV0v>~}ElCiKTxAh|{3mawRo!4}Z zRtF)x+g$CTq#Y~K$E%QdbjI>0^VJSnABT4QHu5zFGbA+fi;!MgK*FUKD&pXcRMD2G#Kb2w zH>c}O(>cnCfpwrAMELcwt%n+nc%V(Z2UzQ)6;-BI0Cm&<#w}!vraNmef6_c%eXY09 zyaxK4k3pU!wD-Epol{j8d$Vv#OLW@Muqv->D5&OL&x{|NUm4;)JF}PCau3r=DaDhF z!a^=6!q)A%z| z{KJQ;AQI*Iqnjx1rH7CtxZ6M97^~}s6Vkui!Kpu9I0L`+LJvReLI+5@<1fbL+$XSb zSXuG>EKukCVORGB(g32K45o^}kB59185{HA^OS`mSp{FK2JbDo+4Y*h8BL3o@_w?H zuxPsB?*NZhw8%P@K>!7iJOs71vBovnKEV`T?@RR}Uo$h#=&Bj^-E)iBzS<8m^Y3aB zL$~bs%YIFmmk$R=3OE2s#4nTFLe>ydRh`6YC{p~$KvMhomm^=o*5S{2-?`$RUW58#HCkr%lUb9L zPSccTz4i|`k1?*L(UD7Tds5tmKR4O;&b!c0j5m+>sgp6(nf)*(^vg;nlU}+te|AUh z>rkQ)aqIb;bgfhXznAg?tlUeRWm7}nUfn{1;g1vOH)+6xbN;s>Ejv3V02NQO=x${V za?!XD$bVolhIjWhJRA|^las3KX45eOm+LYUrW`K(q`-ja?62B)4h&EW2qZT*r&??W z_~E`jzh*CrZfo;)F{-qd7sY-4f3)|NQBkg6yeJleAfSX2iiCu82oeS@AxKNdAcB;1 zinJgh-A7Woq(ngJMnFosJ4a%ux%>5;|62F!{eE38Ke*m`XP(}B|KeeBBNM6!h!yS$ue*Czv;HKL*kPfC&p_Adl# zbPNpVtH(q7=j$OWP_bWn+q0Mka<=w%Stu^-KM}+v1L6w12cg5pF;(Hv&3dud78sqQ z$>l~=sgkOy>f#ahmlj75fM5otT%0@!EH#cYYsw=*DA0yq4kE`UfR3EgdP+YhCuha& zCUTHL_{?i&>z0JI2sa{*#yG0;WTnS4en=R^^h8gRt?Z`^mX)!wv*=e0H1BGTsN`(P zSZEbUM5X;Q%Svkg$PhGA{`w}+oZO`e?dZZ~(H!;$)m@U4Yln$b``d0xXLb#jW+%l@ zW7>7E2_3DKgZxbyq)P3eSCf;M|IiyQUM~rsF^d_HtjjwzK00AzW}(;dRWuB1*Nrrr ztQF}IsR%20t4KIy+vi*Ur<^ISZTz{W)oPv=$ysynK(WptHN# zlzUs*;7rRApB2do#A0J6F}uctd2xv50FRWB_-740i4-r^(C2ZfFKcN@HgAH4uEuw~ z!}Cv46Wevqt&Ud4h@J18zsxq7|B&YAWCLR1WAbLrf6+!jiK736ThZ=UAPK zLV*w9-Qoj`q_{k#m|rMUh?7m1c)}Rk;mu({hT}46PXbERetK_D1;70u|`S z;(CEQPEIb#g{Wde=pDj?hr^wcT87?&7fX^)c&(OgP>`yVgFQ6@`tW{~h>3$>A)_IRPRnfi-UPPG2<7!|GNa9Rj3t|WY1=a;%y>JVClpcnOrgq-T zwQptmV)EU4&5y(8yXn)60;$qV$QdEF1D0*yU-I>h&P;h{NhuP%n_YE{UvF{V%coIg zBn^#;);|*s)7a;s<+Hd2T-aZm4uUqJd z2xxg~3Hd8Re`H=R0FJ8v{q5@TSNq)mn!WwfL6#*}ZtR8bd*55=kI#cc=xr2CID8Tn zn6QUKJc%wV%-Zg|IFLf4?C8UbdXJw9CnP1lqpi&P7K|hW%-IlC-p?!{rvu_4keWHb zZ{x>x^*@XKieh~KHd|sUrHxr7K~DIYnyfNst9P~;@{tTc-yjM_mN~e^*v?0(mm0MY zrrinj`LLij$JE2XFx$}BV8VdI;%0a$szxX}I=UIKcF1OdMy67p zF*AnD2=77_M}Bf|IDPl$wSiB0d2+xukdu{VIXTp6Q`d7h`L_u{$0bn;OlL@iHMQRH zP|S6^ET0P|WUzT+QWygDeJEIwP!Tc#;cgMi@Ld13!DF<8kjXM4&@-A!!^zpOhTys= z9=^M_7BwR0=cqk63xp^TCjB=zc8>BD?X2Mda?j0mF8QKis!h+PvKOL+6u)cTC`D6J zJWdLXCu`mR8|PNqeHTMI0hF;#;AmF_1DskeEUqp8fY%+H-l;HfY5uIcLiytS{~qr> zs%sR#V2tX|Xzt4UXqfloA84~*_8N7@LRSL1?Qa&BeXF+71U|h%GhVIfWsNN9LE|5*TGY|+#45#O59ij6*K0aSS z3c;JpzaVN4vzP*~<&t%C#3kZV^yWTKUFA~Pkh1rg8<-O}R2lWo;UfRdv_77CN{)pl z^ihwQE*xX{n4gx5nZazY9USwdG5W^Iyp}H^uVJ&EXrrTjqXPg>yk=I^t`w_Ws(5LRON)4agW!fMaUAuJ3X= z|AVVhWqX~OnHduK3F5kmYDbQ8%kdi#R$q2HW>BZp3d(2C2sytBIoO@pcvb#;oyFxg z3A}&wHUA-MXz^TK=wi_2&*VQ@+>`}W_B_Jk;@Tj?@*i_f%SX3PLW!`SzGA(u|+dF=A5>f_(Sa@%}id)9#h| z=!XTFkLB6XQ--mLE}dL-(0u);Cr7b-vgc#!m2R9B+V4pxe6be*haTTKw`a_1K zxp2k=EPE;>Re+bIFMi5A_H^@#<+p7{VVY1c<_4pI993<*UI}^zYL{oLzjq(Q#!^+4 zdqtM+FPU7FZ1~jaBi0sL;5<@57kO>g&Hr zm|xS%Koy7w*uNEZ+%DV)ElDnzt+07;YId58`>QgD@Q&nCVJ(U z`wW4o!xb1SyOq49;9R_Ta`n6Mdch>_v7=h>a>mqH?NlI}IErPd;a7 z8~j-+Cb-G}4mqlk{T4A5f}l6}1|JBo>~O%k>D%t$i$5#7{TY#wk;dI(ST}$gO!T?& z&Uaxy$#$Y9WTpR6-&KsUeg5uDcVV_c6uMP$S$4els7LXC@r*tk-A{uqTVHrb(AvHb z{)-oW_Uc;lF}sc4USEHI)#>4CtcWWi%V4kyYv60ncdW3=@ z)GIG!@^nM$D*5{LJy6r*{sXv}#aLzd`^z=OjU-*z@R}8CWqiA%PjkCD1t=p!y6aL- zZzWceCp+b^SG!2cKDIb-j zwmH+YK3dTaxr`qXtzXByA>RNF^;FWAO5a`e+0es~1Y(0sge zNN?G*W@2m%(f;l+Iz>@Q$9*YY3&;fc9BcLX9C=f}%`bxGlv*u@k)M3~m=7%VXn_wz z$vuYxq3=MfuHLs|lSWOr}rcYRlD$_!2`yj{30MZ3gODCXl!vzr~ zCug<|(2onhl|<(jeEk@st7T?KmHi|h+o1WDtuAHlZOX5QSMeW-mW&9tJa33m!(ViH z^_eT~u0R}fk;dKr6W80+(KZ3VIKkWTOlg~ zDcIhAV!2Q`8v@FGY(p$p1-e&?mXdnF8cca+>hY_K;HXVYlco;b$0!n95FB5fH`cqC z|H|A<^Tku1x=^{g6uqyP99oFGrNjQWemXv1~_|?znUfxG1i+GJNGsB!Ky50MOzd9+r;Id_B=ixw#BQM&MJ|4S7 z5@WInapkiYFP>UjvcnuR0DoQ(sua7}v-fB9=mRN6QYx4tfq$OMYJ$hczECbNr~)H^ zYwA*?{cJYVyQP7$On2?aEfW;a0}Fo9(h-eW>u37KMU#e~e!5NNN#Ix~bP?F7ZpqnR z-qR0*ZQjKT=L)XJ%FzjA?`F%n8E-x$B)E%O{J7PG;@M=R4~q$FH4h}L9dK8XlHU{) z!^2r6rG~ntHB=LO7KF*(icM7dEpJrhUMj>~`8^RHQWaz*mcxB}k)TW{Vk$a}4^~&yBfN`1DF6!o;8MD(-7ZGh;ovtQ6%NqwL zZYE_PO%@pnYU5j1ILK(`4u5k308YM zzn&|W0yH^hxo?H_r{lUcxG2U$wu#&O zuwPHd2#C8yi4X@;Bf!uLO=gH_;$k8@J0pJuuse%6%I3$ows*W-+}_$uH>Q!5?{6t? z+swqoh&?n>6i*GpqflEmbdwN#vF5;-kx|OixqoNiI;pj@J)fg$4l>h8T~W6xvRl!H#Q>C(2hRv zA$&r%WA?DrMuOf2rmJ&pWf&At3)(svho*Ujl#^@{ml7rkEFIc;Ohi44LjI+1Tc_Ayvr4$jy*XlcsasZp#UZ0T+HEPs_T=hX#m$DB#<` z#cv+$&@W^Vwc^l?jO^6%k6?NlBy;5)JZg}R89E+fK*sNWxqevoyh$ENSem9UjW}>~ zb5|a&yt& z%vf5Ce~pSz6pcHBTYzV#(1k62K0+EEU|W#o*X$t{^u*2in*LmC@0d-?eSS+f>d=;> zpvelG*;OzbiUeRYX|oOs?z~;Dn>9T(`x6%*0`&GczI4#oFpejXH7B?DLfJ11Hu(0< zpPz958c3&wo(7GsgEjX$5S`Dy1&4G$-mC@eaQ0fDw0KqC*LZ-us`Gl$&M8p__h+}< zlu0zth*8(LaC1dV%p7NB(N-pY1CGWM-O1|x7f>m@4~ChXagVF%lHnzvk(Zb)?rx!c z3Ufj91gz0%2%$+J=335(d0g97L)PXc`x*y_@-uQr0IQx>{+9vnYh3q87VGlz2;Pz^ z3U7xECGeUd*dO9WjzanHdjI$0#@0*c?*CXc3KIFTbXV$E%~1vzb@DxM^k_!+a5Vij z1>xL5PhRQRo2+2kQs3mzvy50G%SP8ZqaWZ1A55Jf2Jheut{{pr27+whzQ41b&=b!Q zO|<796&Q3wsJU~V(Hl;k4Xg%L0Zfl;S6zEhV zMSaNG9;~^Z0ro+E<~aFI9?pNP1igr_*R#)p-GB24ZCdn}-N&=U~>8sAG>0+tU22(&qX2`dvC=BW(%6 zlib{wlSRZHX$|6Gdo)C>?=LSY*WG?lZ#^g#{0Sq*-G$}SEZ~7-O(|M1;^or*8%rpN zE77(8%OJ4-C&(rqd#C@H_9n7L--T0Wj)~s-O-9GkUEOcMba-#-B%P>|+ z?a2Y+iBiw|mgcfQMM#+nOnuL&fui%g&~OuyC-P!j6yV&YQ}B3v79z8;=em-Q6FE|U z1IT1$f1M~RbDB?L!mwI-pBF3EdpvXn`BrJi!KYbXlRc5|xzo}p7?~-ICC#|3m>5gi zm!aP46TYB_){8+F7M;6kF=v&okT(l!Rj1BtyTl?M+=BPmuBOiYYhGjTD)V?gmh+I)kW*4Bo}xC}?ZXn`b21nhD>NFfKX!w*mj@DD6qrK783)aNelo~Gx! zioBTWJIeK}7ln&ZVc=xTyBWjZF5kw&;+o6}sh8$(y6ULX6p=QwobwVOA;nC*GLe%I z)Dh;JW1v^I3^~QWHaQT6%5C!+#ZSA`7j+!`H>~ItW1u5ZkA^T`x9$w2a5wSy zxPGg8iO3GoJ($=uf}%4P;)f2ER?Rk+ZFbGa`Ti<(IH%+ZGf>v``ASUXRlQDVpkDX zX6(<-MWgiGcOBycDsggo){Mo&amEKGx6L`FO%<=;=HyiV(<~p@R6jO%jf|0DcJPtH zO2C4ihcC>=#%RdjSaWkKGjrb0o`^za=-Z5S5qs|shiYn13T}V`=bTLtLlM#2>gP+1lcCZikIbWuRi6JwuQg99s({8t%n2Na|cs& z-uvLK4*yM{Sj;g|9Z1ol>BH+kV?1}-mJ=N(oV9J+GS)^bdWMs()*%yXkJoA9hn_8JYr*@Xrv*4S_dQnj4bkuEL|vJ zay_|*Q7hABlbZhvc8tlQmp$G*t`Iq~6H-WMjyX9DSJK)^K-cvc3O*ye7d@GX1=kt1 zLXWt1S#lserInWtz7=~thJ-4^Bq81%nx-dFQJ`A=h899Mk?Z}!^pN9afi0Bn$?nkh zP+j?zwjL|E#sR8yn&lRhz_`V4;<+#Y3{V_45f4$a#XoET0l)l`zq9eS)xT%z4om zj30<6+|c=9Rva8wJk&y8TGEgH(7#WzAJhb%xZk(6Gja(I94T%)%!*#;d`(>GK7~c}dm--IHLi76Fy#O?-;o@X z1s6Hcht>JIx$cl68|o`SlEAoe3XOq(*?w@k-#y-2Pl4Pv=V*^U#~ygz@I!rHyH2|A zQ-g==KT@F^1UGm&Ek-{$B5Pp)I2{NTn1b8*5}5QEj9T8hdJC+g_t#~9*$O2k+B7fE z&A%pGbr1l$!r>oE1QmNdntXlmbqg!<^;+b*!@hvqf$#rwuyVxuxgS9*7@4wgqm7QQ zoh81L=)N}sgl7KNmrqVy!~~3*BaqS~1RD{Zot;HiViQRCrvfBcE(qfsp(fY{Q8Pgs zQV0PG|I6{OWw%Gk1<3>jsSl3PJ) zN;U*ILoSxHt%ypD=5CK*R+<5&c*vmOq8;yC-b847M@JQA;dY|^pdJv#(+vb?ypU5a z39$cARF}e3W`f_8L-myoVuA}`{b0?kP9G1%F}S*7wP>;sWW*I#roX?qf{EERkV4mf z(lm@iK8`>x2ql!;VU5}iLIuedM0E;>zX8~^hS2R)&(GO?H|7S`o0Z))s7(^Hs(t(3 z8K-D_yeiARM{ zzp4LPJ7I-Hir|bv<$1gf5UP%3OQ0Y!AGYECCE!Hfg=!U)Y#SEQl+?>tot>S(S}CSV z!h{8W2k)^*P0G-t(mQDm2wNaWA0ti)7?4=eAHp8P^cEyQU#MlHPc-Ft3P zYT^gp)Ov-0LB*)xYF^z9YKb|4`MJ3wxN!=>hSI2dpAemV01hOVX}1MTm*5amQlt|M zO+X)GJ}5R^xo!V1I9&G<#XAJn@)!U()Nbu_2~&7JT&k1^(CXa0gyjhCT{bqb1{+=K zn?Gv_rO&ikago1)4mfMf{OMOTTKYL%sm-1?dz=Y(gD3z&Tv_?!2bdEO66u< zUDMLty5%ItiRo}D8WWIxfaf%fzLGrhQ@UYmYy|AKF}AadIIZC=RbxIqQPei(tz8OXrQH`=N zZL5(q6j3U`*j$IP;Ti+S|L$Me`4Qv85GSH{Map@B-l5lruL6MgxGcN?C{eH7rhq; z?fnCwpQfUi)AULmH!Ff^MErDXT#)qRCN&ca^34X4p)^fkX4V11Y_Ox|5>iM4_EF0s zdbyvMJ{4}inIf@dJAQl~EGSny69t1{YQ*#_JQ!HIPmIiM0-J6@YD6RBIO(palDB|$ zRaI9v%`Gg@1t3YDuJRf zuqRFJ5``*YuO6>pB2KekjgV1PH0{qEW^wg;_!iD`gW_1{nZP>`EKRa82|Za-Q6wJZ$a z2F!v0WG)-<*{_Hsy6xyyE@vhHz``q}Abor=k|rqVKT#0_U?d(>qW&|Mz>8UleK)Gd zJzC9SEQh~gs9_;L%6_~Gi6eM+(dr)`*!(3j+t49X)JMKhH--zajWLfSYPVAiELopm z7{89_e7lujfkEsm?clAbS$C=`dTh-~uICosyG`#WaxjJKw$s)ED$&{w`b z!sS>u(IbNHtOJ~t0Sq>fI{;yey$@Tga+b%kcYA_>Rd)js_5+}Ew*?&KW1su__b;bI zkb`)5&W4yvL$N(pVABj_n=PYOR&*2u%G%l%c5;CR5)w_YkNMZvpG8nl5P!TKw*Ee6+o{Hl%A?#i}E`jJsdS+O+pCBZiN0;5I}(-uYk?*7uJ-YPMHH? zB2V{(J1UAD)Fk9(v_pTMg6O0Nh#mLQojh>OA<`Kjpd0?e914!-U>*nWzMSImH3`a3 zKrEi%6e?-_EJf??1K2#mjm9~~^mM^OM6^+03!4lp9IigoEL$Ga#Wc}Ih+O-pZ_)!Xu{Bq?=?Mq)O_v>o1MfgC z?w|Ld!hGm&K3?zJ1Mn=UwC*BXbbiGIH>b%Ga<>|gtH5HJP4sZ74sM1ELRPKd8&rS! zy5`y###uO8M5pW_pRgP=~bXYLv(7m{RTRRfJQg~nM6Pbx!2iNzc?SG&f|G{md0i2 z%;ElK%kQ$nFu*O~!nBtoCFhY-SIF>hxh-iK?q@R}{8s;w;py_gsx4BGg#A|In-iW@ zEoFi!iH8b^C*gCIGw*954`A?j7vbS~y1ypV3f4vuadCld#zJf6P?4eqI#Kmz@{Ln{ z0|$r>OQG~4ywlo%)E1LPIE;X73ylGr+OIdMIo9A*O;`A0G4c^cBrG8TADjwDftjle zq3@M~uPY#qqjhM+eZ~fN_uK&*3LTNCli2Rcz=Jt+P0ctkx@nvb4Fx#OPMYGdu%C62(F~%JX`uY@b=>%A+-=EsYuq%?;ad!U*F56qVU1(}zqNI|3 zv`hcRFsNMeqfKWAYnUC1D)L5#EI zLqZe6I%m*7eMdGd6ZqB1_Vr?Qj<_pQUXjY z2tH(|29sz=M@l`h9xi{D3?4q7g^jw%J@^R(|1jzts-wJf8JR|Uc1yC1jW;x2Zt={OmXAN~mp?WllLiyba7Ai@FD zuTPMh`MWFLx;ho5KG;0&?h1R9Z6_4BF%1l3Pdpu z4&KUsL(t9Cwt@n1@1^35Y%AnY5M8%*cHVcwI5fQ{H$2_BM^*X0$heK9`#~X33dE@$ zF&scnUrx`+px$w>sxl{>FrwmssWlgS;)FM}xsNNB)b*lb<2tNyooZe1XA!-oPQ(P^ z6Ch@GTeg-cROZG=MA2Oqp`zpV&=@PMqs_DvC{S7pA;o%!=&n~#FwG{Z`NZpsp zam)r*Ft8qHK(@veqvJs7e)z|r-Y1aD6SEfs+t)NCuBD)ChX6Ca>dj(Uc=&e1^QzUE z73BgrPN*U}*dJKq?azjap&+Eo(~Nkks>(pFV}}O|P0*>FLl;V;URiIRKYwoDlk6j5 zV?%sT>o^W!5P;@FvV}_pOv^|a<>nB)AhRnDyq_)S8Tz-ux(T^<#i*&Wi$ zdKy!J5YWNgYZ6=uZ#xMmS5`&l!b_#{VUI=##R&7x?Qq!?)beLwwmdM_VHMo6+jxJS z}T1DNyhhf5CLE-sER*#7^A|DQTc(`#PR|0>e;VNQ$K aGlTXPMBxE}H{hmc92p4(@q)+t@BR-=v#b*U literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_7_light.png b/files/ib002/rb-trees/rules/red-root/rr_7_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8e75618a385e2f5ff3f701be8e38baeea1884998 GIT binary patch literal 28524 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 Wf3>dIE{fyxDBF$94GXtApZY)E#2ruo literal 0 HcmV?d00001 diff --git a/files/ib002/rb-trees/rules/red-root/rr_8.dot b/files/ib002/rb-trees/rules/red-root/rr_8.dot new file mode 100644 index 0000000..33f6023 --- /dev/null +++ b/files/ib002/rb-trees/rules/red-root/rr_8.dot @@ -0,0 +1,39 @@ +digraph RBTree { +"139660434247376" [label="9"] +"139660434247376" -> "139660436098128" +"139660436098128" [label="5"] +"139660436098128" -> "139660435887760" [color="red"] +"139660435887760" [color=red,label="2"] +L139660435887760 [label="",color=none] +139660435887760 -> L139660435887760 +R139660435887760 [label="",color=none] +139660435887760 -> R139660435887760 +R139660436098128 [label="",color=none] +139660436098128 -> R139660436098128 +"139660434247376" -> "139660435793424" [color="red"] +"139660435793424" [color=red,label="15"] +"139660435793424" -> "139660435791312" +"139660435791312" [label="12"] +L139660435791312 [label="",color=none] +139660435791312 -> L139660435791312 +"139660435791312" -> "139660435793488" [color="red"] +"139660435793488" [color=red,label="13"] +L139660435793488 [label="",color=none] +139660435793488 -> L139660435793488 +R139660435793488 [label="",color=none] +139660435793488 -> R139660435793488 +"139660435793424" -> "139660435887824" +"139660435887824" [label="18"] +"139660435887824" -> "139660434506512" [color="red"] +"139660434506512" [color=red,label="17"] +L139660434506512 [label="",color=none] +139660434506512 -> L139660434506512 +R139660434506512 [label="",color=none] +139660434506512 -> R139660434506512 +"139660435887824" -> "139660435793616" [color="red"] +"139660435793616" [color=red,label="19"] +L139660435793616 [label="",color=none] +139660435793616 -> L139660435793616 +R139660435793616 [label="",color=none] +139660435793616 -> R139660435793616 +} diff --git a/files/ib002/rb-trees/rules/red-root/rr_8_dark.png b/files/ib002/rb-trees/rules/red-root/rr_8_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f68c4c219c0d208fccef09b5b4397c375f803506 GIT binary patch literal 34025 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 yLGdIcVhhEC`2R=#YO_~_puA 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 z zA^U=s?TcD-5COXg4;*sAWfgk)-jDLsb+`!-HCJHKGeFv*T6z94%AbnFwP<640Mh7@ zeZPqpwEv!X(Y*sJYP-MxR8Jl5l~ho;jFMh&TG~DEm`M{K1ZFFh`st~u;|5FAKYy#! zgDoflw;*$zc$&LE-n6tj|#X*AuCN=tFb8boRr?YfDE@%$ci4+2{&RfX5hn7AyPfoqP8DPN%@_P3_pfJ~;es;)e}TxDnC@6HYf%7$2-ZBk zYZ6;5ar7Wil+3V*MIHFHA?F9LgLHr2sxS&l%DFi2asO&RyTqoyPxPgObw-4&;lC*8)}(j>&Wy$5?=8*sACZQG^-(BnD5r*dz&kJU{sx1DmFPh9zBQ13tb9EP zqKbMH=(%la4W9--6^UgwkZs=osR+aGPG;i!!ECKZSpb;mh?iv5EFJC)v6KO+1-&lJ z!Q6=h4v^`OuMUWlYb_pCo}lzeg>Fm{9g)B?CXD{yN2U>cs8O3{U?S@xCF?e(?~|Cs z#Jghq)s=&$JjwV#1ejx9i!2GJ7LWgugqk6@u83EMYXv{VR!YLB0mMT zcmGQ7ul8SYB}iJnc=W3+pR6SUFVevPQ}&5gT;;kVWWS;Xe^ zpj1UHiIv3C28@Q`#~;U#D)bo{85I?0XU2!WeU}m*U;kAVwuWDePhRDJgi)sC=i@t^ zjQHugjo&8!qhK}uBKdJKL@$T@B>(S6{zslm%H~TjjU_+bx3jrisjG}q4IAZZ43Xy9 NwcS`hXRGa*{{x*Vdw2i< literal 0 HcmV?d00001 diff --git a/files/ib002/recursion/karel-1/.archive b/files/ib002/recursion/karel-1/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/ib002/recursion/karel-1/generate_mazes.py b/files/ib002/recursion/karel-1/generate_mazes.py new file mode 100644 index 0000000..8b19fd8 --- /dev/null +++ b/files/ib002/recursion/karel-1/generate_mazes.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +from itertools import product + + +def generate_map(template: str, st: int, ave: int) -> str: + return template.format(st=st, ave=ave) + + +def main(): + template = None + with open("maze_skel.kw", "r") as f: + template = f.read() + + for st, ave in product(range(1, 7), range(1, 7)): + with open("maze{:03d}.kw".format(st * 6 + ave), "w") as out: + print(generate_map(template, st, ave), file=out) + + +if __name__ == "__main__": + main() diff --git a/files/ib002/recursion/karel-1/karel_tk.py b/files/ib002/recursion/karel-1/karel_tk.py new file mode 100644 index 0000000..e988c4e --- /dev/null +++ b/files/ib002/recursion/karel-1/karel_tk.py @@ -0,0 +1,791 @@ +from dataclasses import dataclass +from enum import Enum, IntEnum +from functools import wraps +from itertools import product +from math import radians, sin, cos +from sys import stderr +import tkinter as tk +from typing import Tuple, Union + + +def check_before(precondition): + """ + Decorator for running methods before executing a method. + + Args: + call_before: Function to be called before executing a method. + + Returns: + Parametrized decorator that can be used to wrap method with the + `call_before`. + """ + + def parametrized(f): + @wraps(f) + def wrapper(self, *args, **kwargs): + if not precondition(self, *args, **kwargs, fn=f): + return + return f(self, *args, **kwargs) + + return wrapper + + return parametrized + + +def after(call_after): + """ + Decorator for running methods after executing a method. + + Args: + call_after: Function to be called after executing a method. + + Returns: + Parametrized decorator that can be used to wrap method with the + `call_after`. + """ + + def parametrized(f): + @wraps(f) + def wrapper(self, *args, **kwargs): + result = f(self, *args, **kwargs) + call_after(self, *args, **kwargs, fn=f) + return result + + return wrapper + + return parametrized + + +def skip_for_summary(f): + """ + Decorator used for skipping a function call if the Karel is running + in a summary mode. + """ + + @wraps(f) + def wrapper(self, *args, **kwargs): + if self.summary_mode: + return + return f(self, *args, **kwargs) + + return wrapper + + +class Block(IntEnum): + """ + Represents a field in the world of the Robot Karel. + It can be either clear or a wall. + """ + + Clear = 0 + Wall = -1 + + +# Constants for major angles +EAST, NORTH, WEST, SOUTH = 0, 90, 180, 270 + + +# @dataclass(frozen=True, slots=True) +@dataclass(frozen=True) +class _Direction: + """ + angle: Represents heading of the Robot Karel + """ + + angle: int + + @property + def vector(self) -> Tuple[int, int]: + """ + Get a direction vector in the current direction the robot is heading. + + Returns: + Pair of ints, representing a vector of (dx, dy). + """ + angle, x, y = radians(self.angle), 1, 0 + return ( + x * round(cos(angle)) - y * round(sin(angle)), + x * round(sin(angle)) + y * round(cos(angle)), + ) + + @property + def in_world(self) -> str: + """ + Get a character that is being put in the graphical representation of + the Robot Karel. + + Returns: + Character to be put in the world. + """ + return { + Direction.East.value: ">", + Direction.North.value: "^", + Direction.West.value: "<", + Direction.South.value: "v", + # Direction.East.value: "⮞", + # Direction.North.value: "⮝", + # Direction.West.value: "⮜", + # Direction.South.value: "⮟", + }[self] + + @property + def as_string(self) -> str: + """ + Returns a string with a direction for Tk label. + + Returns: + Label of the direction + """ + return { + Direction.East.value: "east", + Direction.North.value: "north", + Direction.West.value: "west", + Direction.South.value: "south", + }[self] + + def __add__(self, angle: int) -> "_Direction": + return _Direction((360 + self.angle + angle) % 360) + + +class Direction(Enum): + """ + Provides constants of directions Karel can face. + """ + + East = _Direction(EAST) + North = _Direction(NORTH) + West = _Direction(WEST) + South = _Direction(SOUTH) + + +class KarelWindow: + def __init__(self, karel: "Karel", scale: int, font: str): + self.size = 32 * scale + + self.steps = tk.Label(text=karel.steps, anchor="e") + self.steps.grid(row=0, column=0, sticky="e") + + self.last_cmd = tk.Label(text=karel.last_command, anchor="w") + self.last_cmd.grid(row=0, column=1, columnspan=3, sticky="w") + + tk.Label(text="CORNER").grid(row=1, column=0) + tk.Label(text="FACING").grid(row=1, column=1) + tk.Label(text="BEEP-BAG").grid(row=1, column=2) + tk.Label(text="BEEP-CORNER").grid(row=1, column=3) + + self.corner = tk.Label() + self.corner.grid(row=2, column=0) + + self.facing = tk.Label() + self.facing.grid(row=2, column=1) + + self.beep_bag = tk.Label() + self.beep_bag.grid(row=2, column=2) + + self.beep_corner = tk.Label() + self.beep_corner.grid(row=2, column=3) + + self.canvas = tk.Canvas( + width=((karel.world.width + 1) // 2 + 2) * self.size, + height=((karel.world.height + 1) // 2 + 2) * self.size, + background="black", + ) + self.canvas.grid(column=0, row=3, columnspan=4) + + self.font = f"{font} {int(12 * scale)}" + + self.__draw_world(karel.world) + self.render(karel) + + def __draw_world(self, world: "World"): + m, n = (world.height + 1) // 2, (world.width + 1) // 2 + + # NUMBERS + self.canvas.create_text( + self.size // 2, + self.size, + text="ST.", + fill="white", + anchor="s", + font=self.font, + ) + for i in range(m): + self.canvas.create_text( + self.size - 8, + (i + 2) * self.size - self.size // 2, + text=(m - i), + anchor="e", + fill="white", + font=self.font, + ) + y = ((m + 1) * self.size) + 8 + self.canvas.create_text( + (n + 1) * self.size + self.size // 2, + y, + text="AVE.", + fill="white", + anchor="n", + font=self.font, + ) + for i in range(n): + self.canvas.create_text( + (i + 2) * self.size - self.size // 2, + y, + text=(i + 1), + anchor="n", + fill="white", + font=self.font, + ) + + # BORDER + self.canvas.create_rectangle( + self.size, + self.size, + self.size * (n + 1), + self.size * (m + 1), + fill="", + outline="white", + ) + + for row, col in product(range(world.height), range(world.width)): + block = world.data[row][col] + if row % 2 == 0 and col % 2 == 0: + self.__print_beeper(world, block or ".", row // 2, col // 2) + elif block == Block.Wall: + size = self.size + x = size + col // 2 * size + y = (world.width + 1) // 2 * size - row // 2 * size + if row % 2 == 1 and col % 2 == 0: + self.canvas.create_line(x, y, x + size, y, fill="white") + elif row % 2 == 0: + x += size + self.canvas.create_line(x, y, x, y + size, fill="white") + + self.canvas.update() + + def __print_beeper( + self, world: "World", beeper: Union[str, int], row: int, column: int + ): + self.canvas.create_text( + (column + 1) * self.size + self.size // 2, + ((world.height + 1) // 2 - row) * self.size + self.size // 2, + text=str(beeper), + anchor="center", + fill="white", + font=self.font, + ) + + def render(self, karel: "Karel"): + self.facing["text"] = karel.direction.as_string + + self.steps["text"] = karel.steps + self.last_cmd["text"] = karel.last_command + self.corner["text"] = f"({(karel.x + 2) // 2}, {(karel.y + 2) // 2})" + self.beep_bag["text"] = karel.beepers + self.beep_corner["text"] = karel.world.data[karel.y][karel.x] + + i, j = (karel.y + 2) // 2, (karel.x + 2) // 2 + size = self.size + x, y = j * size, ((karel.world.height + 1) // 2 - i + 1) * size + self.canvas.create_rectangle( + x + 1, y + 1, x + size - 1, y + size - 1, fill="black" + ) + + karel_on_map = karel.direction.in_world + self.canvas.create_text( + x + size // 2, + y + size // 2, + text=karel_on_map, + font=self.font + " bold", + fill="yellow", + anchor="center", + ) + + self.canvas.update() + self.canvas.after(karel.step_delay) + + def update(self, karel: "Karel", dx: int, dy: int): + block = karel.world.data[karel.y - 2 * dy][karel.x - 2 * dx] + + i, j = (karel.y - 2 * dy) // 2, (karel.x - 2 * dx) // 2 + x, y = (j + 1) * self.size, ( + (karel.world.height + 1) // 2 - i + ) * self.size + + self.canvas.create_rectangle( + x + 1, y + 1, x + self.size - 1, y + self.size - 1, fill="black" + ) + self.__print_beeper(karel.world, block or ".", i, j) + + def error(self, karel: "Karel", message: str): + self.render(karel) + + self.last_cmd["foreground"] = "red" + self.last_cmd["text"] = f"Error Shutoff! ({message})" + + +class World: + def __init__(self, width, height, data): + self.width = width * 2 - 1 + self.height = height * 2 - 1 + self.data = [ + [0 for _ in range(self.width)] for _ in range(self.height) + ] + + if self.width > 30 or self.height > 30: + raise ValueError( + "The given world is greater than the max values of [{}x{}]".format( + 30, 30 + ) + ) + + self._parse_world(data) + + def __parse_wall(self, column, row, orientation, line): + column = column * 2 - 2 + row = row * 2 - 2 + + if column % 2 == 1 or row % 2 == 1: + raise ValueError("Wrong position of the wall") + + if orientation == "E": + column += 1 + elif orientation == "W": + column -= 1 + elif orientation == "N": + row += 1 + elif orientation == "S": + row -= 1 + else: + raise ValueError( + "Unknown wall orientation '{}' on line {} in world file".format( + orientation, line + ) + ) + + self.data[row][column] = Block.Wall + if column % 2 == 1 and row % 2 == 0: + if row + 1 < self.height: + self.data[row + 1][column] = Block.Wall + if row - 1 >= 0: + self.data[row - 1][column] = Block.Wall + else: + if column + 1 < self.width: + self.data[row][column + 1] = Block.Wall + if column - 1 >= 0: + self.data[row][column - 1] = Block.Wall + + def __parse_beepers(self, column, row, count): + column = column * 2 - 2 + row = row * 2 - 2 + self.data[row][column] = count + + def _parse_world(self, world_content): + for i, line in enumerate(world_content, 1): + if not line: + continue + + block, column, row, arg = [part.upper() for part in line.split()] + if block == "W": + self.__parse_wall(int(column), int(row), arg, i) + elif block == "B": + self.__parse_beepers(int(column), int(row), int(arg)) + else: + raise ValueError( + "Unknown block character '{}' on line {} in world file".format( + block, i + ) + ) + + +class Karel: + def __init__( + self, filename, summary_mode=False, scale=1, font="monospace" + ): + """ + Turn Karel on. + + Args: + filename: Path to the file containing Karel's world and initial + settings. + summary_mode: Disable rendering of the Karel's world in the window. + + Defaults to `False`. + scale: Change the scaling factor of the font used to render Karel's + world. + + Defaults to `1`. + font: Change the default monospace font that is used to render the + world. + + Defaults to `"monospace"`. + """ + self.summary_mode = summary_mode + + world_content = None + with open(filename) as world_file: + world_content = world_file.read() + + first_line, world = world_content.split("\n", maxsplit=1) + width, height, x, y, direction, beepers = first_line.split() + direction = direction.upper() + + self.world = World(int(width), int(height), world.split("\n")) + self.x, self.y = int(x) * 2 - 2, int(y) * 2 - 2 + + if direction == "S": + self.direction = Direction.South.value + elif direction == "W": + self.direction = Direction.West.value + elif direction == "E": + self.direction = Direction.East.value + elif direction == "N": + self.direction = Direction.North.value + else: + raise ValueError("Unknown Karel's direction") + + self.beepers = int(beepers) + + self.steps = 0 + self.step_delay = 1000 + self.is_running = True + self.last_command = "turn_on" + + self._initialize_window(scale, font) + + @skip_for_summary + def _initialize_window(self, scale, font): + """ + Initializes a window where the Karel is drawn. + """ + self._window = KarelWindow(self, scale, font) + + @skip_for_summary + def __update(self, dx, dy): + """ + Updates Karel's position in the window. + + Args: + dx: Change along the horizontal axis. + dy: Change along the vertical axis. + """ + self._window.update(self, dx, dy) + + def __render(self, fn, *args, **kwargs): + """ + Updates step counter and last command for Karel. + If the robot is not running in a summary mode, then the window + is rendered once again. + """ + if not self.is_running: + return + + self.steps += 1 + self.last_command = fn.__name__ + + if not self.summary_mode: + self._window.render(self) + + def __error(self, message): + """ + Provides error handling. + + Args: + message: Error message to be shown. + """ + if not self.summary_mode: + self._window.error(self, message) + self.is_running = False + else: + print(f"Error Shutoff! ({message})", file=stderr) + + @skip_for_summary + def __deinit(self): + tk.mainloop() + + def __check_state(self, *args, **kwargs): + """ + Assures that commands are not run while the robot is not running. + + Robot is not running when error has occurred. + """ + return self.is_running + + @check_before(__check_state) + def beepers_in_bag(self): + """ + Check if there are any beepers in the Karel's bag. + + Returns: + `True` if there is at least one beeper in Karel's beeper bag, + `False` otherwise. + """ + return self.beepers > 0 + + def no_beepers_in_bag(self): + """ + Check if there are no beepers in the Karel's bag. + + Returns: + `True` if there is no beeper in Karel's beeper bag, `False` otherwise. + """ + return not self.beepers_in_bag() + + @check_before(__check_state) + def front_is_clear(self): + """ + Check if there is no wall in front of Karel. + + Returns: + `True` if there is no obstacle in front of Karel, `False` otherwise. + """ + dx, dy = self.direction.vector + if not ( + 0 <= self.x + dx < self.world.width + and 0 <= self.y + dy < self.world.height + ): + return False + + if self.world.data[self.y + dy][self.x + dx] == Block.Wall: + return False + + return True + + def front_is_blocked(self): + """ + Check if there is a wall in front of Karel. + + Returns: + `True` if there is an obstacle in front of Karel, `False` otherwise. + """ + return not self.front_is_clear() + + @check_before(__check_state) + def __side_is_clear(self, d): + """ + Helper function for determining whether the sides of Karel are clear. + + Args: + d: Counterclockwise change in angle of Karel's heading. + + Returns: + `True` if the side after applying the `d` counterclokwise turn + is clear, `False` otherwise. + """ + original_direction = self.direction + self.direction = self.direction + d + + is_clear = self.front_is_clear() + self.direction = original_direction + + return is_clear + + def left_is_clear(self): + """ + Check if there is no wall to the left side of Karel. + + Returns: + `True` if there is no obstacle to the left side of Karel, + `False` otherwise. + """ + return self.__side_is_clear(90) + + def left_is_blocked(self): + """ + Check if there is a wall to the left side of Karel. + + Returns: + `True` if there is an obstacle to the left side of Karel, + `False` otherwise. + """ + return not self.left_is_clear() + + def right_is_clear(self): + """ + Check if there is no wall to the right side of Karel. + + Returns: + `True` if there is no obstacle to the right side of Karel, + `False` otherwise. + """ + return self.__side_is_clear(-90) + + def right_is_blocked(self): + """ + Check if there is a wall to the right side of Karel. + + Returns: + `True` if there is an obstacle to the right side of Karel, + `False` otherwise. + """ + return not self.right_is_clear() + + @check_before(__check_state) + def facing_north(self): + """ + Check if Karel is facing north. + + Returns: + `True` if Karel is facing north, `False` otherwise. + """ + return self.direction == Direction.North + + def not_facing_north(self): + """ + Check if Karel is »not« facing north. + + Returns: + `True` if Karel is »not« facing north, `False` otherwise. + """ + return not self.facing_north() + + @check_before(__check_state) + def facing_south(self): + """ + Check if Karel is facing south. + + Returns: + `True` if Karel is facing south, `False` otherwise. + """ + return self.direction == Direction.South + + def not_facing_south(self): + """ + Check if Karel is »not« facing south. + + Returns: + `True` if Karel is »not« facing south, `False` otherwise. + """ + return not self.facing_south() + + @check_before(__check_state) + def facing_east(self): + """ + Check if Karel is facing east. + + Returns: + `True` if Karel is facing east, `False` otherwise. + """ + return self.direction == Direction.East + + def not_facing_east(self): + """ + Check if Karel is »not« facing east. + + Returns: + `True` if Karel is »not« facing east, `False` otherwise. + """ + return not self.facing_east() + + @check_before(__check_state) + def facing_west(self): + """ + Check if Karel is facing west. + + Returns: + `True` if Karel is facing west, `False` otherwise. + """ + return self.direction == Direction.West + + def not_facing_west(self): + """ + Check if Karel is »not« facing west. + + Returns: + `True` if Karel is »not« facing west, `False` otherwise. + """ + return not self.facing_west() + + @check_before(__check_state) + def beepers_present(self): + """ + Check whether Karel stands on a position that has any beepers present. + + Returns: + `True` if there is at least one beeper present on the current + position, `False` otherwise. + """ + return self.world.data[self.y][self.x] > 0 + + def no_beepers_present(self): + """ + Check whether Karel stands on a position that has no beepers present. + + Returns: + `True` if there is no beeper present on the current position, + `False` otherwise. + """ + return not self.beepers_present() + + @check_before(__check_state) + @after(__render) + def step(self): + """ + Move Karel one position in the direction he's facing. + """ + if not self.front_is_clear(): + return self.__error("Can't move this way") + + dx, dy = self.direction.vector + self.x += 2 * dx + self.y += 2 * dy + self.__update(dx, dy) + + @check_before(__check_state) + @after(__render) + def turn_left(self): + """ + Turn Karel counterclockwise, i.e. left, by 90 degrees. + """ + self.direction = self.direction + 90 + + @after(__render) + def turn_off(self): + """ + Turn Karel off. + """ + self.is_running = False + self.__deinit() + + @check_before(__check_state) + @after(__render) + def put_beeper(self): + """ + Take a beeper from Karel's beeper bag and put on the current position. + """ + if self.beepers <= 0: + return self.__error("Karel has no beeper to put at the corner") + + self.world.data[self.y][self.x] += 1 + self.beepers -= 1 + + @check_before(__check_state) + @after(__render) + def pick_beeper(self): + """ + Pick a beeper from the current position and put it into Karel's + beeper bag. + """ + if self.world.data[self.y][self.x] <= 0: + return self.__error("There is no beeper at the corner") + + self.world.data[self.y][self.x] -= 1 + self.beepers += 1 + + def set_step_delay(self, delay): + """ + Set delay of a Karel's step. + + Args: + delay: Delay of one step in milliseconds. + """ + self.step_delay = delay + + def get_step_delay(self): + """ + Get current delay of a Karel's step. + + Returns: + Current delay in milliseconds. + """ + return self.step_delay diff --git a/files/ib002/recursion/karel-1/maze007.kw b/files/ib002/recursion/karel-1/maze007.kw new file mode 100644 index 0000000..b95426f --- /dev/null +++ b/files/ib002/recursion/karel-1/maze007.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze008.kw b/files/ib002/recursion/karel-1/maze008.kw new file mode 100644 index 0000000..de0a9b4 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze008.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze009.kw b/files/ib002/recursion/karel-1/maze009.kw new file mode 100644 index 0000000..18a3f09 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze009.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze010.kw b/files/ib002/recursion/karel-1/maze010.kw new file mode 100644 index 0000000..43ffb94 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze010.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze011.kw b/files/ib002/recursion/karel-1/maze011.kw new file mode 100644 index 0000000..741527d --- /dev/null +++ b/files/ib002/recursion/karel-1/maze011.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze012.kw b/files/ib002/recursion/karel-1/maze012.kw new file mode 100644 index 0000000..89579d9 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze012.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 1 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze013.kw b/files/ib002/recursion/karel-1/maze013.kw new file mode 100644 index 0000000..895731d --- /dev/null +++ b/files/ib002/recursion/karel-1/maze013.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze014.kw b/files/ib002/recursion/karel-1/maze014.kw new file mode 100644 index 0000000..b732cfc --- /dev/null +++ b/files/ib002/recursion/karel-1/maze014.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze015.kw b/files/ib002/recursion/karel-1/maze015.kw new file mode 100644 index 0000000..d028262 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze015.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze016.kw b/files/ib002/recursion/karel-1/maze016.kw new file mode 100644 index 0000000..79d6f8d --- /dev/null +++ b/files/ib002/recursion/karel-1/maze016.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze017.kw b/files/ib002/recursion/karel-1/maze017.kw new file mode 100644 index 0000000..25ce9dc --- /dev/null +++ b/files/ib002/recursion/karel-1/maze017.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze018.kw b/files/ib002/recursion/karel-1/maze018.kw new file mode 100644 index 0000000..8ad01cf --- /dev/null +++ b/files/ib002/recursion/karel-1/maze018.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 2 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze019.kw b/files/ib002/recursion/karel-1/maze019.kw new file mode 100644 index 0000000..fc9ea4f --- /dev/null +++ b/files/ib002/recursion/karel-1/maze019.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze020.kw b/files/ib002/recursion/karel-1/maze020.kw new file mode 100644 index 0000000..08658f6 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze020.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze021.kw b/files/ib002/recursion/karel-1/maze021.kw new file mode 100644 index 0000000..ea739ef --- /dev/null +++ b/files/ib002/recursion/karel-1/maze021.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze022.kw b/files/ib002/recursion/karel-1/maze022.kw new file mode 100644 index 0000000..3736978 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze022.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze023.kw b/files/ib002/recursion/karel-1/maze023.kw new file mode 100644 index 0000000..3f8b615 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze023.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze024.kw b/files/ib002/recursion/karel-1/maze024.kw new file mode 100644 index 0000000..1966ace --- /dev/null +++ b/files/ib002/recursion/karel-1/maze024.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 3 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze025.kw b/files/ib002/recursion/karel-1/maze025.kw new file mode 100644 index 0000000..b654219 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze025.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze026.kw b/files/ib002/recursion/karel-1/maze026.kw new file mode 100644 index 0000000..ebaf8bd --- /dev/null +++ b/files/ib002/recursion/karel-1/maze026.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze027.kw b/files/ib002/recursion/karel-1/maze027.kw new file mode 100644 index 0000000..924f3f5 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze027.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze028.kw b/files/ib002/recursion/karel-1/maze028.kw new file mode 100644 index 0000000..df6c8c2 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze028.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze029.kw b/files/ib002/recursion/karel-1/maze029.kw new file mode 100644 index 0000000..f742654 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze029.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze030.kw b/files/ib002/recursion/karel-1/maze030.kw new file mode 100644 index 0000000..54b00ec --- /dev/null +++ b/files/ib002/recursion/karel-1/maze030.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 4 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze031.kw b/files/ib002/recursion/karel-1/maze031.kw new file mode 100644 index 0000000..f8beac8 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze031.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze032.kw b/files/ib002/recursion/karel-1/maze032.kw new file mode 100644 index 0000000..0c54b03 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze032.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze033.kw b/files/ib002/recursion/karel-1/maze033.kw new file mode 100644 index 0000000..b03209d --- /dev/null +++ b/files/ib002/recursion/karel-1/maze033.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze034.kw b/files/ib002/recursion/karel-1/maze034.kw new file mode 100644 index 0000000..2682e25 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze034.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze035.kw b/files/ib002/recursion/karel-1/maze035.kw new file mode 100644 index 0000000..d6981b1 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze035.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze036.kw b/files/ib002/recursion/karel-1/maze036.kw new file mode 100644 index 0000000..35cd0b6 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze036.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 5 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze037.kw b/files/ib002/recursion/karel-1/maze037.kw new file mode 100644 index 0000000..5361d58 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze037.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 1 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze038.kw b/files/ib002/recursion/karel-1/maze038.kw new file mode 100644 index 0000000..2bf360c --- /dev/null +++ b/files/ib002/recursion/karel-1/maze038.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 2 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze039.kw b/files/ib002/recursion/karel-1/maze039.kw new file mode 100644 index 0000000..3f5fc81 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze039.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 3 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze040.kw b/files/ib002/recursion/karel-1/maze040.kw new file mode 100644 index 0000000..dd2a661 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze040.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 4 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze041.kw b/files/ib002/recursion/karel-1/maze041.kw new file mode 100644 index 0000000..93198c7 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze041.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 5 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze042.kw b/files/ib002/recursion/karel-1/maze042.kw new file mode 100644 index 0000000..d09efdc --- /dev/null +++ b/files/ib002/recursion/karel-1/maze042.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B 6 6 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze069.kw b/files/ib002/recursion/karel-1/maze069.kw new file mode 100644 index 0000000..c87840f --- /dev/null +++ b/files/ib002/recursion/karel-1/maze069.kw @@ -0,0 +1,32 @@ +6 6 1 1 E 72 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N diff --git a/files/ib002/recursion/karel-1/maze666.kw b/files/ib002/recursion/karel-1/maze666.kw new file mode 100644 index 0000000..23b6387 --- /dev/null +++ b/files/ib002/recursion/karel-1/maze666.kw @@ -0,0 +1,30 @@ +6 6 2 1 E 72 + +B 6 3 1 + +W 2 1 N +W 3 1 N +W 4 1 N + +W 2 5 N +W 3 5 N +W 4 5 N + +W 1 2 E +W 1 3 E +W 1 4 E +W 1 5 E + +W 4 2 E +W 2 3 E +W 2 4 E +W 4 5 E + +W 5 1 E +W 5 2 E +W 5 4 E +W 5 5 E +W 5 6 E + +W 6 3 N +W 6 3 S \ No newline at end of file diff --git a/files/ib002/recursion/karel-1/maze_skel.kw b/files/ib002/recursion/karel-1/maze_skel.kw new file mode 100644 index 0000000..abc53ee --- /dev/null +++ b/files/ib002/recursion/karel-1/maze_skel.kw @@ -0,0 +1,34 @@ +6 6 1 1 E 72 + +B {st} {ave} 1 + +W 1 1 E +W 1 3 E +W 1 4 E +W 1 5 N + +W 2 1 N +W 2 2 E +W 2 2 N +W 2 4 N +W 2 5 E + +W 3 2 N +W 3 3 N +W 3 4 E +W 3 5 E + +W 4 1 E +W 4 1 N +W 4 3 E +W 4 3 N +W 4 4 E +W 4 5 E + +W 5 2 E +W 5 2 N +W 5 4 E +W 5 5 N +W 5 6 E + +W 6 4 N \ No newline at end of file diff --git a/files/ib002/recursion/karel-1/skeleton.py b/files/ib002/recursion/karel-1/skeleton.py new file mode 100644 index 0000000..4b37da5 --- /dev/null +++ b/files/ib002/recursion/karel-1/skeleton.py @@ -0,0 +1,28 @@ +from karel_tk import Karel + +import sys + + +class SuperKarel(Karel): + # you can define your own helper functions on Karel here, if you wish to + + def run(self): + # TODO + pass + + +def main(): + if len(sys.argv) != 2: + print("Please provide a path to the world as an argument.") + return + + k = SuperKarel(sys.argv[1], scale=3, font="Iosevka\\ Term") + k.set_step_delay(500) + + k.run() + + k.turn_off() + + +if __name__ == "__main__": + main() diff --git a/files/ib002/recursion/karel-1/stairs.kw b/files/ib002/recursion/karel-1/stairs.kw new file mode 100644 index 0000000..d0cc80a --- /dev/null +++ b/files/ib002/recursion/karel-1/stairs.kw @@ -0,0 +1,17 @@ +9 9 1 1 E 0 +W 2 1 E +W 3 2 S +W 3 2 E +W 4 3 S +W 4 3 E +W 5 4 S +W 5 4 E +W 6 5 S +W 7 4 W +W 7 3 W +W 7 2 W +W 7 1 W + +B 3 2 1 +B 4 3 1 +B 5 4 1 diff --git a/files/ib002/recursion/karel-1/stairs2.kw b/files/ib002/recursion/karel-1/stairs2.kw new file mode 100644 index 0000000..6453ace --- /dev/null +++ b/files/ib002/recursion/karel-1/stairs2.kw @@ -0,0 +1,20 @@ +9 9 1 1 E 0 + +W 1 1 E +W 2 1 N + +W 3 2 S +W 3 2 E +W 4 3 S +W 4 3 E +W 5 4 S +W 5 4 E +W 6 5 S +W 7 4 W +W 7 3 W +W 7 2 W +W 7 1 W + +B 3 2 1 +B 4 3 1 +B 5 4 1 diff --git a/files/ib002/recursion/pyramid-slide-down/.archive b/files/ib002/recursion/pyramid-slide-down/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/ib002/recursion/pyramid-slide-down/BottomUp.java b/files/ib002/recursion/pyramid-slide-down/BottomUp.java new file mode 100644 index 0000000..31303b4 --- /dev/null +++ b/files/ib002/recursion/pyramid-slide-down/BottomUp.java @@ -0,0 +1,55 @@ +import java.util.Arrays; + +public class BottomUp { + public static int longestSlideDown(int[][] pyramid) { + int[][] slideDowns = new int[pyramid.length][]; + + slideDowns[pyramid.length - 1] = Arrays.copyOf(pyramid[pyramid.length - 1], + pyramid[pyramid.length - 1].length); + + for (int y = pyramid.length - 2; y >= 0; --y) { + int[] row = Arrays.copyOf(pyramid[y], pyramid[y].length); + + for (int x = 0; x < row.length; ++x) { + int under = slideDowns[y + 1][x]; + int toRight = x + 1 < slideDowns[y + 1].length + ? slideDowns[y + 1][x + 1] + : Integer.MIN_VALUE; + row[x] += Math.max(under, toRight); + } + + slideDowns[y] = row; + } + + return slideDowns[0][0]; + } + + public static void main(String[] args) { + System.out.print("Test #1: "); + System.out.println(longestSlideDown(new int[][] { + { 3 }, + { 7, 4 }, + { 2, 4, 6 }, + { 8, 5, 9, 3 } + }) == 23 ? "passed" : "failed"); + + System.out.print("Test #2: "); + System.out.println(longestSlideDown(new int[][] { + { 75 }, + { 95, 64 }, + { 17, 47, 82 }, + { 18, 35, 87, 10 }, + { 20, 4, 82, 47, 65 }, + { 19, 1, 23, 75, 3, 34 }, + { 88, 2, 77, 73, 7, 63, 67 }, + { 99, 65, 4, 28, 6, 16, 70, 92 }, + { 41, 41, 26, 56, 83, 40, 80, 70, 33 }, + { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 }, + { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 }, + { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 }, + { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 }, + { 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 }, + { 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 }, + }) == 1074 ? "passed" : "failed"); + } +} \ No newline at end of file diff --git a/files/ib002/recursion/pyramid-slide-down/Greedy.java b/files/ib002/recursion/pyramid-slide-down/Greedy.java new file mode 100644 index 0000000..5dbfa21 --- /dev/null +++ b/files/ib002/recursion/pyramid-slide-down/Greedy.java @@ -0,0 +1,47 @@ +public class Greedy { + public static int longestSlideDown(int[][] pyramid, int row, int col) { + if (row == pyramid.length - 1) { + return pyramid[row][col]; + } + + if (col + 1 >= pyramid[row + 1].length + || pyramid[row + 1][col] > pyramid[row + 1][col + 1]) { + return pyramid[row][col] + longestSlideDown(pyramid, row + 1, col); + } + + return pyramid[row][col] + longestSlideDown(pyramid, row + 1, col + 1); + } + + public static int longestSlideDown(int[][] pyramid) { + return longestSlideDown(pyramid, 0, 0); + } + + public static void main(String[] args) { + System.out.print("Test #1: "); + System.out.println(longestSlideDown(new int[][] { + { 3 }, + { 7, 4 }, + { 2, 4, 6 }, + { 8, 5, 9, 3 } + }) == 23 ? "passed" : "failed"); + + System.out.print("Test #2: "); + System.out.println(longestSlideDown(new int[][] { + { 75 }, + { 95, 64 }, + { 17, 47, 82 }, + { 18, 35, 87, 10 }, + { 20, 4, 82, 47, 65 }, + { 19, 1, 23, 75, 3, 34 }, + { 88, 2, 77, 73, 7, 63, 67 }, + { 99, 65, 4, 28, 6, 16, 70, 92 }, + { 41, 41, 26, 56, 83, 40, 80, 70, 33 }, + { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 }, + { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 }, + { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 }, + { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 }, + { 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 }, + { 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 }, + }) == 1074 ? "passed" : "failed"); + } +} \ No newline at end of file diff --git a/files/ib002/recursion/pyramid-slide-down/Naive.java b/files/ib002/recursion/pyramid-slide-down/Naive.java new file mode 100644 index 0000000..084f306 --- /dev/null +++ b/files/ib002/recursion/pyramid-slide-down/Naive.java @@ -0,0 +1,48 @@ +public class Naive { + public static int longestSlideDown(int[][] pyramid, int row, int col) { + if (row >= pyramid.length || col < 0 || col >= pyramid[row].length) { + return Integer.MIN_VALUE; + } + + if (row == pyramid.length - 1) { + return pyramid[row][col]; + } + + return pyramid[row][col] + Math.max( + longestSlideDown(pyramid, row + 1, col), + longestSlideDown(pyramid, row + 1, col + 1)); + } + + public static int longestSlideDown(int[][] pyramid) { + return longestSlideDown(pyramid, 0, 0); + } + + public static void main(String[] args) { + System.out.print("Test #1: "); + System.out.println(longestSlideDown(new int[][] { + { 3 }, + { 7, 4 }, + { 2, 4, 6 }, + { 8, 5, 9, 3 } + }) == 23 ? "passed" : "failed"); + + System.out.print("Test #2: "); + System.out.println(longestSlideDown(new int[][] { + { 75 }, + { 95, 64 }, + { 17, 47, 82 }, + { 18, 35, 87, 10 }, + { 20, 4, 82, 47, 65 }, + { 19, 1, 23, 75, 3, 34 }, + { 88, 2, 77, 73, 7, 63, 67 }, + { 99, 65, 4, 28, 6, 16, 70, 92 }, + { 41, 41, 26, 56, 83, 40, 80, 70, 33 }, + { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 }, + { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 }, + { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 }, + { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 }, + { 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 }, + { 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 }, + }) == 1074 ? "passed" : "failed"); + } +} \ No newline at end of file diff --git a/files/ib002/recursion/pyramid-slide-down/TopDown.java b/files/ib002/recursion/pyramid-slide-down/TopDown.java new file mode 100644 index 0000000..7e0f75b --- /dev/null +++ b/files/ib002/recursion/pyramid-slide-down/TopDown.java @@ -0,0 +1,76 @@ +import java.util.TreeMap; + +public class TopDown { + record Position(int row, int col) implements Comparable { + public int compareTo(Position r) { + if (row != r.row) { + return Integer.valueOf(row).compareTo(r.row); + } + + if (col != r.col) { + return Integer.valueOf(col).compareTo(r.col); + } + + return 0; + } + } + + public static int longestSlideDown( + int[][] pyramid, + TreeMap cache, + Position position) { + int row = position.row; + int col = position.col; + + if (row >= pyramid.length || col < 0 || col >= pyramid[row].length) { + return Integer.MIN_VALUE; + } + + if (row == pyramid.length - 1) { + return pyramid[position.row][position.col]; + } + + if (!cache.containsKey(position)) { + int slideDown = Math.max( + longestSlideDown(pyramid, cache, new Position(row + 1, col)), + longestSlideDown(pyramid, cache, new Position(row + 1, col + 1))); + cache.put(position, pyramid[row][col] + slideDown); + } + + return cache.get(position); + } + + public static int longestSlideDown(int[][] pyramid) { + TreeMap cache = new TreeMap<>(); + return longestSlideDown(pyramid, cache, new Position(0, 0)); + } + + public static void main(String[] args) { + System.out.print("Test #1: "); + System.out.println(longestSlideDown(new int[][] { + { 3 }, + { 7, 4 }, + { 2, 4, 6 }, + { 8, 5, 9, 3 } + }) == 23 ? "passed" : "failed"); + + System.out.print("Test #2: "); + System.out.println(longestSlideDown(new int[][] { + { 75 }, + { 95, 64 }, + { 17, 47, 82 }, + { 18, 35, 87, 10 }, + { 20, 4, 82, 47, 65 }, + { 19, 1, 23, 75, 3, 34 }, + { 88, 2, 77, 73, 7, 63, 67 }, + { 99, 65, 4, 28, 6, 16, 70, 92 }, + { 41, 41, 26, 56, 83, 40, 80, 70, 33 }, + { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 }, + { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 }, + { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 }, + { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 }, + { 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 }, + { 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 }, + }) == 1074 ? "passed" : "failed"); + } +} \ No newline at end of file diff --git a/files/ib002/time-complexity/extend/.archive b/files/ib002/time-complexity/extend/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/ib002/time-complexity/extend/construction.dot b/files/ib002/time-complexity/extend/construction.dot new file mode 100644 index 0000000..357e4de --- /dev/null +++ b/files/ib002/time-complexity/extend/construction.dot @@ -0,0 +1,25 @@ +digraph G { + node [shape=record]; + + a_node [label="1|2|3|4|5|6|7|8|9"] + + b_node [label="1|2|3"] + c_node [label="4|5|6"] + d_node [label="7|8|9"] + + a_node -> b_node [label="B"] + a_node -> c_node [label="C"] + a_node -> d_node [label="D"] + + b_node -> "1" + b_node -> "2" + b_node -> "3" + + c_node -> "4" + c_node -> "5" + c_node -> "6" + + d_node -> "7" + d_node -> "8" + d_node -> "9" +} \ No newline at end of file diff --git a/files/ib002/time-complexity/extend/construction_dark.png b/files/ib002/time-complexity/extend/construction_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..58e8fca8b357a06800ca287c2c4ee49a895465e1 GIT binary patch literal 21738 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 +#include +#include + +void dynamic_array_init(struct dynamic_array_t *arr, size_t size) +{ + if (arr == NULL) + { + return; + } + + arr->data = NULL; + arr->count = 0; + arr->capacity = 0; + arr->size = size; +} + +void dynamic_array_destroy(struct dynamic_array_t *arr) +{ + if (arr == NULL) + { + return; + } + + if (arr->data != NULL) + { + free(arr->data); + arr->data = NULL; + } + arr->count = 0; + arr->capacity = 0; +} + +void *dynamic_array_at(struct dynamic_array_t *arr, size_t index) +{ + if (arr == NULL || index >= arr->count) + { + return NULL; + } + + return arr->data + index * arr->size; +} + +void *dynamic_array_front(struct dynamic_array_t *arr) +{ + if (arr == NULL || arr->count < 1) + { + return NULL; + } + + return arr->data; +} + +void *dynamic_array_back(struct dynamic_array_t *arr) +{ + if (arr == NULL || arr->count < 1) + { + return NULL; + } + + return arr->data + (arr->count - 1) * arr->size; +} + +/** + * @brief Resize the dynamic array when needed. + * @param arr Array to be resized. + * @returns true if resizing was successful or array was not resized, + * false otherwise. + */ +static bool dynamic_array_resize(struct dynamic_array_t *arr) +{ + if (arr == NULL || arr->count < arr->capacity) + { + return true; + } + + size_t new_capacity = arr->capacity ? (arr->capacity * 2) : 16; + void *new_data = realloc(arr->data, new_capacity * arr->size); + if (new_data == NULL) + { + // failed to reallocate memory + return false; + } + + arr->data = new_data; + arr->capacity = new_capacity; + return true; +} + +bool dynamic_array_push_back(struct dynamic_array_t *arr, void *data) +{ + if (arr == NULL || data == NULL) + { + return false; + } + + if (!dynamic_array_resize(arr)) + { + // failed to reallocate memory + return false; + } + + memcpy(dynamic_array_at(arr, arr->count), data, arr->size); + arr->count++; + + return true; +} + +void dynamic_array_pop_back(struct dynamic_array_t *arr) +{ + if (arr == NULL || arr->count < 1) + { + return; + } + + arr->count--; +} + +void dynamic_array_extend(struct dynamic_array_t *arr, struct dynamic_array_t *src) +{ + if (arr == NULL || src == NULL) + { + return; + } + + for (size_t i = 0; i < src->count; i++) + { + dynamic_array_push_back(arr, dynamic_array_at(src, i)); + } +} + +void dynamic_array_clear(struct dynamic_array_t *arr) +{ + if (arr == NULL) + { + return; + } + + arr->count = 0; +} diff --git a/files/ib002/time-complexity/extend/dynlist.h b/files/ib002/time-complexity/extend/dynlist.h new file mode 100644 index 0000000..e41b046 --- /dev/null +++ b/files/ib002/time-complexity/extend/dynlist.h @@ -0,0 +1,76 @@ +#include +#include + +struct dynamic_array_t +{ + char *data; + size_t count; + size_t capacity; + size_t size; +}; + +/** + * @brief Initializes dynamic array. Sets size of single element and zeroes + * everything else. + * @param arr Array to be initialized. + * @param size Size of one element in the array. + */ +void dynamic_array_init(struct dynamic_array_t *arr, size_t size); + +/** + * @brief Destroys dynamic array. Deallocates all the memory and resets fields. + * @param arr Array to be destroyed. + */ +void dynamic_array_destroy(struct dynamic_array_t *arr); + +/** + * @brief Returns pointer to the element on the given index. + * @param arr Array containing the element. + * @param index Index of the element. + * @returns Pointer to the element, NULL if index is out of bounds. + */ +void *dynamic_array_at(struct dynamic_array_t *arr, size_t index); + +/** + * @brief Returns pointer to the first element of the array. + * @param arr Array containing the element. + * @returns Pointer to the first element, NULL if no elements are + * present. + */ +void *dynamic_array_front(struct dynamic_array_t *arr); + +/** + * @brief Returns pointer to the last element of the array. + * @param arr Array containing the element. + * @returns Pointer to the last element, NULL if no elements are + * present. + */ +void *dynamic_array_back(struct dynamic_array_t *arr); + +/** + * @brief Adds element to the end of the array. + * @param arr Array where the element is to be added. + * @param data Pointer to the data, that are to be copied into the array. + * @returns true if element added successfully, false + * otherwise. + */ +bool dynamic_array_push_back(struct dynamic_array_t *arr, void *data); + +/** + * @brief Removes last element from the array. + * @param arr Array from which the last element is to be removed. + */ +void dynamic_array_pop_back(struct dynamic_array_t *arr); + +/** + * @brief Extends array with the elements from another array. + * @param arr Array to be extended. + * @param src Array from which the elements are copied. + */ +void dynamic_array_extend(struct dynamic_array_t *arr, struct dynamic_array_t *src); + +/** + * @brief Clears out the array. + * @param arr Array to be cleared. + */ +void dynamic_array_clear(struct dynamic_array_t *arr); diff --git a/files/ib015/.gitkeep b/files/ib015/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/files/ib110/.gitkeep b/files/ib110/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/files/ib111/.gitkeep b/files/ib111/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/files/pb071/bonuses/03.tar.bz2 b/files/pb071/bonuses/03.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..5243e790f26ee95479a23804bd2662822e46f6d2 GIT binary patch literal 2648 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 +#include +#include +#include +#include + +/* If you want to see arrays before and after sorting, uncomment next line */ +// #define DEBUG_OUTPUT + +/** + * @brief Swaps two elements at given addresses of given size. + * @param left Pointer to the first element. + * @param right Pointer to the second element. + * @param size Size of the memory one element takes. + */ +void swap(void *left, void *right, size_t size) +{ + /* TODO */ +} + +/** + * @brief Get index of biggest element in the array. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + * @param size Size of one element in the array. + * @param comp Comparator that is used to decide ordering of the elements. + * @returns Index of the biggest element given the ordering. + */ +size_t maximum(void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *)) +{ + /* Pseudocode: + * =========== + * max_index <- 0 + * FOR i <- 1 TO n - 1 DO + * IF A[i] > A[max_index] THEN + * max_index <- i + * FI + * OD + * RETURN max_index + */ + /* TODO */ + return 0; +} + +/** + * @brief Sort array in-situ using select-sort. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + * @param size Size of one element in the array. + * @param comp Comparator that is used to decide ordering of the elements. + */ +void select_sort(void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *)) +{ + /* Pseudocode: + * =========== + * FOR i <- n - 1 DOWNTO 1 DO + * j <- MAXIMUM(A, i + 1) + * SWAP(A, i, j) + * OD + */ + /* TODO */ +} + +/** + * @brief Compares two integers that are given through generic pointers. + * @param x Pointer to the integer x. + * @param y Pointer to the integer y. + * @returns 0 if x == y, <0 if x < y, >0 otherwise. + */ +static int int_comparator(const void *x, const void *y) +{ + /* TODO */ + return 1; +} + +/** + * @brief Compares two characters by ASCII value. + * @param x Pointer to the character x. + * @param y Pointer to the character y. + * @returns 0 if x == y, <0 if x < y, >0 otherwise. + */ +static int char_comparator(const void *x, const void *y) +{ + char x_value = *(const char *) x; + char y_value = *(const char *) y; + return x_value - y_value; +} + +/** + * @brief Compares two characters by ASCII value in a reversed order. + * @param x Pointer to the character x. + * @param y Pointer to the character y. + * @returns 0 if x == y, >0 if x < y, <0 otherwise. + */ +static int char_reversed_comparator(const void *x, const void *y) +{ + char x_value = *(const char *) x; + char y_value = *(const char *) y; + return y_value - x_value; +} + +// #pragma region TESTS +/** + * @brief Check if array is sorted. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + * @param size Size of one element in the array. + * @param comp Comparator that is used to decide ordering of the elements. + */ +static void check_if_sorted(void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *)) +{ + char *left = ptr; + char *right = (char *) ptr + size; + + for (size_t i = 0; i < count - 1; i++) { + assert(comp(left, right) <= 0); + + left += size; + right += size; + } +} + +#ifdef DEBUG_OUTPUT +/** + * @brief Print numbers from an array. + * @param array Pointer to the first element of the array. + * @param count Count of the elements in the array. + */ +static void print_numbers(int *array, size_t count) +{ + for (size_t i = 0; i < count; i++) { + printf(" %d", array[i]); + } +} +#endif + +/** + * @brief Run some basic tests on integer arrays. + */ +static void check_int_arrays() +{ + /* You are free to add any other examples you like, in case you want to add + * array with more than 10 elements, please adjust the size. + */ + + size_t examples_count = 5; + int examples[][10] = { + { -1, 50, -10, 20, 30, 0, -100 }, + { -100, 0, 30, 20, -10, 50, -1 }, + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, + { -1, -2, -3, -4, -5, -6, -7, -8, -9, -10 }, + { 0, 0, 0, 0, 0, 0, 0, 0 } + }; + + printf("[TEST] Integer arrays\n"); + for (size_t i = 0; i < examples_count; i++) { + size_t count = sizeof(examples[i]) / sizeof(int); + +#ifdef DEBUG_OUTPUT + printf("Before sorting:"); + print_numbers(examples[i], count); + putchar('\n'); +#endif + + select_sort(examples[i], count, sizeof(int), int_comparator); + +#ifdef DEBUG_OUTPUT + printf("After sorting:"); + print_numbers(examples[i], count); + printf("\n\n"); +#endif + + check_if_sorted(examples[i], count, sizeof(int), int_comparator); + } + printf("[PASS] Tests passed.\n\n"); +} + +/** + * @brief Run some basic tests on strings. Also with reversed ordering. + */ +static void check_char_arrays() +{ +#define MAX_SIZE 20 + /* You are free to add any other examples you like, in case you want to add + * strings with more than 10 characters, please adjust the size. + * mind the terminator ;) + */ + + const size_t examples_count = 5; + char examples[][MAX_SIZE] = { + "Hello World!", + "hi", + "aloha", + "LET US SORT", + "LeT uS sOrT" + }; + + printf("[TEST] Char arrays\n"); + for (size_t i = 0; i < examples_count; i++) { + size_t count = strlen(examples[i]); + + char temp_array[MAX_SIZE]; + strncpy(temp_array, examples[i], MAX_SIZE); + select_sort(temp_array, count, 1, char_comparator); + +#ifdef DEBUG_OUTPUT + printf("Before sorting: \"%s\"\n", examples[i]); + printf("After sorting: \"%s\"\n\n", temp_array); +#endif + + check_if_sorted(temp_array, count, 1, char_comparator); + } + printf("[PASS] Tests passed.\n\n"); + + printf("[TEST] Char arrays reversed\n"); + for (size_t i = 0; i < examples_count; i++) { + size_t count = strlen(examples[i]); + + char temp_array[MAX_SIZE]; + strncpy(temp_array, examples[i], MAX_SIZE); + select_sort(temp_array, count, 1, char_reversed_comparator); + +#ifdef DEBUG_OUTPUT + printf("Before sorting: \"%s\"\n", examples[i]); + printf("After sorting: \"%s\"\n\n", temp_array); +#endif + + check_if_sorted(temp_array, count, 1, char_reversed_comparator); + } + printf("[PASS] Tests passed.\n\n"); +#undef MAX_SIZE +} + +static void annotate(const char *description, bool result) +{ + printf("[TEST] %s\n", description); + assert(result); + printf("[PASS] Test passed.\n\n"); +} + +static void check_int_comparator() +{ + int a = 5, b = -10, c = -10; + + annotate("Test comparator for: a > b", int_comparator(&a, &b) > 0); + annotate("Test comparator for: b < a", int_comparator(&b, &a) < 0); + annotate("Test comparator for: b = c", int_comparator(&b, &c) == 0); + annotate("Test comparator for: a = a", int_comparator(&a, &a) == 0); + annotate("Test comparator for: b = b", int_comparator(&b, &b) == 0); + annotate("Test comparator for: c = c", int_comparator(&c, &c) == 0); +} +// #pragma endregion TESTS + +int main(void) +{ + /* Neither of those tests check for bad behaviour, like overwriting array + * with elements satisfying ordering. **I** check those :scheming: + */ + check_int_comparator(); + check_int_arrays(); + check_char_arrays(); + + return 0; +} diff --git a/files/pb071/bonuses/03/main_light.c b/files/pb071/bonuses/03/main_light.c new file mode 100644 index 0000000..c92c0dc --- /dev/null +++ b/files/pb071/bonuses/03/main_light.c @@ -0,0 +1,141 @@ +#include +#include +#include +#include + +/* If you want to see arrays before and after sorting, uncomment next line */ +// #define DEBUG_OUTPUT + +/** + * @brief Swaps two elements at given addresses. + * @param left Pointer to the first element. + * @param right Pointer to the second element. + */ +void swap(int *left, int *right) +{ + /* TODO */ +} + +/** + * @brief Get index of biggest element in the array. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + * @returns Index of the biggest element given the ordering. + */ +size_t maximum(int *ptr, size_t count) +{ + /* Pseudocode: + * =========== + * max_index <- 0 + * FOR i <- 1 TO n - 1 DO + * IF A[i] > A[max_index] THEN + * max_index <- i + * FI + * OD + * RETURN max_index + */ + /* TODO */ + return 0; +} + +/** + * @brief Sort array in-situ using select-sort. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + */ +void select_sort(int *ptr, size_t count) +{ + /* Pseudocode: + * =========== + * FOR i <- n - 1 DOWNTO 1 DO + * j <- MAXIMUM(A, i + 1) + * SWAP(A, i, j) + * OD + */ + /* TODO */ +} + +// #pragma region TESTS +/** + * @brief Check if array is sorted. + * @param ptr Pointer to the first element of the array. + * @param count Count of the elements in the array. + */ +static void check_if_sorted(int *ptr, size_t count) +{ + int *left = ptr; + int *right = ptr + 1; + + for (size_t i = 0; i < count - 1; i++) { + assert(*left <= *right); + + left++; + right++; + } +} + +#ifdef DEBUG_OUTPUT +/** + * @brief Print numbers from an array. + * @param array Pointer to the first element of the array. + * @param count Count of the elements in the array. + */ +static void print_numbers(int *array, size_t count) +{ + for (size_t i = 0; i < count; i++) { + printf(" %d", array[i]); + } +} +#endif + +/** + * @brief Run some basic tests on integer arrays. + */ +static void check_int_arrays() +{ + /* You are free to add any other examples you like, in case you want to add + * array with more than 10 elements, please adjust the size. + */ + + size_t examples_count = 5; + int examples[][10] = { + { -1, 50, -10, 20, 30, 0, -100 }, + { -100, 0, 30, 20, -10, 50, -1 }, + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, + { -1, -2, -3, -4, -5, -6, -7, -8, -9, -10 }, + { 0, 0, 0, 0, 0, 0, 0, 0 } + }; + + printf("[TEST] Integer arrays\n"); + for (size_t i = 0; i < examples_count; i++) { + size_t count = sizeof(examples[i]) / sizeof(int); + +#ifdef DEBUG_OUTPUT + printf("Before sorting:"); + print_numbers(examples[i], count); + putchar('\n'); +#endif + + select_sort(examples[i], count); + +#ifdef DEBUG_OUTPUT + printf("After sorting:"); + print_numbers(examples[i], count); + printf("\n\n"); +#endif + + check_if_sorted(examples[i], count); + } + printf("[PASS] Tests passed.\n\n"); +} +// #pragma endregion TESTS + +int main(void) +{ + /* Neither of those tests check for bad behaviour, like overwriting array + * with elements satisfying ordering. **I** check those :scheming: + */ + check_int_arrays(); + + return 0; +} diff --git a/files/pb071/bonuses/03/makefile b/files/pb071/bonuses/03/makefile new file mode 100644 index 0000000..c37d550 --- /dev/null +++ b/files/pb071/bonuses/03/makefile @@ -0,0 +1,12 @@ +CC=gcc +CFLAGS=-std=c99 -Wall -Wextra -Werror -Wpedantic + +main: + $(CC) $(CFLAGS) main.c -o main + +main_light: + $(CC) $(CFLAGS) main_light.c -o main_light + +check: main main_light + valgrind ./main + valgrind ./main_light diff --git a/files/pb071/bonuses/04.tar.bz2 b/files/pb071/bonuses/04.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..f54dcc8dc77e5311110ec69e236e4a4ec2da4b66 GIT binary patch literal 2531 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 literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/04.tar.gz b/files/pb071/bonuses/04.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5f597fa593553f192e6910f7e5f40aca47465058 GIT binary patch literal 2500 zcmV;#2|M;5iwFP!000001MM1rbJ{wxfAc9c^yUgFA&`=0rX`u9#BG@*kOR{8P2a;~ zYyrC15+~WD>6?7_Tge!VF*c=1?yk=}lVVHSUF}cp%B|E6nwQ26z97OCW%rx=?BSsT z@VZu$zt!WTs(P;;AFE&aSbKf=tXiubzplZuZ{tT!)K`S2zyxrPq+q0=o$AY z#eDNRil#oy)7%h1S(uXXvugZ+--Enzlj5sM7^5G0W~z zuiw@FdEK}`AKKT&974~LCx9^Gc+@pQrS|?-bRjYt#*tSIf=5hn=PqAfC zmzeot4%-4tanmHZ?0ss6MfpU8XV|b=&ms&pU%rGnh@>%g^|?NE3y;9Bq^AfVzqI!~ zy6Uz*HToLTo87+NgYmAWw>$cocGcCIFi~8U@XMD##)B#54iSRP@IE^DTtf%iN1?=^ z78w=5u<-9?tNr1#B(ckm^y{9cD++p}-D~N+{#mPYQeATRZ%6FILZx=#htgy6NY4M2 zYPAx{|JCE#ahCs|0-h6U+Mb0`-cQkaNR7cz9r6cZ<;f{T6?Ik0EzB6Pin%{kaB=K< zoTAFx-2E>W6@ML2@h{KB$K;V5|Fzod+FJY{XYv0ekQV<##%!4ZVv<65h(k%B62-yZ zUJmV{e+)UnBh;K=^F|=3FQyDq2$Wdr7e=Tcfay*!ae1JM2;>K}knCTTEG4za zVrh;n>5UAi&H@SyF!(JISh70Ef!{&}hophfEpaD=>PknV07W`TX->ee_vVztLz2tt z2y86K=?8nL-#P0@2KP~G_Au=H@C;BHx1ivMiaOBz+`M5eImUF=I)E9gOI44B6{<92 zOvB4=iRDhvXZ0_TV-zFKZUf4Z#d4CNX5BN+kM5p`?1t zKB@{9N%BVnMjzhkpgsJp5Nj7-2aDIRl{Oklxy2N+qTh0+dxUzop!YTtJjCBgz)_JO z74nzB;LYzeUwo^EN6<SYy0LRc!( z;~Ybkc!K^80)CYY_vQ}vQeyw{Hn)N+d(H*U$s!L#Sx69IEpvhj3-!b;G7W*zi@}RG zYcon$o-4Omc+q|_S5p**92+<5Q$E>Q8rj}XWKYw`YCDmwr;+{qgJkd588PY->fzP3 z_p2rj_yxWZV!EWb*wpVd*p)vSnE=|DdJcj%T$hooqQkIn9woFw!7N|rjZVAM)_%2K zC#e4?kI5ss{y(g~I$E#)kFxszDPX0px5-cy@zFq=M}_qNl6rdIxo)57=h|=K*M3)P z^sc+}C7tWO-g&RTlT$r^sMUVoYPb5De$nY%m2&rQqs7b>SH-cqzm>(mU#<b zjaHbK@V6)hzT?=^vN=Cy76WqxMLLYJND}C5@wD6nRDUDGB=X``)}KHmKbX}|^AA^1 z9XxK`u%_=1*p+5R%FHWTLB>cH;}eisCfQxI-jWxsh8?fKN36uJ+D%v?n-A-~LhuVM+M%LpAd{$HKGSLMV02lfh28 zqlDJ-6aF>@M7;R;u(rU@lP7*6Q#(+NXu$uEQkeIg=^|4}ij7`R>-GzCIwwnxs`=<^ zy?$Y62x101=v}{4gJNpjQlT@dyU;!fk7NJa(`qTj$AP7dM`;|-H?x!+t4Aey zag@L^@U0QEZFVd4MK%>t51VJn#O<7x%d;d0O7yPtjgy0NxgO_x)tJl?n?hs4G-fE- zAe2Gu-RWQ#!~a|^CqtSD71>KA!pW7dpAKgE&^>9wRqj#DEp8Mga+7T##4h7(^1rvs`T1W&`*A7t(f51W-*|8* zb{m88VC!_Sd%KYw2!yKtR}79W|Nnb5B%tw3Yobq+tKkIUW3xbN7h5xNlJ)$x-TZTUx{+cb7?o+ zG8~n$TG}?r$E4Yqp?EF*T3_`u$RL9ZGRPo<3^K?dgA6jrAcG7t$RL9ZGRPo<3^Mqu O!hZln3=SCpPyhhC0PqO_ literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/04/.archive b/files/pb071/bonuses/04/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/pb071/bonuses/04/CMakeLists.txt b/files/pb071/bonuses/04/CMakeLists.txt new file mode 100644 index 0000000..d3acc0a --- /dev/null +++ b/files/pb071/bonuses/04/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.0) + +# Project configuration +project(seminar04-bonus-maze) +set(SOURCES maze.h maze.c) +set(EXECUTABLE maze) + +# Executable +add_executable(maze ${SOURCES} main.c) +add_executable(test_maze ${SOURCES} cut.h test_maze.c) + +# Configure compiler warnings +if (CMAKE_C_COMPILER_ID MATCHES Clang OR ${CMAKE_C_COMPILER_ID} STREQUAL GNU) + # using regular Clang, AppleClang or GCC + # Strongly suggested: neable -Werror + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Wall -Wextra -pedantic") +elseif (${CMAKE_C_COMPILER_ID} STREQUAL MSVC) + # using Visual Studio C++ + target_compile_definitions(${EXECUTABLE} PRIVATE _CRT_SECURE_NO_DEPRECATE) + set(CMAKE_CXX_FLAGS "/permissive- /W4 /EHsc") +endif() + +if(MINGW) + target_compile_definitions(${EXECUTABLE} PRIVATE __USE_MINGW_ANSI_STDIO=1) +endif() diff --git a/files/pb071/bonuses/04/main.c b/files/pb071/bonuses/04/main.c new file mode 100644 index 0000000..0374aae --- /dev/null +++ b/files/pb071/bonuses/04/main.c @@ -0,0 +1,8 @@ +#include "maze.h" + +#include + +int main(void) +{ + return 0; +} diff --git a/files/pb071/bonuses/04/maze.c b/files/pb071/bonuses/04/maze.c new file mode 100644 index 0000000..e216337 --- /dev/null +++ b/files/pb071/bonuses/04/maze.c @@ -0,0 +1,84 @@ +#include "maze.h" + +#include +#include +#include + +/** + * @brief Checks if pointer points inside the memory specified by upper and lower + * bound. + * @param first Start of the allocated memory. + * @param last First address that is not included in the allocated memory. + * @param pos Pointer to memory. + * @returns true if pos points to the memory [first, last), + * false otherwise. + */ +static bool within_bounds(const char *first, const char *last, const char *pos) +{ + /* TODO */ +} + +/** + * @brief Sets 2D coordinates of the pointer. + * @param map Start of the 2D memory. + * @param position Pointer to the map. + * @param width Width of one row of the map. + * @param row Output variable where the row is set. + * @param col Output variable where the column is set. + */ +static void set_coordinates(const char *map, char *position, size_t width, size_t *row, size_t *col) +{ + /* TODO */ +} + +/** + * @brief Checks if indices are within bounds of the 2D map. + * @param width Width of the map. + * @param height Height of the map. + * @param row Row to be checked. + * @param col Column to be checked. + * @returns true if row,col are within bounds of the map,.false + * otherwise. + */ +static bool within_bounds_by_index(size_t width, size_t height, size_t row, size_t col) +{ + /* TODO */ +} + +void print_maze(const char *map, char *position, char direction, size_t width, size_t height) +{ + printf("Maze:\n"); + for (size_t row = 0; row < height; row++) { + for (size_t col = 0; col < width; col++) { + const char *current = &map[row * width + col]; + + if (current == position) { + switch (direction) { + case '^': + putchar('N'); + break; + case 'v': + putchar('S'); + break; + case '>': + putchar('E'); + break; + case '<': + putchar('W'); + break; + } + continue; + } + + putchar(*current); + } + putchar('\n'); + } + putchar('\n'); +} + +enum end_state_t walk(const char *map, char *position, char direction, size_t width, size_t height) +{ + /* TODO */ + return NONE; +} diff --git a/files/pb071/bonuses/04/maze.h b/files/pb071/bonuses/04/maze.h new file mode 100644 index 0000000..bf9f42e --- /dev/null +++ b/files/pb071/bonuses/04/maze.h @@ -0,0 +1,33 @@ +#include + +enum end_state_t +{ + NONE, + FOUND_KEY, + FOUND_TREASURE, + OUT_OF_BOUNDS, + INFINITE_LOOP, +}; + +/** + * @brief Prints maze and the robot within it. + * @param map Map of the maze. + * @param position Current position of the robot. + * @param direction Direction the robot is facing, one of "^v<>". + * @param width Width of the map. + * @param height Height of the map. + */ +void print_maze(const char *map, char *position, char direction, size_t width, size_t height); + +/** + * @brief Get end state of the robot after his walk. + * @param map Map of the maze. + * @param position Initial position of the robot in the maze. + * @param direction Direction the robot is facing at the beginning. You can assume + * correctness of this value. + * @param width Width of the maze. You can assume correctness of this value. + * @param height Height of the maze. You can assume correctness of this value. + * @returns End state of the robot after his walk is finished or has been terminated + * manually. + */ +enum end_state_t walk(const char *map, char *position, char direction, size_t width, size_t height); diff --git a/files/pb071/bonuses/04/test_maze.c b/files/pb071/bonuses/04/test_maze.c new file mode 100644 index 0000000..6a4ff4f --- /dev/null +++ b/files/pb071/bonuses/04/test_maze.c @@ -0,0 +1,246 @@ +#include "maze.h" + +#define CUT_MAIN +#include "cut.h" + +static void check_result(char *map, size_t position, char direction, size_t width, size_t height, enum end_state_t expected) +{ + enum end_state_t state = walk(map, &map[position], direction, width, height); + ASSERT(state == expected); +} + +TEST(basic) +{ + SUBTEST(spawns_on_treasure) + { + check_result(("T." + ".."), + 0, + '>', + 2, + 2, + FOUND_TREASURE); + } + SUBTEST(spawns_on_key) + { + check_result(("K." + ".."), + 0, + '^', + 2, + 2, + FOUND_KEY); + } + SUBTEST(spawns_on_treasure_in_middle) + { + check_result(("..." + ".T." + "..."), + 4, + 'v', + 3, + 3, + FOUND_TREASURE); + } +} + +TEST(some_walking) +{ + SUBTEST(straight_up) + { + check_result((".T." + "..." + "..."), + 7, + '^', + 3, + 3, + FOUND_TREASURE); + } + SUBTEST(down) + { + check_result(("..........................T"), 7, 'v', 1, 27, FOUND_TREASURE); + } + SUBTEST(to_right) + { + check_result(("..........................K"), 2, '>', 27, 1, FOUND_KEY); + } + SUBTEST(to_left) + { + check_result(("K.........................."), 15, '<', 27, 1, FOUND_KEY); + } +} + +TEST(follows_directions) +{ + SUBTEST(basic) + { + check_result((">..v" + "...." + "...K" + "^..<"), + 12, + '>', + 4, + 4, + FOUND_KEY); + } + SUBTEST(no_way_to_avoid) + { + const char *directions = "<>^v"; + + for (size_t row = 0; row < 5; row++) { + for (size_t col = 0; col < 5; col++) { + for (size_t dir = 0; dir < 4; dir++) { + check_result((">>>>v" + "^>>vv" + "^^T.." + "^KTK" + ".TvT" + "...<"), + 1, + '>', + 4, + 4, + OUT_OF_BOUNDS); + } + SUBTEST(to_up) + { + check_result((".>.." + "^KTK" + ".TvT" + "...<"), + 4, + '>', + 4, + 4, + OUT_OF_BOUNDS); + } + SUBTEST(to_down) + { + check_result((".>.." + "^KTK" + ".TvT" + "...<"), + 10, + '>', + 4, + 4, + OUT_OF_BOUNDS); + } + SUBTEST(to_left) + { + check_result((".>.." + "^KTK" + ".TvT" + "...<"), + 15, + '>', + 4, + 4, + OUT_OF_BOUNDS); + } +} + +TEST(mean) +{ + SUBTEST(out_of_bounds_at_the_beginning) + { + check_result((".." + ".."), + 4, + 'v', + 2, + 2, + OUT_OF_BOUNDS); + check_result((".." + ".."), + 5, + 'v', + 2, + 2, + OUT_OF_BOUNDS); + check_result((".." + ".."), + (size_t) -1, + 'v', + 2, + 2, + OUT_OF_BOUNDS); + check_result((">T<" + "..." + "^.^"), + 10, + '^', + 3, + 3, + OUT_OF_BOUNDS); + } +} + +TEST(infinite_bonus) +{ + SUBTEST(easy) + { + check_result((">.v" + "..." + "^.<"), + 0, + 'v', + 3, + 3, + INFINITE_LOOP); + } + SUBTEST(medium) + { + check_result((">v" + "^<"), + 2, + 'v', + 2, + 2, + INFINITE_LOOP); + } + SUBTEST(hard) + { + check_result(("v.v" + "..." + "^.^"), + 0, + '>', + 3, + 3, + INFINITE_LOOP); + } + SUBTEST(harder) + { + check_result((">.v.." + "....." + "^...<" + "....." + "..>.^"), + 4, + 'v', + 5, + 5, + INFINITE_LOOP); + } +} diff --git a/files/pb071/bonuses/05-06.tar.bz2 b/files/pb071/bonuses/05-06.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..d7162130f757560aea32083a821f0b2f75dc50d6 GIT binary patch literal 3635 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 FKM=xT(X9Xg literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/05-06.tar.gz b/files/pb071/bonuses/05-06.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..87b5c56d90659f62afea7b6a86d6b921e7d2544a GIT binary patch literal 3486 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 Me-+X|#{hT$0CYgtumAu6 literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/05-06/.archive b/files/pb071/bonuses/05-06/.archive new file mode 100644 index 0000000..e69de29 diff --git a/files/pb071/bonuses/05-06/CMakeLists.txt b/files/pb071/bonuses/05-06/CMakeLists.txt new file mode 100644 index 0000000..9273d61 --- /dev/null +++ b/files/pb071/bonuses/05-06/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.0) + +# Project configuration +project(seminar05-06-bonus-bmp) +set(SOURCES bmp.h bmp.c) +set(EXECUTABLE bmp) + +# Executable +add_executable(bmp ${SOURCES} main.c) +add_executable(test_bmp ${SOURCES} cut.h test_bmp.c) + +# Configure compiler warnings +if (CMAKE_C_COMPILER_ID MATCHES Clang OR ${CMAKE_C_COMPILER_ID} STREQUAL GNU) + # using regular Clang, AppleClang or GCC + # Strongly suggested: neable -Werror + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Wall -Wextra -pedantic") +elseif (${CMAKE_C_COMPILER_ID} STREQUAL MSVC) + # using Visual Studio C++ + target_compile_definitions(${EXECUTABLE} PRIVATE _CRT_SECURE_NO_DEPRECATE) + set(CMAKE_CXX_FLAGS "/permissive- /W4 /EHsc") +endif() + +if(MINGW) + target_compile_definitions(${EXECUTABLE} PRIVATE __USE_MINGW_ANSI_STDIO=1) +endif() diff --git a/files/pb071/bonuses/05-06/bmp.c b/files/pb071/bonuses/05-06/bmp.c new file mode 100644 index 0000000..32865d2 --- /dev/null +++ b/files/pb071/bonuses/05-06/bmp.c @@ -0,0 +1,153 @@ +#include "bmp.h" + +#include +#include +#include +#include + +#define UNUSED(var) ((void) (var)) + +/** + * Return reversed string. + * + * Function returns a pointer to the reversed string, which has been created + * from the input parameter. If the input string is NULL or memory could not be + * allocated, function returns NULL. + * + * @param text input string + * @return reversed representation of input string, or NULL, if the string could + * not be created. + */ +char *reverse(const char *text) +{ + /* TODO */ + UNUSED(text); + return NULL; +} + +/** + * @brief Checks if key is valid. + * @param key String that is used as a key + * @returns true, if key is valid; false otherwise + */ +static bool check_key(const char *key) +{ + /* TODO */ + UNUSED(key); + return false; +} + +/** + * Function for encrypting the given plaintext by applying the Vigenère cipher. + * + * @param key Pointer to a string representing the key which will be used + * for encrypting the plaintext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text Pointer to a string representing the plaintext to be + * encrypted. + * @return the address of a copy of the ciphertext encrypted by the Vigenère + * cipher, or NULL if the encryption was not successful. + */ +char *vigenere_encrypt(const char *key, const char *text) +{ + /* TODO */ + UNUSED(key); + UNUSED(text); + return NULL; +} + +/** + * Function for decrypting the given ciphertext by applying the Vigenère cipher. + * + * @param key Pointer to a string representing the key which has been used + * for encrypting the ciphertext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text Pointer to a string representing the ciphertext to be + * decrypted. + * @return the address of a copy of the plaintext decrypted by the Vigenère + * cipher, or NULL if the decryption was not successful. + */ +char *vigenere_decrypt(const char *key, const char *text) +{ + /* TODO */ + UNUSED(key); + UNUSED(text); + return NULL; +} + +/** + * Function for bitwise encryption according to the following process: + * The character about to be encrypted is divided in half (4 bits + 4 bits). + * Subsequently, the bits in the left half are divided into two pairs and the + * values inside each pair are swapped. The four bits created by this way are + * then used in a bitwise XOR operation with the remaining 4 bits. + * + * @param text String representing the plaintext to be encrypted. + * @return a pointer to a newly created string containing the ciphertext + * produced by encrypting the plaintext, or NULL if the encryption was not + * successful. + */ +unsigned char *bit_encrypt(const char *text) +{ + /* TODO */ + UNUSED(text); + return NULL; +} + +/** + * Function for bitwise decryption - it is the inverse of the bitwise encryption + * function. + * + * @param text String representing the ciphertext to be decrypted. + * @return a pointer to a newly created string containing the plaintext produced + * by decrypting the ciphertext, or NULL if the decryption was not successful. + */ +char *bit_decrypt(const unsigned char *text) +{ + /* TODO */ + UNUSED(text); + return NULL; +} + +/** + * Function for encrypting the given plaintext by applying the BMP cipher. + * The process of encrypting by BMP: + *

    + *
  1. the provided input string is encrypted by function reverse() + *
  2. the acquired string is encrypted by function vigenere_encrypt() + *
  3. function bit_encrypt() is applied on the resulting string + *
+ * + * @param key Pointer to a string representing the key which will be used + * for encrypting the plaintext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text String representing the plaintext to be encrypted. + * @return the address of a copy of the ciphertext encrypted by the BMP cipher, + * or NULL if the encryption was not successful. + */ +unsigned char *bmp_encrypt(const char *key, const char *text) +{ + /* TODO */ + UNUSED(key); + UNUSED(text); + return NULL; +} + +/** + * Function for decrypting the given ciphertext by applying the BMP cipher. + * The process of decrypting by BMP is the opposite of BMP encryption. + * + * @param key Pointer to a string representing the key which has been used + * for encrypting the ciphertext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text String representing the ciphertext to be decrypted. + * @return the address of a copy of the plaintext decrypted by the BMP cipher, + * or NULL if the decryption was not successful. + */ +char *bmp_decrypt(const char *key, const unsigned char *text) +{ + /* TODO */ + UNUSED(key); + UNUSED(text); + return NULL; +} diff --git a/files/pb071/bonuses/05-06/bmp.h b/files/pb071/bonuses/05-06/bmp.h new file mode 100644 index 0000000..7470a3d --- /dev/null +++ b/files/pb071/bonuses/05-06/bmp.h @@ -0,0 +1,98 @@ +#ifndef _BMP_H +#define _BMP_H + +/** + * Return reversed string. + * + * Function returns a pointer to the reversed string, which has been created + * from the input parameter. If the input string is NULL or memory could not be + * allocated, function returns NULL. + * + * @param text input string + * @return reversed representation of input string, or NULL, if the string could + * not be created. + */ +char *reverse(const char *text); + +/** + * Function for encrypting the given plaintext by applying the Vigenère cipher. + * + * @param key Pointer to a string representing the key which will be used + * for encrypting the plaintext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text Pointer to a string representing the plaintext to be + * encrypted. + * @return the address of a copy of the ciphertext encrypted by the Vigenère + * cipher, or NULL if the encryption was not successful. + */ +char *vigenere_encrypt(const char *key, const char *text); + +/** + * Function for decrypting the given ciphertext by applying the Vigenère cipher. + * + * @param key Pointer to a string representing the key which has been used + * for encrypting the ciphertext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text Pointer to a string representing the ciphertext to be + * decrypted. + * @return the address of a copy of the plaintext decrypted by the Vigenère + * cipher, or NULL if the decryption was not successful. + */ +char *vigenere_decrypt(const char *key, const char *text); + +/** + * Function for bitwise encryption according to the following process: + * The character about to be encrypted is divided in half (4 bits + 4 bits). + * Subsequently, the bits in the left half are divided into two pairs and the + * values inside each pair are swapped. The four bits created by this way are + * then used in a bitwise XOR operation with the remaining 4 bits. + * + * @param text String representing the plaintext to be encrypted. + * @return a pointer to a newly created string containing the ciphertext + * produced by encrypting the plaintext, or NULL if the encryption was not + * successful. + */ +unsigned char *bit_encrypt(const char *text); + +/** + * Function for bitwise decryption - it is the inverse of the bitwise encryption + * function. + * + * @param text String representing the ciphertext to be decrypted. + * @return a pointer to a newly created string containing the plaintext produced + * by decrypting the ciphertext, or NULL if the decryption was not successful. + */ +char *bit_decrypt(const unsigned char *text); + +/** + * Function for encrypting the given plaintext by applying the BMP cipher. + * The process of encrypting by BMP: + *
    + *
  1. the provided input string is encrypted by function reverse() + *
  2. the acquired string is encrypted by function vigenere_encrypt() + *
  3. function bit_encrypt() is applied on the resulting string + *
+ * + * @param key Pointer to a string representing the key which will be used + * for encrypting the plaintext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text String representing the plaintext to be encrypted. + * @return the address of a copy of the ciphertext encrypted by the BMP cipher, + * or NULL if the encryption was not successful. + */ +unsigned char *bmp_encrypt(const char *key, const char *text); + +/** + * Function for decrypting the given ciphertext by applying the BMP cipher. + * The process of decrypting by BMP is the opposite of BMP encryption. + * + * @param key Pointer to a string representing the key which has been used + * for encrypting the ciphertext. The key is represented by a single + * case-insensitive word consisting of only alphabetical characters. + * @param text String representing the ciphertext to be decrypted. + * @return the address of a copy of the plaintext decrypted by the BMP cipher, + * or NULL if the decryption was not successful. + */ +char *bmp_decrypt(const char *key, const unsigned char *text); + +#endif diff --git a/files/pb071/bonuses/05-06/main.c b/files/pb071/bonuses/05-06/main.c new file mode 100644 index 0000000..19e1bd8 --- /dev/null +++ b/files/pb071/bonuses/05-06/main.c @@ -0,0 +1,8 @@ +#include "playfair.h" + +#include + +int main(void) +{ + return 0; +} diff --git a/files/pb071/bonuses/05-06/test_bmp.c b/files/pb071/bonuses/05-06/test_bmp.c new file mode 100644 index 0000000..594e8ca --- /dev/null +++ b/files/pb071/bonuses/05-06/test_bmp.c @@ -0,0 +1,251 @@ +#include "bmp.h" + +#include +#include +#include + +#define CUT_MAIN +#include "cut.h" + +void test_reverse(const char *input, const char *output) +{ + char *reversed = reverse(input); + + // check if not NULL + ASSERT(reversed != NULL); + + int result = strcmp(reversed, output); + if (result != 0) { + DEBUG_MSG("Expected: %s, but got: %s\n", output, reversed); + } + + ASSERT(strcmp(reversed, output) == 0); + free(reversed); +} + +TEST(REVERSE) +{ + SUBTEST(ABCD) + { + test_reverse("ABCD", "DCBA"); + } + SUBTEST(BADACAD) + { + test_reverse("BADACAD", "DACADAB"); + } + SUBTEST(qqsfyCCDAADQWQLLLlccaasq) + { + test_reverse("qqsfyCCDAADQWQLLLlccaasq", "QSAACCLLLLQWQDAADCCYFSQQ"); + } + SUBTEST(NULL) + { + ASSERT(reverse(NULL) == NULL); + } + SUBTEST(EMPTY) + { + char *result = reverse(""); + ASSERT(result[0] == '\0'); + free(result); + } + SUBTEST(RANDOM) + { + test_reverse("hello", "OLLEH"); + test_reverse("malloc", "COLLAM"); + test_reverse("calloc", "COLLAC"); + test_reverse("realloc", "COLLAER"); + test_reverse("everything", "GNIHTYREVE"); + test_reverse("failing", "GNILIAF"); + test_reverse("LOL", "LOL"); + test_reverse("1273912739&^%$$*((", "((*$$%^&9372193721"); + } +} + +void test_bit(const char *input, const unsigned char *output, size_t length) +{ + unsigned char *encrypted = bit_encrypt(input); + char *decrypted = bit_decrypt(encrypted); + + for (size_t i = 0; i < length; i++) { + ASSERT(encrypted[i] == output[i]); + ASSERT(decrypted[i] == input[i]); + } + + free(decrypted); + free(encrypted); +} + +TEST(BIT) +{ + SUBTEST(HELLO_WORLD) + { + const unsigned char output[] = { 0x80, 0x9c, 0x95, 0x95, 0x96, 0x11, 0xbc, 0x96, 0xb9, 0x95, 0x9d, 0x10 }; + test_bit("Hello world!", output, 12); + } + SUBTEST(MALLOC) + { + const unsigned char output[] = { 0x94, 0x98, 0x95, 0x95, 0x96, 0x9a }; + test_bit("malloc", output, 6); + } + SUBTEST(CALLOC) + { + const unsigned char output[] = { 0x9a, 0x98, 0x95, 0x95, 0x96, 0x9a }; + test_bit("calloc", output, 6); + } + SUBTEST(REALLOC) + { + const unsigned char output[] = { 0xb9, 0x9c, 0x98, 0x95, 0x95, 0x96, 0x9a }; + test_bit("realloc", output, 7); + } + SUBTEST(EVERYTHING) + { + const unsigned char output[] = { 0x9c, 0xbd, 0x9c, 0xb9, 0xb2, 0xbf, 0x91, 0x90, 0x97, 0x9e }; + test_bit("everything", output, 10); + } + SUBTEST(FAILING) + { + const unsigned char output[] = { 0x9f, 0x98, 0x90, 0x95, 0x90, 0x97, 0x9e }; + test_bit("failing", output, 7); + } + SUBTEST(LOL) + { + const unsigned char output[] = { 0x84, 0x87, 0x84 }; + test_bit("LOL", output, 3); + } + SUBTEST(GARBAGE) + { + const unsigned char output[] = { 0x32, 0x31, 0x34, 0x30, 0x3a, 0x32, 0x31, 0x34, 0x30, 0x3a, 0x17, 0xa4, 0x14, 0x15, 0x15, 0x1b, 0x19, 0x19 }; + test_bit("1273912739&^%$$*((", output, 18); + } + SUBTEST(HELLO_FI) + { + const unsigned char output[] = { 0x91, 0x9c, 0x95, 0x95, 0x96 }; + test_bit("hello", output, 5); + } + SUBTEST(BYE_FI) + { + const unsigned char output[] = { 0x9b, 0xb2, 0x9c }; + test_bit("bye", output, 3); + } +} + +void test_vigenere(const char *key, const char *input, const char *output, size_t length) +{ + char *encrypted = vigenere_encrypt(key, input); + char *decrypted = vigenere_decrypt(key, encrypted); + + ASSERT(encrypted != NULL); + ASSERT(decrypted != NULL); + + for (size_t i = 0; i < length; i++) { + ASSERT(encrypted[i] == output[i]); + ASSERT(decrypted[i] == toupper(input[i])); + } + + free(encrypted); + free(decrypted); +} + +TEST(VIGENERE) +{ + SUBTEST(HELLO_WORLD) + { + test_vigenere("CoMPuTeR", "Hello world!", "JSXAI PSINR!", 12); + } + SUBTEST(MALLOC) + { + test_vigenere("fails", "malloc", "RATWGH", 6); + } + SUBTEST(CALLOC) + { + test_vigenere("fails", "calloc", "HATWGH", 6); + } + SUBTEST(REALLOC) + { + test_vigenere("fails", "realloc", "WEIWDTC", 7); + } + SUBTEST(EVERYTHING) + { + test_vigenere("FAILS", "everything", "JVMCQYHQYY", 10); + } + SUBTEST(FAILING) + { + test_vigenere("fails", "failing", "KAQWASG", 7); + } + SUBTEST(LOL) + { + test_vigenere("oopsie", "LOL", "ZCA", 3); + } + SUBTEST(GARBAGE) + { + test_vigenere("fi", "1273912739&^%$$*((", "1273912739&^%$$*((", 18); + } + SUBTEST(HELLO_FI) + { + test_vigenere("fi", "hello", "MMQTT", 5); + } + SUBTEST(BYE_FI) + { + test_vigenere("fi", "bye", "GGJ", 3); + } +} + +void test_bmp(const char *key, const char *input, const unsigned char *encrypted_expected, const char *decrypted_expected, size_t length) +{ + unsigned char *encrypted = bmp_encrypt(key, input); + char *decrypted = bmp_decrypt(key, encrypted); + + ASSERT(encrypted != NULL); + ASSERT(decrypted != NULL); + + for (size_t i = 0; i < length; i++) { + ASSERT(encrypted[i] == encrypted_expected[i]); + ASSERT(decrypted[i] == decrypted_expected[i]); + } + + free(encrypted); + free(decrypted); +} + +TEST(BMP) +{ + SUBTEST(HELLO) + { + const unsigned char encrypted_expected[] = { 0xae, 0xae, 0xab, 0x85, 0x85 }; + test_bmp("fi", "hello", encrypted_expected, "HELLO", 5); + } + SUBTEST(FI) + { + const unsigned char encrypted_expected[] = { 0xaa, 0x82 }; + test_bmp("hello", "fi", encrypted_expected, "FI", 2); + } + SUBTEST(RANDOM) + { + const unsigned char encrypted_expected[] = { 0xa9, 0x87, 0xaf, 0x87, 0x89, 0xa2 }; + test_bmp("garbage", "random", encrypted_expected, "RANDOM", 6); + } + SUBTEST(LETS) + { + const unsigned char encrypted_expected[] = { 0x83, 0xa2, 0x81, 0x8c }; + test_bmp("see", "lets", encrypted_expected, "LETS", 4); + } + SUBTEST(how) + { + const unsigned char encrypted_expected[] = { 0x8d, 0x80, 0xaa }; + test_bmp("it", "how", encrypted_expected, "HOW", 3); + } + SUBTEST(works) + { + const unsigned char encrypted_expected[] = { 0xa9, 0x8b, 0x89, 0xa8, 0x80 }; + test_bmp("asjdljasdja", "works", encrypted_expected, "WORKS", 5); + } + SUBTEST(NOSPACES) + { + const unsigned char encrypted_expected[] = { 0x8d, 0x81, 0x82, 0x85, 0xae, 0xa0, 0x89, 0xa8, 0xa0, 0x85, 0x84, 0x89, 0x85, 0x84, 0x89, 0x8e, 0x8a, 0x84, 0x8e, 0xac, 0x84, 0xa9, 0xa8, 0xac, 0xa2 }; + test_bmp("meh", "longerTextThatHasNoSpaces", encrypted_expected, "LONGERTEXTTHATHASNOSPACES", 25); + } + SUBTEST(ayaya) + { + const unsigned char encrypted_expected[] = { 0x80, 0xa9, 0x80, 0x8e, 0xaf, 0x8e, 0x80, 0xa9, 0x80, 0x8e, 0xaf, 0x8e, 0x80, 0xa9, 0x80, 0x8e, 0xaf, 0x8e, 0x80, 0xa9, 0x80, 0x8e, 0xaf, 0x8e, 0x80, 0xa9, 0x80, 0x8e, 0xaf, 0x8e, 0x80, 0xa9, 0x80 }; + test_bmp("HUH", "ayayayayayayayayayayayayayayayaya", encrypted_expected, "AYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYA", 33); + } +} diff --git a/files/pb071/bonuses/08.tar.bz2 b/files/pb071/bonuses/08.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..0d0eb4e0fb8fdf85c83a2f4a8c196c7e392a9de5 GIT binary patch literal 76279 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 z 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
5Y-f?KukT$v6Y6R@UCZ7T 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�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 NyOJrwgo2@C*tjS0YkdF! literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/08.tar.gz b/files/pb071/bonuses/08.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7a9db277369dfeed900bcf5fa5ecf1cc13cd24c1 GIT binary patch literal 106553 zcmeF)XHZj1{4oA|uUAnNP*Hlhih^{J-W4t&(mSCFNDVEt5L&L%l&+G{L3#n18plM0v1HS^10gl!XPv3ccI*FV(yhyDP4F=cH)75C=htjcH!G$ znuDmS^75!ey|ZNZZ8)Dl-=4NAS$buOy`A6g!l0VUo=_{q8YW}ivQu;7)gYKqY~ze;gVRzY#TUE6Ci!14Jf z>mOguUk00#Yl9X?)X(gn>cvF%Ugn3ZA3b+sbyQ2w5&^4-X@3c65f`aB)V!0eIPB~pI0n~kr}T2Plu9cQX7Rn%?;DIin2z{5bT)hHekn3gd_r*DD&=;7V(!$ z#qxUTG! zOb9yIV%_NCZlnpfdBKlRzLUrv4;t^apB>Q+_EJ@nQ`9+pyrpy#U`TpwZ2P3w4$ATs zb}hhw*reCU%^h`yXpG~*M!MPfbtw(06N3h4cZuj7uNXUdV;apSPK`40E_2Nwh+)8q zk>Z?U2(}pu+i+EKJF$1rSgPk{vkkeohl~WJKd9IWY-}CS4ADk^8gV!n+RKQ~cV2)( z#zUC1xpowm!=~?4^mo@y+r=rnG?GY`iRpR_>G6RMpvLHBD0B=3d-Xy=??@pOX55R8 zC037Lh;V~>@I`#LLH4U7OIaN#QS{@huS^XI^cfYPTNQ+k-mK}BIt_WU?M#*1X$A97 zFAg``%H%4_SD8$(849&bX=s=lV&9`oH8l9|QAX~`Icsh>5^*}@Z->#{3%K%}ipa;E zWxQ2KYuyV6Q)}dA!?YnuP14>P-IUvORW|7yMX>R&&CrewzU!n#*JN^kg7hVT3D1@t zy}kd=aB3Vq?gKTh$AwLD`hVHo3pJp`+?}CJNd=qvhlE^Kc~(w)R#JwB=!4yYWrSPdErjMbcPL2C}+(zbq$Ubx%4L zgtq}$ltmQoZ>-v-XZ9TdLePh!dww`pVSL|&CFMzd-J!Xk0>4B7;MwpO{arQ8YGyd8 zI#j8Xei^Q8lk@Z-#H^?V&d+s?ydsmrfO}Q%6zDv=uEXV@HZGCdt;qJBGrQy5~*&QNEhj!!A=MVBDVI|3) zubJFjSiQK}dfW-BD6UiL1+(gN0y_R)X57-nlbH*g@MVaY_A1l!tOR$zFpiPSnr`Ni zvCD&`CV90urLbWCgHo)XR!ql;M))h`M9!Q$y?Arm&w~o~6ZOFi&|4up@vby#Vs>$E4%n%Q>1eSewOU7bej#F3 z6t+%+E@xJ+z0y{sZ}5Qx%tH*}@I*OK_7Nt7h?kz&F==BCRzNQl4>*3A!fWczyH;Ho z$9ibhb(gS=bUThWFg%I3ylAKwgh?m`Zq(%8UgJK%eDj62euv|bh}dqSt|)ZIik;AD zif#X`UTM2fG40(HySvOLpxWn9W2v)Or$$^{2@58|_;X%`%t?igbGzCb2(_-DOygoa z4%Ov+bb_h1z0@azGwV*I?7xwVbWC(3SPXx9-DDn?<> z_>Q)oG#IAz_gAG-8Un?brFOpw?_EDqmZzY$o@6%G4oIsm-n?3nQ);JpX;WzS`!Bpa zCU+<~Pvev;{{NAKdZh|b1*ig40jdC1fGR*0pbAh0r~*_0ssL4hDnJ#W3Qz^80#pI2 z09Al0Koy`0Pz9(0Q~|2M|8)YV%<|xAc8vg*w|?1Yf^0{NxeW<%?bj2ov3!jGd*Jlx z^9aMb*RZAA#ci?P_P@F|cAL^Uv~2#C`=kr~{<*I(#lmx`jQ6SLmnYPdDnJ#W3Qz^8 z0#pI209Al0Koy`0PzC<&LnEp=~5{ z;LZqkeF7p=X}Zj@aT%s?bx_qN>mGJeIzr*@=m>G8P}05hNR%bdW{L_qG&oK+k_>M9TRdP?S)6>qhl+tE`pqwrHz>(=L|0jJ(F3B*;zQFEIzNA&s1l6Mn>t?}-Y zkeSn7h01dK$1f7RQQyDKCaKQ*$Nb)nz+%)JY- zKeuWpxzq0(h+8?bv&3pk+hy3qUsg#+6IRT*Yn38nMJubeSE{r2MpOf5Ne{M*dwc+4 zQk|W@i-IB;?{$UQ1zH?L{(}C}%j(ZKcJGbWCF<%yUR}0#d_-wAD!tztD4XXd%^;w0 zCkpUAVT_F8yg5aPA-j_jL}YNhoQ^Jq?$S#eLG3}pQ{>&)u8PK%&e_A)zaP+Acw_U( z*M`qu>&=PPjJt*JSsRDt6{(4Dl@iUryo*iY>9&QwI6XV+GD}2J_OKmdSIQ_tWY#{S zQ*n+m;eB=GHyfJPVjC2vw@azA>7>sI_PaVcTmt@2BUV;k$#Sk7{mL6O?8#LaE|^X^ z>halGUar8s+Xy0JdJlT*+17_-Lq=G5=~raB*iMX6FDrDTGwkG}So^v-q7NkcU1te| z`ZOHp5|krhRd$d!U_x$i*tBUP?EEh8buy%l)AVFDfW0$Jp%CKGIrF^jCS&n}L*Nd7 zm`A&0V@Db(}imH9>yw+pu(Xm zJFncvv0}zhyF4Aa`6m5J+H|lkW5NC&NPf2mA9p*nIkAdzzFnp}w0#+kgfer942iAQ z-S(|M8g=%Tp5P6mc=hszd}OTj56ojYB84RwP3+H|()Qx!J?K$nvGVUa>D&F}oWx?8 zTRD4&_hV0jvvF<;bYP>9^WUvUds`&rP-Jn>n^w!KO-FoppH|mSGpbE6Cx-6^c}SrB zqM3G8+`4Ioi`fBCVPu{idYyC&+_`#{-t%PuC?Hg#n*M$lrDJ|Ut{#e53;k%Dl!6MK z{a6GsgM*hiCYacFw>XNl39B?)%Zzbufk}BC?GUR2pr59%O7%H0_UBM zQ_>a1y;ea6*6lOwyx5}$%8H)-r&XjtP%W48jM9CZtu2K@qYTni>`@7S4!2T4UG{2- z(r{bzLFmm`yBzqIpLFz;mB?dKn~T;{1p>L=A#$l%aoT=0o?X|*-?f)^0oBaid*dNj zy--77!aXJ<^UkiEfR$zLULNk=FN!EhW}1)9WK_Jkr3UATlLOIum)D zUQ20*ybx$ZLIlod(oC%BF7BQ&+l6;v$V)Bmv35p-f)_Iry?2>=LT5K8{-~S17zc7p zT;07fZ&xFQ)<83n?BpXhLMwYU*(;C!nLHWwqxcW*FmQ4`-L1DfwLN)My%W*aE7dvr z{KX`VtAl6Im6@4;tZ;sS4G|RRsS%A#Fq(E_|ASmp$QN@qgp}<9&OS%&qYo!utIqXSFRfSjU4+iM zPhZ}Ik)qpanKAhuGobE%Rt@>Vlo@OA#s1O({dibY0tVDd7wo(^?AaT-K?iIHoIoS< z?LzBiHf}Dw$<`}iPTSjgbVrT+$n$4xhqwpm0D%vH<-A?4pQw@NxYL`01Ocr(W%i!A zns4?Z>qWuljfvGfOCu=A!G9j(`ZmrBf#|Wv&_=K9vwgAQSdSNp`Dc#Pd|8cfg}#kwb!RB?i=;U*K@@>|W+#cGa`Gp?zJP ziI=&>S1J?J3-p?fUxAE?wUEhchKqho;RIw7H@HE@5wOG=9nBxd5S_7A&GL4mac!eU zS=$0n&zxZEnvirtLSCNiDIv!Q%v;}0Oq~`pMVtiJAd}HuoEvSfE=NiA?{M!$YnX*M)1u0uAPy~lGNf6*KW~- z&LiYl9z&a}rVhksVmeqcFDem*A39L6pR>j7erCu3L!1;FRJ(h<?fFu-_3|Cg$LodR@)eA`h~`_F+s%dyILB6YxCQ&#_TZ`Wg7<54x|5AS zt^j&lC_Q=1PMovHi2f_;`E<@Ia_ME@tracYj*@%YQ8fQ zzxz4q_r5#+oYplDshoc=TlaW9mTfkeEk-^cnx~D3PeW9PEuGklR{I}pU}8%R&ueR4 zCfwf8^t^~85{|;KO4=*#k41l#iWVw?M=VX0Fq;#U*3$LQGW705Z`rHPcvFIm@o;p{ zaB$2jAoI1fQwwU6@e_POv_Reela;x@0$zP zeY-oqBK>U>-(Bh_F&y|`F*7KHUcu=7{ptE54M^nyPZlWrsygfg7+e`%ssrrJjr*}v&w~NV=&OAO6Om) z=FO{(AGr@JO}G^H)DKjdjW${;e;f;(TPb_;g2?VP(=y^Cs#;+-{?e|o<=Jutf8r9e zPcGd+`W36B!=LAuXSlc0$%q>sTB55{UlD-NPUdVI#jhpIxWmGZAZ8DGKYtUrj?!mZ zGMOc6qZWo7LWmZxj1_+M4YjOKNb+~8l^GhS`o>{_p&!d89mcQMAJwll&ywd&GXv)9 zOV=DMTi|fsItUY>=_oKz;A>msYB`3bI^<(B8WZ#yoWkszadU&<*U_4KUhwIiY;P>t zD{H7eRADG;JIOYY0TgCFLOT=sZTEKB&J%(S`t98u<4%#g%y!E6Q^2bmLG9a^`a~0m z6|i>^C-eCPj#*XBP@defXni)HV0QThDEna2pL64MIY-pl$FVWHF~KiLpMm+TWM(7k zpw^Ac>M%QFFL+5Ls9?YVP`Xv?voy9~F^FjO{BOnEbT|yd|4!*&dVh)6%ny$CZQ<7E zuNS)Xw(1+K-hNzNlEXSKYvVge{QtJe0E*VP=C#;gZtpe@TdIY9W~Mo*O_{#_K)SL$ zYkI6ku}SVI9#JR~xF4Fs!_caPUbNTGs@#y~Lz{0zTH^o!HW{Er%=&@sT|oQb!B2N`sOjTa$)Goaf3^Slr12 zTl8IUMRm`}s{V~F@nN6Vq?>2E6tBS}Jpd4%X*-vruiGxN#YD#LNAycY1o-GyCsf z{5$rK)-l?k{?7I{GSiStTtU4p#XT4b?Q73CnWG>R`H@7pXkDNG7n%wMNt;g2`zhM; z`qSN&yV7m#W%zP|suZ8o49~06sVyXj*F<6rWPKvrJq#+!P`c&XAc$D2s0=K!kwR39 z6-x6Q!Rsp-yD=xp+ox@ndm?Ls(Q6*%Axlq0V&p~=Rz2mkhqt~a-axF??rgNh-d-aV z6VN?CjrNeShEDv~=*o+b)#=e?Z#38!Dl_B|7^5kc<~5zU%S`h`ojM6xdjF z3|;g67LZ$j)oNFtxA~4!EIMRzl`krK-!lAW{GSCb3GOgFb}}J1R7*%+HSLm)5aSzq zBr1XrbU7RQnjd75DSZ_t!OxsDfidqaw!mr&?8$6s1^bJZ9*vwoI0A%OeemaQYo0Z! z;!PGLg`xx}N_+sV+1RLiLFHaPMa3}sS47=;|Buy6{i5s)ke8|Bjkf(CLjG}WGw-b0 zr*l<=)%~Y1etavibAAyke%7gXg&+8i%bG-DrA0;Zhyy>7B`MjzkWtGcxWmVrjCm3Z z(2J;@UPnwSPCp6{M>)dwE6URHP}9?+EsX^LmH zDs%pX&kSQ8>c! zOLXzQ)^IH)#{(iVt>{*0VBAO(r);#}K`v!eEx7F+M6x0Kcn#R?N>d5eSAy9M8Fod+cZQx*D5o!!|Gb)8rUajpyS%WcmlWp~;V@3Y z9EHNVPd-m6%d6!IIbPE_k7Ahl$K@l=z?+9{9{x;SGQi5cs$_2YA+M*QwqY;oE~D(u zM-TC$VXVTGqPLyVYkT=HVEmc*8JJcyEL@aw!xA!ho)Hl%TAE1tC4CL!V6Bw%!sjnZqhS^mq|&aCMSz7O;K0)aL0&sJxiZEm?4kF;%(4Fr@nQWD_VmrR*Dg$WWdPB6O6X~i7h-k^jUlKt+E)4no-K#| zt{$}4bv|T{^2ho}4y7aX5*K+uk@dVH7gv!~i$-|yVYR}|&W;57;*Fx%2*fVv1y z6`%@G1*ig40jdC1fGR*0pbAh0r~*_0ssL4hDnJ#W3Qz^80#pI209Al0Koy`0Pz9(0 zRDu781O_N}drE)&Dx;13GdfSj{l7dtHI|_7I9b2L+g?-Tl)c9Gdsej)81}Dh zsud013H#}?p+OgW$pG=90;pb^q~N7=unwoRhG;V z`|J6?!YIUpbUD@Q`#BduA4!zLA$3YuSVHtOic#?}$J~`(nwZv^EqB$|elvju6Pgt1 zreM#t9|YYPh@B?50T4V_5JU;EhS_!9itqXIzFU1nA6&tAC5(Bpz`67=ag3wHe+JP( zWCSW|;he`0g0?a6cu+Ep;{MpGZP6PGuPTGJt~s`H6Y{ifx9ISJ{u*@t$Dy*ry7nc7 zc*tgRh1#Z7@>5K5WF>y5AZJPrm)-6N+upk$>XE&gdrmPbiW8!&cMXQ(@rV_c!%mg1X7zeR+#CKaf zy=a46=r?#7I)?c}pbb^EwPW%Uqh*b5p=Xwdlqj$%Fnr3i5P(lJPGe6PwX|kS)JHH# z3N|EVwc-^YS?ZMSeC2HE3b@d(7*FAB2u;6Mr)NTTt3abIygE!u86=|T`S3D2g;irl zImWUsC8A;VGPVa%SL&3HNsiIas-AT9yzl?{mPg+9yyoUxTH}}mH@(nr*qzFaXpHhq zPL32ggsWW>rfQU$u|kQJj>zeiRn-@KG~UyOfaNL(AuZ=;k~oFb0Qa_Y_qXQ6{0>ri z9*ZYt{3?KU>|PbmQ=m030)MxI$Mz2r^f1o#e}Fq=L?dDDY~O@n5KqFhbG7xsC>YPAjV_(ER>8~SIg^2_d)5Y=J7sr>C~iSULE_c>T+_mu^7~L*x>Zv5^US@y z(uhZ(XRJd9tIV8XqaVVVhb)ab0?0v7@SeV2#bLV>q8OW6k2_n9Rh}YS&H?y#|KyNXQoolBAx!n6FU%C5au=)jm+vKeS z)b7~Etn+T3?ClNC_CV~1@F=y#2y1~AVa1_0K()+X#oVccZ|K@?b=#-%|HdG?W#-0~ z%llfsumrCp51k)gS?C3HFHJci#@+gqBVPKMu!X}~Zj&k`&IKFxSMCxq+Z_$33-dqU zI(Qqho+_{qoeF>V?9kthHJy`S6j2qR0`~al!bz>+q27|2wKc#3F-g7=1PooNSUDDx zSUFh=k4Kk1B_Q|*>+A=E8o4R0+(-w!21kkx3DV22DR==E6==#h6 zP!M^$B0`@i*#nb42g0xxb!l0=MSjjU?5rt6rZ){@h@C8!@ee3k(Qx702TG$Q#TeQy z>(v|>t}CIeTpj^GUx)++v}Ize^Ijg z=h-b!S>n#&xLf$jQJvt*Y$)-{&HcH+rD{jVqdOHAjy=N~I#@_bLjJq=AEUS8x3I&K zkKWABj3=}x1n(NMvba^=G{gR`GC@hi#(_!D+VP4Nj%ZbhnO2#1G}E^RRGgTmM7h@s zS%H0BT*a~eH@6;&){V1#oJb(5L*r`0S6zd6i@y35^p*v+=UHT@7`aE}m_;cg%jb;P z7sa2v+uKe~7c1C0S{cMd_dHT5n+%#yktm*DSSbJXxy8MtOFpY@+z1%JFr5#dZrjC~&+XN1mxT@{hvHlf9gVjtL^;dpD|Ks< z!Ym1hwVZ*CQ}oMS_C2i#Em|Eb?XgMb5;}Tg8V8TL@+lQRRM%7xyg)U2TQVeIWf2)I zq)_6sxpR#nO+K%6QveOT6V!J4?jY^2iD6oP6Ry^>(_&yu-tohS2I64_vXe`kG1g|Z zqpzYl0^iE%Uc6OM`Ju>@Fu$bu;HW$1H1SH^8EbA}&3fojF`e_5lKQmp@Pgt_J7?}l zxP0&dF7n7G@CU9XR?g^=l{+EgJ=P71&KG+r)@Tm`nntAqOx-I!J}rkEDr#lB3D)at zMXOj#*_mpn`C%YcU2E+|GuspqOT?aX8|V1M22!Z0eBPRUsvug~)QQ>5{AztvKX|4# zXF&skpYOyXX12+qgl24Q$uHK%XX4gd+e}rj*YW_?roal_uC%T|T;6`w%1m$&pt*Hk zwwe=|zgn}pK{6P&T&N+{G@M^aCvq!0cfTTwn9D%1ugE4$qR;*c+y9_;M4utyh?{(# zzPWudvuh2LZQHvy>yQ{=mzu&BeWkvca$H_6ZFKFPTZ;Z#BYp~6tF8kBc{xn=VMm`G zH!5>|b?=$9MzcvzJq73}kH$o{&AI!{AS&__68E;slTNg|Zs}a4+zj@F|A| z7Qw1f+KS3McckC}_2?A~(_%r(hi%FTc2$^3E-P(Hr_1gldgmH5Obkx*ygntIXexYJ zFEpi*t3L7qSGG$^9NIyR+LN4>3locTR0@5q&iUI#NsnW4GLQ@i!^$|y&6JeOMpm{K z$F1UIqa*QnH-LRoSuSlwVKEK7fXlLc+MZX&yStm*L@tVTP&8*P5n-5mNt$?zxQ`h0 z&gy7zb14@T=hexET?+KOE3w?__!0I!kpNs4C^WuB>hqu zCpnts-~V>|X5{YRq5f3yJG9aqdt1tiVhw&2G3A<_xU>8#;KOdD{KmYRP)Mq;j|m9(|NAfbri?XS;!CY;=q!hLz@~ily?(#c0cp}W znp?%>)^2y3<*<-FwB>?C4H*_>` zxq>4BsX-xn7B@}xuHl;_9#=jXn6By5GwvBPHQvru;oRY(RouV(>%I3Y&?8f;O0h0E z33ENIigSV7d>g_Wgo?#A5bhtpD#Vg%M`_O8*6EJ;!Wy?kMwQHB|AKbs0o7ns^9+odjucS?t5KD--l0h_z?2yHR$5* zB_=w?(f5&GO=0QpvE2(_3Pz1|NxWN8w{m8Tl7_)lJ93e91l?0$d(U0#(53k9_c94P z*~V!LFuDief$IH&Z z<_kSgs5TV*)GAE7hh@C-aK27Wo*#g}wC21uYcmArY!1}{g?u#>_}4g}m3f^w)1xo& zWb$pM+^5ib1*ID*yk!i;wFB#SsAPxU&p5WsUGHQV(X;`sVE{L2v;X06KjJ`L?=+-w zzsjM;KD+AZm(Yt>n`OsQVz0p+rvF+E$`MEFqcb^zq8ggx_J2OiUHEKYHpuAOtyeS2 zNBW@B!{9XM@-J!2jX5uHi}Ge*@Gx-De=a(D`yi!Z*TU+9arRS@S20jQC}U;ST+H>d z)g?j!`h{`LzrNljk}{Lbb&KQP2bcW3cucf<^3Q~8FtPg|6q0C7p7pG;%D?a&lmOHg zYCk+wujpbbrm;|qi_Ecq5ZSDli)Fsz?B7!ie`IP23xT-^or^j2w=>z76=yRy2yGtx z9SV5hukO%jEdH(~bzlJ^*;Qs=V`{sJM1AVhZ=*8_R=Jo;i4GYrKZ$(fR>FFYR$Q@d zAXU}5J+lgcyUK~k^g*AUbf|(p0WuFT0^`GfS#inIC!{z#R>C%Vlj!RDl! zd3Wlb<}Qyf1Zv~QRCY_uH1y8-{8G3l|E1l9uN8e9m-g0MEnivP%fJp?h|6>w#=4cr*!Qv}Wby6? z$!%8(RTv)k3mJ;e7v~LqDioS>f{{cq-u_&WPDNc;&m}j_@M1VW)m<{wSZBhpRQ6 zLb`{MA&o*D@)+}m>`GFXik5k%Fi9FWt3-S{uI5Bz$y$~tBR#Vtl*Nxif|<_*ZoicW z76-^nM67t!V7JlBnGchVh3gTqLC~=83eboT63-=MCP6*5y-BvtX^=y-5*a8T?4+aN zQNp9=M05#AQ~PG*IpFr6CQLSbYBn9rfSIjP6tei0K-;SQU*+SWT40P$n8EtQ)3|3& zYNz(c{ezZ?2(p9CGvI||LpP}uPq?kq(&V0cC}b8OcerC9p(Td*Gj8lHyD*=$2N%|c zRJYc0ZAYtTZn&CNt2z#kY+sGq3Da7&N8TsX09^NE!pIXt=50e-bY|J9V)AtO(qAjj zbi2x>>f3FE$^Y;>*{d?=aNQ*M$uGl~>L<+~62Ned(sT6r3Sh5!GdSTR#ZHl6uK7+e zSI7~Q4K^TdJZ)VPamw0wK;$IsjaHNLtPhHs%bcw0|raUpM*Mn65PV_8kVC@NpC={`-+efc&#GOxsJRMNHXcY)M2AmUn%G z-14XgEl|06e`Je}@TyR5^i7jsFWEBpu4F4d{_gxJ@Xo_f!O8-Lci!B5^gI}HXKt1YA!J7Nnt+~^Q8hSxbn++3<# zC5WAe>FtAOkUi=CVAMcNRE$R!r;aH$q*n0r;x1C039ZNH%XG1>vB)Cv^ z8APLwGuF{e9N`#q--y%Hq(0all9GF2ES1iVwH5i=^{lD%7!{MN_<;`6m8ts-SG37U zw>D#1@1!P;aCw4xkvijmgfXe&0&z7Kkx%nML5;SWcC%a)-O7e0n=zU_t{9m6+ zxN(g+eA0wZnE~#AVH0-&C;S}EaeXjA&46C^!_TJ(yAEvbVPr4UL-VLwJ}`IqBl=>*Zm=bD;=<~?5w(L5CgH6aJyf&WOBP(@W!9W z3xE`l8AskudmMKTN=NDj?bBAKGOPkO^3G&J@%Bg7#P+&{%F7rLHPp?gZ6Dh02J1pt zcLHK&YHl%!1 z%i%$z$n6YcIifh!^GzLG6YJt>{2*95$O zfUFS2Je*Ub2R0uWTKua&Xa!Ibc0;{zS4)xP)w)M_pbkmHiZL=1w8UIoPmJrzL~|qn zOjxE5hN3i*Q}$Bgj!C3v(tGsr27eZBKj}BS2y9DumXRS*_gQZt!c^M-?>Z6RvX@86 zpZGt^#kekxB}@zLIjtVQ5bvYWUyZi+P37}#`?p{#>#SEJ%aNCJ?8{nVEvG-fkD;yy z_j6#-f@@B8755w#?z~;H)H7B2Q6nbBFkTJ#5B5XlI?PYwIRa^A&Ng;NBbJahQ0v_^k_y8GpgQX4 zbOyfY{MYwvWc&9(zrboB=7bKYF2TgukEIm88*@eHDS9n!D+05ncQB zwc+7Ysr=?^na*L?1QNa-SurxV^>I1F4O(Nuu>10gYQ%Yy#iN1s4o*u z8!FXY1u}jF=nmdi#kL^ezTHUS7M7WsH5Ok#qd1qk!DUaO!_p-`)-15x(SpKR=uh|Y zif2#NPHJ!3OTA1KGf%Fu`>K!p_oY$_RwNK2%AfOG_b8+RSL8se?`9d3nDUk85vspw ziVa|*uh*hfb-k7;PsnPnriaFmc5R7Vp5S^?UdQ_LP^teB!6tMJv)5cVXRsS3SJW`y z(QZeyru|hdw9J+5$h^F}Rp5E?gS~*b!{yM%H$M00ZfdxP-yPI~bhkrR_KBo@F8XVW ziz#{Dv3S+V=gjCcp`h1D#F~k5z)@?R3mxq1grj{CS}~_^Q^4%bySjI-3X38V z{5h6bqSrB7!xf^cO0L=zOu70ULWH~J3fNy?YE(|K;I4u?QYfh=JLi{BvSbitZ*-lb zX&N5pv=R96P}%YLsB5B#pMqbTvgO26RLty#sxIiZlpQ)B{G`bL&-`M=?#1Vv)s;Pp zqDRyo#avXB483sf>i-=(V~U{6m3J|cDd)KUGj{PWfXy^S*&`k?AK za6M>|rXcX)jC9yV_ibj5=C@sT3=Aa4N3Rp_7DXT4utf6A0PpM-oX%NXJ+o`+{ui}6 zkDOmQ7V=&E_?SN2EgW_WG!86jf+mQ$b$hT#~`P zDXoC6OQK_vXYrIF?yZ-ZNz?IuQpq!_gZ0>Q%a-OMsGt_8fQ#5cx#{V(Gdzfj)WQ`wLmPWFS#}y~bKpeN z6zR5pv-zsyg&;3ItBOhUMt4o^BuC(E=93~-xjB(F@iy3cjGLENWB}H*bJVi-r(j!us61})^lgwuv+Ry&EbecQk&g@v!6@9+HDFk8 zp3qBvnW?L(v&wrF`=5RC!)3g%IsLns?W{IaA>G`>#8#%YM@qjk17=*-Q>GvfVW;~9 z8-AzS2YQ-WPkrHiS+4Und_z21-7MJ#nk-NNuRTH>MpMR5tCBh{^>odXqc=}j2_>Jp zyAyfSx;1EUqp1#9Qt%ouU0z7JqkLT8rzSWt{r4m7Yg0Z)SxzA$%`ftLQq2|SmO9T5 z4a>qoK9Wj}4@Gz!F{YqRW0lxIPB!g3=C67?Ub+@0{dsfePDJWgo3~_lU;HAs>pXCbN?qZGU8m#JS9uuEk=>q%=g65~ClBn${S?e;wZ zynyarJgs9;@b1o>i`^&+F_2&Y22FgCy-jbS;MH}EtrYvfE&Z^p(4KkNO5JSUieGUD zTO&Te@~Dy&AfeO|zw4&)nQiQCf5xF2!RXy0cRzQx4r{ zO$PKVtz4LNFe!1hD_oAJ z57p(I_S`y@9nVi|5;`&A)A1Bz*I{7Y@STjt?vL!IYbcDbMj20=Ss!k8XLgT&N&*xd zzw=_kaI-w>Q;wI^xf{gSco+46%*T_EQRpXpoZUKsGE|v9Z>tkf82L1G?@zWnk#d{@ z6(GSN06#G}$X@!Hr|jg6IRL+WQ`!dj;>(!N5l1z`!oA4pq^w1pRaK{uy( zusvHVo>Rw3ls3Q6f>#0#w>O5d#YZWyP<#F%aI_{l&i?|`5xM>J_D1AYADhZU!FsF1CuRY+_)6ZA!vM-s!)}z`h8ljgzErq!vMxt{w_y`yv48^ zjW)2sL$f+Bbcd?Y}T zx@`Af9zZDU*kI3HvVW&Ley5SK_t;{Id6&+jnQeL~Q9<9BSH8bv7`YaKFa3*R^dG{8 zW^>tC%B#xzoinF>OGsJZ*~OL1mHJ(&${WK@sz5&DHp>pgjGlAZq1Qx)8@O;>dx~xS zORQ#ifObNs+PyEw-B%nN_Vkt#UiM%fARCV7H6o+J!WNaRuThjh7v$_Iz?SdclZ)kW zk-)2gMS$l~BfsL(|I@Ajp>9Pr_2<)nwtgvf3r5dW{3lJYS@AUR^v{I~;Ksexlo$~V z`^kg6z~sXlfa(1;aXthp{f@iF3OY#2Bb7umBI@xgBO1KNr7#OI1Z%6ow&Vpy9k}ww z8Tp*&8GW-pC+QjZFXnG%7Q{)u1j$xB3_l>hobij$gtZV~jI6m%vv81xL;jn-x1}|a zA{XW9wHc|+CS{WDX;2utwR*?-&YQ(+QaTY_(sn5;p&3p=E>DN~D|h$kb9bt8QW-dF z+w5u2oBP@b41u~u076Hl;xpFe*Rdnm@;l<8+xM)PjmTZTNG)!4MO-^9Q z?qu~aia~C7wMexRhMCn+$zdGHkTiZn=od~unN`DYWZtIx_p;{9X za0)N(sRU9!+0RTt7=2GUM{u6U;kGvDFM#+l6TdwBrBt_)JW>UGxqOtv;j)|MWWxf% zruItnli1xD-4;m*OG@#Wt@GQS>gVuDoIHOFd*cD_5E6YlvSZB?H3sR{iieJ^7l!|e z=5mn;5@b9qaPeB^TK-%l&vxd8I4jFMe&Ti7D`H*Bx!s%~L_s0=6O+uAYHB`_d4;Ru zO9B?G%Z?SGz|+7Ex#o~(>)m2}3FCRWvomk%Xr@fbPSD1LZ`K@j*O?p{WcFtKvKz}m z4lO_Sj*3qPv%zn%mcSxZ;|(&q7=2=<{N6WJXYN41gQ4eyRl5ES;nf@KoL}#)<$b73 zo?2Dk%+2FiZFFpZl>GF~?^n*YIX-O(uk7<}UQ$0)_s5gAdLEvxuQMToI6ZGjJ^~Rz3_^pv-sk!Vt60g*u-$1XkPOO0ylAsx8C42pBCOmmLm?~8 zEQappe6i-r(YaIXRkgBdbp}H@Kr7@@!K@aXS>x+5{rX-CK_Nr#_;K*iESr2&(kp^svMYtQ;l7tBRdjG|qWBqkSrF!KqIFkdsyAb4rUEUPxO zvZCU0cQtj;FBik}ifiAEWj>`D!FuiHK{N_12asJUeYWqcDW5^9+m*(YNg5!5UPUsr zySG-t^wya4V_pZ3`WCEcurZ-Z7tJBk3s1`~ z(o5g)@Io|T%*rg>4MUyQF0&R@wdKD&5$!WYG8JqNm;uT+vG$(ZYxm` z0?e=DCE8-LcS`>AhY>wG%>CqcoKTx=r}rv2017YOPGL=^rslRkeZt_(GUI5~ZQifh z{xBwp26K^}fJ^<&^W|2KjMqSa$y+2ikL|8u|aO3nK zSR|n(DlZ!5e^jQ(NkH<%A8!+Hrxw2bT+ zUZ;3N*=nwA(U>swk9+z*0_K?QkVCiTb2nX*`Y!~sB$q&%Tj@>H$nl(6qs_CM|tM|n84dn44JW9hCzB^tJPiEZyZTTNH`B4 zw)UZaZ;JJr5s1I|0duSG93&(uRtV0K(Ee={f!V7ljD&QE2_fp(GxM?SMJ$9&evCTX zfgbbZ#O zaSNtvRCo!Z%pev{%V>aKz^awGd$^H4vv69+=6?8k!L1fGt?@)m%&qu)2-yi@k?!#} z$!CESp)Q~bxFsrXD3vuKyJs$xBZyzV7fVsMerqO`@S~r^shN~lyYp4aJg#U5o4v{b zy0DwGuNG1OZYG`lhC$|3sqb)aTUxNYE8qL90adyq+}S9mm3Hge-2Kk~MbvvoHPtn5 zpsy7b0Tt;2Dk>rZB1(s-ynqc*5s(@IA@tA#gd{2o3IZx!N<;)idaofO(wo#!6MASN zKoZh(F7NldcisQ8a@OoUGi%SBy=R_hpTx>xQ=5oT#p<52ej7_eSNU$@wv;=)!^xFC zm!)apy3}j2AqNv`Cu6TnZ9kJ-_z`3Xu1-=)lxELI9jbhmg3h{aot$i9nO-2_t@2sZ zf0G|Vt|SlIFNt3-zOU=Qd7EEUMSF2}tJEtO(zyRY(sKmk6mL+;wSEy1>+Slmb=OKY z_+dmGtvE62cojBUwIp(YPqsjKLJJ-4XNkjuLEXvSsWDso^%%u=8AQ=dVEgsDzFj=$aNV-c92^|-lH zk$tIAoNb+EQt8aBJ8w&sCY+qV*l$2Rz9irVvrT z%QL+Ui+=YF*4LXUoUDo)~6rrDwI?`)Hn^P=Hq(uG6XVjDs_R8Bob$0)6} z;wfD3sXja@k92kPrZ47D@`*muEQjfgr_yUVsB-|<=CP(=1S(Ash>{Xw5&b1yKV%N zoGgAargn8c;P;O&We?NrudGg#xsW3LW7R@EGyXipM2EB2!d7&1`TMW`NsX_J4M*0b zc64D28`FrS@am;*&1-4!@eL-Q>^M(wD?*aHjjI&WXZ#8caP5f7RE)a%1p{tWOs6eI z&CI@+g1A_Ofv5juJNG`qyZNBp!?#n4=A$1wAZPq^7~5A@^KR+*SDK3?m}ag&?v~$n zI@yCZ>f<|uSiQld|03qZbHdXY~&V_ykciCt#P{b zi_$q$HPvzliSo#cCRbeOw__k@h6M{$l%gM8u_8elD_>`t6jR@pzsSkgJD1Yjr1jwa z#uR$N>U!;OkO5trExI$ahlqtP_gZOBdIiK-J)5T0ub?J8J;gPmQbM@g7 z$+4Mxg^d-r?Z!sCEVH5-oEc%I_mT`_OLRB+zEo#twg1^PGP`n@R(BNQStgDyK4x8o z2S1eU_^IaeHGOo*kMiz57{QDlx!CQRHe{0^{->D}_oA?}LcIAOZRoAt`!_e<+)KDb z8e-!17R+>80?qFS=0ag%6h^VlXFD&~py!FA#)fnw>C64_=n~(Hb9xC^8aFKuUjPqM zeeYQQ*>#vOH0`$?i!dN_T(Pd`0OixrDyB{xVGRKym;3S2wmgEw8zPN2SlZ4`%b{=lk3q zWJ)(5HORnuerTvpJ$8q85Uzcz0W&W{fc4nW~Jx5L?{jpitRq3Df zAPM=TYI>kE zKCRR%V@C}*=e?0|jx0Wz&!+c&4q6P0@FhJkC@NKcJ*aQkFoipr?vjii@mnwP+K$Q3 z+_Cj^Kl{W8Wn=xRCIZ|#Okf^MsE{52O@``#*7e?WZWasPm?E`wG6($SUyTnaOul>e z<#3^kzT^yXwV=8p`;MMe&x^hK#i^;5FHa}1cgbOC0Z%-i+F7XGER!Dz>#md4Uoo?~ ze$I1rCu6iXFTnWVN*%BLC*EdYXGDGXv`}gOlqb_EfpgI1Q8&*Zt$Yft_$-_WDex6r@O^|85B77U8dwjXFM9Sq5VIj3CF_UnA|-&L|faUs+a~KdVg2 zF&`1PRvJw^s(tv3qwckF@opU}YvK*0kbz&NGPv(FDvA3oz{E~QsO@duU@%f%4Jl@z zu7WLZxg}ma zAqBk5m7u_^JB26Lwu;KWOI|lUXm-U40g=W%8pMSye2Kie)3Y>0IbxmGRrb8s^2HzTW^5W@8tslf_v)TGtoMz)S8?s?$qJV^ z=lAYp%F_>FuBs+y6IC5#R&EOpZXfYvYbIRbw~-c_X@|c&NA(k%clvs5{?yR<4afZZ z@rUEX0&DH_#R{#p3p)@}tE%5ZHlC_1=|#jvW9%#QORW5|GY6VnWhHYm%|vdCb_P;( z`Q7b`)aM^BZEV^&sOU2)2S>ks_%2s;S$N&ijwn6~3m9?lUONxwNT>zbNaLmowO(WoDeV;_!G~UwQpoeCPYnu)NXmf~gGcqP9wfZ0(~W zrf~4jZ_neOZ4YgS*uwvnEXhq;u6$xKXbVz4bgjm~{mRwM>&1i^`;zzW`<@+f?|8Dx zh}@ifZg*Fw$Uwb3UljX7$s{Y#vcB9kbvW+p&Bb@$qEew^<|9Tkijw6aB7D6OC*ww$ zFP`bkrHFB|E#DOiFWeroSd57KWZ2l$V!nI%QZBRXqdrDqJIX|KNl2C0!>{dnJzDyt zj{hxBlcXS>=LH=To88|{Z{vT6CAg8k+dU=oVTe89rLA%e&IagK^?G`yn zv=+?^9#*6FOX#8gc$%j4>Fc-0BukYojZ@YQd)`wu`>uQ3^G{2w)WTCO?n{@edWl{k zs8>8(XT2i{>OdbSa%;k0S~|FES`^oHB_7@j@kWAQZOzPBkdcS_@B4!UX5>f<6eO=^ zBI{8|4US~g>3AIm<>n7Y_&d-DDjUPAuTrVyz+O3UN_!yTB=NpUj1kGloT({JTMJx0OhxvsO28xakDK6`?GJar zKUyn_Z&fN3IL5mM2JSjfU3==qOO(;q)|U!Pk>h@AzAvQl=I1x8dQo>Lc2v8h?HxGj zrsnRk_u=!U3qE#mo|lEv?(Hvf>EA{^byZL#$DS_kN%2q4Y&W%aN^4b4bZVyAI#_M= zEeU(db%--R4{zb{Hic?`LoLQmW|Z`w--Cnl$vm^WheYpv%>03@BD7EBfu+-Tn4O2U zW|Y8r%3Baul~2Sh{Hcx;qAvwsz9CP}f(6rtJqX=9*PO&V>6@M85tF+vdKY2ksJk`h z-s0$z4~o^4^1G@W51fMBCFl9in@<0v8)>gfL^_TReODdhwdcHHY1m3yohg)K#TX>v z9$&pH<+a?_xNtkR*~85}rY2Vo(|s!iMxac6SZy{mHfz>3LHaSZX(OY`DQ{}zRIqHE zl>_R-%V)GWkL?|jT4k8xy6pE0S1YMoH_b@gSII&a3&W?XZ=grO4-;ZBcEK-h>Uw1r z$q^Tsd36Qi6{9$VFTrvwE2~stbcvt z>Y{Fh5Bk9?w9?B+P!WTPIW{uyrrXjj#i_vWmyhHqf5(_AV`(3QK38Vn(LoH~uiWYn z7jdh82FmhripRV)l{9QuaXVw*=i*YILAqk;*Ir`ZSt_k|)$h%u#CV)jT9i)udI9aY z?H*dADM`hOU|l=Hr*7#2TYbB% zo7d&5JecrkK7sV5k=sf!GrBn`!vE^|nda-*J$B2O_xKoc$guWud{c#x^q22}l|KqI z`wfqa=;fZg*Hm;<{QkY0GiFyx$+Jx+J4GVz*V7k48r&Mk^$YxI!MdX>aa`A;uri zWRGMkSPm11f3|)pes8{${+>%JsJv$LlTNISYb>1j6eHbR8Q*qF9B1H?9vW|LFA~uo z8YB92xvFt)Vu|{FE4VfqqO2n-lP4UwB(HcWr~8ehzI;;9$LP)WcNag}w`JD$D{p=g ztv=mzEnS*)$H4%0RVbE!wj+MPJQN+e*KT=Vn`(s50pEc6xa_`)5j~BK%b6?buGsv0 zDC^^L)x7H=dxew3Hm}1if~`6#-yuTDn!Ga_U7C*fY(y$9EXH13ZMJDLPM>*4@*tSY zj9qRjldKrkU-JHbb6_JVcj@bcZlx*WRZYg$TgvVf%1>goRVLxy%#^SV^UdRxL-`I! z%eK?tF_HC8)FRs^mzhlU;{#8^@Y5$WVr=x16cXgk_Q3H@!8}95<#*NerZ|&)QCx!+ zRU=HQ$I9xG>BG6ZdJTsra_*ng5_8FX7rHd=bEl!^go5fZ(LbZ|>|A}b=vc#0=k%1= z&_36z`zpJ=mkr#4h2AQ_&*v(}z2UPI$}7Mf4G8Yy*}PbLL>jR*m^dsPFr3u>E$y45 zPv~4<_cU+mTtpt?!g3p#BZ!ibDbo~A8Lgjq5=s4cV6AHQ+`o`&EIg=VSaLPpm~Se; ztK3pxuCT*f;Yn|tK2oCAKC|@;ie=um#{{XC?e@-r|CnJUMJW)nto&kgnY=TxJp7F~ zH;ezU=mRs}wHAezCead_w14Gq9!?>vkAOjrwHt^8%PLlwVy2LMaop&`jCI*(pXN1` zmrd&Ba*;Ow*k4V0SgYQ1Z*C*Bye0hV$AOGD4f&WGx{FiiYj=+ei1HiGr$iDTXK1)h zG`!v5IgX{RsbJq{s~{oU^P1lu$Wce6`}T{#gpYX$T=Tp%$721(gu4nc%{{>L$`#u zTyTOh62K)&m?MAzR!Ho9fI7PJU_SG8_3lMqA%IPAHBHyDW|hX{uF|$q)II7R*k-_? zC*=iUt6tRORn%3$+-MA_%p1rk;FQK&y<6L3KK?w!GY1Pj;jyLsCSgo0UMzf^i!D%t zJj}dVa@_@Sa1+$TiI1Ldxz-M)DitUT8L+EI4umuI&>K5d63)4R_K^&#>;fB%Tf>1s zuc_$k0n1h8Ln!HkrYxcO`K8z!H5|C5ku3vF%qKKg8^XmsrU z8PIDMinXY^4g{UhTm>H47oqB#5qooZc2}wP{7(S9z#&Y2If&f*(|fr{l?|+)^&LWm zoc*A6*U=t&P~=5&lyO_4iV+cVLZd3j?*Y`2UWA`gm@4vfzd6Z2-mk z|3;P_Z2PIcKH~}dz&)}CC=7RO0>#{4_kg*_XHqn!Yr~4$x8?2vY3A(@|EC@3eDnfE zDL#ye)^_e?{m)L&A1(ofNkbguVinBWGXQJ8R|z~J^|l7f=*c~+C5GFT|4-ebbGteA zz#ai~nF0OJL7-Nk{g`mS?8+MBNi0u@eCJzww-d z%4KJ01oQmfGi)CDe_r>DCJoB$arM+)xmdyd@?7JG z$&f0y$9e7W0sd#0c>H+Ls7P|W8%HDf|J3cUbD~_12lC@Eynz3_5nm1TJ;na5~`c}i48J~VT1PYS-hKiDonN06rdBAN&$HW zMP#B}d5{-Ow3bW7f9y@C2~<_qiwVSFp zoz!Q6O5D~C=-M;SYRgg*{FcxRfY$QofYeF=3m%T^$w=hoNK2N|xO?u}YgsR75KG8R zV2jep1nPKZOfbE4hMpnQ&KquT;uF{TM~#AtTFYMGfmwY|McM%_?j0N0hLcjR7ANJr zq*1s+a%{ldwf{@*9?#Wk1u*010*`7a?|=34fRPFSWC#Gj08Vllz>z7SoMiy=Fx`m< z#Wc-xfT||LJul2x^T4e=s2nVe_PNC7^Sm6KWLjkZ4WZ;XgGnIkL{4W8q=zxp|&=DlDmv*7P0EEgz4I8BZLBg7= zXziy5xIMTTEt#v_{N4=hps~bHY~W$KBX=My6tg=Uu?wGPK=w|qW*N1BK7U8-ly49N z=ur>#V)RX*n6nNG?H28QQ;^+x;W%dBluQ8k909{8M$JFB|wA`VF3n1>_uPcATQ9hhT8?8ZAN#(Q9|z(1u* zL@dQl*;V7BH1L5jTu>Qr8}nVAInv zuyC>zzGnEa?QyT5Np%%0YPXxfahpmvWp+TIyy+UO_HMQ9M#!d16pH$iekNp2&={2$ zv>6cPpiRyoIf%s7GGr6t>RE3Fu7fG>YVoj$ZjC<>We5+!ct?v*JEUH5@tVdwf$=0gmUVG zQd`F6ftv8I+r1_O`avlsLd~S#Epo`J2k&^?8pcSEETgvz)y#dZXjTVbO;*IR`|F|F zvshRr{pYr=!z8>lsgbuvWx0w;GvDI_@LNUJV0Q1{Qd{t3F}tS}95UM7OqXSLDP}eF z{FcUZDs4eJ_l@byDH*OMN{5_Ko2N@d6KNRGC>9{Mi5nae^o(^ z$lYZX2AfM>v+?hHOoU1E`gJr|olBrlLQHKbz;Gs`HvYnPK|u?{LYhI1Gk6%V=6Zb6 z9IxxmwB~DeS>~8EZy5rZ^*FQev0jP{`wyg~jub&4bJt~2@TGF_xNnb8mfr({fK@Yl zk&WVg36Pi3qC}X5j~>wR@f~$N*NEW$YAJTYj|cDkEfobh4z8+3jq$f*Lj&%rsK4b1YcY)w1o-g=Lva`ZnsBsD9X(X@VJ(-8GOp z!Ct0sSYTJb4Dh%j!z@c=I8Anwv6df)4Pup(zW~W;I1H>s9m=p}%_=VN$peo0)D|H$ zHJ=COEhfl@ZG2mem5SHij>i_r!Z^cbP5w*`l`y&ziZfp*1ERfYjN>lR$f)5)8BLOi z4qDxZ@}LC4aaHsQ54yVv^9r9wU?;ax4wOY%AOF@3E8X2l7h~S65_Z~Sr#xTZv2aF+ z*9s+U^-Az@oRODbCxB&lJc8N;5)8tcJ%_uuJHXXDwYA(8xtYe25FS?pT1AjOoK;7Q z0nsW8E$w|f`GgRFO7jgQQR7VnRCH&wFuoY0_;!0_Ia)RozEccM9i_Bc`Gjp!z`^rK z)c9guqYt-RO65qXTN^(VSfbl7bAV<1Y z6Dy}sKNy#nlEEH-n*#PlUQM@Dw_h$NQNO9NL1E+ANz$6mXz732VH+ z*~#Ub4ku|%5du1FCHXkZ#}k!4U*se2 zFsTTidgaB6gj#;b@NP=H*0pe_wn#RX`h%`AyWXq;biNqoOevI?B#vtLB6TiPAW(BV-8IPDDdPQwv zs4b3*+4%FQ%6R6;FP%FNH#9<~sz;%{z+g!_Z{@XbT*^!+Z&%eULw~a&0aP>JsB+xJ zvoT(l-kMgcTMV0Q&wu+GL~c5&vdN?gDPu`*=c3UkzcHuer@0v4iilwCpqR-uxDR{t z0lEf2jCO3)v$7rx5W)vixJ%Af1X^1MAz;c1?ax#l61iRMO|Fh`QE#MFkZVl%%if?l{J|I^bu${&z9}r zN6P35*yM~&MP`*v5qZH&ap0^|_ZQG)7Fu2?Gcf4KPCw9ArAPFxGk^GNm?+Jre!O81 zkDuC+7|58=IX9+-!>|pF9d?pn&5Qsx0n;`jjO4ww(%t+PueZ>@tuuiAL9Ffo@8r>? z0UT&1u-h+1SO3!AKOb*#M{OO10cl&|rHq^jjq;opRE#vIpyzy5c*1rTZWfF6( zp1&k)N{~`BzSKqzcX7MhT(_RlR|-)7w2^h#eCRdyYQFvxc8|t@HjLbNXNi&8hbE-T zuFdsnOfM&55#Iqu3|c4fS5Qj-x;`;gtu$maSZtd5`J&2{--;CuMPJfD?0!#~-pN&i z@knO+p)K3BNamJ{JvMc#zu8+zhxb(@GAz8(UOi-Hlnq7FjZ}v>!h_xXoidp$NIzrp zcS&EELwMU`I45{A8;e=$frj+6)d`j4j$tU{#R92ACTJxo`?x;uZyOA`@S9}tfcEJv zsA=w^t=G=D?+<68=77>i!w%}iaj8-VZW^XPb&Cr}F)?xk_&R74z9vS1jTDp=dw&Mj6Jyo%Wl zIyYuYV6@scu^J|MU>%=!uq`p6)l|?_()S-aFvUXLlJNKptbcO(3hkdU!?&J-H7j4A6 ztX4(3R4u0jL8zns`D=&rijo#ZhoUZ1YonZYNN^C2n^b8E3XWNaX24gM2&msp0rtkk-#i>J#Vw?Zx9}wkJMrru1Q$3wzOSQVe#W_e|vL5<5Wd;Xd;wDtl}c zW5ni?kR79OfJ=i}*-yY*N6dt{EDi;|H5h}04-=D{7KLPy%X4VSA4uO7lF&xTB)(h{ z>A`Ksy$R8BTByt?BUfCaOzdfmIm>9g4!v^#!>QEi(^_ur$f}{+gU2^M2$(kVDq8cU zxqb1-*%>|z=^e2K>DNUfL??l7{!40Xa8_|6x2o%}`JtvbYn3qTs$m?M@f(~8>)&Nd z`;t|f*{Lc%p+s51X2#A%G@L0qoGi_tRmxylvJhzPRjOe>YS#!ZQ#I#ou#MgYClD$E zR_shPNrli!=6b$Q*`Rm!SzXdZK4SML#s;g&fUuEEo;q*NpwLLdKVn+8&o9S`veXTAQ*!V@^0vAJXT@cz00jZl^{KLFcm&cTL~ zf*`u6DG5Fv!_2(A`!b$Ya@P%SC{Dlka1s!-*kmXVK+XtA1`2vvcYsGIqMGS=PX6d{w`GwGs-P)n3<30KdrV#M% zZ_upZ%{mjaapLD@bhy)2NjikE^}e}wgWk%IVuQ%GWyI~;4ax_F2VmxSfElkxg}~k+ zKx@}uQ?e+ZBl461OWc%MGqGBOyVxbm`5mQCr^_|(M8}t8ZN28+c^mrMdSTgzTQh9% zSA#bnyzp}vUNW;Wy!Vdjf4|^?%hF?e5=ldd_G)NX`bQ}<78hcMAdP|mG%lPgC1x7) zc2*dQU%rB^>0 zhs>ACJMePVYNr(gnY+jUx8JC3aQOmeVpu(-Ydx!qu_i*OU#yy{MYPA!y@FfgL9lKG zg6`tQ?9?}vkwcVGoEK&1C_FQS90lwSzw*;L(`bE{Xcf-uZgn0_=b*M$OdBJrb?qnzBD>;wK_nZ?a^sk8?_PWyzULs zWsex9p9!CmsitrEJ$hFJg@$dQ$PH^S(9H9cTD|2A{suv`Hr%%hCCzH79N-1GRV$AZ zt8IJvy}JT7u+oNTzI8GLQcN{_c{*0>&1I;D{Kw)^qikgZvC?%W5pT_o@uR$H?n zAn>QqOcu1ArQ#68@XVrajDg9(0u;4F!P!eU{AEXFA=ZE9qa4{?Vs`9|i#WR(){L1D zXoWO@*34!1(3`2hmZb@r@`BPn?6q_}vR7TWpZQ{?(}y|OiYH7`e+lXB@{}a~f}nhpMgjFGyJ4Wha}%>^hG#?lJcru*WWHe68Lg=8q=;ddgArGmM>O9iq_viwtW zMgxNcCoraK@pKTBK<>>)1XLQJ0(+e`v=@G*BES-r(2FhvNJcQ1Erz-L2j`638AAwx zyc*?E*N*?=L14GhTiu9ODcFsz(*Dq1DT9x3T5Pex*1ENCdlkkZ*t$G2s6)6G=#A#% z`4dW{K!0liAv3~Gq2oWkzkB+DeiIejupz+?WdYT?;Wpdi57O_Y)$w$JfoatyngXPW zxB9@8w>i<#7LX8U4zg+D0BTYl?9CKKULFTuxNyf|};NQ=};qa{ZIbhxUpm zRy@v!zm5D$YZ&=hcK2&v3%FO=Ku3zc>oD1Yl~b9A+K#a;!UJ`~;4L=Vp4LU*(1N3h zSHtP$YR$A{0*|qw1cMK7YMUUG!eG#*v200yDBCk^6SK8ei{+?Lnya`EHuahF_7HrN zMO_@!K4jXO_;x*n71@a09<`FekiC1B&rq5k#HZU&Fl@nJxS3|yN@V}8Su=EE8;qP^ zmPHT}1~{ZoF=jkYX^jrm7D8sH8U#15_sc^moOQE$8f}0#R!v@+dcl5B%liEm91eV= z^Va^_n-M~1`O@|BQEdzQ;{ko?*v6TtJ9{OIB_0&9o$I(oDX7nG$OxGwsK>;%NU)3| z1-q%|xlrsH^z<;r0>spO)=>RPB6wA05f#-(~u&Sjb|?>%cnE z7>WwosC?UrT)62jy7Wb9w*=!eW+Jbm%^1s9!m03CQ84gFVBaVN&a`2*6KflGFg_?2hUQI8Qb^yicS_L(K3nkWi;G`*w2^|REQAh9> z%IJ&=f~<4L0}uQ>@$+Ir>9p?H<@8Jn4#eddW?#pUdS^0q4XY+TR|pZYdyWUeEBR*CKgw(B`F&XosCQ z5SeR%1gOumz}_y{0JpmZ9MV3GUn|BkC;Gr4Z79&C<(60DC0?iwVdpP+&T9b}Xti9{ zJ#r3w1{06sWkEKBri5$1i~?iV?q>>X%abQu=0+xQyIL0yx+k1yE(C#mI|f%HfN?6# zmK^l&N{+7l)01N18@U9~?7R5larF;P`a6F}>iQS@{hByX7@7Wu2<+sec`KvY;NABS zFG`)552MQ4AOh9znbLpk&{r7XY!FbsUWl&hqcjRKf6WItaQ{Fs)M!i=Wnox7%x-`H z>=I*Yu!=VV{BCe*<6$6IjyWj2=U03(bbBuL&J7YXmehRedT%*GN}u?*M^K;VTntt| zF84d&j$s4g0Ty^A-P#%6jzGste=S9Ww&4-n>~>v9q26IDT^fUof$-w0OEc+N1X4W_ zDW$Iv2-?&Q!b_*W{TqncTE2E1L)_(04p;hsa^1ipRyLG4)aN7tl?=vb#W+@fEvNx^ z6h`8{$4k|~$BKBANF+DHWUsG0A?01OFo2{*^ne%@&s>_AqvsMv2?4Ci+E_KCbnoyj zQ$+T@X8#EdbZBc-VW}n+4o5*+17zt`doeQ5H9^d%UfABNgcru6)nJ@Ua644Tz+PQe zz5@j(9ufnyo&+$YoL(Y=r?LyVCKfTb*VqTHLi5XN`55&P)(6Gh>@|!h=Q8 z58@Pq8@DUv`$Fc12MF#wHEh`62O%EU1?|rDkGdAE18b~bAll#Ha=Aj`%-(#JXRKTt zi7^8s(OaQd&-qK>W{*)aRy3?aO%P~p1P8WsY%*rv4kw#|IGdVqdh5k}uh0oI>@}Xd zz3_7LW&!bypcA*Ka5;-v1=$#-ynloyG(q0c(zE=QoSl|4!g)l4YJ{!$7u}_b9v`6n zZH%NM;1A`d!%G_IVk$fe6cjq#KA^S4i;w)q810GYEK-m`TQo9!JMP@8g+#p70Df0Q zj}W##XQd46emBz~b6VKRc4c&1y7sDYynP^LjM6_dw+Z&*)^=r!a>F;Qpw-6Cz%zL- zOdI>RuVR0G7KRZC0gpCOiWHkElo;erS33@>y(BB_OhYn-vXH$;D^qx6iK$38J;;Jd zEu*b_Mi4QZZ>}sQCbcbBQpZU|akwyJ#P(G7M=wshUqF2Qx-p7j=@CZPBpm`6Q{UEk zveqc+M@wSi@xKG_!eF(58h0Q3xUu)EJ6q?_C!_m`CvM+ADR}X0?8`vdUAeP zo~Cn+4NW&vtt-bi(zs1H-iX`g-c@zWk|Ih)e-QP0-@Fb+T+2$7uN@|^jyF9yEc@%~ zc_mr?KYtrl5rRaAm5(z2c*gi~<9U{~9p*s$NZX~95`QXKz3$Zs zWEZdUMC$8yD?qN+PQ%E!<%qS=;SH`7d)nzqHNzIa#dkP zM%3>^N>(b9fj@qOUcUUK;%B6E?6Bm!d+0g7%Mae#$edH^ptz5odFAhQ|D4590HnO! z#&3HuB^M|icq{dKjs-y|JpZdEaYR_; zj~(mF*z2J9MObum@uB?rfN3``H`!_V@qMB`i*UwSHkV%znqrIaKQ? zJ*_yRZzyxL8LXE6>RlHVWmSy1^2PmnDFsa*6B?MjV3^?G%UEPLl@(~+|7 zaGinKx{o7~ZF*@Thn|Y(^1Uh>rrbs{i83#1u;csoZt+?dWUYv=C|_@gECT(shrr1s!T=4%u8{S4aS$$me_P-lbo(v$Ae#T0 z@b%c6-*}+sNdlCU;?g%OLPKu__8nepx$y71?R0|U;eUp2pD^yGc8?PN&Sm$U`&9Az zM49$;uGF!8{%t-nV2owsqf#JT$3HYfN|Ybo-<55ZM-hCIDxP?D{xo*V)H349b6-NL z!DXmqV7Z1=1aHBrTzAKb>#J>Ev>uQ5b(08G|6teP+I!Z*xJ=C=$$orh_C`vmUHRca z$l-swgc@>HZF6!T`AD7EACTEl84c__Q(Oxbmdz?B?GFwUzXdHjxL;XA8rxILuz1#d zDmB}tbqi8919hHb&f{Iq*4+5iDHVPlZF3|-GpPDp73%I^UNM#L3Qw%*Xm^$7L)$f~ z?fTC*Gbs;gg#v`6_{7WdliV8Wb(fmIe0Ye}Ex)uQ)6LSkU5K<4!v&K|w_fCRs@8RIORd*YNVMp~lQ(NDAf#E~o4E)TSA)+ADaFeUe-_umPx1WC6J_jn#9VAArX zl9exH3=IELKmPLam0huiDj9~#nZ3RRvBx&JDi4Qi{+St!*UeMX{+OC&<`n?NB6kL7 zg-hq?A7d0E_NVE1SU*fWUZzcrgDjsg`u#Lk9&{!DE>~16nNxL6I^^e5sM@2~X}8-U zCGQ2x_j|k(3CCag$DkW^Y~Yka?dF4h?`)_J8!y>ZKkTHZWi=`#D*aclzYDWlbl(S1 z9oO3J(5%rJGX;*{iW2txU$GC-s^eK;K0Ti_tFo6m&C^<{k(N7}$DWD2g6tpAt+a_8 zPY^h9MSyzc2I$%F(Mf?&x&fcp-`kSUY-pR}88LF+U)iZy7o>Bxx;)OR$_5xPVW*D> zJU(^eOWi+vt4Dm%p{YzD^zhs1QhoW?#{@A(I%7nwz z^XdJSn<)2dk|#d6>e1S)TVD1bS=4vEb4lP1wB8W%@3F^U9pj8X_0lhBTL=6j_Cl6* zD5ZSeB30>6iww3)cni+It9jsJEJ=v*E9``DEi~?1#rHDo{zf7-tj?z6!N;K^^C^K# ze5LYz@QoBMSaA4&fY3?lileZfY@9q&duvtS^UmGd%g-5xulHGe{cd0V&)=>6 zQV`H%$H6C|mrsVTewJIdc2c8S)=nrgoXB_X7H3_uUmGnxx8qEiHE;~2ow?-?vdcD- zOy#@cS;dy=H_5&1gSE(&J>dK1dlDdazab&=z@7CF6-jx0+`g_6f5nsN;Cl04*>Uy1 zmV=5Wo&jP7a%X*P1s&F_2hFa1lxp8Se`@@85TfB4pj%xfNBpLIL%1Jf1Hz1$m}oSN?^ydise!NG{Sf|X#emK8-O-N0=#vi9uch*JD}UucauKJxJstVJx|~F_gusghOc;8`?{C9a2{Z4{*U{#s>h>& z`7@o1A<5|9H~gMxyYJU5DLrbz+yMsWM4p|JdVcF~!76Qr;6hkA_=LChOjkST#AkJW zPRbC-mVWZ{tJ08vT!S*ZoqiwL7Ms}`S18b2oqnDu?sd%Qu7r%t{+7{sv$KWAFRHwx z)15QU+=ou9Xq*niUfzWpoVS<{x_zQ<}5kvV*PsYWG&@9Ii)vN;a;dFVvX zD+@iK_>NfjhBm#;e0DHjmi}DvOmO#MRsOC z-EjQVs9c_o*l|*vL z)n0!+t#EK)>Wa}>WrqX#usGt(F>NW=Y#`xQd&kssjc}XR=Or|h#X*Mim*A%B34Mol zrn9W@<)XfY@oKp^v#bB`9{$sKnhqogZF$QP_n4asg2(oyFBnwS*d>N{X0&0VhR@}e z2%_eukNg_ZOuylTfHd8R=y?g-jagWC@7YK)?cnp&UxzGf^ez;A6YSI#a|%YCFQ!`E`0y~;{?PN2SN+CejpUd+cKj&N zkJH$Vkc%gRW%su|;GfFrze`0w70NLW1FNdqR{i>Dhb9aiP_ynxtW4!FoX~PLPim=; z532lf5&Q@34*Fd1BE53=z!|qs&)utrZi80{%nP3=Ah3Izay>J61ZkPixgz^k(#Z{t zj*UF9dE)E)=coGcq5JZx?bDCD!OTvzsa+CNOR$`D36Ymb{J6|H(Di4s=)G$BK_@|@ zAFt1SZVey;2@3Zd4eyEteR%;D;H`@q77NzBa}2vzcx?aP2?Z>&TH0wcrpk%|fX_NQ zWSM_JAHCmQlKUf?Vd(k|k!~u5;XtZWYqH zub6o>gmS35-rz#`wS)y)i=FfNp&!=UI%(tgZFAqttN(emY@c3Z_UfV+UECXc$aJXv zyE!z+)iQ301y;R#EVgT}i|NEr@0*4nU`k)UmZBYuJ5c!m$oO)4+(W0=OM930@OrR))rzZuf&MkLm>cigj@+zWwW;^jrI0-M7vS!Db41SB6JN->#pFd zjL4&CL%o1>|7N*|qSagb_7LReb8g+UE}|!=hLL6aV8om=`Qv4dV+MD#_U`!$yYtKH z0`a4=2k6esy>lOX;_sjw@;|VBZ1v8)*N&bV6`aC!-8)tH$UIBN=ghI{e{t#wUj#fo|2S+{d9V2zxV< zzqOzBdR%cl;+?g2?$eZ4{U;O)uY36&;!EIm(ypZAuKt*xn7Vd+Tk%a6Ibwxsm3N(S zs`$6W-`igwV@R_ur?Sqpzqw+!@4oUe32EOu^*1M#PCUuKM%BRII}EnO^%NKHH)_C{ z#MK^^KB@h99V*kqWfXWvB**!z`k|yk1f;e0&(9q?n|v^e8$jg`^)D3(y~tVw{9nsv zVay7Gn*h@&34hqOZRvuA+w46Ri7P$r&LnNGW3TRqlRfLxDKiRGZPUO8O}?qs0`kil zGAg{_J|FIu;HxW=Rb=0Wm1TC^$)u8o@iRPflUjAMA#{J&YT1fED6o@u%S1=`Z$7Tgc3Imnc8Azv2vHn+s&PelPo4?; zcB$^%;d6^L;R}{00yfrFmAKhEv8!e(%v1M5sf&n#nySy9@YC35v`d`{tMB`aHB#Rx zY1jtmypb;vxY8M^9g1MmhF^M&_{2OfbjxK~HbH7$n;%^jiIoLr5f5Ai z;siePjR5>6T0E@>viXYCf~fw1&ss(?h8I*X_=X`Zf8R`Q-GWP`25#}l!A#FN`; z4M8wD)fcWl?LyxgE&7!HmG0HmyBmZEm;*Du1(a??8<|fB=x-71z0sd8VEqGoaV`q~ zW+f8u{PA})Y$QM6lblvS!*BwIlRi=)Id2;vlZrfFSNbG5gWvjxLlAK`9<%1#vF)be z351Bq6=Z;~(~~^M;eZqKOD7t!_EX#y_j~`4^3G(&4?$9W#_upjf4x(h%IyDVfitMi z%i3PCXA7X2?fK3)r`^rv;rVlt% z>zDC>Ici@8@MEUQwV>1m#ga%ef9&0oGd zmh~Kj9#V*tnXZ$S>C;5f9uSJG=P02S15GRta^+z*)#;Qyg>wO;5^-S%ux>yX@NoCH zMuxfjU#i2|pT%#^ZqgfAW$CaYh-YFl=P>|^ET^~9ycDG29K)zh&L!J&MA-iU%@bQU z$q7$?xGHu^?fIQt8sf-`k@#}KzlQB1?ONkTbzuL0D{mquC4~r&p`oQB1d2mbedGV} zMb#VqU^p`8lO*zuH3q~U{}gtvV1;YtiKqcs6z=5P8=VMY zgMAUi*Hk5KdvzCNHpSntdTSf~h@|k5l;Gbf&d_h3>oGU*i~ZkI=zyZxX4N(nZ7~8Y ztG%{xSA|QU;L=ExInr?&)N*5ya@RfW;~9IF?;7dBX;@cWo0Kz^wm~5SmFO(izrRjJ zIK}EhPkUttD61*W1)VWlqf+{I+3c2~8vG>+zC5Ii_FAie#JjFCY9fk2Kr%`*sk0q? zBVgHu@~l4au<`fC-c%KoA{;DW5MmkADUf(|+j0XP&TfDp)2xs^tKv;i+%Nb$q)wFC z0tX53@YkXLE(f3!;2f@DawH53xyNW;xUY^o(SI!T4C<#Z<6wpYhyKtQ=lBC3o{kac z_*_LkiP-LusotPM7~&POaQ3fhnSmxkB!k^*i}{Fki_7t*xg-|ylp(#s^Jy45Le z5d!a4=It8&mjYET|15IJKHN6!MtTnY91FiI>GxhK^X_L}5k_>OQjRB7*6=jyr9Z|0 zKrZQbVE@&$$;AjlVwRY2^x#6Nz>U&WnTZ#Z7RHfiIL{sEKTcOSfl#(P^SP8-(oYjO z%lm;G#rfF=`^F^lsIyk@ZIr28Sotckl29=}CU zf8OXY-gS=GJ%$|F-=H_rddzCKGxiS3)k3FCk=mS}m*(C>76miE_i7$8!tIJkOt*9EgX(>5R%g zEaU3s`{0uw?_%`ClkpXPAhJcD6c21T2DmjY3aMFEn5l!_w^dP`J z_l$M5uZCI7Q`r9`W_$A*;x>gI-++3g9(mbQbE^pLn$HmNLxU9DFBMGdGh#s+wLaSC9axE_$$D+5;#lum-YfeXKoEl!scgOmy-pz*6jSL>;=&rw#>L`ygit!BJj=DvJ@ z>OvusHHfqS{qGXdWb_m1`kC0R?^}YxBiU*#SJ&~qz1Z;eo zq!j#VTpLwTpuChSd(V!FMLIbVp`1u6Jb^mXhE< zckiP~sA?m8sy#Fq$5f8cv`QJvn!a)ipY16%4VnH$(w8?pCQvq7OV_pgm*}ST|+@`{y7;72r^zFAFw&c{{SV%J!idoV6HO7ISzQ=qJD{h=-`$)NB%78uK?m2?L zhUyzo<3w%%_8!&oMUs%xMXSf8yM6{ObU$}?4}mHukuO2 zzBw9C0d+y8zr*{FJOEI!aQhL-445#+ijF8JB7H}GR&ScHL-5idi^iKun6j%rh5-}y z_?OB$81oGHWd1c$mtW{es*ca94f(|ZeCsoUS+PU4Hb5qZ*I`13Go^n$XcO&ZkZQB^ zZ~uio{3~Lh$rpBh<8v^hTPN{EkPafUd;BQRJLPBqw^#*zo2>#rx4 z0bDkUM`H4^uz*6q3OpP-Qgxaz%N565SvcsU3*#Qn6&AEdpRKYWTv0cFynD99Y+;8~ z`G|n&3HBgysi>ev=}n9}Ed)jx-cQIgc<97D;2G(SPmUj3=f&0aUQd9KlKVOM;F$+> zN|-Hs^b~1}1=hVM7JD(kR`j;{HSQ5bgc|qAI;K781GsCv#WTe=d{$NR_rp zWc7&1Xje<*CUsOm1b!Q4?^8s&XM_pLPzc%)Gvij|yhdPr8H-Evan~a0aoJ9b&u+$( z-xEV>^e@{(jFZvq9UPhQ0Z7rBMWCqCyCAXuMI{I)v=H(p^vI%$Bp2+Wr`66E>-5ff z0>5~c*Kd6_B6)=IGk+Wq##9+7aX^YFC6;FJXa7@&-~QRHjs+&fLratsSyjuSfM3+QTP6uAo%WGL4YTdE^(z zUq69}-UK>bxGd7TFJ-EK_}6=FstFmYi{$@c+G(<~-eH{agTbdl_v8~NNvM-$z1mBY zc?Ay%DErAXb247jV-;_CS8FIe-hBx^&g*nTt>_|~-sO(4mrOM^F87y+&nbZbNzRw>Rj+fsKVDVrycR1f zz(i02{!;Q{N(q8smvUQM(`gkOzR8-7-Z^qVNLd zhcAMt^rHQ0E%D7q6UuSZn=?c_{#b7(8VR3(AdPJHCqe>*YE-VOc@bIpfYVU~RRKi@ zwNYSe{IYV`RuulDO$QW8EGt$RkfcRRs2}VADXpmb(a-Pj#d4F}q_N}nG;zGy>fbao znDlU<^(Qs@$0%OgBQ;#8>|1WWXWPg!+@$Duw39V+fbgI*Pw*Smno@f3+w|irzDKKS zHO%>p$T-rD!iTioi!YeFV{mm z@{gRxEPlcW5VI*BzG}^6a(;z3d@p&oM+%6DE!}~9DGUxeUJ1ty0Z4fBSXmgY46n08 z*P5h?YlbtCO0{T_SJi6Mp(R^|1olwTpa7q6^7YS!H1OFX1Z$jtM{zvB0Y(_vOcN$5du)&iq5r`CgLV(rjV7q|c$6 zl#ub6Pu_eF5RapiZBL*H!R152Hx4i|Y;wt|eGDH_N=`Jv zIdQQ+X1-kuFx!wZbiiJ=! z5}>9P(hQnevs-~%B&Fj!y5rSFtO%kDpA!o_?Tyx^VG;KwZrh)kfm?{Fu~zYfEGYAh zP^-nun5Y^-3|<#;rn!m!Lt~c$G7deZe=loI#XHVr>z_PHq5e>1h2KzHGumH!vURk0 zfml6axp^K-_bSc6JaBVY-CQ+2Hj@>qh4~^<`?Z!g-98GBehi6^)sW_Lv$vDRZAPNc zNUH6?Vlej!u%`dYu|HwZv!I-Yy*pI~Ve7k7cR^xTFx*-gm&*=cPt~A4?BUg7%*B%p z%V<2*#Z+2pPImO@De7#?eZglHngo80Ab5Y}p)QoyvFaV@-{=%0i{p8oFNu{2^=ai2 zqS&7)6ndZkz3Vx7Ot7e^;31B)+I!3HsQ4q6wL9s2LEYhY)KZCT4Oo^!^ z2jdF#!2{8{ACo?TXui}?THt3_5PW_0kGjCY9Pgzq3*LOlzstj4XCYwwr_Tbenme#v zSLvltDhcp{4Ngs}ZQ6n0zu#*zIkd>5E}7{kSv*#vWsFa^2-uw{|0=OPs9x9+x&p}( zYs8tGR2s=96YkJ!d?YQs_fKo=@q+*UIn;R8HvNCfX0M*Ed^>9YC1}Ke_xaz_UIS0m z1q|=*aUV&0TwB^e8b59I4nyDD{kEcS)_ap5Uen%d=Ll>HX45}LH1V667Gk_wi^P*j z14irAf$UlvXU>cO6-+WT;|-#x?TC7=^-#t|cEnyYp5AUE@1QqD5ZHvj5H4+YFoSz) z=O_2P;VE$j5gAJ8euWAgf>9`i9O(N}XarsI9#^AF=`VV0J>nw03YMDjc!KZvqHVSo z=NhJB`$#ES#A#C1Za8<7HtInpTBbOkSijk{$zxSPnl8FVa`Nt?nIQ`YNn>lIpehtM z#&RLf??*xjf$d1wDWcMIrem~i{7&*S-1JD4;U$;fH-qT-V~Cwtopi=yO!cJUV)r7M zI^7AZNRr1H@=W2XkY-SZs1g&5gfHK^d$tnLn6Linc|{6y=`x`=JNon!MJq5V6mo3w z)4H03EJ75a6^7U;Y$>I5E}YO#Blb*^?xJ8>A$lBr(9Iu%whu(mcx>9&bH$ z5oSh=Bf(G=BrfR-l*@dMW#hy5UEYU;h^rTaTHeZm60-%WJi$@D#lTFH!$2~W4qS~U z!~T?`zVkrn;c8?}@<=z!?(y>sc&psT2SKa(X>4nuXLNOs;(cTdzbm~`0Uw|SK0r(7 zmK-w;9)?nv5Q~nBL|=#VL@)(js*-xnP02|~|B!2hZL%OF7H1$? zeMwZ#jeU0eimlV>#=ssj{+_% zY|$-NnWh8_bd(=MIf5#Y{0{dluq-d7@sc0BO-_!?D-6Jt@xo8mfzn{Wupl{V7?pY5 z==|HMjA>XF#T1dZQ!{(*k7`;OCCg}%dNBg z_x@sfNp%SZ)R?NL+=zkN2p0yy7klL&L#7xOfN5G6C461ZZjFtK&8E{0YsvY@4$|X`k%xEBO8Q;FIy6(oouD1Vo zoXs4*KYk!sfpD+_c*g-8|Lx<)Ofeg~4n=iBxNWje@h1Ps-zk)E_=wZ6ugnXj*3x zu76Qi->P4tvrM}E(;=Nm?t{n`+~8$sIfo;D>r*B~S*TnOSxE$nm=Oq!JST7kH$JJ2 z;Wszkny;hl4aI`9Bz&ECyoyBK%>{i&_uIKmnlzzy4%_1uWIu}R-*SvC9{bZZd&qdS zQe*6!dgbaAo>Wb{nou!%zJE$CN)k&QU?-s-1!A5GKT_%VaHvFtE@MbtzH4OjQi{jd zxMDCoC;0rDM)s9ysKwdVu(9H_lRY*vKUpL?-t^6285eq!JYgWvv&mA;>kzXZ~2=ZYZo(RgC_1)vF@ zCcne5WtDvTSQID@>mM-IhssXgG}lTopS z-Ib7V*jtA@JBrQ!vrF1 z;W&o9RpfXgHhsFfe~)U3wx*D*%laGO%%2mPEvS%YN~lF#-qO!Hw})J#%(wcH1ZVS_ zO@#Q*)TR)zr6f=${oeIEoD;qX2a#I?*g&J{BA3Gdss-TAeUTv(EaC5ew3G$DVeicW z2qcpraLl=F^GR=ZjiM(ZD4WA|&Yl2o(8gSmkInZ0#Ow|5JS?xC?@;brEZ}}URo1Ci z5@U8_;PrkWSKPO^{MHl53ix7yr)3Fr7^}}e=t*CM18HSk_zN(R5}C&U6FNC*@8$1i z!73TOa-oKmL*-{qUuTR6>kz|%{&o;z7-9YX@6R{N7jdzxP|fY5X8A}osH9jUnYc;_ zB6wS^it5u$9=O69 zZ@Bl6;|gny8Y-X`ByR@B8th~gBqbOlpImVu6(B4GvyIN##C+zaMpA*N8yv60?ypsl z389k#sM!mR*F#6bsj>G5lP@@z3S*sXTorI#}q^ zs;|e0%&||>6ecTmwSM0L(k^v@n0e8C$=$;dg3vW$8xYQ+R~ARVdx9r>OV9DFLTJ%& zhQS0r=fZ7b7j=JT~pZ z;v`%J;tzcE3ZkxaWe+j$^!a))^x24*Rq-?1XAdimNhalE@aP#u^{Wl{kbyjSM#pYg zXE7F&q-t3`&G@hkqE;i_4pj(3RT>x*MuWTkXyMeW^`p-vWRiXd#mV8Keo%dVpQbRn zI+8rI$HRSSs7`m?O}HG2|3UNeD+pnK#^6xd48GxsP<>H-Ow9RQ6>5>nBKF$+$uiqu z|93w}w0dIIbP9+8ZXnEv^Bd+H>{DxH*033R(Dcba*HFv83h|HW8VyiGuw7n3#($2l zkKusmeFY!n>!_B22{9idDjnVot~eiucgNz%0)pDrnf-a<;51x4i*t8Y!~bCHouXc~ zA%Cc)d?S%y?bEMrd3Xe>jXPzj2VMCJhpgjP?hsu^Pm1wcK zyv1Ik^Xs;FSaKMDskHf-IWYg{OhOj_YWICn;SEBM=sn%`ss-Qo^Ncd>qWcec%o=Yr zpS@`bp?{J@t{sZN)o_fM|K8^sVFcZ(7l$hz>I7)QTn@)uDeu}u7WdjX4q^_l>>NZK z+1JVu=-u}VVEDh|JPZ#d4a*h8&adB%>TT5MjDzm=q!vDZ$2y54bW$Dn`m-PoH55K- z-v9k+U%V19Psgaz!Q;97_fGO7ZMvmTcAI!c zd?!@lP%8$Sob77>G>iiFBh-%5)j5t%-fQ$>i(h>?PN@$HX7>7W#PZLu{M5wrkCckh z7~?35J3 zX~dY~?)h=Fk8itU{44(7`%CbJkW_&hPUPFWQ)HFIHI7wSc*{77-GIL!^Hz5w93w)x z&MfiyV^tF5PL=;pWId)sH26qdR^%b-Z&5~kM2q|*Sv z2cUKhSveabXjzPZI)dRDml6f`4%rb0+U2Fg|Mm?r;tA=0GOtN*LPp2UY!Cg1MvH&s zAPQE~FHbim79~Qy7;L?O*M=(3P>RwgJ0Y+jBkC6aZ2Z#EDc64_zkXUEvFk+Z#PCZM zjt7FUuWkwC+n02)=ZIZsTyw(b>rHb3&Tt=ZcepI{<}IL9dW(S{Cvy9hMDs zIid6o{#PP5UZM0$M%>MRp+u{G^x~7bSz24*-#?2P!p_sM z<5eve6=2YQ&we7N%fT?9`UAa>&p8|yzcy;-3USE!U)+lj2QD=<3})#Q1g<0txM1|O z1YLZbc6u@^Oo~<=lbmtS zm)k?X^(0aJ(vfjl@Pi7#Ma!x2G08Po{w#jWEtfU^;!tlpNIEDLz5!wK(}mFgdas=gc!V+UUMgcMugi<{ z*c@+E@f_)d0&_b~sL3D~*DnS|QxgHx7#*9O9$&+~{kkGPn9}bz05wtDS4VYO%Cr{P zG!oCDCjD#n&!HOsmsnzCgLLU~vB1shzxE^7vTEh- zB$Dd?0wjydBBHI}|CE7ah=oJd&E9@cFBCv_(&K;s_G5?x?-?Bz{SN3)X{Ce8Uf906 zzqX(42bERxCSehL@2u++aazJ-vhcI*QH>k{TcHR*TpI74L>vwQd&2qd z=;lI}j$RDi-vbtP_YKd;&iCUktcum4l>e)H=rsWhuGkd1(WQ~W96u1W9q7+~DrIli z%yqzg`dBm;mu7t@=u7$=dWCL; zFuui0!Qp?2?aw{Tn@pPBWKLFlo1luAZycL2Rk#Wg*u6KOt^0n004j`FWtPM^$}6~g zCw9PoDrfy?p>^Vm1v2N_7BFieQYECp`UK&|FL6fOE0{%6Ouc>N>5 z+V*~b;)D9D=w4lQ>an0p7pj`CKsPG*tDSf=Ti7E(7ma{utoF_C(B}5)q=}kSxsd1m zRH^)|*~Z=3s4V1qtzMf62TR{g2-%(<5YWAv`9Gc#pt|z=W!RKyK!6xjXG3f5T9Eo| z!^pliY45|LGHr|5H$SaMWW3x1ui3Hzi-ayWNbVZ&8;0tBZ@qhHGhm)5ZcA++koe5o z0w~o0D49wB7Ia^diYH)-xjh}^`>`km=Xth)O5TF$zD*cNBk7lEJNRaHq|dBhyFj9R z`;=3^njMRj`|+w~odzP1h4F zjTzsIGP=q5s^nmf42}MB=(<%UC!E16w4zMjbeYZ``<0_kA=fu-QDcYOE*Wy-1<%wu8~hxjdLHofkf8|5rPdFD}?6DIvcByjBD1d@=ZBo&~m9 zZEx}e@?)$v<;R#}FE+x(L#V^ap}sSc?=zpRRU}C81ECHK5D#|j@n|HN0q>4Kmv{vi z0+y#KNOFLINv^sA1P4@`Igrj2TW#FPIUy;owxRqelCBO1ku6b5lTm*Ys%r(tJ5l;5 z-N+%GY%qu?Wu^f_s6Fm9# zyT-(zLc54|m0NGaXl$V9P(ZnG^L-jJJ;2nJ1E2urg~-gogcsM8)3-@kU-esoG2RzE z_JAiY*I9N8rJ4skNw?=m4{QGhwxLJ?7ho{`SbJzNls|Ww`=W;bVy{+rqg5lJsDThM zq3xll2D%jDSh}yt6$sPr{3i)gT!H>?L(BUcZi&4RnDKGL37DR!juuJ_E62T$*Wozb z(f4DPOaFUNy(WsJdl~mQ47g%Zo>zj@U>FvN39`}DK)lK$G};3o;4W23P4SRqJuh!| zTbywAkS=+eu5tvW3$ZB#3=12o{CG}ZFmQi_veZDJWd=%kX(8hG|7i=fz(%xbQn5S*q{0#D z*<1(sydwYzN^3eu3o#(LWysO@zd{{$AN0x>zQq*@Fd;(B?9o3Zq(6jj#XL*CIRAcXH}sYPh+qG| z0xGXk7)R58-47LWoG$!@YW*B%8y3I$I}bbOvS5Os?KL;!NQjY6XakU8;?ql6f%yLk zHjJa8baEfxL0#d$KCY0f0zX;kcv~a{^$9f$q5P9aD#V{@^?u)WvsX1yZ>y0b;+o5r zEpgdE9GFsY^B(zq|Je{atyDlU!9Uf{5&!vY@HB!fjSE1U&O*ecA`~f><374DRRCoh z$)ZbXn}gZGL9N!Z+UeUfAHcgU_dc0@V?}*LoVL*F?OZTlsatw8M#+cs7&rg|^7bLr z769E4W%$|3kt*ODl(o=46yLQ*50?&F= zGGK9&wPq&m_czX+scu_CIRib&U|h8D`dt-{)3zeRy6$Nn#%o=HbURF>|2Uyv28vRd z@BTE@K*b~Z90(_YlQa+pV&N`Vo(WRRtR#GIF@DH>t@!w&>Smh!6D|sLpODU$v?|;H zNihaH9hkt+66M4)^Y20JBHR7@K$?gjj$-FBj{4KV)oDLkx-7RB#QzTMbM(O?4tzpn z_m6pnD;x-5XR8U%^&e`0frPk@eE$7xL)>q#2sfW`R8|J|NU}=5CgXeXU-g^w-Me4x zCj1d#Oa#woSuw8?;Xq$k%`>WM-i)izT~`^+H%C&o2jDBm6K?JrLJgFVaD0LpBP3NO zb9er1UeI$6;nT|wUVx|}KhU9&%Q6hrwgATsNnnO<;c=N2c+YSe)RsysJuzW_RmhNP zzSa}}-7S%f5-LX5X>-X(38D8mUXdRtlI;+3nbFxA&f8Yh7-S0@3T3eCGD@>i1E(FOTzQWS6f7Tp zW*{EnaVCO(zA42PgOWob5qw&NP?_maQ>iKJ;T6d*p??H04`;w!q5BvJaB&e)4KGRq zpFmCKdUY1^9M39}LQZ~(rvBDFaSZMqcOuPB zq51tdR3bYR-vRdYo49}9w03S=NQGK)FkWk=!$wi?Ef813VOX~g6Cq5n20uWXvSRV* zVrKExdmt6woOkT>j0pb5^;d;f_aRgB{+(c`_x4B@*a0k*mjEnofq9%{0rU8T5-1JK z13|Bh{F>Mzv8PHVO@^D2Ay;)okHvzLX6lvkM*vV1t*3Fm;KUhucO8ph zuBUtH0z_CuDgKvYNX^_3*CD4cKDK}(ET$YTcRUEL|9EHXLWKi_1>nk??5t1lF2f%F zEqhy~m^40lCTj3c^?ifKYL`9IRfyQ_-my6QqNT!`OKWq!7W#~~ch96LP zU$$3wIIBvf#Le$bRSiOoS5SFG-U)a0Lr&~3#{Wrxrm(?8XTa~U>U+D*16ENxBe$XU zi$R=u6(MVk6$a$XS`3Zq5-Z`XEo!8>rtv2ba_pmT}pw^V3BH1GJ44hNK-*0#ftzV?t zM_?nlp4yq&TTvLf9w;&R5=3w_3g}bt`{CX@7clbCzYQenBZBAcU!QF=ZNgo9R0#s_ z5M6#VWRp<@Cy$+yl}s*PovfqoCLAvdJrH?>jxst?m^6uzB~HD_eFv5tyLa#hvck$l zxkgahU%(P_&mNV-YfW2A>=$)vF=9j0vB}b_bW5L1orxKWYoyVKzmZayt;^(irk*S0 z2-Q4hh(4d2k7nYU!}>1w0Xf(J%rEHe{aSD09ulQqu5u#@wWZwA!0_l15M(^|r+Hfa zj|$=1udY_nq5l67=@5i%E5#cGuf1}O?58WpSHZdeP~emtdTIP{nzO%e#Jw2S{1HYY zWFKzNKHym_naRMGjq-t5hl|0C&u&6maksb0F%{Id;9p^J*+Q*M5ANqaY*ZD+XOmfDdOYJSXCusB7+T@ z_FL7B`2IQ|Z3hPVI=G`Bk(_>w;eK_lqd(w#ELI(_7!)3Ow)OcYg33Hu2>TeZtOJH8 z*RmS^r=AQDoDX;_v65wY(7hvc$6_IPbZ|V`5Ckg(M*N4PdTyioO1$DP`Ge@k>)Kc{ z;n2NAAMkF^e`)U_Gcehn-1QwH(9RtrN>!db?mL2y6i60TT*2^GSm2w;S2QpkPl}K4 zESyEl@ah!QH_ke22T23}F8VVinO_PcAR`fUAP2Cvgdhxzn#Bb6ogv5|5YSDawk;eVvcWixUxwnlg6e^%b`;Ylfi=0E#fHNArXwD)Ms$>C>4a4Yspli zk6sDk=fmi1LX1vqyR)H&o}1|IJu3axl#;Gj*PCQo#fdkc`%>wCv!*{M z+YI`d#l;4whXDaaj`DL)#NSp_WEZr9z$%QMrQ8K$h-c$L*`?eB#I8j!DMZ{|WWx_Q zqsNN0x^7ap(zLX1y)iJe@m6e+-UvJEUxb6fse>&*iO8^%3I{>$1D?xLo6!m~zO|ui z?A4DWgdVXFgf8k1WP%#F@)mNy%6c%>1UfzAF&_3|H~Miw?-7Fjor5J2e6|fbo=)^N zEJu~bgv0l!)hk*<5V)EiV|cVBt^3mlUmols!{u*FL$44*@H&v+hP4?gP_MbL znGZpBhx(dQxloPm$M~Z0H@_O%Bo$ggmyT7fMemhy-32{YORd5`Q4)s zO?CxHrLWIF=qY>i} zAp~e;)ISWO1IbRTV|g@k>k9Oqw+8@`s#o|SymYF0A~lj)^_ZM>@KifBN>ZJnPf^N_$%R1L%4q`}}Gb!|)!e-D;x-p)M?U&wy{+t>5bG zeSt{cL&hlS%##Q~m@m{9aoPVGg1|`EJ4e8e6RsUxh@eF93abt$B}*dC8bgYU3is?= z2!cs4U|DaVex3xO!w1Zkk$uY-)ZuQ11AN9`D(`XWaT2)d7QjuJYCYsFo{B zXq?^Z3ISJeou?Tnfgq1LwoGkRoVg$dg<}wOW4Cbjc#%2t(F{PNWRNQqB*{5287Kyh=7gaM^dYbkCYOw zQsFObzTjg-m-RJevQ6GlwL20_*#xQg;)e8nlD>P-q5HG8>Y>XG3$;A!R}a)anSVdW zCLFP|(D?ml!1rW2f$|O1xl0F^cY04n>lHAwip?29>OHx9|~HyiZjUnGWtmYVJ{2wd&KY!54zi8FY*oIpU(XA-*`CL@vu%E^~XV zs1-Z$&EI_(UFBaG(o9p-m2&Y9z*2;e22-X1z3qI&IgW-)jXq;Hne7 zF4R?}TM?U!M3o1HP7YIkt^+0Qfj|bvW16qsW5gp#`6K3qY4uzudcKEJ_hO(D3U3I4 zViaV~xcwCyINRU)pK)+Z>HtY(KDYAV*{!BUlTNEC>wbT!T_fHFo zFM1C|e`w(AHyby(e2AFgjj8lfQd|3rAai{G?`YoE;T0YFh@$5yu9oAQblBq8vW z^k4UdbdMwP=-IJk@OM7S+|%NjpC3!Ym^hCS-?%2_KUR0>Lf4TblUaE$SVbI|Ub@Y; zzyRYhqOR=A5sd2nwZI1Bk-Vi}b3t1Qsxd~O;Sw<{=n>($&)bqgRHE)e_n1VKv1sDt z`;&sAB4n!Oa#E~-DVrONa_phvLHX0a6TLcD)aUNz;wxwTsrfPDw7;MG{Rzj0Ay~pw z@?{p;e9MY{Z#r373R*-LVGD8ER#@GJ=2<>MQ}c0mT!u_PnQdeDRjs#Z9A)Ip`@p9N z%HylZ_;<&MliOc1R_Vn@Nd0!kME zWQ2B&8HR5E!Pq#T1gYhU&RK(R`S{lzb;^oo1@K68JfTe5)=B*6{XXOt5M+}`kDKC~ zpO!_-qY~wYVaV-R&SS|~T;@l_VfSFs>UGoO(L;q%;YO;JZkOu#l?S>X^jIEAJ!szj z(ofUC=hM1M2{ihX$~Zdez4mtNSf}qJPDzA^Vdj=BQnTA)26T)0s33#Hc(pKfIx?QD zl;MD4)Z^g}l#ef}So>0Fp3yyaj>eAD$*1W~kn!pmztuoc`<2c2lDG10IGkFL5(%wt zElFt`NL*oSGM+`Y-)rqlCt*<_8 z$FBXN+K|6y4t{3vV+dDI2acY>tX9GmWG8sV4*V>`172u{jaa?Lz>aJ$Jp9HSRYh|J z8R+K;!W1Cb+RjEKjTx+e*P0cgZ2>S8WVv)DK}2F#i+q7r_E1a#$f#3WYmSyCREr;q zpbKaJr6iaF2ePhOdD!!c(w=tM=2%N=<77p?RR(I+KL*_JnO*Q|H-7<8+k=0X!$#SS ztt(!dgr081-ylq61YUKiq}#8w&D8ITE(Iu#CLYc=kDkjO^s}eNuJ8VO58aPUSy;$p zB2ts{RyORF#t@$VKpFu}1a#j?#f~5@A`?4;49wKQPGnLu+2I>iqoS_W&`=Dz6EogyT{C)Pn4uX;ML-bw6d?NW2Zgy5#n1FsY-Ibfw;#=(x`Ys6>iNg?zQn4dCmT2 zWsbCu!mwdd%CDfWcUHH7^?PbRdJ45TBVaDN%c?-Etu!Nv(|Fbjd2bC>oFQ(|Dmk&( zG#t}wQ79Mg+D-J(c!hrOKbWzMH%^>ycK^-Sox!3ZG;q8e_E0lLR(BXqLfBB~{pb*B zN08ACk6H}h=Sc3J6$7VA>25WaY9P8>LNE?_I8W5QNvYnPx+|7$y))`?-h%QiU;$6L zeCSK2lVa9UDzg#5BCQj1=)H9_+~GS-Ta(&IVz_3_>hC)yF5Yr zl=h^RzmL>x6%(aUuq=e>vRF;CQ0dXq)2O*v3=c(1EeA>0kOPS$9aS%Ub|+XuEk#OO z*O3jY;jI&CA3Ew3!%J1|jQMef$q;$TcumK6yhM}!s|JaS6LOte;FM9nRW6O&e?!rX^)_US2$5B81!F)&d^%NQc zG<rS^H?B=6MJF= z59bPp`yopIff@Ix=0thB>DL|89#?)!UT_n2TL`ct7yB3I>WT5aQnxhMD^4p{XuOoF zQ=&cG+qr*{JZYK1owbK3eOuz6!({<2wJc)T!Kp=+I8tf<*$>BjKb$3Ug4Jje6t4N} zv+YJr9q5W@>Xa$kH&R zN~NttJK|xTMb;kv<*}V`TmDKlKTn<6Y zucfXUf|^MUp$|c>sQwwgdMa{DxPXUZx~CE?BjxZ8$Z6#3$~Wh9)>RZBnAWXcSh zrN?@IimQHN{MNEN29>bN;BN$6@pN~LkMkWRSha-ONM408qzDpxR~uhNW|~JbrPNf6 zAFG?pucWs=Qn_MG0x_8ULK8H{pW&9V)@W*YfOeZz787Dy!elDK$4tl4^K=(s}TE?C>UrbI}%P$fMSX2^a7`< z1^>r#=-+}YQ+Umx@ogd0XI~|rQ}a<(sm?QVZ)-S@pkTbbzag_3t)-!s1lh%LCApI~ zh6JUUkyK{z$PWK6e-UzlAaD2kRta91gw*|IK~%c1Hil8yecvCs=yS zBtOJ8t6|Nq^V8=p3Vx64v)WQ+ZdB8rqVhfdY~9y1Idfc~MEfE{r903Q3~w?C46o7! z7K`DPU^K47fy9;eu1a8KO!&>F=k(AHoeEP+Yx|7YGaH|-r_6ED>|IoCS%-k}YY*0~ zY8Flnlbobv;>ERyOyE1lol6IB2srmR2CU;9As$IMCt;Yl$ag)K*%*j~i8vRwrLFfo zRk}If^}WDsT}%=(`0lkp6tS#Mn%>_n#ng{f^-h1L1ZVheyi_F@31j!U@fQbz=`T7P zMgvC3i@zVNk2K-6xtFr-nI)YpK8fnen9Ayrgb8Wyux&|mw)rXe(m9xU1>OtT;^sv6 zk2!pNu7teDNTE=1C0lgS@hv#0;BV+?-EW!T!@E0aZS5HEOY{A2uk34%Zjv*HicKT5 zFE#}D*DRc-t7kdghKrSnw*nKe{;~Ivo_5>uqF{a_HdSbGjz>K=`tx<4*BeOnpdyCC zRy3Q3cilY{U%_ut%GZCKYjH}faFj-16;*p$Y0Ykn9jwotFj8Hb8piQaOZZg&D!1h8 z)!L7YZs5izG4hV@=pom+tRHp9%5KL~a1kf%_fp_cIt?-G(Mvjctu6Bz)#&sD^A7!Jhc=e+)kU<-1Dx@1&u3d;s@%Li9faoP;-2Q(F--q#0iN#gmrmj zIFPOt-kbRs(i71L><*U4Elav-s*AOeQuFtIO6A4nq`CYz(^CYr2*s zO&7bY<0J-`aSgRweE40Qa=nY6#apILnihc;5{-f2W$JgTznRex%hsA|veKJFV5PF>VcrE;K?xx)u2l(dkZ-=u1H`z=brg6qbek z6c-Q4jpalU_G54Ht8WAEhx&LH%j7rr$u87K?f={iQzyL@ln}6>!y;F0sN6dGYU4rL zX{OFH1`B#P%;v^*kb@`2isQS==0TBUDXQNUZ4$jTS%dDsdgGTlXiSt&O&JS{?O%H~ zo&2Dp64+-xQCwM11scBI)XqSUEU~-bMmOV%0iXKVr+sI(;r(kw!ucoC;sl{=$1$fm z0uj3kUR{`MQKxP7cnrIHYl(bKy<;pVO0cJ@U~LVW+=S{kdc6nKWjX7c{1$x;K1m{H z(klBiVQ8L1tzol{?+fzV;x>p0_50PcdWaDBq`WZbUR|v|MT@hAnSaoowDA!LCzc|1 z=5-xmzgtsqI8h#*V?M9(3)iMDj5mng5a2$tRbuAD#Uk$G|Kc(`QIX~y`ML)$9GGx3b%}kH)_T4Od+K&hZ5|8GTgay*u zD$|~h1#i?Q|F!yQMs;)%@8sk4`$@D<$TE|^YshcbkLd$uR3sCaL8*j%Yv13hx5fRv zQR0_iF;@!rx?O(PlX&$heV>5yq)WI9Go)R;vL{&gg#russ@|RF3M`K@*Y9w%bmGB# zgeAb=k9JYMvvKsMagc`m(h|)9*q3*AIX`L_Pr~Jc+`5(P?6Ry8)UQWSczywd#;9HC z69&$he7c|hOM&lQjg*OQ0N2?5yQwatwYAIfKHut3>o%?Z#a=y*d~e#B$q(i|Ih{(e z1gn1D<#d3B_q))82mIn0(jAuC0-N$Q$h#;6ohI2$8la08MUc^Pee|a*4+36bizkt2 zt_o&MPbbj{*1YVZ4-^vk^z8k}&mYr8uWmj-w~6y;{=3=#^iVU~h;{LgOYcWj*d<%XFzA<-*X*S-)X29^;KK?4BYAQ`6jG$(p&i3t0gA`&0?v&RPT%X4yf`GClPQGHx|7Hd7384g*84`e!tnPYPu!Q?l^2-Ub+Tv z9}@2w2tn+LepSvshAVlna>v}w9QfPJzu;YrDeH;&cD}a@pYBiWw8Jgq9gg`5Eh_J` zVNuE8sZSmEPX9>R%I$4u&~F$0mt93Y`$f=e21kfyNpqGa&bes>?UDp(RywKNTHbvh zlXD2oF55-OmJZU?E|i+xo%rIuyaXt9uW8ub#nWY?-fr-5&m{|F=a3A&f`dTYbL|BC`^h>AL=C>%d(|SvOpBk7cR`YWLA)+{(L)X&q$NnvwG)UJ3wYb*ri<~w9MitAx9EL zTmfs~b{&1zzk;4Ng|- zc1xX)DKZ8=O@F%5ohp54C}=-Iy`SR6(evP`xZpi1jg$BIjQ}o*n|#afr?PiGRQrIh zcFbB@(As+kgQ!$JThK8ZwG?uuCFs4Ssc00h!Q0xCAFvkB6>IipgCM(ewg2z6{L?&< zVQRk_OOmIr-zF}754OL<9xZ0)2^e=9Dwn#Pv98cAl4(*slzq6?&i+&{HgU2BqLJrK zVJzLN8B?EeWf41EQFQ*yv_}iYL~Kv7mC=9F9{XU4gOS(p76kukjhRa$4y#p75#J&Y zb{@&pOOtvGW&M6N`E^or#3c8|HA1(J2})P0qPNW8|NTi@cRA;5QiZA^HW70_YJO+Sf*?Q(OUJ@-Wxbs+E%5C;CV`ss$kH&tKS;5?N0LaRN=%TZvGl|6h zjO|Ca%u=Ebn%^xtks8LIP>B~1;!J0A8(EQ%__Kvq8}^FHsTIQNphnb7i+^XMvIbw- zB8Fr0xKSAlOk9Qkl}1u~;o~!fXR-u-aqe0)8o^^aYPI?v=|hlzVC-OdalKunGU4=y zjG2m-m!Zy|Bh5{OOT>67nhL4w?@noIObN0r-WA|HR2gJ5=i_+_<;2XXr20U4wS0fx zLh6$oSult?put-%MPuQ<^6=TNnq-xLdEz*)TMr4*%(4&%t*K^~8o}+R{_I`=-!Bi8@bn&;KQpW|)?sTeVVOUa9vSG&S5I z?{&{~W3FXxIX#+&vWp_?|NUaRK_6G-MK;nv=@L;auR!RH&pvBUL=WqT7`_#q z*z*AwWuy$140zMLoAbl`%x7yH)`KCF=d1(PrE7NDA}-`zteu9Rna3UtmFoytF8cm% zoPHYTM2xgsA?s#@r9X3I=gs!xIQ!+RCi!^t^$e&iBqfpBlk6~^#H>x(G^J}1s{ z`oNw+tHw20yuz3>w*$2~v=s1q?R<|a{hEXQ$eucQ1Yw$#sZHk*d!G+tPJPT$FU*N4e9DwJFKf(;rMKW z(fz)vIHU)V`E0i4*xuG}Y<{bB{3oTKm2Dn0@KxSS-6+Fg=^HuTrsB+Gx(l=WLW`#e zFRniyMWd?RDRgW7`dbglV`M&kdgdORgZ6)aMuJrAQV0w#K-jgbDXg`Yj`&+2Z%J?s za9L~WV>21#f9$a@D*5WlDFJ{m*2RKpT*~HSbD-G;O-d}8@d?0!QA~&GSYFT z?p=ey)<6x zi^*q~=r7YftVetdJmc^O<=^ns_OeI)+;aKTyy#~_{HfsxrZZh-F#5I6Bl=s$smR|t zAB2q9EV3%D>EFYm%L`vGkl!s$f~_)LJx`I?tL#8+Rna4ZAqn}23;&W1K z#;FfX!^ncalSiYPwPRgD)tt}=p^B1u*;n6n)|Ykg&2p;7{yS$H3{~2H?Abp369=;m zHEbOCYdf3?1KkmiE}6?#bs5kyXO`q(D2iy*=$zSUx(r&oy~DM#*1kC=t! zdUMvksPPY_L58b0-ZOOiz?N%_w|0>+b#<#}{``b21KkqIn_JOj=5>uNCB)UOQ4${P zYhQgCHffFxxjl7>)}wrD$u+=U!ckGBR8gu9tSB!jPoBO~NwRDh7Qy;=av50bOHUs- z6g~4&mFpcI)03qBU>Q@nlSei`LQnA(&|>(aTocwnQ)}!8WZTF;o(bI@~{Rfkf|L|daQZye)bY8o(f=D{i{UY;U_`8diKbYZcUp!db1&Uxe+&0s|_QA zZ4B$@_y$vew`u_WzRa&KEt+T5hqZef@&|9x|9P=ksxSs#b35e94*qz`9aA;a=E97Z zsA0je9-E39uE&u!qOj1IL&JyUEwSY$aC%Cxc2~DyJDA&5(1|DI5^hQ$N~j$F=JZEO zFf2*AI*>Umif2~j?_=L$?twgh>ll_{L&X?8I`dNKWO-y=PP> zhONkk+B7>2WnnuhkDM;zljnPZ`^TtUlw}E6PiAJeC7+RfBVNH zRky4F?#Ip7bD)=CkRfyW5+%Y!3UQRT`UR4NBvMNZ2g@_gznWW>5!IjBohsDm?qd-;7t=WV%dohd zWDKn_yCb@zIevOXhx~ZkGn&DGt=5~d&PmH_un^HA_ak$5gzNXwzIQYOK68+beoEzr z8e?Fze8G~t=lbfCB&uQCi+|^gZF@t=qOP>EPTOO;a=Fad0E8lXc#wo*-YZ26zMToN zmxGJW*6zp=f6qOmc{w4Iij}66M{VYlt|{AcE-2E*MA(e6g3B6$>8?wA!LNL}z^idu z`1GqtLX6S8EoJCw+F;ldc{9$12zfuxdu_}IsutIA#E4_hER6*QIZP%~AAINEy_IJL zsOXZYv7S^UzxbJ#|5hBHwQP+cwz1*gi(&GY5SOT+vo|n%Mk1IMjv*!lKSLM6BN!M& z<_eZgpJ$g|*vCjsOaK%r&om^AR>h@e%KY?wNjC z`@3r*8;U+l)7c;R#Jj8--!o^IJ$v7ed8WH47E6-~)PG#(PD-y1{-LQxpeBZKocHyh zey}>P9WJQP%$HxTdi0EazZ0iDEy#OUndje-+V^ddq^dVPXk@%u-XtXW*DFZ+&G~jF3)6H)b7BiMkzZ z3Pn;roqW1p#L~(nx5)1UBQ@WV1C+)4!7E9IVp6wE+Z&+-Q7?inWM$mogFv z5ZDL}JiI-EKk1gn{7$osE~}v0y&oDj=%U)$xIuzm>sKL)t-zm3)J- z#qxn1QGjh6@lrEx{Edm*uCPt!y*xUGyga(;7uhq)V(!TIGtv@r?!G?s%Q9a#R~Ry~ zg_JoiLi$mZbU)-NBe*Rf$7n>8-HCa+TAwf$CSy;PVNgj)Ja%7_qRM;rkv30eMGcd2 zTE=l&y9;j&u^&qUMrDve6HY&gxX(sbYTW3=g2dT{=RgzlB0+rO&C?7T#I--F#_w1d zCC2J3yX%Sx2e7czq_@K`R=gOm-VjoGE#I37df4X&ZsjyRSY)W_q|x**UtdOR-5kYB zL}t>wi*w0P!|w>Y(R;RyMN=I9ZR3I93b40oTpfR*0cLjk&y)HrYN_|XGagi6H?f(j z48hamwlA5re{SI-)_2eJ7=LlFtRVps_1m}Xz+)RzGU}j7a#Xr2&;L~mz&st{@|^NJ zn-TpDzVX5s^`#-#1h4!wwX)kd;&O(|saeN%VerTvJcC8!Kt_(#Z7y0#7}r;#uNav) z>uG(OW)v>Id%uj_iYw=vB5$Rn6x}hA(bEB!n#mZqL%|A*qY6#;18)rLI&JBT%qhhFr<9UtsF*?XE)B^PVjji2vkms- zbwL+NC+mGCH1wH>WFjn;)R*C8183@zQncJ3E{N632Lz_2-Ml<&*63J=4C_4%+W!6d z<~NdU>ZN97<#yT|Z{D^8kHRE!Ng@p>>+~gRS&uX5O^C)VlmFYWi|*#MrHuoR#Fgl$ z^>U=YWiGY&u1K~+h}_xPo&E%R6vhd=y~$>LXgSvS%M^lk zGecH{IvH=nuV<`NXXnxv76uBRpiB7dtWcWs6>5`SP8qy(wI*Z;K0t=@!erK?_G!?? z`BUNVi(bvKzI%s^`laIMcGgnJ8x1;%;|UGES@WG81T(=5R;WQtOCf4O*B60i#=a=D zB)3A<{JHAB^n)U7IKMC-N>AM7iSg9e#p#|Jk@6VZJV_$AY$)yLKK%WuhzC1Q35n>3 zL^z2OITu@=ltkT8`@fizoeb&7veI-W6=ND$kKWTbKlgT@+BnJ<723d_G0N1)v>^o_ z7&A^$w6T3Su4bXs><{C2$kIXQ$AQKpKb{V;N*v#wjpn7$NE*{v995ft|JvaHox@5!JhZdM?tEvwDP@A|Q=1i!*}|Th`ix7%a2tGY zRQ5qARpzELS-fnC0yUX~CS1~MJz4b93b&k=*;73eA3i5(}+7Q?Gs zk!n;1ylyw5S=&ljxFEq%h}i{Srfuj&&mS7u9b z9iGRy_41rkRgHcjYSQ-}5FXZ0RfqRgk|}Mqj(aTd9Zb^OuGSKp{Mp_VL}QW7;Ud_q zd5(EEY^xBLdoZoPQTxZwopvkO71ND~VyP9xk;#6tWyWle-yDsrqwNAE7nmP4qi?b@ zVi=m+{%o-n_ZUMYWFJG0`gp#Bz%P>LQm;1onB^vv*%1sSK;f$H4~m3bKRQ__JKk+k z*!}Dt!Zf81f++M90yndyaNI90vjXGJgclnaffjUf=pLcJSn+7+bt4-P4xFc}DQ4^F zFT-)`RNf(*UWvU%qKV7VRbb{5I8;4J^svTH?K*s8m=zMGhrE!9Vb11eKU;6>*U*<0 zTaHe~N0Cci*K(6Ed(PmU8L}!O5`5_brPuOsZU@+kW*E+7M98dScep+@xn5V>tQOgp z;`zXmv-0jKovT0Vp;roKe?aav9B2QlAho&B>W%ZJR}Os)J?d{UGPMxO#CleH#=o&WMIRiUbN=Lt z$q@T$jJ<&T>&vjaDGx4t!EK$`h4IjchZv6le4_r&&Mo5W@%d9UF;(LmDYf$_F;V9FFTDj}>*-@#^kIAAN7~Lqh_t2kvLE41?Kx&HoUl zgDw%j>TsKV_1W}x;Qt{5XDQM^wGUTmG*>=V|MYQy22qwY!MuJ|@1*VRyst9*N%uxy zvU4`}?@#SFKaGQDs%PP0*PCSj9vJ*@#Xcihu5DNJrPAra?ck{tTnPH|{jeT7l$m1L zyYpXJ60kq-kZ=FWp~qcB&6FbBfS;)EcM#C!D{#|oIE_wz)Mk6%TOnQsegWAnI$B|THFm|Om%CwnYo#&$Vp zw1h)?o6hR_sU>5eId2}CnHUmKM%M4$-^9WJ#<(XU5iwI``w24!P8g(1?ZQ+Geduj5 z;x@`%It#S@cgEgTggx9hEzv~NuQM_RdK$$~Br7t1@|o$|9EN_xOlD$4Q95Nrk|6o? zj-DAc$+2yyNGx8}JYT<5$eLh)3+In#P!;r}qIEn1VtN~f+|ynzRqOYLo}bLWSCjC$ zF=mi8lf=K0VhkL&rfn8Y*ywdt7NYILfTFG#N$PtW#Ea5OHf3saY7K2LECmv-{4y{| zIc9B%Gy(9{dQB_uw6nijPj;35Ldp5k`F-0`4rT%oLVFDHE)!uyN z(>6oa_mN=mk3Ny%0sdo^Bh-HkJ{${g&_`~)ii*zaXH|oeZ=wOjOJT&{B*^L&uO86Z(_$>w6p8*n*Go^1boEM+C5!mp21dTIe z8{62OmOEp6SkJL|m7YF>3^!#U>?fd&L(?Yiu9U(~HqgV)o_!DU{lv?5enQUrfC;(iB6npxROS8b{ZpDF=nab*(J~h4ZDR}-5;*Eiz@6#3*Rhg0s185wlFiOrg#da!ekz9z4`h+$&>xhhu_?z zq)ROu=&X+tfq6+GYAp7t)wSGR&JR<$w^`0Lx$Ym{f<-g?I)=uZK}MOmB%{haI$!<^ zj-@Ea{OR$+#7T|hpO)@?k1ounl@r?FgVl>N@Otxh9W=fSvPVhgvP#UO`T*-xgT@*F^{PwoLb z&d0A|bgZOw`Y48%|0VH&#*m&9V=DuFMmE*cfrrTi60V`Al7}{=+=dn!<<%YcH}Sb& zRLx7?G!zejVWF6mv@>U9S8h()aDwT6@=BUGi3fO_^S&_X=X5uSxkhVX=dxQ^hJzIt z0|OP`wD84ku(+uSze@m~^E!syyO+e^tp?xs$+r8OeLFy0wV0V11LIAn+gMpLvdK*2 zZ|hXe8M9x!=A;AL^~JgGEx+~9tAB^~v?0gx-YengtfaWVM8XW zHZy%7G8(pOSqd4pW=%B&U0TJt${3ZD-632eAejnBE3yD?YD+{JlHah@zlO=%BO3eaVeE; zz?+oOd^OF_=iNJu$PTq-?`)P{{d0X*rC-yL%pI?f+v;px0%M_$Q8mZxOdY6FKDDaH zr+o4pdSA2;_0rkzmti?e--G7`I6$}*gbo`es>?Fks%pRfgpTo{p75CA!W7!S%V8b9 z8b?j@Zk~pW$(;;f%D9~u8{>?Dh1{7j6r|v1ONQNU?-A+0rh+ark4+8&fDv-}_p7l4 zD#l=cj;aNIxCKMTtviYHxts|;`mU8qD;;8}ko*|~z-s~mAHz$M0gZkIC(2evU}#)= z?O|?{mAYF%)i&`5EPnI<=~5r!{&!5V z?0gw=qP(91X}95Y6~m961YUpL>eiYXbaTF2 z0YGKz{Fiof0go3!dYh@vgnbC`@6l!wtgtr5z*XyyY(FT0!5Q*tr$_!f9puy6pRUmY z+<$mIRkrX9e1}(zI^8)27)>ha;JA+RDK%nM-wzV-mX=!0&+8>hk4UA|%i1pIoSW){ zYZ;+g-sEdTL-=Cs_5)xgnt`-%6J!W}jtS&5z|UNoc5biFTw60GeD^jkgwosERwiPl z<-wp{M|+8Brc1@H?2UUuNRd*dckp&c^52l)=!_mmGL`7awdZ*)i}-p)o|^!4gbm1l z-J#<*u%X+xNiDC^toqNZpp#=B5wJ|3pesV|Ofqm$kTU!)XYJYa`hI;*=p7cI5Bwrj z>d!NK!B!YhBEA|$qzQ;-LU2nv56W6Bu*TczvK9g}5Gb~wnv+FtfR!c--Gt|dunk>& zW56c_cmj8o~ZI@)O}3+#PH1(^t0dRv!= z#zeEyX~vh_Tn$`||I)Z*be3l&Y=>C}=8iXikB)lZmQt6gnrAxnotZHPo|tB{tFUB{ zvCIV-V1pQz*vUvN9o6c+or_B&@fJ|QV#(k%-r6Oc+E2R&EMSw-5t1f z1$1q|Q_RjvGrN&N4E_b`AWJ65e+8s74+$3q}#+AGhi|+5^&L9)t z_#FIB)%@TM^C@EdhB9uexuG%eHuc1?dv`ifw|rM4k&r77?;Zk`jR#ofD@A6$a;zeL z*Z-TLU4L2m^0l^j&_Ew&hQTQd`!xditacO@I$#I`*>cEnq+s+8 zC%m_=(Cv(~c6qLvziZ8gBk^PmuOjtsw9?x$dE2-Hjjyo5Aj)t#Am@rjeXpec&F^qX zV!zrNdZfm)8e?I)7@8`6z|ow<)dk3nPSufutIatx$f`ESEEa(IY}2l^_Dv@U7lv1Y#@VdzI+_M02sEQ2qDG&x)L!K9%U?6fY0|y&+?5Qzn7THN+Hu~=xGx1;m z5TatRNK!R7ZL}DA%MX=N*d5G#wo8@1jN5-~Em?~rx-bSLUdzNu_?gVVgJ-+j=ZFvZ z4pSeqa>Tvu%8@~c-FN-*l{pY&1+#U#Fc_OAf-~cnw(O$CVKzp16tFU~KGfcFIqf+J zxbuCdjXbHX4*GiDh3?lhQ{Mc0!*+gi2Y9%(EE!JSV-&G3qvG4tXa9~m46a~-XInYI z#)vNoL%F6gEXtStmqWQ|*1sLKJ2x!_?W@ba$HPDzg&b=>Vz@x^x6jU4=RwEA{nq8Y zd+Pjg8-=zluZch=p7;j7px1_~`&L=_R;(QFABpOXo;LN2M7hJcMjVnyKZ&aEGb=MN z!chRclf734-*?Eh7P@0gL~`xJ<5a0-cau1 zNiwA;MQ-yt+)UI0j&RmT7k2B4>opbhtvV2gTH_Fk4S)Pw40XfwGE7l8y=Q-#6)iOW z9?A?L_<*~jFhu${JnNnR(NYuc(ig{Hn%{#i7-tDqR|U6T z6b?2yO?|W*mHsQF4gUL)&KR-ij0N&p(ZlVwyPU=0!*MqrY8t*OCsO@}a%(-5jGOiO zrG>*=qRAkZem zaZX|%0=1j4HQX)|NqN+9&>V{#MEuQ$bA`FEe`rhEspW+Q#v6J~vAUKE7YRVzpqy}l z+5Ow0$Qe-XxqDMpd0HZ~Jvw=q&8q-V-EpOk;gvBNAOB|h{tmy3XDehkaQ*lN{&omk zgIg??HmFjd>RAOc4yBOcrdOWYG_ZaHtipOmR66RU1RXjMN9_346Bl5T@ePSf%m!+yyf*d&AO?gACC3`+2eT(J^giSp+)9{VVSRa4}1ww z$t@_otK7%3s|eGetzkTB|M%z7K3fGI#jw~rj4O>(D1S3Q3{`oG;D3M;WyNz)76D53 zZ2{M8p7rhkaLYOM=YvN|;yK;JRjiT!qVF(NeWloB+Z}`B`tZ|kI5&rs$N25d#eQu4 z)^j~Nsen4ImP*yi-%1H#0DBb!-6?5L&qifGO(NEBAkka_)?%=S@ZE7dToy&c=`5@T(FXF~8waaJNkSyft;-C@z?FTNWUPYaw>W9=1HuHMxXxPKXc z5Xj} zL8CGB9u}@CgdXDb=EJ*h7%2SD&`J5s+w{=s(J-=Ma_Bp3Nw^*es_L=uOpa$mJ@G_1 zVWr4`$Qz22_fz~sFv_&`g>~nL!bt7UtA-~Lts3Z&!*S&Zul!MvV7Omg=cg|-m;B~k zc@Q%*al-+x4lBpC$hupJ#M93Zou-w>@IhEZi?^qfLvL9@m4Ks$hr*;~#}FT}dXp9- zrzu6^9?qN4tmyF)Akos}zs%@kz3;-}dz=08)hz7@#+xR;!@1d7g2`N_cBDa* zw_P~+SgYr|zi{#}%LK$!1CB-{k6fT4;D7H0I6f8NMn&qIAfw}ci58pE=a9^(MwF1l zk@rD}z)e>{_h@!)oYL1vZ*h&C-6nH>{04EFhNc(`GZwRJtNqtg$=Qpe@zPjnA?82$ z(D{@8IAWYQx@fFx1+GOXo;ObmLOmXe1pMY#I$GjmQd%F2Y%{;l5-h^qTNWo<6lG{m^bDqLiTsJ#ji#*Gk_005D$)8si{DJhpt$7z@SV7eC-t+u5X6X_)ofnR0>v>5 zNyN&^BCR;&(ur5IQCRIN>E^0cHZM@gPXX2x2^HmLD-B1Y)CS@C=<-KLb?PJN=bufDUm4(Fb9W<{zg7T=@}M@Z0H| zTa`C=R4u{CG{u*U+44VYDMZtt zo-;xgQs<3EGxHj>NgB5|4gE(qHD(5}sOenR9PkE%NNvnuN!M8XF5C>CYw<3AyR}!0iHi-j)?4XOuLI za14A8?Ne37j;poA!-}UKoa(f{$@A(Ew)-^e#AX8xUWPW-)TaJ(94nS@!d9G%O2(xj z7qE#dkd;`;2Oz4U;(u za=CKk_%0tpC?R)CLw-!9T57RqdvAJ!E3rdgh3v@DGE5tXd;GWK{(|otUB!5AG|B6R zGz~gh9v|2#A0fjE2BIi4UN$ysfB;@=jc0H=IaO)*6O~SVw=bDdsvpNZQE2F`GgiEP zU`SJrWJnF;hywiM;bkU5@haAZrpG(C8Kip8(hG@FlW^s3;H~pjw6n%57wxozBZG-2#mKLY{uDxI*3}dBzeWes_ax?p-8*kfj zS5M~|5ZT6wGzIKqh(9e@|K%vlb!whz9P(GmwHHd^v_VM^}QJX|5KbBZ!N|QmfjJMU%ihO8`T$CV%%D zO`>i+Me-3R13oFzYMPW@kND*0HC-76qo~#zJd(3n3<+cxfAA80Yu_Y%$2z~>dk3Cbw_VedSw~_&@*W5-z+~exOe<2U5w0ZTa4Vkrt)3UbnLb>gKYp0QI+5YMo2q5k#j$b zHre;vX_+e_&miWl6Sf*m^=O9o?pcv?p3JFK?9ESuB)r73K7Mi_eDfEMjQ1s!(sTLh z`C-v1`wjxnF4)m1)kli-bx{-I-OZXlU#E&Yb`TIRGrI8UWfH}B2nC)>9)9Vf)hlr) zsPG0%e@0;?p_4m=K((hhKm?P^W=%axjsS!B>1mzZ#m;!Qh-2*AF;#OtYNWS2j%Sy* zXQRQo8u(tRxMPE4G&<9!p8KQC@%BB7%DWUlU9RYph`4wq=rvxQa6Ms_K=tNmSks-NKKNFW4GCc5C&@^`` zoc0>smu2!}C4zneC2L)wm1n2+!AUwAT>w*@d28${e!jI`b{vtQ?N~pd<;fbA z+DLrx_zt|6J%ViM=8Re0Ej_cl9B;5t34<6WXUUwJHz#@2W^EpN@xp{tnUEK$Mb;jW z16Iwq7QqrfbX#n_TA*77KOC&B25DjR^j*Z`j#2WZ5HcH$ebnKdJ2qgCb1!AqHT_n$ zqF+Ick6QS8B2wx$i~BY{(|}PV)zDsnky(LW8|9QO&_-(_JBu+Tq2njfA8OgB6(kp^ zj&Ao88ho2qH9In-E>b-fhd}&~e;2cLXB2r|7pL}`b$02!Cn2|H6xmfiGd`QtAl0B{ zER7wX9ueEqBr^_5i5$5<9C^ww&Eu(1>JHYw+SAS0<+(1jDQRnQB3-9Taf`Z0$h6>x zyyTy=@CAHzn!3!w$ydtUR5M5|9{&1>Zq!= z?om3G7LYuYgmiZ!-4aSSNOvO*g4Cfy0SSxlF6r(@X%UbHMe6O1_g=Wa_r3Smd*j7$ zj=|xawbx!T*UYuooV%SA&a`N3H@&Gn2s`~ zkY}rGt#RRf@B&k63serekSVeQ?!NXisp(#UB%Edoz~etKFx_A7;O_js;QocH`RcO% zbSaE{+rBrf@#Qcf%02I?4gv!b^lti8PK!Yj;wp7OW@x{B|3=K`WX59hd(W>G3L_S( z_!$CaghWPgqx)T3)+6{*t!m!8tnN_v7Fgtz7~x;t;Cr4n!K3VCC;VCyCC_ALf%K&sVx6;crKjEq`o>vz?Y}wIC34JI$ z3wVl3i0vCjlHP;6KlBd&*-jRuQurnKCZr{}5HDx!8DSLg5LnASjO!@U zjLSPm^f=y`mmyP}K>hX78OGtsv=z+2qiAowSV(C5TcXF{CgY4v`GC#Bd$l@SiZq+h zrpcBzXe8pZZ=-pWAGUCNB%br-{*-v}O08#mrhH&M-G1lQ$JckHP*7LG7R`2$9f$M> zb+`1~7bft@!cr3Crenaz1oa$0N1an=eS;fg>82~KrxJ(vy_d^2bZeM9_u+bhhx9O#4xQ%^2_d`VB^vi`+-kJv9*3VJ9{%GRJ=riNMO1Pz;r zBtJPnJv2#PNM!L68->Y5bq`W*TOW)e{^2|>u566lWRB&DK z&izu;yb?iwQdCHj*<+JNFoLmxfmtsu+9WYITWE<`6@7`H>1jo{hL0sPA;S0Nl4XgX z@Y$|}T$gg5o`YuRW+D;+rh{h7cWONVRzXC0taK0#OG!3FFy6V8B5d3IDoPs!n#YglBy%bOK5{lZyzt$Ufpvf!QH6Cl0uO;cE0iJ1}4pbUN96X7m zMx8pFqAf@_`aRz8xUEuV6z&Ba;31YALOjET29l`@V4UmvSl88#kUI|$TUSR{;}LAz zJ_G7hqt_3S496uc(w{{fHxTJAQOf1T*_nRiow3aYb|6oJUa&kDxXT^Mf@R zC`~7-yeTpyhRzXkbaN$VJN4ey9mIkjC8yu3zi67%{8Bj3cHV?yYvJe3k;r#}k6f3b zYp-Hp6fPJX@N;j$G!7pks zqCJX=S`|eZ1#!JJ&~Yh@F}_vF`%z}_>f5DHVd+wl_@|sUQCwaK3{|VxVbao(yb~J? zcvNY=@vl&f0xM@?G?6*=EXNFx&t#`MzY<$glI1 z|6{@3V5?|l6ek3$NNhCG9-pLSi6;m#qCLC6%33V{O-x};;B*5WlghZnYFmYA4^#uH z^=7!4^>eFK2nLu`oeMmaS{lXmY`mn%LL8fS%Lhk>K?82Dh{S6nTllV?Nfds-fh<|x zqjwLxmOeLn|F8_ZcQDs2mxoFB?XdFM1lsAh5us=$!uAA}3&DsqE1M0QaAExB2k3E8 z>A{f-Ke$UnwCziR4O{mIB7&;8tVY|Du38Z9hYY6^z4>aQ737bXOydlzdQka}hsLNx zK`QZ17)|oFi`*%-)H}X#t{77!lz4kE)0BiUwnaMNmIR5OQpdoXwufVLFSS`v)Ff#? zfFjq_o-&Wiwn3$n@~m4E1MUSIKL64^Oq=OrjH|%_MQ3RkhKha(R-!6+j%S7!SSDer z{tLgkvkvE(xGtL}9V1^rtYpRasyVM@NvxNdlh6%jO}8m=+sDju!cQ9*+CuBz<4Jci ztmh!)4LIaE-%myfU_?n!K47)Ly;^g2wXGwLH5IeTE@qxBi+q&xtp5-pW~}E^9+u73 zl)>{EZN@LArw41?(Io|jQOk?8++m+G9T2_*FS>8~V*80M@F$CV!0;NM9%xMW{VX&M zB@sN|`&8u(BUDp8XD6_mkM!-q;L8YDK&6+D?c)x~6!IDLU?m$52Dp8nEo}d`Roq9LUbKe#$E-ALOqh!wr#)r)=t4Mcfiqcrf`MS6Oi6+vp-r?)J;# z9yx!2s$y~dIH<8lCSQtrU!LTxNL5LFHjZSvL%=pQY58jmI`GXp<|+FJLode`Ex4`gL_;AV&DdshCOG|~{RM901d1`u z`|;hfnum6G$~+w>_L_2K)MUuEhU~}8)E+xzL)N?A4r0x?BvK<9m&mlVmPx2O%2_)Y z9cXly(J;2UE=bB?J?U*2l5TYxl0tNnR^TWdz|z_raEv>CvZsk1Aqh>DL|IihsJV}0 zbG6?^j$TPfDZ0QyR1{CYEf?O^9vCJsiX(#XE=EcXRufGt&^vyI$V>pS#w+u6IysyN z1Byu2M9M>ooH~t@GyD4D=hwOx@ngWivh8 z1Jfh7Gxjznd+;5LZGQ#~_E;Das(F(eRRn#3ERm)gR2srAOOUcbvo8VJ@Do#r`xuO4 zths^TT2H+%;qL&?ABUx)BzuoQT*|i&q2c0Wj+w030{_MJvBk*odIhpt(6>cr(tQp6 zNg-;iJMlr|ZfccFJ`^Q@9mSN^GeHh=8QA0phR;`28^_Z^Wa?xx~ zH2;THs&SahXc$zsbi2CuOslB(ohf3a>m*|1=w6V+J+6CO!y{xvVZt1oi@u5SXy)Ne zhamJ^L59~czKDNOl&q&Le>sr)HHylG|F%(YyG$_P`jy2CG9pyK39P4>1Z&^HPT{bK z{;ne@@<>js28(?Yr6#}MpV|*a1?dgIlA+Of<9^N*<4~%s%t2bH2W1I>ZKAqgH4OGn zMPaV=eM_+%;U!4Fuq#VGv>rAWfORg z`bQtAl&M+dB91`I;M&>qcq=e2a9dK{A=5SEJ7N0@t^VgwF@?L9t z7KssuO%%0{FQegkK6~UuB}a(|ig)xSv+!6K)#k@*fp3}4x1K8MG;1}Zg&#T?rrw09 zo2qrT@TTap1qTi|DpFWN-0jpT$L-Va+9*A-4DG7PeUIXdf})6MbveMWdvz@aW(eG` z7Z+_Gw(5i5!x!-2;{`5QJ(QY4EqQZ@K%@8u3vQWSWvi@0%8;HCsX{TGTUDX&o4~K* zEejLEPn4c`nIVf~Ptl;#ivk294xj3lpLYAa)vlG-Vn`-r_vk6=__R__t%z)C+a(1* z)hLN#Dh8>qPbyH9a~>XzcyQb#pMoq{?Y=xt$I=!PDYv2;FPLVd&b^cyujEw4DWAkx zx*9#{26zrmC$Ha;k>q0-Vh7GU!l-p3pfZv%<5IAfQewoEp>71oxAKS3WVG0Qq3MSg zo~GiMN=GLTMv)hYTG2yK7D8JJb@gPjZx}bC8YBDBxC`YZ&1%0ZwXdgt;$v`_5F;Yc z1CPi4W4gf7cC|j(v&F(#>_zH3S^eR`%^*zSlJ|$qh=DPPcs#kgIQbac4Tpo=kF0tV z=pPzoS6cwSQUUrDmwwG4_pBwA&SW40NwPSc=0F;k?Ox+9&N?jSQY-WkFHD{d9N;lT ze#Z$s9?QdGZmYXP%-wG|;Y#2B)tD)R)hMuUO7dWv`WuY@(wmSCJ(m%wxW%{09$}!d zvHrFFtfq+~w$b(CcuGeLMnu$$#>o&2wL59Xm2S1YS55JK5(T02p7>Ld-hnSQN>;~G zofODScJT^*5;O3xYf{UHgy;M+8J4seUkH7Wc@#xtW{sVgwrWHHZUEcd3AN5HBrT## z-hr&E#9d>YkYYJsLOK5YAlV=SNdBb^-&?vT=Xw}4N^s?=fXf;C=OS_4j9 z$l|7uzQP3Y+{~ODzs#5&!K5 zk2lQZ8hBg|x}9}QR&;3b+Ow0yXRmd#O{sysvGED*V5}h%G#6fso@x1@YQarMtMAR% zUr_)CcjKhVO7F&;vSDAXsR53Yg##weiev#UGCDEc6-GeL8Jvi2nq#I@Fa3I&by4Xj zRBnDoT2mq%+>Wa-Le?EfQUPPnrvcfQs-=jM@W=2itYq_X{+9X|&C3o(HmQNHH9u+&;Ji6X3cm77XZb+80_3<{iOB1j%erBe8PSQE#TVI&x@F@Z z6ps45N_PXCb?4O(sGf1{2))Sj6B^k-5w-*60a;g1O3<%h*ODyt2J=`jTCx19d;;&DcPPbLal;$0(xnv z8Y4-c=1jjAV>FfqW2^^67v*OO8CJ@>v{7=$c5FA&a3NRvwQn$zxC@xi#E~9_L+I%s zo~9Yd-U0;h-DHj*GfZUET>NVt@QuTl6yi|=oUrIJSN9R^#%rt{gX$8>kbOLNDenh! z%ZrhB*dPnKF7PHe{J>F8l07K#$2O7Cq)c3nOnfIx))@Q*z1#k=cpo(e?);kedtKQg zet#wC1u1pCWFdS2O$-M7cx)dY-1x}D`R=0NIe}GZO~bp@&)&P0xs#RFCEKtDpU=@I z0v7$d3Z=J6c4ozK`!?9cyY34jr3U6jzLZWrMn~21pEp`?vSRAb&?+fj<_}w}gX+4% zY|VpDu2zg^1j^zB%RbMPqd1~I^`ntOCIcS~^{fcC1VOOj5aSx|bC_#K5>@Nj-6_g# zfPekzr3aSXY=zdF#TB^}D$STVmPuCQ=i%_^!8IHhr4g$;^}AJ-C+swG&@R|W zDV)F+{$YOS=$f9bsbYKY`}H=?TCXt-<2vdj6fp2B+`srvkrjl*Hk7#d*W_Z5@)H(x zrot&{9}cS%hzsImnDg85Zzyk_0v-O3`?Gb;m}fUz72*;vBx?wdIc;R7Zyws z5-_z%Uc6$P?Xp2dh09NV-ngI|j?V9{kO4 z;1g41UP5C77Bm@wv?Uf6BUb1I);pMh2qsS->`25?+8Rkc*(!K4@V9g}ealauP3NVNj}cNhO5S}+F|hU;tPJM_WRA%?0nALDsT-ZApF3d)4n?X{s7-pg=vXQrNmCC|qY zJ#aXTvy@VxWtLgq|0!V5iik4ufFeZFUlhf^D{%FL3f~Hi(H$*rYA(4}C&fS_Z`#sU z=3GH&SY-q&qRidNT4P4frY%vGPk8c2N&??kjqe}zuR>J#deGTD&=&4Ew=&GZ8l13x z_N2KlKQkGbd_zScC#MQ)w?noL> zqi-;5TJ7(R*Y5OMU`>i{zxl}T8Ibtmi`1f5gc@e}NC@2uB~|@+h^fHhr}2O?u^$54 zB|()NBUMaamOBzy+n&h>66TV()+yMq5#VUK9+c!}cWoo)VKGj}GQnNy$#9eU%Q(NM zzz(~L`6p>Wfe70NLx3a`!AY#ZBGj*>LDKuAbTzr5VQc>6oV#mo3hYRlQr%Co**wKY zRJdh~Ex;^G=}{W*B&81M;Qi~lyXlx*8ajM1(Q#m#Hej9%8p(5$wk)?j?+OfN#tI9~ zyAx?cu`}CWMBA|ev)gGFDiy+xk?_oaaevNXVjm8j(@qpeRregp`H8ZeDhXh`X=3V` z>R9}qBz24fUfDM4L>8xdQ`;^S0kU}y>KJ7fQ-YyI%2GmxV;+c6^YiXH`xT@#s+ryj zr^*x{Lc&<0`3?`GpBIiJl=lm;+-)E994aECOl30!fBa%Nz4iWUA_=&YhmT%hU=wOY z;1$vzhb`5@KlD|4urO_o*wH@$r9}uKyG>D498nW*c}3=p|DI~pt8@-K955-s)lj(= zhvWyLQiTL=$Z25oJ;9hciZD(@8|Qlwi{ktxc1v;(LNWs@Oh+BVv4%1|^6Du`gP)7D(wtLpi=a_1$Xd-18_2Px`_u-ItuKteL#FDjSM-&@+k?E6C zyR(puSK9A-jin>?B72*LcEcnHv{X~t?D3(J5WboN9ki$KL$cw)r2dtX@!0aZ6a-q# z=-asGJj}k^wx`slr8^ts$joe?YPM#qb&rbfF6Z1ASd);WPrz)0qNd(eXBdTL-)tpP z8z7U{WnU7cZow+=Lqu2(%fl90<|yFNwAh3gBd$U>$}wWkL#4xn{Dssh5u8LJJkYKn z$Rh+&T!Kf6{4cx_czqxmv3k8i2~SHts8tYIBWf}NrQPctUUwa{v~AwgpnU0O)KJ}I z%UimLwZ^fBe9Xf)7O&kyl%>lfQ-1n6hBopGd2n-VnTS=Z?4d4Vz`QJ(!3t9A0|^zj zQd*p96s#-BH;Ay8j;E^5>G_E`{8{6^)muYjFIq`B%wIC~E!WX`7L~UezaYaJn=RC- z)@{xox)%;J0mIyU?&RHqJUIYIes6XP#g)RS!*wlW7-{=7sAhG=F(OF1%b9MB`}|yn zZ07}J4}Yw#ofNLMQz;dux3gWAcbdLCqJCB*HJo>#`mqTrw;MYe#knKS{2G?8ON-gZ zkGuo5cqXVH?j$gL`|yTuMKf$W8(u7KSsTSUY?>vi7McidW9kM;JzSRL8LabY3@nzd zx@K4A71?DAIvuI9VN}`-thq*f9(J}lmo^9Nn6!4+0ShG$r*MJQn3Gwb*fEQ%NYP8` z7#5^z`31%{t=ue5m>$v^%Vmbv?>Gd3-F`J6gO8KSNP?wBk5(8EK1+zppp3%e?J$fG zVUj}X1qTuBUl2b+rYl|jfZ|cp{p*mkn}a%yUC|UFzLg0Z&XZDwuxEwlu@0?76vJwf z_uM)ky}bw-HFxYc0#~jxaZxI4m}=4)KV|_6Ja%q_W{LaI zWv6z`G@$Pc%gb2hW{NhLlgO2_=d*s-&qq11>}3Ym^7 z6yx#av!O1&XZ>*$DkME7DPj)1$KT&cQTLF;%0WeUd`cG+Ur|i#%I?0+4J_b0Ef)FW zKW=ny!6MVwhBw$gu;WD#>PNDbp|_ti?44b?^ce_L&Y}ujbt{@WYU09!Fhu3R@Cxe} z39Df+YpTPr1=X=;b^S8ePaTyHJorKwzL5ktL2d83{}9La54qHM`dGE&G7z1)1Ygwv z(Hdh*Sq($VJJB)qOirymF|Zk7TD@dWE4zl3Uz8o`%s=u?OOvtsObvV_FBcnyOp|%x z7&bDgc9l))M1ayOehqHdi>oV2QC0VXB|Q5_$OpESw2%-{e1tX%Pr;OF5E?)<$5TPSL2A ztY^c6JLYF(7jJ2OXeT|}EPtwP}uYKuzS{yqyZA1jC?r$>&L61qb2EH<69 zFDFL$S>aR8RP%BwS&DDs0^BYzTEe+V%bDgBd;x8p2=64kx@DB=`qO!a2ID`yu91ik zD6X7*Dx2w6dq{Luzc&AG8;`zK&fdHypqxX+0<^n~Y1x{7x0vmSiWtCTM0@8 z63WHbt871GL@uYFI`XcnJhO8J^D2DuOuQVyLs<*${O%e?>Q+*H!g-YixUKRZ;Yplq z95zHpgAPiKv*BxuYgQdfItr0(6Podsxkg|y_lnr2Mt`++7PU}J?Qyz^$(WIH~M5*n&OrC zdsNsVvf^SoWoEL1mUC5w-;u;+VSBEq!1qSzkk(vXp4lRC^T$>MU0&xR5KSV%7ZAUf zVDz)u0H)`GDK1n)p@9r2c7)2Yj3jMW&DoVZR&NzIH%$a^)_iqd_==)qMDBmiZ8JUm z;9EBQRzbN^QB3&7R~gAWE`}Wu_cW0=Fme$Rrdjl$NQ6v1=&?a4MhjU!GKcE}g=f(T z-hSJ{ycYG2;(4Iv@QwlahyszHh2z|+`rq}nBh0j^fa{Qd&8I|scFi?vA?+saIPaEP75 zFoxa1dh*H4mHe#6?I;}9lZ-l|1f&o@0s@QqweQtm^xwm8ILD9)6<|;ckx=xzo*qvb z6s{4Irf}P)(fso891g%|dK!GnKs)q?*|Y>x1uG4U)CKar$dlG^EBh3p@)VlPrxuR$ zyatvkA=$7zH_J|!;j8*scmXdXmy5@uL))`1bC!XJ{?%1yeWD-%EWNOtn0 zElD7wJhoq`bB$BR{JM1%-#-oux9KQ=%s>22HOE0eVf3v((^(5ujG(dQXtY$=&js*7 za}x23AS@Fp+j>LtmJ5ZK6#Sx=p_sYU7`#b5q1B(g`gY(qV7!@|i$#&A?N=brFHhf2 zz_PFNp?9a`J=V^G7uLyH@h|SgB7)ne@N7-sm3%StNv`uj@1voZu>9|w%@3%ew5va8 zd<+d0_rz@bAX5R7C!Tgr%V`>cf4Iy{e(ICV+9Ab70LHLv&~%k3GQ?*a zUiHX*Z9zME81@9VO%dw|i?juPq)4y+aZ%is?8+}mG<4i!C@(SPDUtzzK)oy)sLyb2P~US08QqSvPB zbe%gtCUlzEwjz!OF5z4Ev9z)^8w$cC;XI?M#NaD|DV2l3Uw$H&KXYi}O@r*J7u+Th zl-<#m!>C6nS~?>zuy(^SO3YF4^z7@7K4tiR2*&qq1=9Rh>lE(^0Rl9);p+QgXYZka5++EpeP1@^L~iwJoN{ zbIOR4w6Pn!gpgUoE|0#A+1}C0g4g!tKzykDeYVn;TPGjG0Up!E|M_5oD6&JX*``1H z@^T)f_S7`;Fl;y>e@nIkid4SgDXNSAw%!S>t}Q?#^)KOt)g5ZfF|*)fkxyW8tlpFm zb)v6%#2|@3g3~I&6z%3khf^ba`PvyqXp!g661t23MW(NRB-wKdGz79X6vzJY0NuMN z`;U}zhOGV<7%-ihYP(ToZ{jsp%#6?kZVFFxY1<`QSUDT;r5E%;T(P00+ z3V}drg{~{1T$hQ$VPo~kFTQyu_fHW}ttTGipYL$ukN}kMRT>9XE}C0?gs;jX|NR}P z8!L(+d4N;%E)9xx(>fR(cdJ<$2ppv+s_tV&*_)n#l2O=O%~E3p9K|-E;yy@uflK?q z;qJfsJiiMYCrBT1s|TELe;Iu^0u6PXn<;@2ZMWtEhYChb21I_KN4?b%7+3dCyT4W5yE3C)tY42z-aD*x+7{J&8Oo?o`9T}uL5 z^1B)HH*n0pAzUIiMTuZ^tG_f>fO?9tJp9F_xxwflJ)wt!^oaR^Dc+y zvXrdT-mnEOfCxdaDWwcvwpV=xPtgCtkd*{LBDN2UPH!0HJs4yUiMl_u+b|J+;4r zXRQwB?3)wo$#iT=LsI#i^DVaWmTp!;972l#l|A_Ey(=`9ubA$Ht?hd}F;F?B|4_?T ziT@4e4X2Y)#wtLpa8TNs~Kyqo7bJ(;r~;NL1(SxU3&zBQ9~cmb=>1~6Op9Wue` z^Iu!V&n1kmqx?iJT=F(HZnNheSXWT)J*Vv~=T;qz^=1&WX{SCNw_~{<<|?9=M(do?uRv`>clkrzU9+)` z+wHM|wP$pzOgdk(oo$!L;7Q!#aoICK=D>Z zNURT($7xl@c{NTt?b*bKR0#~e_PyQP>VujjU^TvBx9Mzf9MEw^Il7goS{91R|1^RE zF6Y@&7KW075P^W zcVI>__|vp$e+0iI$N&}B4e5-jGTTyYD!%gq`^#Ko?d#>oaW z$HDZpqGV0$X|>&}sq!PETP?OD1pJI|0JB1YsU)~PjRER1?@gdbB489RT>)C2Yv!4? zq$*zuB~J4?-c0>F$SmLO`>Z+Ok5}Le$t>dQ*cdT+pL-kbpKX3D?gu=I0gFsu^BzhB zr@;(9bHL51S_MOx6}qBHuhRj55lE=nlDE*yCJlK_ZNJ{1x;|r($pvO$^E_QkW(rNW zZ>pUEgTcN%8_SQHdG@i;rm6t_6!5V60pq7I(tUIMeUh%yYr&bO54Lkv=76Ed0eY7- zzPIt#jur4TR&c%uAg2<~qY-JQ+7AZJO*HBY_3k`?vCnarh?9=qFG2slh+hNEtJopH zE_^~@zx%my0B{5Cnf~1tLcnNz!$^*Fx@yj&C(FV0m0;3$ZMJsi!Gl(0@)YnPBbW<5 z^m%8U$Iqp(^qgq^-UqHSxA;{>96?UvAc;xGJoGNHxn2Et?sCIcIP1GxbJfLQ9F}~z z)KanE+4t%J-yaJWJ)2;nE+yV21ZTjIPY3++ioLMS^jmyIM-pHuOSWnUh*)zlRS-a) z>+QJ8oL!{u8HyP)fw42*z*p@9x%FKz2>#cPUHcVOnp+KoV+Cx;kge`SJS-}?|Iy-= zYZ54q6aWgM%&@K~uKW7hn=#e*>f*-$n2`JOxcGT$o$J;k0hGoY7Lj=fw;Ph*zeP3Fx6!_{FdAsJ*bz)~g&7_VgiwH5PPYM3RqyeK8i_xo0Ps-Xe z0Pm4oDJnQvEC?yJGm1Fb?gNbv2h9^C3=&J(&lm#RhDD7hPsg$)!f>Kxit%sknP`7v z=#Ory7;OTYC;3yl&QaB<_l#JCpVWNKaE>0JZrc3tvETFSD}s}UM}oH&(_i!_HRjfW z>y(}ahk|{>{v$BBUQ7=Ob{QA>4xu4H@n*PO8>1B1x9pj4lwj$D%frm86sl<6HZWO5 zQqAI<#DtjZAhu|cOAm>-wKyv2G*b6@Rfk)~6NC}mi>tWg-^dEGDb_aL1Nf125(f8z zM6L)Fgl@lTeth;GFbX40+BkjYbkn0LxPPecvoEF7Ut>L06uNT{OGwraWwEX!#2fJc z>CU)CHjZxTb^*AKxCZcP{Wc)lC%GaKmDPCR!2P>5v!bS7&(bsgHJ{%x5sTle=Iqu} zOrqJ`KYLnWn+$8gBb2PZ@?1~lb_@v|xy=E1;b6=GVFRGNQZG*Cl<^zj;#hXA$A>>b z-G3~&rvvUW`|8^*$D1zXu(~r>0ac@w54ip2V~RXnpmvaRh;U0I&~*qX%=s}Y&yu>c zP%nMvbep8$;7;QOjrYJjI^e4rbhfpZkzm>16-a5rejUMXSsnmk)9U-A6Fee`4oD0V7k=Agzdpy@f)p#6fiIQxsRpUMlY;- z-YJrAza6(Rl>**(Em5og?>CQ(73m4scM3Z$OOCx)r=25;W`B4aC9C10JJiLB>D>8% z=m>49XzB(AVPsi;0_a2V@NX);dcKF$K}+hipz)D;e~Qu5Dw}WUM?`OLWWrMfCn`@Z zeb2nwRj7P_2A{J6prYjkRs}yRg>HfZb7l6|$@eXq9+Nul!_BE;`_7m52s%QiZK2=K+~r+w-flFYDv#%E$OY z)UkrPgL8KEg`S)5-zp5f7HZT(zpHyAVGsf$WIuy}T6O@J9Rgp{CNy=JpxCt@vN$qi zHKIG9S9dSlEt}da|L=}W0p;C8m0ks=gV@u!RSumAj)x48@F}4C)j|n!IX(C!+hu3*Tiomn+0a3$^HGu~ncV_dzTgj`+ z*o9I<-Dj=d&LlYj*gy1r!g*uxw~)fE#Ww&dF+B)Vc=`?zXZOMum6sD#<}*4=gQ3^a zhEe$|dRwa7tc8zI7T*Biyxpyu5Kt{Mj$NdU(#*2dyD=h{tX$8=SwDqg@`RE5)%>u| zLA{xY5_o9#Q4EJl4dgd&1qWXbac7QG-@6|bqb-+#$^ep=} zU7Evg^C?6_`ES!YmKq#9AfKn)YO^+qsQpmDWK=e#9r)&8LL!Zin)}3Ak8X_S1fqa# zYWu><$uc497{P;XHB6P=p+GP~);5W?hX9b!m8`dXUePBAragzMw7`es1gH7m6N>{6 zQghkOPpjmwY?lv3yKs6vu|rWv9fTm1%!xXckzpOM37PkQMtEP8nf3Jp3f?qc z=G_HgZFVn{{rqA-#&c3Jro{2Z=P-)qY3wqf{L-GEuaIX8HkXC5z6G<~fiE&o^nH9~ za3eZt;bvq%hY;vnzUw#vgdZ(j5+E^CiuCG3#Sh*oO3Rm;#0X7hJij~*)h`1LrYC@7 z(;vywM2MwoNsvi_J1%u~!TQYAvp5y>uB44=D^#xFy`Jg9Ih>lz43T6?+RTgwytLcLZG8&p<99}%X*fKDm zt*}}z`GoP&;dRcVDE3D0AKb26lU&-PuYC@BG=#roiNTLupV^!HTM4h14+(SJCFXXi zC0bnK9>JK0iQKOa_M1FsT!oR6d)?=wf4c zlc6_z{4a_{24tQ-mIYEa_{>8cfx;7fWZ`*v`t`fFzk_0a6Nt?WT zOb}1|=8LLA;;@&b0+UCZ6MaulN@@~muJzRbi7sjvI9RmVS{&o!3`RfXhhG2cSkI49JFF=y3AEJCfzF2=(=c*hw=x#K?(T!HFOm2 zGTcyUk|pN)ZR3STY6(+l17IMeUtXN0hoBRraZPGd?Ixl#dWMlWh1XtPo@t#5Yws(} zcNGB+8W|fhiG%;?YP@oPC$atZCYM*y4bny6?!^m6P?(&)A=9DArPK21rSjD71G6NQ z0|G1^Oy)wM@6l=lxDtqQg2u<;Yu+nSJpEDxdZyuscY>GOw7)Vy0hXETqyyi{0;c)-ES=ZfIVxJS1{u;~~5sBoTV2 z=Pb3>$EYnB6-;4M!u)-~ZH_6qc!T4nQ!i|w(*Sg?rIL3`%k6L0#mnLZmj^*}Tw;Go zG=joYjBOR*m0763>*L;s#j8T3?9QOwi!1hQs>rta3be|=CmdF<8UVw*E6I-DwBJ)% z&ERGO&PO`S30m#)O)dRZL?Xjj$NlyG@;Jc7HxvSc8Ew@NdkEXx#0Jr#deCRnfC1W8 zwf74Bm^T4Tne?g0kXO_pDt>DKA#;Oak~AKslXaUO*zIJ!5y?|(-#-1_%jiqdHEK*3 zxVB?JQqG#bWDT(}aGlWLUXQ8a4JR#iu8ELkZ&5rQdVV=Z;@rm?rh@@T~#sQ}3c+#`h zGW?^W4#lkx?o2ZS+T_wPWUq!;kDuJAzDAVQM+YroHN3qU35vWjEN&zH8Eu1jxvz!1 ztC*0OZkquZV4UeYfvG%s0&7x%t%7nVk1Am`MmRjzoyo%VO38I=TgH=xUrjeO$^};& zFPJaOmk35OsnDe=D8CRu03F8JYQPY@dKW``yL~d0Rp|o{)_r@t^Nup<0p1tH2pjS8 zcPRBl!c`M)Z?j^8A-vit4s$q}KMwj>zV0*oa%v%Tn>GRNz0Hz&gvh@{G%aX->$5tq zE0m8Z2|P(I)P3P8uHVxIhWl^?_vGdgR@}C~5Fy~%5h?A|jRw)U&t<;4=!D@-Q0zmQ z_sO_QykaT029l+MfJW=t5VwOaueG53LXxSwQOMCvz5*$4sieT`@fw$6qI0z140z0CJ3WR=gU$}daqA% zz0!+$$@=Wziy7ZPDbJ_rJlajXja_PlHY(35s9y;T3<4u~7NFI?`wopnh5eVNDs}h^ zBbtwt4&U;UiDnZ?ow_N&G%P%o)>HVBw*)f^Zor-_S&lczJH*WM)u1N}z8>xqNk#RL z*H&S5Ki}63lb^(JK7f_&B|vc7!sddrlOaeX8Q>P< zfFu~iFo3UP6ZeRY)8b~}L4$2vx%Pn)$rxy-u|q=U8N`4#e%~ zyil_+jVTU{Xz4P1OceMRh7G)b9HLp{bvd4|NK<5MTgp(pk+k7_sEUIw;5J%WTB5qW zs=S9x_plU)3!PYVEFpxFSZYA#^dcw0IJ^7%857U9Nv_Tqi}j|=yg|?Pj46}-Z-PU7 z1_)T)4gtlOo-F?5<>h2i>lqWLlEX*w|93NOpNJuozaS8|s)Y2nl z9sl}OhfhFISyGZ!R>saE%gxQ59}y7&^D>&^cLV+{&*}D@DRvRPU0pQ}4-cQ}>uaj2 z#vvggHINl0%J=p5qHS}`Oi!y&<=$WX=!P{$jgA4H5o`S zyv@R^s<^MBS@6*Ec(0n>n;RRCr@DbT&wl`6O>!1mR#xxBdQVQ=io2|f zP0`WO)j8h^{Jm6rYjEGN4?eSNvz8}TU0nEftTRJh4YkYV(D?k6i#Q1o_5AKS;Pz;L@NFDo{V%H$BO5CDY*S2F&bBBzaTM9)z z%TV)=hs?|;b#-nsYy|&Mh!I@s{R8%G3O3T;O<;*ap1_Lhml;<`|J~}SsDErS66OmE zO8>u5)Pr`8>Uq&~k}LFgJN}}Eh<+DH1D?1)-1^K|VE~YoQj#nZHw=XN1OF?4m6yfE z$;`}|+2ns?9{_N3a)STac(~ZEf3xxMT>l4v1N_d$$;rdb2~^|Zf?;K2XX9amfw2DX z8`2H9I=dJ-K_Doi%8kMP;xs{z6L_&`o0_3{qd@?$ zvU7o0n|TWS^TWx=&RPKN`sc0M5C$7Fa~FaCzSzmi!V)O=75JxdkWl|>{NFY0?fvIBO4n}2=HNV0$ee@zMuK}4hJJA zBU^C15P9Iw#nR}n#x3n_Or3960cQbG13zw6GWx5ElbMUFlbtg}#U7ZjnG?jt{(sUj zBSc9=cA{&%^Ry&c5d$jaurF&4Cc%@NJydNKy!FS@@_%lHpk>Hia2fN5V>hX_GT zu6v+kV}v+cd70Up)7`2_Pyg2vnM3GqZV|d396jWByC9f5I04;(x0;$cIWa;gZ;gl_ zB4K1_XYcaQ3?a5=w)Re*5OaH{-$>TAqx`EM5Psw7x{Ke1zQ5_>@BW#D!IcoYp`V)z z*Z3Fui+<`5dJG2sF|6#IyqapnE^{+4hp;92r{xWg;=>bL!4cWe~Z9dt9)HS z4WKKCy*aSZW`9=#SJc?-x)syks{}H^_3z(H^Y0Y^(fc<$fav`np!W9^{)LH~7JpA0 zWRkxS_+KwwGs>-N*TwYz0S_ubKQ5lv%jgWT0PtaV%~Bv0*;V3TJOV$! zb+mVNad36Hef|3G$2Vwkxar_u==oi4aDBl5yov6Stb!DT0c@WUVq$OS>;k#P;}8b$ z^KZocC2_#Ie@*hQlIu$UVVVl|MyAfc8!~sYw}lw}o(H(xfAgo)Un^_n@}H;cZfWLZ zc8!wX2m*-2$nE!({v(rvHEn=y0nP?*xZ!MoQvl3a8aX(a0e4(8!#_=0+5Lm?|HABG zQ~woD{}~;?+h8oe4v9eiOj;FFk;t8No)}bXfKNd&Xw_7cH|eKprbg zDudI!RfiQE{r_q8_XqyKANT`*;1B$PKkx_sz#sSnf8Y=Nfj{sE{=gsj1ApKT{DD94 T2mZkSSMc8eO0 +#include +#include + +#define UNUSED(x) ((void) (x)) + +/** + * @brief Counts occurences of any substring in the file. + * @param file File where the substring is to be counted in. + * @param substring Substring to be counted. + * @returns Count of occurences of the substring the given file. + */ +long count_anything(FILE *file, const char *substring) +{ + /* TODO */ + UNUSED(file); + UNUSED(substring); + return 0; +} + +/** + * @brief Counts ananas. Nothing more to it. + * @param file File where the ananas is to be counted in. + * @returns Count of occurences of ananas. + */ +long count_ananas(FILE *file) +{ + return count_anything(file, "ananas"); +} + +/** + * @brief Writes given number to the file, character by character. + * @param file File where the number is supposed to be written. + * @param number Number to be written. + */ +void write_number(FILE *file, long number) +{ + /* TODO */ + UNUSED(file); + UNUSED(number); +} + +/** + * @brief Main function of a program. + * @returns Exit code that denotes following: + * 0 in case of success + * 1 in case of invalid usage + * 2 in case of failure on input file + * 3 in case of failure on output file + */ +int main(int argc, char **argv) +{ + if (argc < 3 || argc > 4) { + printf("Usage: %s [string-to-be-counted]\n", argv[0]); + return 1; + } + + /* TODO */ + return 0; +} diff --git a/files/pb071/bonuses/08/counting.json b/files/pb071/bonuses/08/counting.json new file mode 100644 index 0000000..4001450 --- /dev/null +++ b/files/pb071/bonuses/08/counting.json @@ -0,0 +1,4 @@ +{ + "args": ["{test_case}.in", "{test_case}.out_produced"], + "specialized_test": ["diff", "{test_case}.out", "{test_case}.out_produced"] +} diff --git a/files/pb071/bonuses/08/test-bonus.py b/files/pb071/bonuses/08/test-bonus.py new file mode 100644 index 0000000..d0eff34 --- /dev/null +++ b/files/pb071/bonuses/08/test-bonus.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 + +from typing import Iterable, List, Any +import click + +import glob +import json +import os +from pathlib import Path +import subprocess +import tempfile + + +@click.group() +def cli() -> None: + pass + + +class TestCase: + def __init__(self, target: str, test_case: str, config: Any = None): + self.target = target + self.test_case = test_case + + self.test_case_config_path = f"{test_case}.json" + self._config = config + + @property + def config(self): + if not self._config: + self._config = load_config(self.test_case_config_path) + + return self._config + + def __preprocess(self, arr: List[str]) -> Iterable[str]: + return map( + lambda e: e.format(target=self.target, test_case=self.test_case), arr + ) + + def check_stdio(self) -> bool: + if not self.config.get("capture_stdout"): + return True + + process = subprocess.run( + [ + "diff", + f"{self.test_case}.out", + f"{self.test_case}.out_produced", + ], + capture_output=True, + ) + if process.returncode == 0: + return True + + click.secho( + f" [FAIL] Output differs from the expected\n\n{process.stdout.decode()}", fg="yellow" + ) + return False + + def check_specialized_test(self) -> bool: + manual_test = self.config.get("specialized_test") + if not manual_test: + return True + + process = subprocess.run(self.__preprocess(manual_test), capture_output=True) + if process.returncode == 0: + return True + + click.secho( + f" [FAIL] Specialized test failed\n\n{process.stdout.decode()}\n{process.stderr.decode()}", + fg="yellow", + ) + return False + + def check_stderr(self, stderr: tempfile.TemporaryFile) -> None: + stderr.seek(0) + if contents := stderr.read(): + click.secho( + f" [ LOG] Captured stderr\n\n{contents.decode()}\n", + fg="yellow" + ) + + def execute_test_case(self) -> bool: + stdin = None + stdout = None + stderr = tempfile.TemporaryFile() + success = True + + if self.config.get("has_stdin"): + stdin = open(f"{self.test_case}.in", "r") + + if self.config.get("capture_stdout"): + stdout = open(f"{self.test_case}.out_produced", "w") + + try: + self.process = subprocess.run( + [f"build/{self.target}", *self.__preprocess(self.config["args"])], + cwd=os.getcwd(), + stdin=stdin, + stdout=stdout, + stderr=stderr, + timeout=5, + ) + except subprocess.TimeoutExpired: + success = False + + self.check_stderr(stderr) + success = self.check_stdio() and success + success = self.check_specialized_test() and success + + stderr.close() + + return success + + +def load_config(path: str) -> Any: + path_to_config = Path(path) + if not path_to_config.exists(): + return None + + with open(path_to_config, "r") as config_file: + return json.load(config_file) + + +@cli.command() +@click.argument("target") +@click.option("--global-config/--no-global-config", default=True) +def test(target, global_config): + passed, failed = 0, 0 + + config = False + if global_config: + config = load_config(f"./{target}.json") + + test_cases = set( + map(lambda x: str(Path(x).with_suffix("")), glob.glob(f"test-{target}/*")) + ) + + for test_case in test_cases: + individual_config_exists = Path(f"{test_case}.json").exists() + if global_config == individual_config_exists: + continue + + click.secho(f"[TEST] {test_case}") + if TestCase(target, test_case, config).execute_test_case(): + click.secho("[PASS] Test passed.\n", fg="green") + passed += 1 + else: + click.secho("[FAIL] Test failed.\n", fg="red") + failed += 1 + + total = passed + failed + click.secho(f"Passed: {passed}/{total}\tFailed: {failed}/{total}") + + +if __name__ == "__main__": + cli() diff --git a/files/pb071/bonuses/08/test-counting/basic.in b/files/pb071/bonuses/08/test-counting/basic.in new file mode 100644 index 0000000..d50958f --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/basic.in @@ -0,0 +1 @@ +ananas diff --git a/files/pb071/bonuses/08/test-counting/basic.out b/files/pb071/bonuses/08/test-counting/basic.out new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/basic.out @@ -0,0 +1 @@ +1 diff --git a/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.in b/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.in new file mode 100644 index 0000000..2ce25df --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.in @@ -0,0 +1 @@ +ananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananasananas diff --git a/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.out b/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.out new file mode 100644 index 0000000..16b8206 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/biiiiiiig_ananas.out @@ -0,0 +1 @@ +1747627 diff --git a/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.in b/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.in new file mode 100644 index 0000000..9d3bcb3 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.in @@ -0,0 +1 @@ +ananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan diff --git a/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.out b/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/biiiiiiig_nothing.out @@ -0,0 +1 @@ +0 diff --git a/files/pb071/bonuses/08/test-counting/empty.in b/files/pb071/bonuses/08/test-counting/empty.in new file mode 100644 index 0000000..e69de29 diff --git a/files/pb071/bonuses/08/test-counting/empty.out b/files/pb071/bonuses/08/test-counting/empty.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/empty.out @@ -0,0 +1 @@ +0 diff --git a/files/pb071/bonuses/08/test-counting/fgetc.in b/files/pb071/bonuses/08/test-counting/fgetc.in new file mode 100644 index 0000000..6fabcac --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/fgetc.in @@ -0,0 +1,65 @@ +FGETC(3) Linux Programmer's Manual FGETC(3) + +NAME + fgetc, fgets, getc, getchar, ungetc - input of characters and strings + +SYNOPSIS + #include + + int fgetc(FILE *stream); + + char *fgets(char *s, int size, FILE *stream); + + int getc(FILE *stream); + + int getchar(void); + + int ungetc(int c, FILE *stream); + +DESCRIPTION + fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error. + + getc() is equivalent to fgetc() except that it may be implemented as a macro which evaluates stream more than once. + + getchar() is equivalent to getc(stdin). + + fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buf‐ + fer. A terminating null byte ('\0') is stored after the last character in the buffer. + + ungetc() pushes c back to stream, cast to unsigned char, where it is available for subsequent read operations. Pushed-back characters will be returned in reverse order; only one pushback is guaranteed. + + Calls to the functions described here can be mixed with each other and with calls to other input functions from the stdio library for the same input stream. + + For nonlocking counterparts, see unlocked_stdio(3). + +RETURN VALUE + fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. + + fgets() returns s on success, and NULL on error or when end of file occurs while no characters have been read. + + ungetc() returns c on success, or EOF on error. + +ATTRIBUTES + For an explanation of the terms used in this section, see attributes(7). + + ┌──────────────────────────┬───────────────┬─────────┐ + │Interface │ Attribute │ Value │ + ├──────────────────────────┼───────────────┼─────────┤ + │fgetc(), fgets(), getc(), │ Thread safety │ MT-Safe │ + │getchar(), ungetc() │ │ │ + └──────────────────────────┴───────────────┴─────────┘ + +CONFORMING TO + POSIX.1-2001, POSIX.1-2008, C89, C99. + + It is not advisable to mix calls to input functions from the stdio library with low-level calls to read(2) for the file descriptor associated with the input stream; the results will be undefined and very prob‐ + ably not what you want. + +SEE ALSO + read(2), write(2), ferror(3), fgetwc(3), fgetws(3), fopen(3), fread(3), fseek(3), getline(3), gets(3), getwchar(3), puts(3), scanf(3), ungetwc(3), unlocked_stdio(3), feature_test_macros(7) + +COLOPHON + This page is part of release 5.07 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at + https://www.kernel.org/doc/man-pages/. + +GNU 2017-09-15 FGETC(3) diff --git a/files/pb071/bonuses/08/test-counting/fgetc.json b/files/pb071/bonuses/08/test-counting/fgetc.json new file mode 100644 index 0000000..2a3c3d4 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/fgetc.json @@ -0,0 +1,4 @@ +{ + "args": ["{test_case}.in", "{test_case}.out_produced", "getc"], + "specialized_test": ["diff", "{test_case}.out", "{test_case}.out_produced"] +} diff --git a/files/pb071/bonuses/08/test-counting/fgetc.out b/files/pb071/bonuses/08/test-counting/fgetc.out new file mode 100644 index 0000000..7273c0f --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/fgetc.out @@ -0,0 +1 @@ +25 diff --git a/files/pb071/bonuses/08/test-counting/going_bananas.in b/files/pb071/bonuses/08/test-counting/going_bananas.in new file mode 100644 index 0000000..f8348bd --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/going_bananas.in @@ -0,0 +1 @@ +ananas bananas banana nanas nana diff --git a/files/pb071/bonuses/08/test-counting/going_bananas.json b/files/pb071/bonuses/08/test-counting/going_bananas.json new file mode 100644 index 0000000..a2d56e4 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/going_bananas.json @@ -0,0 +1,4 @@ +{ + "args": ["{test_case}.in", "{test_case}.out_produced", "banana"], + "specialized_test": ["diff", "{test_case}.out", "{test_case}.out_produced"] +} diff --git a/files/pb071/bonuses/08/test-counting/going_bananas.out b/files/pb071/bonuses/08/test-counting/going_bananas.out new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/going_bananas.out @@ -0,0 +1 @@ +2 diff --git a/files/pb071/bonuses/08/test-counting/lorem_empty.in b/files/pb071/bonuses/08/test-counting/lorem_empty.in new file mode 100644 index 0000000..92307c4 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/lorem_empty.in @@ -0,0 +1,31 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi auctor euismod enim a sodales. Praesent efficitur pharetra mi, et finibus nulla pellentesque euismod. Sed fringilla sed mi in aliquet. Quisque eu nibh id arcu suscipit tempus. Mauris quam urna, volutpat id iaculis non, lobortis a orci. Quisque commodo lectus sit amet nisl mattis accumsan. Proin iaculis erat in elementum dapibus. + +Aliquam commodo congue neque id porta. Aliquam dictum justo est, a vulputate diam ullamcorper ac. Etiam cursus augue eu porttitor sagittis. Fusce egestas tellus quis semper egestas. Nunc metus neque, accumsan non nulla in, fringilla tincidunt tellus. Aliquam in tempus eros. Donec ornare leo in neque pretium mattis. Morbi consequat lacus vitae justo auctor, eget interdum lorem tincidunt. Morbi at nisl lobortis, ultricies augue a, viverra libero. Phasellus sit amet magna aliquam, scelerisque lectus sit amet, euismod eros. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris in ipsum dui. Maecenas euismod est a dui euismod tristique. Maecenas tincidunt diam ut velit rutrum, a bibendum ligula pellentesque. Maecenas sit amet turpis a mi tristique vulputate non vitae metus. Aenean ut lectus ut eros maximus hendrerit at sed arcu. Nulla condimentum velit non mauris consectetur tempor. Duis fringilla ligula aliquam massa malesuada dignissim. Suspendisse dignissim arcu et augue tristique vestibulum. Nam auctor vulputate dignissim. Integer eget ultrices elit. Vivamus placerat sit amet mauris et lacinia. Maecenas lacinia ipsum blandit justo efficitur congue. Aliquam erat volutpat. Vivamus risus enim, mattis ac lacus molestie, blandit volutpat elit. + +Mauris id arcu vitae urna finibus scelerisque. Nullam dictum interdum lacinia. Nunc congue turpis malesuada velit maximus suscipit. Pellentesque quis interdum risus. Quisque leo massa, viverra in condimentum quis, pharetra ut est. Nullam vehicula tempus elit sit amet placerat. Integer elementum, mauris eget rhoncus sagittis, est massa laoreet felis, sed ultricies risus urna et mi. Proin commodo ut libero in commodo. Nullam consequat tellus non tellus cursus, eget luctus tellus tempor. Proin ante risus, convallis et ex ac, cursus auctor turpis. Integer et mauris ut enim suscipit laoreet. Nulla tortor augue, eleifend id faucibus sed, faucibus eu turpis. Sed vel nibh non tortor venenatis dignissim. Nunc vel maximus mauris. + +Mauris porta nunc eros, vel mattis augue dignissim in. Nunc tempus ac purus dignissim dapibus. Nulla sit amet ipsum dapibus, viverra dolor eu, pharetra lectus. Sed maximus felis justo. Cras nec condimentum nisl. Donec vitae metus suscipit, auctor augue in, blandit purus. Pellentesque viverra non est id mollis. Aenean fermentum nisi sit amet urna tincidunt, eget accumsan mauris bibendum. In vestibulum consectetur erat, ac gravida odio ultrices eu. Nullam quam mi, sagittis a nisl quis, vestibulum ultrices est. + +In ut tempus nibh. Morbi consectetur gravida feugiat. Morbi non eros ut dui faucibus sagittis. Duis euismod metus quis enim aliquet iaculis. Pellentesque pellentesque sed lorem vitae euismod. Aliquam luctus fringilla urna, eget hendrerit augue. Aliquam malesuada nisl id eros viverra aliquam id ut sem. Mauris vel arcu eget nisi finibus varius in vitae arcu. Maecenas aliquet gravida quam feugiat vestibulum. Maecenas id nunc sit amet nulla imperdiet pharetra quis eu lectus. In pellentesque mattis bibendum. Proin ultrices eget turpis eu accumsan. In porttitor ante eget odio mattis egestas. + +Mauris lacinia lacus vel eleifend mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec eu quam orci. Vestibulum fermentum, odio iaculis porta semper, enim lorem faucibus nisl, eu vulputate enim turpis quis massa. Cras hendrerit pulvinar ante id mattis. Phasellus vitae neque lobortis, aliquam purus in, commodo ex. Aenean suscipit metus non sollicitudin porttitor. Maecenas a justo cursus, mattis ligula ut, vestibulum felis. Curabitur dapibus finibus lectus nec porttitor. Integer fringilla, dolor in varius sodales, purus risus bibendum tortor, in eleifend risus neque a elit. Phasellus placerat enim at nulla aliquam luctus. Nunc consequat placerat ornare. Suspendisse faucibus gravida arcu id ullamcorper. + +Praesent dapibus mauris eu purus maximus vehicula. Nulla ultrices luctus eleifend. Etiam efficitur aliquam diam eu varius. Sed quis lacus volutpat, aliquet eros convallis, interdum erat. In auctor ipsum vitae massa rhoncus, nec sagittis purus gravida. Nullam condimentum fringilla euismod. Proin congue nisi ut est lacinia elementum. + +Maecenas leo ex, mattis non neque ut, rutrum pulvinar enim. Morbi malesuada mollis risus, sed faucibus eros ultrices at. Aenean aliquet in odio sit amet rhoncus. Nulla nisi neque, vestibulum a sem sed, consectetur convallis neque. Nullam ac lectus vel eros luctus tincidunt rhoncus eu dui. Pellentesque vitae lorem congue, pretium felis vel, mattis velit. Nullam nulla elit, convallis eu congue sed, ultricies nec diam. Mauris et ligula dui. Praesent sit amet laoreet dolor. Aliquam erat volutpat. Nam feugiat iaculis vestibulum. Ut eget turpis at diam interdum finibus. Aliquam dictum fermentum dui, eget lobortis nibh interdum sagittis. + +Nullam elit sapien, mollis sed convallis a, consectetur at ipsum. Integer viverra consequat turpis vel elementum. Aliquam tincidunt et est sit amet condimentum. Aenean nec sem semper, semper urna quis, aliquet ante. Duis malesuada, massa sit amet congue feugiat, sem diam accumsan lectus, at vestibulum dui libero non lectus. Maecenas nunc tortor, varius sed libero in, placerat consequat neque. Maecenas rutrum sem enim, vel hendrerit dolor luctus nec. Aliquam fringilla purus sagittis consequat pretium. Suspendisse iaculis pharetra est, eleifend elementum mauris viverra eu. Ut pellentesque tempus ipsum, ac maximus risus imperdiet ac. Nulla felis mauris, molestie eu aliquet non, pretium sit amet ante. Integer id cursus mauris. Nunc a mattis magna, nec luctus magna. Mauris sed vehicula nisi, id tincidunt mauris. Curabitur aliquam, eros vitae ultricies interdum, nunc felis placerat enim, eget maximus dui massa vel eros. Mauris turpis est, pretium ut fringilla at, lacinia non eros. + +Mauris nulla massa, facilisis ut dui at, consequat dignissim felis. Pellentesque vitae nibh sed dui convallis faucibus a et risus. In id mauris ligula. Nunc nec ante sem. Curabitur purus eros, molestie ut nunc ut, cursus hendrerit est. Mauris bibendum viverra rhoncus. Nulla varius fringilla nulla, ac hendrerit neque tincidunt sed. Morbi malesuada bibendum elementum. In hac habitasse platea dictumst. Mauris at massa sed massa auctor pellentesque quis quis est. Fusce pharetra, sem nec malesuada consectetur, sapien nisl fermentum nisi, ac volutpat sapien sapien id ligula. + +Mauris finibus ligula ac dolor feugiat, ac pellentesque felis venenatis. Cras scelerisque tempus libero, quis sollicitudin nunc pellentesque nec. Praesent pulvinar leo turpis, vel sagittis ligula dignissim ac. Nam ut bibendum diam. Etiam fermentum nunc tellus, sed ultrices neque porttitor a. Quisque placerat dignissim eros. Phasellus consectetur nisl erat, id luctus lacus scelerisque quis. Aenean mattis molestie mi, ac rhoncus felis congue id. Aliquam erat volutpat. Vestibulum ac accumsan dui. Phasellus a orci nec lacus rhoncus semper eu ac sapien. + +Sed finibus, lectus eget interdum vehicula, lorem tortor ornare urna, id lacinia eros sem eu urna. Pellentesque consectetur vulputate arcu vitae aliquam. Aenean eleifend tempor dui. Mauris lectus diam, euismod vitae posuere et, pulvinar quis nulla. Donec sagittis vestibulum mi quis molestie. Sed eu lectus quis nunc vulputate tristique. Proin imperdiet nibh lectus. Nunc sagittis risus libero, sit amet dignissim ligula mollis a. Proin auctor, eros non condimentum fringilla, dolor neque consequat augue, quis ullamcorper velit nibh id nibh. Quisque mollis sit amet justo nec ultrices. Mauris vel commodo felis, porttitor rutrum turpis. + +In et lacus quis ante commodo suscipit ac et leo. Nam in dui diam. Nulla molestie lacus ac nunc laoreet, vel lobortis nulla suscipit. Ut iaculis feugiat tincidunt. Vestibulum ut pharetra enim, vel pellentesque leo. Pellentesque sit amet rutrum mauris. Nullam ultricies augue id est interdum, sit amet consectetur eros eleifend. + +Aliquam ac pretium arcu, quis viverra mi. Mauris tincidunt tincidunt libero, id aliquam ipsum scelerisque quis. Donec vitae purus et eros dapibus pulvinar. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis efficitur tempus tortor, et sodales augue ultricies sed. Phasellus nec finibus lacus, in aliquet turpis. Maecenas id turpis augue. Nunc finibus turpis purus, aliquam tempor magna ullamcorper ut. Morbi sit amet erat gravida, egestas metus vel, porttitor diam. diff --git a/files/pb071/bonuses/08/test-counting/lorem_empty.out b/files/pb071/bonuses/08/test-counting/lorem_empty.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/lorem_empty.out @@ -0,0 +1 @@ +0 diff --git a/files/pb071/bonuses/08/test-counting/lorem_some.in b/files/pb071/bonuses/08/test-counting/lorem_some.in new file mode 100644 index 0000000..48e447f --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/lorem_some.in @@ -0,0 +1,31 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi auctor euismod enim a sodales. Praesent efficitur pharetra mi, et finibus nulla pellentesque euismod. Sed fringilla sed mi in aliquet. Quisque eu nibh id arcu suscipit tempus. Mauris quam urna, volutpat id iaculis non, lobortis a orci. Quisque commodo lectus sit amet nisl mattis accumsan. Proin iaculis erat in elementum dapibus. + +Aliquam commodo congue neque id porta. Aliquam dictum justo est, a vulputate diam ullamcorper ac. Etiam cursus augue eu porttitor sagittis. Fusce egestas tellus quis semper egestas. Nunc metus neque, accumsan non nulla in, fringilla tincidunt tellus. Aliquam in tempus eros. Donec ornare leo in neque pretium mattis. Morbi consequat lacus vitae justo auctor, eget interdum lorem tincidunt. Morbi at nisl lobortis, ultricies augue a, viverra libero. Phasellus sit amet magna aliquam, scelerisque lectus sit amet, euismod eros. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris in nananananananas dui. Maecenas euismod est a dui euismod tristique. Maecenas tincidunt diam ut velit rutrum, a bibendum ligula ananas. Maecenas sit amet turpis a mi tristique vulputate non vitae metus. Aenean ut lectus ut eros maximus hendrerit at sed arcu. Nulla condimentum velit non mauris consectetur tempor. Duis fringilla ligula aliquam massa malesuada dignissim. Suspendisse dignissim arcu et augue tristique vestibulum. Nam auctor vulputate dignissim. Integer eget ultrices elit. Vivamus placerat sit amet mauris et lacinia. Maecenas lacinia ipsum blandit justo efficitur congue. Aliquam erat volutpat. Vivamus risus enim, mattis ac lacus molestie, blandit volutpat elit. + +Mauris id arcu vitae urna finibus scelerisque. Nullam dictum interdum lacinia. Nunc congue turpis malesuada velit maximus suscipit. Pellentesque quis interdum risus. Quisque leo massa, viverra in condimentum quis, pharetra ut est. Nullam vehicula tempus elit sit amet placerat. Integer elementum, mauris eget rhoncus sagittis, est massa laoreet felis, sed ultricies risus urna et mi. Proin commodo ut libero in commodo. Nullam consequat tellus non tellus cursus, eget luctus tellus tempor. Proin ante risus, convallis et ex ac, cursus auctor turpis. Integer et mauris ut enim suscipit laoreet. Nulla tortor augue, eleifend id faucibus sed, faucibus eu turpis. Sed vel nibh non tortor venenatis dignissim. Nunc vel maximus mauris. + +Mauris porta nunc eros, vel mattis augue dignissim in. Nunc tempus ac purus dignissim dapibus. Nulla sit amet ipsum dapibus, viverra dolor eu, pharetra lectus. Sed maximus felis justo. Cras nec condimentum nisl. Donec vitae metus suscipit, auctor augue in, blandit purus. Pellentesque viverra non est id mollis. Aenean fermentum nisi sit amet urna tincidunt, eget accumsan mauris bibendum. In vestibulum consectetur erat, ac gravida odio ultrices eu. Nullam quam mi, sagittis a nisl quis, vestibulum ultrices est. + +In ut tempus nibh. Morbi consectetur gravida feugiat. Morbi non eros ut dui ananas sagittis. Duis euismod metus quis enim aliquet iaculis. Pellentesque pellentesque sed lorem vitae euismod. Aliquam luctus fringilla urna, eget hendrerit augue. Aliquam malesuada nisl id eros viverra aliquam id ut sem. Mauris vel arcu eget nisi finibus varius in vitae arcu. Maecenas aliquet gravida quam feugiat vestibulum. Maecenas id nunc sit amet nulla imperdiet pharetra quis eu lectus. In pellentesque mattis bibendum. Proin ultrices eget turpis eu accumsan. In porttitor ante eget odio mattis egestas. +anans +Mauris lacinia lacus vel eleifend mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec eu aaaaaaaaaaaaaaaaaaaaaaaaaaaaananas orci. Vestibulum fermentum, odio iaculis porta semper, enim lorem faucibus nisl, eu vulputate enim turpis quis massa. Cras hendrerit pulvinar ante id mattis. Phasellus vitae neque lobortis, aliquam purus in, commodo ex. Aenean suscipit metus non sollicitudin porttitor. Maecenas a justo cursus, mattis ligula ut, vestibulum felis. Curabitur dapibus finibus lectus nec porttitor. Integer fringilla, dolor in varius sodales, purus risus bibendum tortor, in eleifend risus neque a elit. Phasellus placerat enim at nulla aliquam luctus. Nunc consequat placerat ornare. Suspendisse faucibus gravida arcu id ullamcorper. +ananas +Praesent dapibus mauris eu purus maximus vehicula. Nulla ultrices luctus eleifend. Etiam efficitur aliquam diam eu varius. Sed quis lacus volutpat, aliquet eros convallis, interdum erat. In auctor ipsum vitae massa rhoncus, nec sagittis purus gravida. Nullam condimentum fringilla euismod. Proin congue nisi ut est lacinia elementum. + +Maecenas leo ex, mattis non neque ut, rutrum pulvinar enim. Morbi malesuada mollis risus, sed faucibus eros ultrices at. Aenean aliquet in aaaaaaaaaaaaaaaaaaaaaaaaaaaaananas sit amet rhoncus. Nulla nisi neque, vestibulum a sem sed, consectetur convallis neque. Nullam ac lectus vel eros luctus tincidunt rhoncus eu dui. Pellentesque vitae lorem congue, pretium felis vel, mattis velit. Nullam nulla elit, convallis eu congue sed, ultricies nec diam. Mauris et ligula dui. Praesent sit amet laoreet dolor. Aliquam erat volutpat. Nam feugiat iaculis vestibulum. Ut eget turpis at diam interdum finibus. Aliquam dictum fermentum dui, eget lobortis nibh interdum sagittis. + +Nullam elit sapien, mollis sed convallis a, consectetur at ipsum. Integer viverra consequat turpis vel elementum. Aliquam tincidunt et est sit amet condimentum. Aenean nec sem semper, semper urna quis, aliquet ante. Duis malesuada, massa sit amet congue feugiat, sem diam accumsan lectus, at vestibulum dui libero non lectus. Maecenas nunc tortor, varius sed libero in, placerat consequat neque. Maecenas rutrum sem enim, vel hendrerit dolor luctus nec. Aliquam fringilla purus sagittis consequat pretium. Suspendisse iaculis pharetra est, eleifend elementum mauris viverra eu. Ut pellentesque tempus ipsum, ac maximus risus imperdiet ac. Nulla felis mauris, molestie eu aliquet non, pretium sit amet ante. Integer id cursus mauris. Nunc a mattis magna, nec luctus magna. Mauris sed vehicula nisi, id tincidunt mauris. Curabitur aliquam, eros vitae ultricies interdum, nunc felis placerat enim, eget maximus dui massa vel eros. Mauris turpis est, pretium ut fringilla at, lacinia non eros. + +Mauris nulla massa, facilisis ut dui at, consequat dignissim felis. Pellentesque vitae nibh sed dui convallis faucibus a et risus. In id mauris ligula. Nunc nec ante sem. Curabitur purus eros, molestie ut nunc ut, cursus hendrerit est. Mauris bibendum viverra rhoncus. Nulla varius fringilla nulla, ac hendrerit neque tincidunt sed. Morbi malesuada bibendum elementum. In hac habitasse platea dictumst. Mauris at massa sed massa auctor pellentesque quis quis est. Fusce pharetra, sem nec malesuada consectetur, sapien nisl fermentum nisi, ac volutpat sapien sapien id ligula. + +Mauris finibus ligula ac dolor feugiat, ac pellentesque felis venenatis. Cras anaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanas tempus libero, quis sollicitudin nunc pellentesque nec. Praesent pulvinar leo turpis, vel sagittis ligula dignissim ac. Nam ut bibendum diam. Etiam fermentum nunc tellus, sed ultrices neque porttitor a. Quisque placerat dignissim eros. Phasellus consectetur nisl erat, id luctus lacus scelerisque quis. Aenean mattis molestie mi, ac rhoncus felis congue id. Aliquam erat volutpat. Vestibulum ac accumsan dui. Phasellus a orci nec lacus rhoncus semper eu ac sapien. + +Sed finibus, lectus eget interdum vehicula, lorem tortor ornare urna, id lacinia eros sem eu urna. Pellentesque consectetur vulputate arcu vitae aliquam. Aenean eleifend tempor dui. Mauris lectus diam, euismod vitae posuere et, pulvinar quis nulla. Donec sagittis vestibulum mi quis molestie. Sed eu lectus quis nunc vulputate tristique. Proin imperdiet nibh lectus. Nunc sagittis risus libero, sit amet dignissim ligula mollis a. Proin auctor, eros non condimentum fringilla, dolor neque consequat augue, quis ullamcorper velit nibh id nibh. Quisque mollis sit amet justo nec ultrices. Mauris vel commodo felis, porttitor rutrum turpis. +ananas +In et lacus quis ante commodo suscipit ac et leo. Nam in dui diam. Nulla molestie lacus ac nunc laoreet, vel lobortis nulla suscipit. Ut iaculis feugiat tincidunt. Vestibulum ut pharetra enim, vel pellentesque leo. Pellentesque sit amet rutrum mauris. Nullam ultricies augue id est interdum, sit amet consectetur eros eleifend. + +Aliquam ac pretium arcu, quis viverra mi. Mauris tincidunt tincidunt libero, id aliquam ipsum scelerisque quis. Donec vitae purus et eros dapibus pulvinar. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis efficitur tempus tortor, et sodales augue ultricies sed. Phasellus nec finibus lacus, in aliquet turpis. Maecenas id turpis augue. Nunc finibus turpis purus, aliquam tempor magna ullamcorper ut. Morbi sit amet erat gravida, egestas metus vel, porttitor diam. diff --git a/files/pb071/bonuses/08/test-counting/lorem_some.out b/files/pb071/bonuses/08/test-counting/lorem_some.out new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/lorem_some.out @@ -0,0 +1 @@ +7 diff --git a/files/pb071/bonuses/08/test-counting/mmap.in b/files/pb071/bonuses/08/test-counting/mmap.in new file mode 100644 index 0000000..8cedbc2 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/mmap.in @@ -0,0 +1,264 @@ +MMAP(3P) POSIX Programmer's Manual MMAP(3P) + +PROLOG + This manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (consult the corresponding Linux manual page for details of Linux behavior), or the interface may not be imple‐ + mented on Linux. + +NAME + mmap — map pages of memory + +SYNOPSIS + #include + + void *mmap(void *addr, size_t len, int prot, int flags, + int fildes, off_t off); + +DESCRIPTION + The mmap() function shall establish a mapping between an address space of a process and a memory object. + + The mmap() function shall be supported for the following memory objects: + + * Regular files + + * Shared memory objects + + * Typed memory objects + + Support for any other type of file is unspecified. + + The format of the call is as follows: + + pa=mmap(addr, len, prot, flags, fildes, off); + + The mmap() function shall establish a mapping between the address space of the process at an address pa for len bytes to the memory object represented by the file descriptor fildes at offset off for len bytes. The value of pa + is an implementation-defined function of the parameter addr and the values of flags, further described below. A successful mmap() call shall return pa as its result. The address range starting at pa and continuing for len + bytes shall be legitimate for the possible (not necessarily current) address space of the process. The range of bytes starting at off and continuing for len bytes shall be legitimate for the possible (not necessarily current) + offsets in the memory object represented by fildes. + + If fildes represents a typed memory object opened with either the POSIX_TYPED_MEM_ALLOCATE flag or the POSIX_TYPED_MEM_ALLOCATE_CONTIG flag, the memory object to be mapped shall be that portion of the typed memory object al‐ + located by the implementation as specified below. In this case, if off is non-zero, the behavior of mmap() is undefined. If fildes refers to a valid typed memory object that is not accessible from the calling process, mmap() + shall fail. + + The mapping established by mmap() shall replace any previous mappings for those whole pages containing any part of the address space of the process starting at pa and continuing for len bytes. + + If the size of the mapped file changes after the call to mmap() as a result of some other operation on the mapped file, the effect of references to portions of the mapped region that correspond to added or removed portions of + the file is unspecified. + + If len is zero, mmap() shall fail and no mapping shall be established. + + The parameter prot determines whether read, write, execute, or some combination of accesses are permitted to the data being mapped. The prot shall be either PROT_NONE or the bitwise-inclusive OR of one or more of the other + flags in the following table, defined in the header. + + ┌──────────────────┬──────────────────────────┐ + │Symbolic Constant │ Description │ + ├──────────────────┼──────────────────────────┤ + │PROT_READ │ Data can be read. │ + │PROT_WRITE │ Data can be written. │ + │PROT_EXEC │ Data can be executed. │ + │PROT_NONE │ Data cannot be accessed. │ + └──────────────────┴──────────────────────────┘ + If an implementation cannot support the combination of access types specified by prot, the call to mmap() shall fail. + + An implementation may permit accesses other than those specified by prot; however, the implementation shall not permit a write to succeed where PROT_WRITE has not been set and shall not permit any access where PROT_NONE alone + has been set. The implementation shall support at least the following values of prot: PROT_NONE, PROT_READ, PROT_WRITE, and the bitwise-inclusive OR of PROT_READ and PROT_WRITE. The file descriptor fildes shall have been + opened with read permission, regardless of the protection options specified. If PROT_WRITE is specified, the application shall ensure that it has opened the file descriptor fildes with write permission unless MAP_PRIVATE is + specified in the flags parameter as described below. + + The parameter flags provides other information about the handling of the mapped data. The value of flags is the bitwise-inclusive OR of these options, defined in : + + ┌──────────────────┬─────────────────────────┐ + │Symbolic Constant │ Description │ + ├──────────────────┼─────────────────────────┤ + │MAP_SHARED │ Changes are shared. │ + │MAP_PRIVATE │ Changes are private. │ + │MAP_FIXED │ Interpret addr exactly. │ + └──────────────────┴─────────────────────────┘ + It is implementation-defined whether MAP_FIXED shall be supported. MAP_FIXED shall be supported on XSI-conformant systems. + + MAP_SHARED and MAP_PRIVATE describe the disposition of write references to the memory object. If MAP_SHARED is specified, write references shall change the underlying object. If MAP_PRIVATE is specified, modifications to the + mapped data by the calling process shall be visible only to the calling process and shall not change the underlying object. It is unspecified whether modifications to the underlying object done after the MAP_PRIVATE mapping + is established are visible through the MAP_PRIVATE mapping. Either MAP_SHARED or MAP_PRIVATE can be specified, but not both. The mapping type is retained across fork(). + + The state of synchronization objects such as mutexes, semaphores, barriers, and conditional variables placed in shared memory mapped with MAP_SHARED becomes undefined when the last region in any process containing the syn‐ + chronization object is unmapped. + + When fildes represents a typed memory object opened with either the POSIX_TYPED_MEM_ALLOCATE flag or the POSIX_TYPED_MEM_ALLOCATE_CONTIG flag, mmap() shall, if there are enough resources available, map len bytes allocated + from the corresponding typed memory object which were not previously allocated to any process in any processor that may access that typed memory object. If there are not enough resources available, the function shall fail. If + fildes represents a typed memory object opened with the POSIX_TYPED_MEM_ALLOCATE_CONTIG flag, these allocated bytes shall be contiguous within the typed memory object. If fildes represents a typed memory object opened with + the POSIX_TYPED_MEM_ALLOCATE flag, these allocated bytes may be composed of non-contiguous fragments within the typed memory object. If fildes represents a typed memory object opened with neither the POSIX_TYPED_MEM_ALLO‐ + CATE_CONTIG flag nor the POSIX_TYPED_MEM_ALLOCATE flag, len bytes starting at offset off within the typed memory object are mapped, exactly as when mapping a file or shared memory object. In this case, if two processes map an + area of typed memory using the same off and len values and using file descriptors that refer to the same memory pool (either from the same port or from a different port), both processes shall map the same region of storage. + + When MAP_FIXED is set in the flags argument, the implementation is informed that the value of pa shall be addr, exactly. If MAP_FIXED is set, mmap() may return MAP_FAILED and set errno to [EINVAL]. If a MAP_FIXED request is + successful, then any previous mappings or memory locks for those whole pages containing any part of the address range [pa,pa+len) shall be removed, as if by an appropriate call to munmap(), before the new mapping is estab‐ + lished. + + When MAP_FIXED is not set, the implementation uses addr in an implementation-defined manner to arrive at pa. The pa so chosen shall be an area of the address space that the implementation deems suitable for a mapping of len + bytes to the file. All implementations interpret an addr value of 0 as granting the implementation complete freedom in selecting pa, subject to constraints described below. A non-zero value of addr is taken to be a suggestion + of a process address near which the mapping should be placed. When the implementation selects a value for pa, it never places a mapping at address 0, nor does it replace any extant mapping. + + If MAP_FIXED is specified and addr is non-zero, it shall have the same remainder as the off parameter, modulo the page size as returned by sysconf() when passed _SC_PAGESIZE or _SC_PAGE_SIZE. The implementation may require + that off is a multiple of the page size. If MAP_FIXED is specified, the implementation may require that addr is a multiple of the page size. The system performs mapping operations over whole pages. Thus, while the parameter + len need not meet a size or alignment constraint, the system shall include, in any mapping operation, any partial page specified by the address range starting at pa and continuing for len bytes. + + The system shall always zero-fill any partial page at the end of an object. Further, the system shall never write out any modified portions of the last page of an object which are beyond its end. References within the ad‐ + dress range starting at pa and continuing for len bytes to whole pages following the end of an object shall result in delivery of a SIGBUS signal. + + An implementation may generate SIGBUS signals when a reference would cause an error in the mapped object, such as out-of-space condition. + + The mmap() function shall add an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference shall be removed when there are no + more mappings to the file. + + The last data access timestamp of the mapped file may be marked for update at any time between the mmap() call and the corresponding munmap() call. The initial read or write reference to a mapped region shall cause the file's + last data access timestamp to be marked for update if it has not already been marked for update. + + The last data modification and last file status change timestamps of a file that is mapped with MAP_SHARED and PROT_WRITE shall be marked for update at some point in the interval between a write reference to the mapped region + and the next call to msync() with MS_ASYNC or MS_SYNC for that portion of the file by any process. If there is no such call and if the underlying file is modified as a result of a write reference, then these timestamps shall + be marked for update at some time after the write reference. + + There may be implementation-defined limits on the number of memory regions that can be mapped (per process or per system). + + If such a limit is imposed, whether the number of memory regions that can be mapped by a process is decreased by the use of shmat() is implementation-defined. + + If mmap() fails for reasons other than [EBADF], [EINVAL], or [ENOTSUP], some of the mappings in the address range starting at addr and continuing for len bytes may have been unmapped. + +RETURN VALUE + Upon successful completion, the mmap() function shall return the address at which the mapping was placed (pa); otherwise, it shall return a value of MAP_FAILED and set errno to indicate the error. The symbol MAP_FAILED is de‐ + fined in the header. No successful return from mmap() shall return the value MAP_FAILED. + +ERRORS + The mmap() function shall fail if: + + EACCES The fildes argument is not open for read, regardless of the protection specified, or fildes is not open for write and PROT_WRITE was specified for a MAP_SHARED type mapping. + + EAGAIN The mapping could not be locked in memory, if required by mlockall(), due to a lack of resources. + + EBADF The fildes argument is not a valid open file descriptor. + + EINVAL The value of len is zero. + + EINVAL The value of flags is invalid (neither MAP_PRIVATE nor MAP_SHARED is set). + + EMFILE The number of mapped regions would exceed an implementation-defined limit (per process or per system). + + ENODEV The fildes argument refers to a file whose type is not supported by mmap(). + + ENOMEM MAP_FIXED was specified, and the range [addr,addr+len) exceeds that allowed for the address space of a process; or, if MAP_FIXED was not specified and there is insufficient room in the address space to effect the map‐ + ping. + + ENOMEM The mapping could not be locked in memory, if required by mlockall(), because it would require more space than the system is able to supply. + + ENOMEM Not enough unallocated memory resources remain in the typed memory object designated by fildes to allocate len bytes. + + ENOTSUP + MAP_FIXED or MAP_PRIVATE was specified in the flags argument and the implementation does not support this functionality. + + The implementation does not support the combination of accesses requested in the prot argument. + + ENXIO Addresses in the range [off,off+len) are invalid for the object specified by fildes. + + ENXIO MAP_FIXED was specified in flags and the combination of addr, len, and off is invalid for the object specified by fildes. + + ENXIO The fildes argument refers to a typed memory object that is not accessible from the calling process. + + EOVERFLOW + The file is a regular file and the value of off plus len exceeds the offset maximum established in the open file description associated with fildes. + + The mmap() function may fail if: + + EINVAL The addr argument (if MAP_FIXED was specified) or off is not a multiple of the page size as returned by sysconf(), or is considered invalid by the implementation. + + The following sections are informative. + +EXAMPLES + None. + +APPLICATION USAGE + Use of mmap() may reduce the amount of memory available to other memory allocation functions. + + Use of MAP_FIXED may result in unspecified behavior in further use of malloc() and shmat(). The use of MAP_FIXED is discouraged, as it may prevent an implementation from making the most effective use of resources. Most im‐ + plementations require that off and addr are multiples of the page size as returned by sysconf(). + + The application must ensure correct synchronization when using mmap() in conjunction with any other file access method, such as read() and write(), standard input/output, and shmat(). + + The mmap() function allows access to resources via address space manipulations, instead of read()/write(). Once a file is mapped, all a process has to do to access it is use the data at the address to which the file was + mapped. So, using pseudo-code to illustrate the way in which an existing program might be changed to use mmap(), the following: + + fildes = open(...) + lseek(fildes, some_offset) + read(fildes, buf, len) + /* Use data in buf. */ + + becomes: + + fildes = open(...) + address = mmap(0, len, PROT_READ, MAP_PRIVATE, fildes, some_offset) + /* Use data at address. */ + +RATIONALE + After considering several other alternatives, it was decided to adopt the mmap() definition found in SVR4 for mapping memory objects into process address spaces. The SVR4 definition is minimal, in that it describes only what + has been built, and what appears to be necessary for a general and portable mapping facility. + + Note that while mmap() was first designed for mapping files, it is actually a general-purpose mapping facility. It can be used to map any appropriate object, such as memory, files, devices, and so on, into the address space + of a process. + + When a mapping is established, it is possible that the implementation may need to map more than is requested into the address space of the process because of hardware requirements. An application, however, cannot count on + this behavior. Implementations that do not use a paged architecture may simply allocate a common memory region and return the address of it; such implementations probably do not allocate any more than is necessary. References + past the end of the requested area are unspecified. + + If an application requests a mapping that overlaps existing mappings in the process, it might be desirable that an implementation detect this and inform the application. However, if the program specifies a fixed address map‐ + ping (which requires some implementation knowledge to determine a suitable address, if the function is supported at all), then the program is presumed to be successfully managing its own address space and should be trusted + when it asks to map over existing data structures. Furthermore, it is also desirable to make as few system calls as possible, and it might be considered onerous to require an munmap() before an mmap() to the same address + range. This volume of POSIX.1‐2017 specifies that the new mapping replaces any existing mappings (implying an automatic munmap() on the address range), following existing practice in this regard. The standard developers also + considered whether there should be a way for new mappings to overlay existing mappings, but found no existing practice for this. + + It is not expected that all hardware implementations are able to support all combinations of permissions at all addresses. Implementations are required to disallow write access to mappings without write permission and to + disallow access to mappings without any access permission. Other than these restrictions, implementations may allow access types other than those requested by the application. For example, if the application requests only + PROT_WRITE, the implementation may also allow read access. A call to mmap() fails if the implementation cannot support allowing all the access requested by the application. For example, some implementations cannot support a + request for both write access and execute access simultaneously. All implementations must support requests for no access, read access, write access, and both read and write access. Strictly conforming code must only rely on + the required checks. These restrictions allow for portability across a wide range of hardware. + + The MAP_FIXED address treatment is likely to fail for non-page-aligned values and for certain architecture-dependent address ranges. Conforming implementations cannot count on being able to choose address values for + MAP_FIXED without utilizing non-portable, implementation-defined knowledge. Nonetheless, MAP_FIXED is provided as a standard interface conforming to existing practice for utilizing such knowledge when it is available. + + Similarly, in order to allow implementations that do not support virtual addresses, support for directly specifying any mapping addresses via MAP_FIXED is not required and thus a conforming application may not count on it. + + The MAP_PRIVATE function can be implemented efficiently when memory protection hardware is available. When such hardware is not available, implementations can implement such ``mappings'' by simply making a real copy of the + relevant data into process private memory, though this tends to behave similarly to read(). + + The function has been defined to allow for many different models of using shared memory. However, all uses are not equally portable across all machine architectures. In particular, the mmap() function allows the system as + well as the application to specify the address at which to map a specific region of a memory object. The most portable way to use the function is always to let the system choose the address, specifying NULL as the value for + the argument addr and not to specify MAP_FIXED. + + If it is intended that a particular region of a memory object be mapped at the same address in a group of processes (on machines where this is even possible), then MAP_FIXED can be used to pass in the desired mapping address. + The system can still be used to choose the desired address if the first such mapping is made without specifying MAP_FIXED, and then the resulting mapping address can be passed to subsequent processes for them to pass in via + MAP_FIXED. The availability of a specific address range cannot be guaranteed, in general. + + The mmap() function can be used to map a region of memory that is larger than the current size of the object. Memory access within the mapping but beyond the current end of the underlying objects may result in SIGBUS signals + being sent to the process. The reason for this is that the size of the object can be manipulated by other processes and can change at any moment. The implementation should tell the application that a memory reference is out‐ + side the object where this can be detected; otherwise, written data may be lost and read data may not reflect actual data in the object. + + Note that references beyond the end of the object do not extend the object as the new end cannot be determined precisely by most virtual memory hardware. Instead, the size can be directly manipulated by ftruncate(). + + Process memory locking does apply to shared memory regions, and the MCL_FUTURE argument to mlockall() can be relied upon to cause new shared memory regions to be automatically locked. + + Existing implementations of mmap() return the value -1 when unsuccessful. Since the casting of this value to type void * cannot be guaranteed by the ISO C standard to be distinct from a successful value, this volume of + POSIX.1‐2017 defines the symbol MAP_FAILED, which a conforming implementation does not return as the result of a successful call. + +FUTURE DIRECTIONS + None. + +SEE ALSO + exec, fcntl(), fork(), lockf(), msync(), munmap(), mprotect(), posix_typed_mem_open(), shmat(), sysconf() + + The Base Definitions volume of POSIX.1‐2017, + +COPYRIGHT + Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, + 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the + original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html . + + Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man- + pages/reporting_bugs.html . + +IEEE/The Open Group 2017 MMAP(3P) diff --git a/files/pb071/bonuses/08/test-counting/mmap.json b/files/pb071/bonuses/08/test-counting/mmap.json new file mode 100644 index 0000000..d1f9b2e --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/mmap.json @@ -0,0 +1,4 @@ +{ + "args": ["{test_case}.in", "{test_case}.out_produced", "mmap"], + "specialized_test": ["diff", "{test_case}.out", "{test_case}.out_produced"] +} diff --git a/files/pb071/bonuses/08/test-counting/mmap.out b/files/pb071/bonuses/08/test-counting/mmap.out new file mode 100644 index 0000000..e522732 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/mmap.out @@ -0,0 +1 @@ +38 diff --git a/files/pb071/bonuses/08/test-counting/never_enough_random.in b/files/pb071/bonuses/08/test-counting/never_enough_random.in new file mode 100644 index 0000000..4d4d905 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/never_enough_random.in @@ -0,0 +1 @@ +Quisquam ananas quisquam dolor voluptatem quaerat ananas ipsum consectetur. ananasPorro quisquam est quisquam. Adipisci quaerat ananas ut voluptatem ut amet. Tempora ut non non. Tempora magnam porro nananason. Velit ananas ipsum numquam voluptatem magnananasam ananas ut consectetur magnam. Numquam sit ananas ipsum eius. Quiquia ananas amet labore consectetur ananas magnam. Est aliquam dolore numquam ananas diff --git a/files/pb071/bonuses/08/test-counting/never_enough_random.out b/files/pb071/bonuses/08/test-counting/never_enough_random.out new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/never_enough_random.out @@ -0,0 +1 @@ +12 diff --git a/files/pb071/bonuses/08/test-counting/nothing_to_see.in b/files/pb071/bonuses/08/test-counting/nothing_to_see.in new file mode 100644 index 0000000..8d41d9c --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/nothing_to_see.in @@ -0,0 +1 @@ +Ipsum consectetur aliquam ut sit quiquia. Numquam labore quiquia tempora labore magnam aliquam. Neque eius magnam eius adipisci labore numquam magnam. Quaerat numquam tempora labore. Eius quaerat est porro amet ut. Etincidunt etincidunt dolor labore adipisci. Etincidunt quiquia voluptatem numquam quiquia ut voluptatem neque. Velit dolor quiquia est. Quiquia dolor sed est quisquam quisquam. Est porro quiquia tempora numquam ipsum consectetur non. Dolore porro magnam dolorem dolore dolor ipsum. Aliquam quiquia quiquia modi quisquam eius. Dolorem tempora adipisci ut dolor dolorem. Sit quaerat ut est aliquam modi magnam. Eius dolore diff --git a/files/pb071/bonuses/08/test-counting/nothing_to_see.out b/files/pb071/bonuses/08/test-counting/nothing_to_see.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/nothing_to_see.out @@ -0,0 +1 @@ +0 diff --git a/files/pb071/bonuses/08/test-counting/random.in b/files/pb071/bonuses/08/test-counting/random.in new file mode 100644 index 0000000..560d738 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/random.in @@ -0,0 +1 @@ +Quiquia est dolore quisquam. Magnam voluptatem dolorem dolor quaerat sed. Est labore eius etincidunt. Dolore neque magnam quisquam. Labore amet velit ipsum dolorem quaerat sed modi. Numquam labore quaerat non dolor quaerat dolore. Magnam dolore porro amet porro. Dolorem quiquia adipisci dolor dolore numquam porro dolorem. Velit sit numquam sit. Modi tempora ut dolor numquam. Numquam porro eius quaerat ut. Amet sit eius etincidunt ipsum ipsum. diff --git a/files/pb071/bonuses/08/test-counting/random.out b/files/pb071/bonuses/08/test-counting/random.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/random.out @@ -0,0 +1 @@ +0 diff --git a/files/pb071/bonuses/08/test-counting/random_again.in b/files/pb071/bonuses/08/test-counting/random_again.in new file mode 100644 index 0000000..42357f1 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/random_again.in @@ -0,0 +1 @@ +Eius dolore est ipsum neque. Tempoananasra dolorem est labore ananas aliquam neque consectetur ananas dolor. Ut sed aliquam ut. Ut consectetur quiquia modi eius ananas eius. Dolore sed maananasgnam etincidunt quisquam dolor. Quaerat etincidunt aliquam etincidunt dolor ananas consectetur quaerat. Numquam ananas amet numquam esananast dolorem ananasconsectetur quisquam neque. Quisquam voluptatem consectetur non modi adipisci labore quisquam. Quiquia porro nananaseque sed magnam sed magnam porro. ananas Aliquam amet quaerat dolore quaerat. Numquam porro magnam ipsum etincidunt adipisci quisquam adipisci. diff --git a/files/pb071/bonuses/08/test-counting/random_again.out b/files/pb071/bonuses/08/test-counting/random_again.out new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/random_again.out @@ -0,0 +1 @@ +11 diff --git a/files/pb071/bonuses/08/test-counting/stream.json b/files/pb071/bonuses/08/test-counting/stream.json new file mode 100644 index 0000000..d66ee7a --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/stream.json @@ -0,0 +1,4 @@ +{ + "args": ["test-counting/fgetc.in", "{test_case}.out_produced", "stream"], + "specialized_test": ["diff", "{test_case}.out", "{test_case}.out_produced"] +} diff --git a/files/pb071/bonuses/08/test-counting/stream.out b/files/pb071/bonuses/08/test-counting/stream.out new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/stream.out @@ -0,0 +1 @@ +10 diff --git a/files/pb071/bonuses/08/test-counting/tough.in b/files/pb071/bonuses/08/test-counting/tough.in new file mode 100644 index 0000000..aa87532 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/tough.in @@ -0,0 +1 @@ +anananas diff --git a/files/pb071/bonuses/08/test-counting/tough.out b/files/pb071/bonuses/08/test-counting/tough.out new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/tough.out @@ -0,0 +1 @@ +1 diff --git a/files/pb071/bonuses/08/test-counting/tricky.in b/files/pb071/bonuses/08/test-counting/tricky.in new file mode 100644 index 0000000..7109bc1 --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/tricky.in @@ -0,0 +1 @@ +nananananananananananas aaaaaaaaaaaaaaaaaaaaaaaaaaananas ananassssssssssssssssssssss diff --git a/files/pb071/bonuses/08/test-counting/tricky.out b/files/pb071/bonuses/08/test-counting/tricky.out new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/files/pb071/bonuses/08/test-counting/tricky.out @@ -0,0 +1 @@ +3 diff --git a/files/pb071/bonuses/08/test-trees/aligned.in b/files/pb071/bonuses/08/test-trees/aligned.in new file mode 100644 index 0000000..59fdb42 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/aligned.in @@ -0,0 +1,9 @@ +4;3 +2;2 +0;1 +-1;0 +1;0 +3;0 +6;1 +5;0 +7;0 diff --git a/files/pb071/bonuses/08/test-trees/close_call_but_not_exactly.in b/files/pb071/bonuses/08/test-trees/close_call_but_not_exactly.in new file mode 100644 index 0000000..73dc702 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/close_call_but_not_exactly.in @@ -0,0 +1,15 @@ +5;4 +3;2 +2;1 +1;0 +nil +4;0 +8;3 +6;1 +nil +7;0 +12;2 +10;1 +9;0 +11;0 +13;0 diff --git a/files/pb071/bonuses/08/test-trees/could_be_coloured.in b/files/pb071/bonuses/08/test-trees/could_be_coloured.in new file mode 100644 index 0000000..eaf6d17 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/could_be_coloured.in @@ -0,0 +1,11 @@ +13;3 +8;2 +1;1 +nil +6;0 +11;0 +17;2 +15;0 +25;1 +22;0 +27;0 diff --git a/files/pb071/bonuses/08/test-trees/example.in b/files/pb071/bonuses/08/test-trees/example.in new file mode 100644 index 0000000..bca1aad --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/example.in @@ -0,0 +1,15 @@ +8;4 +5;3 +3;2 +2;1 +1;0 +nil +4;0 +7;1 +6;0 +nil +11;2 +10;1 +9;0 +nil +12;0 diff --git a/files/pb071/bonuses/08/test-trees/is_coloured_in_a_sense_but_not_brother_to_the_others.in b/files/pb071/bonuses/08/test-trees/is_coloured_in_a_sense_but_not_brother_to_the_others.in new file mode 100644 index 0000000..e4bc795 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/is_coloured_in_a_sense_but_not_brother_to_the_others.in @@ -0,0 +1,11 @@ +13;1 +8;1 +1;0 +nil +6;0 +11;0 +17;1 +15;0 +25;0 +22;0 +27;0 diff --git a/files/pb071/bonuses/08/test-trees/no_tree.in b/files/pb071/bonuses/08/test-trees/no_tree.in new file mode 100644 index 0000000..e69de29 diff --git a/files/pb071/bonuses/08/test-trees/no_tree_again.in b/files/pb071/bonuses/08/test-trees/no_tree_again.in new file mode 100644 index 0000000..607602c --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/no_tree_again.in @@ -0,0 +1 @@ +nil diff --git a/files/pb071/bonuses/08/test-trees/only_root.in b/files/pb071/bonuses/08/test-trees/only_root.in new file mode 100644 index 0000000..42a3478 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/only_root.in @@ -0,0 +1 @@ +8;0 diff --git a/files/pb071/bonuses/08/test-trees/pretty_tree.in b/files/pb071/bonuses/08/test-trees/pretty_tree.in new file mode 100644 index 0000000..33ca88d --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/pretty_tree.in @@ -0,0 +1,3 @@ +10;1 +9;0 +11;0 diff --git a/files/pb071/bonuses/08/test-trees/two_nodes.in b/files/pb071/bonuses/08/test-trees/two_nodes.in new file mode 100644 index 0000000..6c4fe19 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/two_nodes.in @@ -0,0 +1,3 @@ +4;1 +3;0 +nil diff --git a/files/pb071/bonuses/08/test-trees/two_nodes_other_way.in b/files/pb071/bonuses/08/test-trees/two_nodes_other_way.in new file mode 100644 index 0000000..ff17256 --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/two_nodes_other_way.in @@ -0,0 +1,3 @@ +4;1 +nil +5;0 diff --git a/files/pb071/bonuses/08/test-trees/whats_this.in b/files/pb071/bonuses/08/test-trees/whats_this.in new file mode 100644 index 0000000..656f4ec --- /dev/null +++ b/files/pb071/bonuses/08/test-trees/whats_this.in @@ -0,0 +1,7 @@ +42;2 +11;1 +nil +33;0 +314;1 +171;0 +981;0 diff --git a/files/pb071/bonuses/08/tree.png b/files/pb071/bonuses/08/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..47f96d6fb74cd70ff4e8823de2f7dccb33ed0ee2 GIT binary patch literal 58553 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 $u1z^8nmQtmVj$Zx8CYuqt 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 V%auNdLuBwDT`eQcQgxf){{tlwn(qJr literal 0 HcmV?d00001 diff --git a/files/pb071/bonuses/08/trees.c b/files/pb071/bonuses/08/trees.c new file mode 100644 index 0000000..443fe30 --- /dev/null +++ b/files/pb071/bonuses/08/trees.c @@ -0,0 +1,85 @@ +#include +#include + +#define UNUSED(x) ((void) (x)) + +struct node +{ + int key; + int rank; + + struct node *left; + struct node *right; +}; + +struct tree +{ + struct node *root; +}; + +/** + * @brief Creates new dynamically allocated node. + * @param key Key that node holds. + * @param rank Rank that node has. + * @returns Pointer to dynamically allocated node, NULL if allocation fails. + */ +struct node * +create_node(int key, int rank) +{ + struct node *new_node = calloc(1, sizeof(struct node)); + if (new_node == NULL) { + fprintf(stderr, "create_node: Cannot allocate memory for node.\n"); + return NULL; + } + + new_node->key = key; + new_node->rank = rank; + return new_node; +} + +/** + * @brief Recursively frees node and its subtrees. + * @param node Root of the subtree to be freed. + */ +void free_node(struct node *node) +{ + if (node == NULL) { + return; + } + + free_node(node->left); + free_node(node->right); + free(node); +} + +/** + * @brief Prettyprints given tree into the file. + * @param file File for output. + * @param tree Tree to be prettyprinted. + */ +void pretty_print_tree(FILE *file, const struct tree *tree) +{ + UNUSED(file); + UNUSED(tree); +} + +/** + * @brief Loads tree from a file and returns root of it. + * @param file File where the tree is saved. + * @returns Pointer to the loaded tree, NULL if error happens or no tree is in file. + */ +struct node *load_tree(FILE *file) +{ + UNUSED(file); +} + +int main(int argc, char **argv) +{ + if (argc < 2 || argc > 3) { + printf("Usage: %s [output-file]\n", argv[0]); + return 1; + } + + /* TODO */ + return 0; +} diff --git a/files/pb071/bonuses/10.tar.bz2 b/files/pb071/bonuses/10.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..02fa17081114ec7706f5274a2bf5ea6ff16f4efc GIT binary patch literal 234785 zcmagEWmFtY&?Y*#ySoN=cZc8-+#$HT4ub~wkf6bWy9IZ5cN>B`gAbnj?%w_O@76hO z=Tvt;ZPnFXC1YeS%q?xmplv9XyR-P643%d)L>djl)DJ zxT^^wJbVRyylm~coQ=2wJ>H!6+!=56fL}L#ozMNcx6L4(J&*01t3f-)K9_zwLFzjo zsQ-i1i*~-g2L#wuwduWmb#N(q`grr$Q|ne&1M%!>xS+hchxqpIP`LsBbis&6a0Z+Z z3|dV=-EvpJJsY=>fRol8(G@6WSLf#LBIwZ_(hLcFbp&?Sb#`v|^?-W@DWUwcEuv;% zpsCYJ1<0XQB4g{hd()`{;t~*Zwq*Ffh693h|Iym-Ii8gWo74MVzv#EU=?8v(fI5Mu zSGSM5AL@Gclhq)doo?oS;G1bDpu}WgEgxMc$VKc?qv@*ZN_bL?0 zQQp<=Lt0)t^95TTpuWo+uOPpk$9=uWE7vPEaCS!LVl!}!*DnV+0|rCu2f3`&4AtiEkeHd4ycvF++X6=Ke^5i7_sA` zd-=HZ3h9uzgd}bpVfV+=9Cfj)i!|Tv|-`4H!nX8_=4Df6%M5ML371Y6Ld1aJ1 z?dH0+3e4F~f;yd3@Ga8m`|xn<){S|o#=6LQzUjAkxw-;%fw*-;9Tp*e;*b2N;9*Fc zXsa)k%Vld_lO9onGeUmQ!^K@s?p62Ixm_s~&O_gY1529}a|FfwqFg-TVZjx54K=_tv>NqCMjEoE;5|pn+Ey z;9Pr8eF_;L#AO)@I*#bxTw8_;Z0Y`c>REaM^qUAH z7zHFQA0R#uyE>;_z1QLCjg#ZVj6|KsndS?pT%h~IV&HO}y5agcB)bAadA_-RwY0<2 zsfvt$-YTrU+I{uv*Z62MZMc08Z3@~5taF(x;a9!dS8o>e1$R(_56HHJp{?rMpvRzB zV`EUy{yC)kq0ecwa~smL1G!fLrBlnp*hVB9pI*=9%$z|Stkex-pGZBpY^`g_%w4#g2cw+zH&ydx5S&TsN=0 z(pI~mKs(@ZH)CZ_=jXz*)x5{e4rmVqlo*8RMBuuA?hj5U0o5KE`JSJfkmR<;`*yuT zK;uPMofW1)h)D4T_|*rRuODz{1F?z|-z;I>aWx0(Ycn+)9WIOhIsQ-Fb#L2kwzsO~ zLR)({Te~q9y})-qpu8O)b5N68YikcA{>KhWUC(Pz+%psi_WE*pxqO^i0%-+TKZ-(n z+MXZQBwBp7$OJV1g?thxa?@Om^{9iJBov! zUaxZcH`d}Tb_x$+pa z{@4yWUTp2@d4A+=bzOOd_+CNlx`=Y!%t6rNm)hs6bBP_VvmEc!%SzXSPAB7@z1Nw1 z)fZ^DIOSb4#Avi*sRJrpeOL3}=>kDIC$>h-Bwo*d0WTr0575-O{NnLao0?>Rx+Uad3J?Uc9zce|O1ieG}S zu3uQPvH$;z?!Q>|zW~EG9;*5uWhQcSYp7<@F=UaFI+QB>A0AW!H5k7C%l|(a`~Nck z1z5n)cwuR_^;}*k00y-*+#%(E7yvM(iKKk!iRhtx_H!^?0PICPJeFYOuY8L*Vp3zI zh>0*M06snf1f6^8|6PTTo0}^UG27mHQ8nBGhR2e}BAW{U!^MzDoJCAiu*iUu;*h4G z&BHe~XU}KvP$D)rr&(#O#FO<6wG5w{Wtvodf;N9Q;3SnCjAd-C;))*KfufWD*)j80BT$?$^*kG^r@;e ztE;2%G-i`N7~(WpOqK@#-|w%~jdHs5G1;ww%-;cfMwL>YS{Bq3y@AR(KJ_h*Z=kXI zUCZtz&pPgTFGXCjk8rTwt?sedkv4&Haxl6Qd>A!T{{T9De`qM-{`a^@LTWi8K)MO6 z0Wl8@G9XkZ9iBoL9-jvQXHjl4h6^wtM)*F;O^uQY2ahrYI|NIM8-r-g{V9&i;s*XZ z3O%kgJw5eQe;$SmqOEnPg0k#>3Vwg9mVBZrFMM%d9F2rEGHsHz6fqb2)Sxz^1@$H@ zEs7MEEe1n4B05RdcNiPh80r|DVx5G@@?+H)LGCqf?8i{)YosM?YQ#T%)Y5Nb*Z|GX zg}*Q=YHGptDnDn(|LPPLuf!zj{Oa?OPq*A|42_AzBgcqF3^UJZ`5BnnUCn&$p!`9Q z|0Dd$N;kWqnhQ@x=hM1QDe-vHyxtk$(F)77oC~A_B z;sKzI&;G(m<gPh)aUOUL|dII3{1=rzd%$m>^0Td-t`u^hP}BL{{C z?BDD9TcQ83oaDWGZAfpC*O4zna9t_n?=m}LTK0( znJUy|kq>N}@@&UeoASGaK2v09h;g;=993y~(lmJ@x6f%oMuEixHovB`e4|#n&W`pA zLpz-uo5I$2D@`oE$jNbGW4Nla;c+Iw4tI)8riJ+OR{2 zZmJLDrgU0lj!~&$_HJ9BW5d2ye_xgYg#T&E!ANCcQ_pt*?7yPVku~}BIua~#80@qCtihU?x7$Pjs+SiE;kA(! z{&e`xqVc`rQ|^440Ft6(sEL7}PP{`ZzzBx?>35!@984LvnMY_f)3Q`}8B;VTEbN=y zXH~jH^Y1|+&WGd!2M*ul4YiWr8h1K^etYZ$w1ftsN8*fQy1b!~=(?gvALePbfs(e% zsf=BVmjWi6mGrU5{jHd^3AAw#>^)~3mVZ#9|a7+19 zrdhmDdo1Sq$d!rdHEG#}_YvSXiod0OQzk*)ryZ0{au4Dy=8G8hv21Nk6jrT z7n6V`Q+Y^TZtKP%OKG8FNIh(`zNe=5*_7KnQ!aKFz0QvEYk`elcz9`{a*->ox5DGN zGds5_MG^tVL3kl(4`GG`+YZ~tK20V{t}ralznfl8x=1#DpJiFMh?JGKhNi?p9B+M0 z(Ie|-Cx?rMS^-(~(bfdNSaqzgIk}Qk@t9`bTL_Mdpm}|mO3z#U>V`%!#YQ1k2$BB& zC_Jd@x&YsUSDZo8`g;JkoL`*kdaNQ7b*e?MrD|~{p_uT>MZ8vZGUsy4L?^9>XzW<4 zR3~`u?Key&0UU{MPz(LMe!$5=ZRY)$vcj+)ReDqzwV)txx_mrKQTwW+1X+B<%cj8) zVuGerj5y_2W~}HoBo%Jo2)r4wt%)QE_Enp9XuM3kR=T;oG=O>eT)+)=VZ79Gdzecppi z4_j2wH3P7A{JHyK;n*cGBy~94pBLYl)r=ONJ{cX>5*r<0MIW7ChTGQha41F5C7@ zUZt!O4ps<`ibz9Lqdg0EylnuSP%Hx~UP&`7t=F$C+1}Q%RUIPc474f@<$;73Rr_Kr zIQX9x09%9izq_b&04aEBhIwjY(3YlyVqQPPJ8RS(5>u)@Ap#lXkJ0F-2aD@U%&!>y zXXc4PJdJ5Te*D0Q((WDIK3BT0S{8#7-B;^TF#SGHpcA+pG%_?i^%ljLoaHNv{e~Or zwbU8fhd7UBT^gP3w0@<$d>K!z7EzRh%1^_>gM@KeNdqnp^A?TWt8JIN#H3_;bI-qR z9G3#wn@-5to7TTMG*B!`X|zh|+hl ztusa2npMR0`RAppFQ-^Ag8boMevcH$6rzc7gi5g>$M7~AIrzkB25&t_k-`wH9{biM zb8Z#SQ0!W?&x%w?O>kR^)WgeUdF1LLHP(MCv%Bz~{)pmVFW^w7#^qgslfuwI`zbH9 zJ9asn`n{IGaRO3GlTb_AMQb_bGV}#~WIItEM~3=w9yZln3Y<%Qvi1CO8>&J~fbj_! zSb7N-@5s&ILrvU;>2ef%zt_gdUaV8bulWSfPf~acO}5J6ApK1cPLpkJ{&$aRl|D*-%2uRt`H2)RE}*Q9qF>;a z)BNF%=9(KO?~7J882zLvGb<5_;F#Irgr9j3nn=hFcN+Z90rLVdo;hGb<9HGjz#kT& z`ZFK4WIH?>H7uT1cikI-H@3ob87QQ!V1055Idec^sWBz2{^f(luiE$0He!ySsRbWU z)g=>ZiEhk5Zd0iIy+JGsFYc@aF(Rh)A+>CEnu8bFg6{~vxVQ~)npg>39++R@izi(i z$7WOzOO0Wql3bP=DR|b@Uif=d#@;cc6*ad6zFXTf{@-kkD7myHtSWg_a4gS42Xn$cu$U_aE{CIh4@qTbj!u^eJN zm@S0T&0g2^TJTpB%4M7=4s7-qY=$@sUtSU)IwIOJeQjHJ1ElFQPIRr5uVJcOTN4Ra zkzUA}F9B?OivIVhja`&}yOE98kpmM`LJw2K#pdc$*%86{S;2oeXwhB1_-O?} zp4L&^Vz1~uwL{l=m?Udxe9L472aA=VC7>g!Y?ZRAe@2G7JWEb@RzG;r;)l0rXT)Gx zYzLtb-fxCs)#oFk?i>de>0O>;vE_+7b>uE64x!V*LY&m*T zn{z@$e3GJ$wfz};VJe)x)xX>$hqijZZ6dKfSY4EFR+p=G*XtF+Ufa_u2Y zM8C|(DHjFJi`=waF1AtBvxTI1kuxg-lM03RZ_-)6$mtUXej1VLkcLITBPBloz9fCx z90A81vJ>|iV_`0%R}Y1!%E&0m5;!0Q%;5(*r=-hTv8#JIu296ZG{W*s9O4hyasJAV zv6ehpT`xhR!0^TXAaYWph_6~DWDHpJP`)Qbu`b_*1edb1Bs%2=$9fRk`)f{2%Gc5J zOMrzDwExuUnacI*vxxe_G%=K(44IJnc*Gb9SkSzOe@Wl`2CiVjmko7~RQw?WV?&C9 zpVlzvo0=w=y*&#L;q8Q-FE{&Dg|hN>#Akoa(bk053k{>cf1dFjKl@W|$o=0>z}ZgM zA2!$S{@&>>2@*MjrAoBQtHw$O=yoNc#lho|^2^$%=))6@n zo>yS0dU&+H%|JSLyOHs?Vyr@(v;!G4|mnEd=SYfA*;kQ%zVaON^n?A!MF!g6@EhE~XL|luN ze^{^#kDJ=e>joGh!o2lqo_)?~h6Bo_xWY9TyT0xXsSa@da5+F&JG zke}@gGw6cMdzc(1+6$8-rsi@+1&Fh5RG|+QM={imQX3zlSK6BEJ0KV=LA1rkFzR8V zCz2Y@l$1qEDdT}Dxygo|)YWG9h|x#4!fphJvaXbsn8Z5wQKh>kMclEF?{!tS>R^oI z%^LC}vwazetMVx-U}pNdtOymAV=H37JsP_~vf#$VDC!Vd3Y^`Rn!w1>AJ!aC!ecA{ z!qETaOONGHzc7gb)Lq8vEb_CBx7NWf_V@2~?q4V|9+U^qBG#9rycY|{{!TS0NVS#8 zaZx1TdB8`AWIIeSgJihJDn1d%$PJvU!$UjuA@NlxNaI5zl4pPYMyjjeP3w@SGE?~H zYS9EwYqvZCSSPt9nM0E_<-qo>20s;Oe_H2MSD{-tV~#Z9BaTqOr=JLXc$dgVDTYi0 zJI(}p8R+c_oD$U#)wwwy3Drhy>CEqy?k-xS{9FEsumi<2#Cs9>dMM;GXtIM2Kts2L z(w^lI+>*uHdKgG*Tb{HZ8tZEk6X)e=4gQdm>gaT=ITwf4m_AcjW!T}^9>uf0x9op; zlM)yfa&+HHj{HYB=Q%KqZYZMF6gHiob%v@7;U0!t}}c_ z2-&=16wrGP35hz`Py1o*XEjER;-f7fGc{pziN)3HrYhDbgaX5mFA`DD%(ohg(adSt zb^6csS%p?16`ANlbwn-w&7Tr{p<0QlG>WBbe|)SGm&>mJA2KmkO~XD-V-U>DBwH#=(Kz}Q;$ZWKkr$84ZAl`zf!^} ztkv8B<^DMC%;*f2_mRnA28|X)DeC>Cj@B@QDflGd*LL1L4%~ZHy4o3I{j08!&VdFqoLd_G4qM0? z{Zy|YnD%^tP#F#CWbaII#45;LfJE;|MipbJu9hFEqOr9RMT8Gbrxy}Is4=+!6^xbFsO<3aDdM@s@-?-_TJv| z^8_uhj49*t#aaTVhV)@yQipQbj+_=UjQ5LMu!r~PA5D~3diUSlQ|bM^RhIokI&|2o z_q7zk+HGb@oFmG|Yxq3AR4TLBmm{J-S$o22KK>8|M5B`n1i*OOK5z?M8O*(2maj@g zdFz|sqP#`qcGTLy8ualg&V{%cr%u%rL%)?Etz^NxumD*QW&1ZgOUj-OvQ zH7=vWb}#g!wH^-JLlY5_1)e{Sm?y6o@|){Y&&jw%kVd+go<;C%`M>y@H}X72A~8q2 zd_(h;utP6Dn{q=aj0k?(*UnWp*A;)Y?vN?0ewTO^}zJNyeeRzG50LW0n}V zVKrqgDTe2em-?*}wfHDm-b3y#Ll;5H%^|Dq`!A_B!&Xd6fYJ%O%Z0Ep{Vqbl$7lW@ zThs)3-BR@idq57(JI(TftbBc%F5(x0o!eJ!!ywtT3gboo*iXsDNgK=ZO~S73bR^o_ zC$Bp+=n0IS+}WBK{r{;&`F5+_!c7c_0t3BHR)bv!^u3NG4y-wkJpa6(+^Gq@V;7r* z{>2PzDd#-^)onWM-U$5sHFqO$cA!z>{K>Aea$-dXl_K6xxbaf_b-@W^a=~%i;4#l8ohpajS249W2PT14vfJ0q6mxeK8vhXslftdFgo z_SUP|aNw4VDwIfIhC(^CY}uGfY6~$YqF@ zz=NN4_=2p*ZpnUem5m$&)l7^=0bPjwOo(8#sXbGn;vm&s*ZRx|jg=&|fzQ{@=56kN zn1Fhb;E$o4C~CK+RFrR0+ka-*)%f@w<(<88`D`(9<{=e5_KU(S^-r6h-y-m=cabb@ zGYA;Hy0lydnnqMB1Fox+Z#>&+N<&O&NXD2%PAcH(SI}3SFd~P9JPiL}aOh1?w)Nna zfh0TUG8(1VNUns|&!iCbtb`@tgOqkE{vv3zUfKH9aY&r~{!Qw_W@@6^OvrUa+`E%U zQ1R(t_`SvhocNG5()?VQl3Wfn^HYqXMME2TR3wWr&{J<@hPFy7I4%TO4rg!`^E;u| zjSGL1qoOfIRA!@E#8nZx7I(vIJaV*N@?880?=XN!^;c!!dZZ>1TAe1Yi=MAY=S>;vdbFCDskv1AEeszAxD~p~7@0J}KMLr_ z5xWRFCEc8YzBFgfAGix5LL~&DtI|55CYIQ7PC@+AMg}Ty%rGr5_D*SJjH?l2bo&N?m3Z4 zrrm*GuQ27?9#o-^>XrUwsy{%VnusEHke^6ozrbUh&*U05=~qZwKll|~_(T~^T{Bhv zX!3$gdz<6IWjb1AdSmD1X|Xm12Z5z}GmViZ@-tHtzp2=DWk_@Wy`=QyPp_VXq?>|^ z!P>JFN-eV;q-Nu2^BI>q|_LfL-!*in#YfL`On7mFogo47kCKAP4 zBFi6{=*=MG023ikrhuLii7yrtAdOd0;0_|vxyLy<8PI}NN3|*+mHP{D&~br=QpHV; z=kT&Q3?yGipZO-|dZ>4MEvEnt^=-eYdI7QA_AhV$+my{w8q?l+{sgCZ+sLz@U8J&D zDvAz3I#(NcU+i%-QDcBZrSFpYMe(+~Ru(R@vVxd@EwZMbBt*naLjR4h(x@%YtPXY* zr&0eR6{EIO%Ff|e5yV=shs5*zvAge$7(_!zUsV$^_$G8bWok+)tnsi$>k1Qt3Mav+ zvAi^3a|-GecljkL+hBUWSHS3SwP-~wSaP1}=lj6A4xmYt{C($ib5@xx1a^Bq&cPRD zFUP6~yl_(snO@+k9>qzsA+HXwYBRbVy3ks@TH6l$>3JbjfKJ|ulM%IaHG=SgmE3(r zd>LbnjQrVpE?_)nOW^JD+BJiUFj~r$$bWlb6$C3A=E~aH;-_YRAYn~j zCy8sw1e=cfrq3^DOFzAhU-I911|1n;FrU0e?tQY@sY6^sFMGF1OGCbD%J@ZasM{p7 zWSFpli2VsQ32@z?!A*~!i^40?RY*6Zu<9$jqxj->Ig%sVv_=Qd92^?zg7FN)&4Ak} zxs+$3A@`Ygbh576{RBPY`mo+|x~l=3XU74D?(E;rSD7%&isY^xHr@R|#7JB6fTp8Y zn^aAIn*}+4A}*}D?wpgCFly>hfL(2}wI0`BOtup`hi}GTb?AR}nQK@t$t~&Kpf58b z!uj~I#Rj8=(HbV+i`&jY4K+_!FpD&APFFlW`3tT`CYU4q;|i7SOm^=I)}?N~fv41~ zoDL#@*Leck3<}jXjVG4L>U4KA0HP!*q{Ej)|LvKe6+OHvxUNq?&I)&mr<#|B390lg zZqI~V3*r^6=1E+8MUO)d<2wBWwYH+XDy2KQ!tAB^Xd9}E>Zw*vgFSE+;2M%qn9Q6# z=6wj7WeSE5qh=5JllLUqtZjfZL?5@MpZ8x zO?(k=&|EilynGec?Nz}>#iOGVs}Y_-`E{afBAUsd%t9qrat^Hbm~AE-YFK0drI^eD zZ?L8Px$?7!vaVne!nW$|3#A2@Q4P_`&MYzp=BPJE)5#>NdpE=|N_}=sT$D8tV)nD4hvWq*9LF;7^rz#?6E@#v`xS8Fo~fCs-OKdC zb+h*MZ=ZRm2usSwfkdaXJKgxgje3e47DCfdN>} zXlmZwg5)cr7YExaQY+BjW8ixZrG>pkegb-Up5^IfFI^LVLo0*N?p7qfV;4)^eLYK@ z^T?fGpb{cx;$qq3ZT)iKw&9H(3<}&>&m4%Ef}-Z5-)wiqXKD-wjk2^kf$`hy_C6!j zCj4_X@h(+&MeVmwMYZ+)rFE;m6dT$n910@7V!N<3e|3|8YE651g`Te9{M!%WL!2|E zZ#_jshR5#9LyOAp+D!^S`MvK#-bGT`q+XJvP`Df$@VhTt z(?Tq-|95C79;+yR#)bl5pD**VZi>jg;S5DgwEqKu4$y%8mjh>yr25AyKqHx=jqGAF zgVd4d1{g6U)Q+LT1Mo<&VWdN_oZX-&!Ma=`IRM_SRXfN2Rw^exzfnX^J=;~5Ce(^? zRL!I^q(8S9sV+-Zw+u)$gx~Y*Qnc4>R9hQD{LkEuXf$(zXS%oC(EoE3=w`|Ovx(J6 zcj6dw{-VJUUwDi(-xKHhCB^o)tHMjhD*h|${zNkV05y=I3q)|r2~Ibe0ynP{y#nTwaKgH z7bZB(E(^st<#M$vdvK(PdrQpv!UyO1sFbg};nH5ac*-xE61?`;a`G^~QSia0N)Sgz zW}cU%jAbmmM(U3a>0AV<>5icq5C-b2kv+DU7wSLs7v#;*e)2S(FTuMQ!e6RCr=I-r z*+F%Z_2(n}H?+N+X6BOY)Me1`Rq>ha|vHxmnVJc!4I#u3SSLJ96s!!{zRs!-$(5O6idyiQ$a9v zf0l7sdavM7nr2F8XHOWFXll(xt>BgD;t8jJ8`m5ZjNv128O1(*vFqwqs41`B)(4+H z74)II306&GpZ!9J!=KTkqwXg(i8kgoORoG(TwS$^0~0kQp7Y zbY*_SvqIVbVC}wP-kAEsy0A)mCTPjzOX57?I};K~(G)3@2jy6eeYHGlYtycVRZ)Sl z{`7;Y(v1gsr9EnU_={fAySaH&O7D}a`o(b|a$Xo3c+kAON{P?9NZE>? z4nAhg0ug|@EI(lSc)O$h-4GAEcl6fNq!C+QY4Swn#{614OMLZe=@{rj=B#R_V zCj|*h`=gwIj@ySTLQH;+l)Ldmq+ZT5NYbH8B5Lt!N+iXpG5+jl6gkRQMHv!g1hn4% zkL(hLX>Hr$KfeoFkeVJei`LFQhs*?I6?+@VUl{h^ehB0Pr=kx}&u zimg#Kqt8dkX}OkJFSVodUtA^H?QFdDEQlZQrdMsZ`(rTx<1h{vr4R`_Dv8 zBWG;nrDOhVE?>OVYKW4M52)S#m@)IA9z2$|+=$x0&%K4CbRsxPjxqV=WTl;7=hAcN zi90iUP?w-_p-FeW#w@sWHBWn$2rO41`#GB#-*ES=>WVo8RQ)Y%apKVC41o-%U9OXmmep8kmlw{*Ua zkC4>I8XaJ=Y+ZzYv_@K6Cl^8${Xq!n-9_Ydyu-wA-wyDA89_V1!p96Wu+N2-Vc4dS z_VMF1RF6PFRO4Oy`hK^+vw!v71P*C+w+S5?c77l(Jhz7> zuy|ZrB@3J$ewvCKd{iJ&yw$`otHabj2F=ez?=O8(5!O#@QpV{Mkw;_h0~Ddoi`U40 zNLDn|3hD}}jsy3VlS21K-<)m56N<_} zO@ldgA51PGJG{rq?imNU+O!-zeCI0qd$0u$^f>MUEks3C+}CuPvX6O9{gCDU%Mqdj zS=it0gEW~v;`ZP}{^4?ZMA@k?Y}B~O&saz~xcBO{kB?&;!nO)(KB-&V`0_$I1W^iD zCBGKu%C6RlP?yG>$8Y%td6Ax?3t7=QOiC59=1Q*8FlUwI$8Pr;w6wW#7@&pdI_YH$ zO=lG`Os`%9B4;zx6qTWs_!)ND{iXi+igK=VJYkxhb_pj60^sx#479cooG!eoBOwBv0)Lz74r8B782-SZ4~L4eGi`hSGqH3zg7~F z9Rpe}+!I*UQq3|HKNZzXvrjC!a_^=;?fWm}G{AYvs;ET$%41SUS3Q9+v%FM*nl{RJ z=av2J+kk@5XYsZ~h+8$!L0WX8$|NSuI9jkS_U^ERKh7N+-1Cl~1siG|Yrq4Pa^#G} zX-Qo)VC&tClF>M4Qb^G32(yQm?{I;Se8bBerfC@AnxfT?HN=*yOO#=`!tOVp<|Irw zg}r)Mc}JM5-N)i7c8jL>PypxpvT6`{@?!(skRRUG4_uaVY8Em2U{x)5qR}O0Uw+@e zBP5L|GQu4~8l*}F2(akcB>GdrnHgLLYInIZ%+qJsPHaYNY?{xD*em%+p5rn?#^u{J z9Qpia>Lbw9=hZvQWUlv zu}I5RqG>Dq)yKchJgLi4j)NG}FE`~m&jaNdncqOj{HrkHyE@XiSdN#j{vRo9CBsn#F?2e{d*iZIJzE-1bYh)EisscqzPCjx_MP5h^})GU}efl@K&5 zW1#sUmwhabXpjAbO^$_6t@&q$O@PK#;kmHYp=PY;qQ;n}xChG;Y>P}s&bXVaW#@UF z7yQ({|9%TO^{)>3L9kN&{%1%}q?! z!IuxRkXH|uSI|qiOo9Iyzzn+Ty%*JI_MkQ#naBx=*qIpSRo|8eFX0L*_gBSSMlJawSJ457h9Iw4L0axRd|t z=)xFoE2T-=x!d*a_%}%nA=&2HL`8cujSFl%V8SafJ`kw zbqURb@PauQ1Qyccl$XvBje) ztpO$aum&aUeIYloX3OLkSp{Bo_MrE7W0P zT9aup5XKMw=YU(mbC-#J>!*9VY}#l@HMMzs$dr%h!5t!@u@D$^T?R8^UtyiDVWl)i z7mtmMtObuHAb0&v+LdV5e$!J^&_jBJ4Mr{Rw0tznWBMAE{x$rK-{x14fr79^a}c>6M^UCJ_I{e|;Isbi`eBT0Ct_&@(_xczl_ z7_#flhNu!pYfg?KUZ}&WATzY8MepL?BahZh(AUn(xGPazdjX4^S0U;3+~j>1ZqcX% zfQ&tEx1r&FL>)@4KYhweV9a)kL~4>F0vW%F-+Uw`!_by1wZnzMXO%=m7=&12i!

Y>L7E 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̵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%0AJ~7r-qdDMd(-5yAYa02YCmg7b+5pEBBKu1k)sQ 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%0DIqRA- z*PK~KW{Wk-=-~&}Pz}Ih9wWS%I-{2+jW=m1>N==0z%6{mR!%MS>$r6Tqg2`Iv5)ZoS5Rt zD*H(uLeoe3riOmJe9uZuC2I7qcFE!%<64XQDPbwK2`$2t(qn>Ek*wR zRMUi1NenCVgIDYmCf3)E&n(X$M&11~6!yX=Dq}*W;j_%tA`Mb0l2yl67gA{o zJ*eqLJ|w=r3GJbiH*EAvs6#ZS(kwg@bz>c^obN<9(Yp1M8%PjvIc__6ZQ0Ork-;;y z#DcEQ!aH_Rj{YcC)PU6uzx3$5QTRr}#_BSXU(}N6+HYR*7y-#f7p^3yovCvxRjWbq z6#2Ee3j`-RyGe1~kK*I=Zo)6+v-T+Lg=W2&Ub2wJZMZO?qAP+C74aKnl+)99Ux{bS z)seYT|E|kYO_L@~N^)Uc70;4;u95=9H@IQcdezp)S-YIH>jabU$xanN&ZtTSyU9+9 z)t+(JNE<4`Kfelh3Rp{h>l@{`+`3EeTFdjJd3-Ks?Y+<1dZWcIZhwuN#wfaL*lvG^ ziEm;PmuJX%@tE!mTbF;+4Y;>zAai{ol-WXEu|wO(HT8D+(@>fR`hLuv(-nkqu62E2B= zMRfyj<lWh)h}JQ6bh6U3dM?RaVW*TEe^%qi@UoQ3dP-uYj6ne1d6)^*Wm6> z0^v*VE9+P=P}&{`U3amH7p9~j?P1C9cdU}!e58Di_DB;D9Je|9;fp*r>%*)tYgC; z4;{gsj#$^E7x=xx3CZX!&;NgZU_v^Fs!cshA`hkU!~J?tgWA{cR0p9N!>{n2uW>Sc zg{A+jmk5==jRP$LcM|@*AB{A?F(TpOZl#m1C^J2u9MBR#@wygKtUAM9VmiH&dUPd^ zP$uX|>^-gp4=pW&v&YFp6`xWc3@bJSXD2q0d+-0msAC(kDoM6c*@`us(|F2j4H7X& znqLYEv|p>ZPB&0zs6jSS4pPVV)Ruew%`$tWz1$RZ;rmYyrS!X0KlTz4++<5dt zab0`LeD#9*SQqxEjmci&(!1ecwr}5FCDF;;&*;&_z7fg**J7b*u4+GRT|@DLKta7!y2}4r?u~2t^Z4HFcm73yH1;W1}F_ zHyiX&3(r(4R)eUYPb(4vSXCFTLm0!gYWN>Y>AfuLm&|uAwtl!0Sp&R+qG!yq--5@R z`M%ZKqv;8AQpiz20{MKVH zxLBj(TNxe!)R;t9M`QjXj7RB>hCw^4oKE+#fnedH7;(J^D_z_T-;Ix%D@qCk`gXr- zd}}rMi+vrToxxT1gY)!3dET>4Jl<`8HBkYv5BjJ~kx>a3KM-1{3`L%~R z&ae1+MxW=-_9oBgsO*HVtCKpIgB3>A==7znwqB%W&eZ@